public void TestCompact() { var docs = CreateDocs(20); var nextDocs = new List <Document>(); Db.InBatch(() => { foreach (var doc in docs) { var docToUse = doc; for (int i = 0; i < 25; i++) { var mDoc = docToUse.ToMutable(); mDoc.SetInt("number", i); docToUse = Db.Save(mDoc); } nextDocs.Add(docToUse); } }); docs = nextDocs; nextDocs = new List <Document>(); foreach (var doc in docs) { var content = Encoding.UTF8.GetBytes(doc.Id); var blob = new Blob("text/plain", content); var mDoc = doc.ToMutable(); mDoc.SetBlob("blob", blob); nextDocs.Add(Db.Save(mDoc)); } Db.Count.Should().Be(20, "because that is the number of documents that were added"); var attsDir = new DirectoryInfo(Path.Combine(Db.Path, "Attachments")); var atts = attsDir.EnumerateFiles(); atts.Should().HaveCount(20, "because there should be one blob per document"); Db.Compact(); docs = nextDocs; nextDocs = new List <Document>(); foreach (var doc in docs) { var savedDoc = Db.GetDocument(doc.Id); Db.Delete(savedDoc); Db.GetDocument(savedDoc.Id).Should().BeNull("because the document was just deleted"); } Db.Count.Should().Be(0, "because all documents were deleted"); Db.Compact(); atts = attsDir.EnumerateFiles(); atts.Should().BeEmpty("because the blobs should be collected by the compaction"); }
public void TestConcurrentCreateNCompactDB() { const int nDocs = 1000; var exp1 = new WaitAssert(); var ignore = exp1.RunAssertAsync(() => { CreateDocs(nDocs, "Create").ToList(); }); Db.Compact(); exp1.WaitForResult(TimeSpan.FromSeconds(60)); }
public void TestConcurrentCompact() { const int nDocs = 1000; const uint nRounds = 10; const uint nConcurrent = 10; CreateDocs(nDocs, "Create").Should().HaveCount(nDocs); ConcurrentRuns(nConcurrent, index => { for (uint i = 0; i < nRounds; i++) { Db.Compact(); } }); }