constexpr uint64_t kBytes = 100;
WalSet wals;
ASSERT_OK(wals.AddWal(WalAddition(kNumber, WalMetadata(kBytes))));
+ const auto wals1 = wals.GetWals();
Status s = wals.AddWal(WalAddition(kNumber, WalMetadata(0)));
- ASSERT_TRUE(s.IsCorruption());
- ASSERT_TRUE(
- s.ToString().find(
- "WAL 100 must not have smaller synced size than previous one") !=
- std::string::npos);
+ const auto wals2 = wals.GetWals();
+ ASSERT_OK(s);
+ ASSERT_EQ(wals1, wals2);
}
TEST(WalSet, CreateTwice) {
ASSERT_OK(wals.DeleteWalsBefore(kMaxWalNumber + 1));
}
+TEST(WalSet, AddObsoleteWal) {
+ constexpr WalNumber kNumber = 100;
+ WalSet wals;
+ ASSERT_OK(wals.DeleteWalsBefore(kNumber + 1));
+ ASSERT_OK(wals.AddWal(WalAddition(kNumber)));
+ ASSERT_TRUE(wals.GetWals().empty());
+}
+
+TEST(WalSet, MinWalNumberToKeep) {
+ constexpr WalNumber kNumber = 100;
+ WalSet wals;
+ ASSERT_EQ(wals.GetMinWalNumberToKeep(), 0);
+ ASSERT_OK(wals.DeleteWalsBefore(kNumber));
+ ASSERT_EQ(wals.GetMinWalNumberToKeep(), kNumber);
+ ASSERT_OK(wals.DeleteWalsBefore(kNumber - 1));
+ ASSERT_EQ(wals.GetMinWalNumberToKeep(), kNumber);
+ ASSERT_OK(wals.DeleteWalsBefore(kNumber + 1));
+ ASSERT_EQ(wals.GetMinWalNumberToKeep(), kNumber + 1);
+}
+
class WalSetTest : public DBTestBase {
public:
WalSetTest() : DBTestBase("WalSetTest", /* env_do_fsync */ true) {}