TEST_P(OwnerTagTest, changing_tag)
{
    auto ns(make_random_namespace());
    SharedVolumePtr v = newVolume(*ns);

    const VolumeConfig cfg = v->get_config();
    destroyVolume(v,
                  DeleteLocalData::T,
                  RemoveVolumeCompletely::F);

    const OwnerTag new_tag(new_owner_tag());
    EXPECT_NE(cfg.owner_tag_,
              new_tag);

    {
        fungi::ScopedLock l(VolManager::get()->mgmtMutex_);
        VolManager::get()->backend_restart(cfg.getNS(),
                                           new_tag,
                                           PrefetchVolumeData::F,
                                           IgnoreFOCIfUnreachable::F);
    }

    v = getVolume(cfg.id_);

    EXPECT_EQ(new_tag,
              v->get_config().owner_tag_);
}
TEST_P(OwnerTagTest, constant_tag)
{
    auto ns(make_random_namespace());
    SharedVolumePtr v = newVolume(*ns);

    const VolumeConfig cfg = v->get_config();
    destroyVolume(v,
                  DeleteLocalData::F,
                  RemoveVolumeCompletely::F);

    v = localRestart(ns->ns());

    EXPECT_EQ(cfg.owner_tag_,
              v->get_config().owner_tag_);

    destroyVolume(v,
                  DeleteLocalData::T,
                  RemoveVolumeCompletely::F);

    restartVolume(cfg);
    v = getVolume(cfg.id_);

    EXPECT_EQ(cfg.owner_tag_,
              v->get_config().owner_tag_);
}
TEST_P(SnapshotRestoreTest, TestFailOver)
{
    auto foc_ctx(start_one_foc());
    auto ns_ptr = make_random_namespace();
    SharedVolumePtr v = newVolume(VolumeId("volume1"),
                          ns_ptr->ns(),
                          VolumeSize((1 << 18) * 512),
                          SCOMultiplier(1));

    v->setFailOverCacheConfig(foc_ctx->config(GetParam().foc_mode()));

    VolumeConfig cfg = v->get_config();
    v->createSnapshot(SnapshotName("snap0"));

    for(int i = 0; i < 5; ++i)
    {
        writeToVolume(*v,
                      0,
                      4096,
                      "a");
    }


    waitForThisBackendWrite(*v);
    v->restoreSnapshot(SnapshotName("snap0"));

    for(int i = 0; i < 7; ++i)
    {
        writeToVolume(*v,
                      8,
                      4096,
                      "d");
    }

    flushFailOverCache(*v);
    destroyVolume(v,
                  DeleteLocalData::T,
                  RemoveVolumeCompletely::F);

    SharedVolumePtr v1 = 0;
    v1 = getVolume(VolumeId("volume1"));
    ASSERT_FALSE(v1);
    restartVolume(cfg);
    v1 = getVolume(VolumeId("volume1"));

    ASSERT_TRUE(v1 != nullptr);
    checkVolume(*v1,0,4096, "\0");
    checkVolume(*v1,8,4096, "d");
    checkCurrentBackendSize(*v1);
}
Exemple #4
0
VolumeConfig
api::getVolumeConfig(const vd::VolumeId& volName)
{
    const SharedVolumePtr v = VolManager::get()->findVolume_(volName);
    return v->get_config();
}