Example #1
0
        public void Can_set_collection_compressed_when_it_has_docs()
        {
            var random = new Random(343);

            using var store = GetDocumentStore();

            var rnd = Enumerable.Range(1, 10)
                      .Select(i => new string((char)(65 + i), 256))
                      .ToList();

            using (var s = store.OpenSession())
            {
                for (int i = 0; i < 5; i++)
                {
                    s.Store(new User
                    {
                        Items = Enumerable.Range(1, random.Next(1, 10))
                                .Select(x => rnd[x])
                                .ToList()
                    }, "users/" + i);
                }

                s.SaveChanges();
            }

            var record = store.Maintenance.Server.Send(new GetDatabaseRecordOperation(store.Database));

            record.DocumentsCompression = new DocumentsCompressionConfiguration(true, "Users");
            store.Maintenance.Server.Send(new UpdateDatabaseOperation(record, record.Etag));

            using (var s = store.OpenSession())
            {
                for (int i = 5; i < 1024; i++)
                {
                    s.Store(new User
                    {
                        Items = Enumerable.Range(1, random.Next(1, 10))
                                .Select(x => rnd[x])
                                .ToList()
                    }, "users/" + i);
                }

                s.SaveChanges();
            }

            var executor = store.GetRequestExecutor();

            using var _ = executor.ContextPool.AllocateOperationContext(out var ctx);
            var cmd = new GetDocumentSize("users/1000");

            executor.Execute(cmd, ctx);

            Assert.True(cmd.Result.ActualSize > cmd.Result.AllocatedSize);
        }
Example #2
0
        public void Can_compact_from_compression_to_not_compressed()
        {
            var path = NewDataPath();

            if (Directory.Exists(path))
            {
                Directory.Delete(path, true);
            }
            using var store = GetDocumentStore(new Options
            {
                Path                 = path,
                RunInMemory          = false,
                ModifyDatabaseRecord = r => r.DocumentsCompression = new DocumentsCompressionConfiguration(true, "Orders")
            });

            store.Maintenance.Send(new CreateSampleDataOperation());

            var executor = store.GetRequestExecutor();

            using (var _ = executor.ContextPool.AllocateOperationContext(out var ctx))
            {
                var cmd = new GetDocumentSize("orders/830-A");
                executor.Execute(cmd, ctx);
                Assert.True(cmd.Result.ActualSize > cmd.Result.AllocatedSize);
            }

            var record = store.Maintenance.Server.Send(new GetDatabaseRecordOperation(store.Database));

            record.DocumentsCompression = new DocumentsCompressionConfiguration(true);
            store.Maintenance.Server.Send(new UpdateDatabaseOperation(record, record.Etag));

            var op = store.Maintenance.Server.Send(new CompactDatabaseOperation(new CompactSettings
            {
                DatabaseName = store.Database,
                Documents    = true,
            }));

            op.WaitForCompletion();

            WaitForIndexing(store);

            var operation = store.Maintenance.Send(new GetStatisticsOperation());

            Assert.True(operation.Indexes.All(x => x.State == IndexState.Normal));

            using (var _ = executor.ContextPool.AllocateOperationContext(out var ctx))
            {
                var cmd = new GetDocumentSize("orders/830-A");
                executor.Execute(cmd, ctx);
                Assert.True(cmd.Result.ActualSize <= cmd.Result.AllocatedSize);
            }
        }