예제 #1
0
        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");
        }
예제 #2
0
        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));
        }
예제 #3
0
        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();
                }
            });
        }