aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@broadpark.no>2018-08-03 18:04:13 +0200
committerTor Egge <Tor.Egge@broadpark.no>2018-08-03 18:05:56 +0200
commit9f083505f92ce020de31648fb6df69fb7a7911c8 (patch)
treebb9ac7b6e17681a0fdecb3c8912bba8566a09132 /searchcore
parent203f104cadd7c8c08927b13ac55223a082334b88 (diff)
Sync attribute dirs before marking attribute snapshot valid.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/tests/proton/attribute/attribute_directory/attribute_directory_test.cpp4
-rw-r--r--searchcore/src/tests/proton/reprocessing/attribute_reprocessing_initializer/attribute_reprocessing_initializer_test.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/attribute/attribute_directory.cpp6
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;