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); }
VolumeConfig api::getVolumeConfig(const vd::VolumeId& volName) { const SharedVolumePtr v = VolManager::get()->findVolume_(volName); return v->get_config(); }