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 (); }
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); }
// Reads from the journal. 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 (); } } }
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 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 (); }