Beispiel #1
0
        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();
        }
Beispiel #2
0
 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());
     }
 }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
 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();
         }
     }
 }
Beispiel #5
0
        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();
        }
Beispiel #6
0
        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();
        }