public void ReadAndWriteJournalFile() { string path = Path.GetFullPath("TestData\\RWJournal"); if (!Directory.Exists(path)) Directory.CreateDirectory(path); JournalWriter jw = new JournalWriter(path, 324, false); List<KeyValuePair<Key, Value>> items = new List<KeyValuePair<Key, Value>>(); for (int i = 0; i < 10000; i++) { Key randKey = Key.Random(20); Value randValue = Value.Random(100); jw.Add(randKey, randValue); items.Add(new KeyValuePair<Key, Value>(randKey, randValue)); } jw.Close(); JournalReader jr = new JournalReader(path, 324); int j=0; foreach (var pair in jr.Enumerate()) { Assert.AreEqual( items[j].Key, pair.Key ); Assert.AreEqual( items[j].Value, pair.Value ); j++; } jr.Close(); }
static void DumpJournal(string baseDir, int version) { var journal = new JournalReader(baseDir, version); Console.WriteLine("Journal\nBaseDir: {0} Version: {1}", baseDir, version); foreach (var pair in journal.Enumerate()) { Console.WriteLine("{0} => {1}", pair.Key.ToString(), pair.Value.ToString()); } }
public JournaledMemTable(string baseFileName, int version) { _baseFileName = baseFileName; _version = version; _memTable = new MemTable(); // If the journal exists from a previous run, then load its data into the memtable string journalFile = Config.JournalFile(baseFileName, version); if (File.Exists(journalFile)) { var journalReader = new JournalReader(baseFileName, version); try { foreach (var pair in journalReader.Enumerate()) { _memTable.Add(pair.Key, pair.Value); } } finally { journalReader.Close(); } _journal = new JournalWriter(baseFileName, version, true); } else { _journal = new JournalWriter(baseFileName, version, false); } }
public void ReadFromJournal(string fileName, int version) { lock (_tableLock) { JournalReader jr = new JournalReader(fileName, version); try { foreach (var pair in jr.Enumerate()) { Add(pair.Key, pair.Value); } } finally { jr.Close(); } } }
public void ReadCorruptedJournalFile() { string path = Path.GetFullPath("TestData\\ReadCorruptedJournal"); if (!Directory.Exists(path)) Directory.CreateDirectory(path); JournalWriter jw = new JournalWriter(path, 324, false); List<KeyValuePair<Key, Value>> items = new List<KeyValuePair<Key, Value>>(); for (int i = 0; i < 10; i++) { Key randKey = Key.Random(20); Value randValue = Value.Random(100); jw.Add(randKey, randValue); items.Add(new KeyValuePair<Key, Value>(randKey, randValue)); } jw.Close(); // Reopen the file and add a partial record var fileName = Config.JournalFile(path, 324); var writer = new BinaryWriter(new FileStream(fileName, FileMode.Append, FileAccess.Write, FileShare.None, 1024, false)); Key key = Key.Random(20); writer.Write7BitEncodedInt(key.Length); writer.Write(key.InternalBytes); writer.Write7BitEncodedInt(0); writer.Flush(); writer.Close(); JournalReader jr = new JournalReader(path, 324); int j = 0; foreach (var pair in jr.Enumerate()) { Assert.AreEqual(items[j].Key, pair.Key); Assert.AreEqual(items[j].Value, pair.Value); j++; } jr.Close(); }
public void V1JournalFile() { string path = Path.GetFullPath(@"..\FormatTestData\V1"); JournalReader jr = new JournalReader(path, 324); int j = 0; foreach (var pair in jr.Enumerate()) { Assert.AreEqual( 21, pair.Key.Length); Assert.AreEqual(100, pair.Value.Length); j++; } jr.Close(); }