private RemoteBulkInsertOperation GetBulkInsertOperation()
        {
            if (current == null)
            {
                return(current = CreateBulkInsertOperation(Task.FromResult(0)));
            }

            if (processedItemsInCurrentOperation < chunkSize)
            {
                if (!documentSizeInChunkLimit.HasValue || documentSizeInChunk < documentSizeInChunkLimit.Value)
                {
                    return(current);
                }
            }

            // if we haven't flushed the previous one yet, we will force
            // a disposal of both the previous one and the one before, to avoid
            // consuming a lot of memory, and to have _too_ much concurrency.
            if (previousTask != null)
            {
                previousTask.ConfigureAwait(false).GetAwaiter().GetResult();
            }
            previousTask = current.DisposeAsync();

            documentSizeInChunk = 0;
            processedItemsInCurrentOperation = 0;
            current = CreateBulkInsertOperation(previousTask);
            return(current);
        }
Beispiel #2
0
 public void CanCreateAndDisposeUsingBulk()
 {
     using (var store = NewRemoteDocumentStore())
     {
         var bulkInsertOperation = new RemoteBulkInsertOperation(new BulkInsertOptions(), (AsyncServerClient)store.AsyncDatabaseCommands, store.Changes());
         bulkInsertOperation.Dispose();
     }
 }
Beispiel #3
0
 public void CanBulkInsertWithApiKey()
 {
     using (var store = NewRemoteDocumentStore(enableAuthentication: true))
     {
         using (var op = new RemoteBulkInsertOperation(new BulkInsertOptions(), (AsyncServerClient)store.AsyncDatabaseCommands, store.Changes()))
         {
             op.Write("items/1", new RavenJObject(), new RavenJObject());
         }
         Assert.NotNull(store.DatabaseCommands.Get("items/1"));
     }
 }
        private RemoteBulkInsertOperation CreateBulkInsertOperation()
        {
            var operation = new RemoteBulkInsertOperation(options, client, changes);

            if (Report != null)
            {
                operation.Report += Report;
            }

            return(operation);
        }
        private RemoteBulkInsertOperation CreateBulkInsertOperation(Task <int> disposeAsync)
        {
            var operation = new RemoteBulkInsertOperation(options, client, changes, disposeAsync);

            if (Report != null)
            {
                operation.Report += Report;
            }

            return(operation);
        }
Beispiel #6
0
 public void CanBulkInsertWithWindowsAuth()
 {
     using (var store = NewRemoteDocumentStore())
     {
         using (var op = new RemoteBulkInsertOperation(new BulkInsertOptions(),
                                                       (ServerClient)store.DatabaseCommands))
         {
             op.Write("items/1", new RavenJObject(), new RavenJObject());
         }
         Assert.NotNull(store.DatabaseCommands.Get("items/1"));
     }
 }
Beispiel #7
0
 public void CanHandleReferenceChecking()
 {
     using (var store = NewRemoteDocumentStore())
     {
         using (var op = new RemoteBulkInsertOperation(new BulkInsertOptions
         {
             CheckReferencesInIndexes = true
         }, (ServerClient)store.DatabaseCommands, store.Changes()))
         {
             op.Write("items/1", new RavenJObject(), new RavenJObject());
         }
     }
 }
        public void Write(string id, RavenJObject metadata, RavenJObject data)
        {
            current = GetBulkInsertOperation();

            current.Write(id, metadata, data);

            if (documentSizeInChunkLimit.HasValue)
            {
                documentSizeInChunk += DocumentHelpers.GetRoughSize(data);
            }

            processedItemsInCurrentOperation++;
        }
Beispiel #9
0
        public void CanInsertSingleDocument()
        {
            using (var store = NewRemoteDocumentStore())
            {
                var bulkInsertOperation = new RemoteBulkInsertOperation(new BulkInsertOptions(), (ServerClient)store.DatabaseCommands);
                bulkInsertOperation.Write("test", new RavenJObject(), new RavenJObject {
                    { "test", "passed" }
                });
                bulkInsertOperation.Dispose();

                Assert.Equal("passed", store.DatabaseCommands.Get("test").DataAsJson.Value <string>("test"));
            }
        }
Beispiel #10
0
        public void CanBulkInsertWithApiKey()
        {
            using (var store = NewRemoteDocumentStore())
            {
                WaitForUserToContinueTheTest();

                using (var op = new RemoteBulkInsertOperation(new BulkInsertOptions(),
                                                              (ServerClient)store.DatabaseCommands))
                {
                    op.Write("items/1", new RavenJObject(), new RavenJObject());
                }
                Assert.NotNull(store.DatabaseCommands.Get("items/1"));
            }
        }
Beispiel #11
0
        public void CanHandleUpdates()
        {
            using (var store = NewRemoteDocumentStore())
            {
                using (var op = new RemoteBulkInsertOperation(new BulkInsertOptions(), (AsyncServerClient)store.AsyncDatabaseCommands, store.Changes()))
                {
                    op.Write("items/1", new RavenJObject(), new RavenJObject());
                }

                using (var op = new RemoteBulkInsertOperation(new BulkInsertOptions
                {
                    OverwriteExisting = true
                }, (AsyncServerClient)store.AsyncDatabaseCommands, store.Changes()))
                {
                    op.Write("items/1", new RavenJObject(), new RavenJObject());
                }
            }
        }
Beispiel #12
0
        public void CanHandleUpdates()
        {
            using (var store = NewRemoteDocumentStore())
            {
                using (var op = new RemoteBulkInsertOperation(new BulkInsertOptions(), (ServerClient)store.DatabaseCommands))
                {
                    op.Write("items/1", new RavenJObject(), new RavenJObject());
                }

                using (var op = new RemoteBulkInsertOperation(new BulkInsertOptions
                {
                    CheckForUpdates = true
                }, (ServerClient)store.DatabaseCommands))
                {
                    op.Write("items/1", new RavenJObject(), new RavenJObject());
                }
            }
        }
Beispiel #13
0
        public void CanInsertSeveralDocuments()
        {
            using (var server = GetNewServer())
            {
                var store = server.DocumentStore;
                var bulkInsertOperation = new RemoteBulkInsertOperation(new BulkInsertOptions(), (AsyncServerClient)store.AsyncDatabaseCommands, store.Changes());
                bulkInsertOperation.Write("one", new RavenJObject(), new RavenJObject {
                    { "test", "passed" }
                });
                bulkInsertOperation.Write("two", new RavenJObject(), new RavenJObject {
                    { "test", "passed" }
                });
                bulkInsertOperation.Dispose();

                Assert.Equal("passed", store.DatabaseCommands.Get("one").DataAsJson.Value <string>("test"));
                Assert.Equal("passed", store.DatabaseCommands.Get("two").DataAsJson.Value <string>("test"));
            }
        }
Beispiel #14
0
        public void CanInsertSeveralDocuments()
        {
            var configuration = new RavenConfiguration();

            configuration.RunInMemory = configuration.DefaultStorageTypeName == InMemoryRavenConfiguration.VoronTypeName;
            using (var server = new RavenDbServer(configuration).Initialize())
            {
                var store = server.DocumentStore;
                var bulkInsertOperation = new RemoteBulkInsertOperation(new BulkInsertOptions(), (AsyncServerClient)store.AsyncDatabaseCommands, store.Changes());
                bulkInsertOperation.Write("one", new RavenJObject(), new RavenJObject {
                    { "test", "passed" }
                });
                bulkInsertOperation.Write("two", new RavenJObject(), new RavenJObject {
                    { "test", "passed" }
                });
                bulkInsertOperation.Dispose();

                Assert.Equal("passed", store.DatabaseCommands.Get("one").DataAsJson.Value <string>("test"));
                Assert.Equal("passed", store.DatabaseCommands.Get("two").DataAsJson.Value <string>("test"));
            }
        }
        private RemoteBulkInsertOperation GetBulkInsertOperation()
        {
            if (current == null)
            {
                return(current = CreateBulkInsertOperation());
            }

            //
            if (processedItemsInCurrentOperation < chunkSize)
            {
                if (!documentSizeInChunkLimit.HasValue || documentSizeInChunk < documentSizeInChunkLimit.Value)
                {
                    return(current);
                }
            }

            documentSizeInChunk = 0;
            processedItemsInCurrentOperation = 0;
            tasks.Add(current.DisposeAsync());
            return(current = CreateBulkInsertOperation());
        }
Beispiel #16
0
        public void CanInsertSeveralDocumentsInSeveralBatches()
        {
            using (var store = NewRemoteDocumentStore())
            {
                var bulkInsertOperation = new RemoteBulkInsertOperation(new BulkInsertOptions {
                    BatchSize = 2
                },
                                                                        (ServerClient)store.DatabaseCommands, store.Changes());
                bulkInsertOperation.Write("one", new RavenJObject(), new RavenJObject {
                    { "test", "passed" }
                });
                bulkInsertOperation.Write("two", new RavenJObject(), new RavenJObject {
                    { "test", "passed" }
                });
                bulkInsertOperation.Write("three", new RavenJObject(), new RavenJObject {
                    { "test", "passed" }
                });
                bulkInsertOperation.Dispose();

                Assert.Equal("passed", store.DatabaseCommands.Get("one").DataAsJson.Value <string>("test"));
                Assert.Equal("passed", store.DatabaseCommands.Get("two").DataAsJson.Value <string>("test"));
                Assert.Equal("passed", store.DatabaseCommands.Get("three").DataAsJson.Value <string>("test"));
            }
        }