diff options
author | Tor Egge <Tor.Egge@broadpark.no> | 2018-08-03 18:04:13 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@broadpark.no> | 2018-08-03 18:05:56 +0200 |
commit | 9f083505f92ce020de31648fb6df69fb7a7911c8 (patch) | |
tree | bb9ac7b6e17681a0fdecb3c8912bba8566a09132 /searchcore | |
parent | 203f104cadd7c8c08927b13ac55223a082334b88 (diff) |
Sync attribute dirs before marking attribute snapshot valid.
Diffstat (limited to 'searchcore')
3 files changed, 11 insertions, 1 deletions
diff --git a/searchcore/src/tests/proton/attribute/attribute_directory/attribute_directory_test.cpp b/searchcore/src/tests/proton/attribute/attribute_directory/attribute_directory_test.cpp index 37cf201e354..f95ea478ce1 100644 --- a/searchcore/src/tests/proton/attribute/attribute_directory/attribute_directory_test.cpp +++ b/searchcore/src/tests/proton/attribute/attribute_directory/attribute_directory_test.cpp @@ -137,6 +137,7 @@ struct Fixture : public DirectoryHandler EXPECT_TRUE(hasAttributeDir(dir)); auto writer = dir->getWriter(); writer->createInvalidSnapshot(serialNum); + vespalib::mkdir(writer->getSnapshotDir(serialNum), false); writer->markValidSnapshot(serialNum); TEST_DO(assertAttributeDiskDir("foo")); } @@ -162,6 +163,7 @@ struct Fixture : public DirectoryHandler auto dir = createFooAttrDir(); auto writer = dir->getWriter(); writer->createInvalidSnapshot(serialNum); + vespalib::mkdir(writer->getSnapshotDir(serialNum), false); writer->markValidSnapshot(serialNum); } @@ -208,8 +210,10 @@ TEST_F("Test that we can prune attribute snapshots", Fixture) TEST_DO(f.assertNotAttributeDiskDir("foo")); auto writer = dir->getWriter(); writer->createInvalidSnapshot(2); + vespalib::mkdir(writer->getSnapshotDir(2), false); writer->markValidSnapshot(2); writer->createInvalidSnapshot(4); + vespalib::mkdir(writer->getSnapshotDir(4), false); writer->markValidSnapshot(4); writer.reset(); TEST_DO(f.assertAttributeDiskDir("foo")); diff --git a/searchcore/src/tests/proton/reprocessing/attribute_reprocessing_initializer/attribute_reprocessing_initializer_test.cpp b/searchcore/src/tests/proton/reprocessing/attribute_reprocessing_initializer/attribute_reprocessing_initializer_test.cpp index 7be774f7291..72e558fd25f 100644 --- a/searchcore/src/tests/proton/reprocessing/attribute_reprocessing_initializer/attribute_reprocessing_initializer_test.cpp +++ b/searchcore/src/tests/proton/reprocessing/attribute_reprocessing_initializer/attribute_reprocessing_initializer_test.cpp @@ -294,9 +294,9 @@ TEST("require that added attribute aspect with flushed attribute after interrupt auto dir = diskLayout->createAttributeDir("a"); auto writer = dir->getWriter(); writer->createInvalidSnapshot(INIT_SERIAL_NUM); - writer->markValidSnapshot(INIT_SERIAL_NUM); auto snapshotdir = writer->getSnapshotDir(INIT_SERIAL_NUM); vespalib::mkdir(snapshotdir); + writer->markValidSnapshot(INIT_SERIAL_NUM); auto av = AttributeFactory::createAttribute(snapshotdir + "/a", Config(BasicType::STRING)); av->save(); diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_directory.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attribute_directory.cpp index f2e4ac4905d..2bbc6c99dc0 100644 --- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_directory.cpp +++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_directory.cpp @@ -112,6 +112,7 @@ AttributeDirectory::createInvalidSnapshot(SerialNum serialNum) if (empty()) { vespalib::string dirName(getDirName()); vespalib::mkdir(dirName, false); + vespalib::File::sync(vespalib::dirname(dirName)); } { std::lock_guard<std::mutex> guard(_mutex); @@ -130,6 +131,9 @@ AttributeDirectory::markValidSnapshot(SerialNum serialNum) assert(snap.syncToken == serialNum); _snapInfo.validateSnapshot(serialNum); } + vespalib::string snapshotDir(getSnapshotDir(serialNum)); + vespalib::File::sync(snapshotDir); + vespalib::File::sync(dirname(snapshotDir)); saveSnapInfo(); } @@ -178,6 +182,7 @@ AttributeDirectory::removeInvalidSnapshots() vespalib::rmdir(subDir, true); } if (!toRemove.empty()) { + vespalib::File::sync(getDirName()); { std::lock_guard<std::mutex> guard(_mutex); for (const auto &serialNum : toRemove) { @@ -194,6 +199,7 @@ AttributeDirectory::removeDiskDir() if (empty()) { vespalib::string dirName(getDirName()); vespalib::rmdir(dirName, true); + vespalib::File::sync(vespalib::dirname(dirName)); return true; } return false; |