Beispiel #1
0
        /// <summary>
        /// Executes the index creation against each of the shards.
        /// </summary>
        public override void ExecuteIndex(AbstractIndexCreationTask indexCreationTask)
        {
            var list = ShardStrategy.Shards.Values.Select(x => x.DatabaseCommands).ToList();

            ShardStrategy.ShardAccessStrategy.Apply <object>(list, (commands, i) =>
            {
                indexCreationTask.Execute(commands, Conventions);
                return(null);
            });
        }
Beispiel #2
0
        public void PutIndex(AbstractIndexCreationTask index)
        {
            var response = httpClient
                           .PutAsync(databaseUrl + "/indexes/" + Uri.EscapeUriString(index.IndexName), new JsonContent(RavenJObject.FromObject(index.CreateIndexDefinition())))
                           .ResultUnwrap();

            if (response.IsSuccessStatusCode == false)
            {
                throw new InvalidOperationException(string.Format("PUT failed on '{0}'. Code: {1}.", index.IndexName, response.StatusCode));
            }
        }
Beispiel #3
0
        public override void SideBySideExecuteIndex(AbstractIndexCreationTask indexCreationTask, Etag minimumEtagBeforeReplace = null, DateTime?replaceTimeUtc = null)
        {
            var list = ShardStrategy.Shards.Values.Select(x => x.DatabaseCommands).ToList();

            ShardStrategy.ShardAccessStrategy.Apply(list,
                                                    new ShardRequestData()
                                                    , (commands, i) =>
            {
                indexCreationTask.SideBySideExecute(commands, Conventions, minimumEtagBeforeReplace, replaceTimeUtc);
                return((object)null);
            });
        }
 /// <summary>
 /// Safely add the index to the RavenDB database, protect against possible failures caused by documented
 /// and undocumented possibilities of failure.
 /// Will throw iff index registration failed and index doesn't exist or it exists but with a non-current definition.
 /// </summary>
 /// <param name="store"></param>
 /// <param name="index"></param>
 internal static void SafelyCreateIndex(IDocumentStore store, AbstractIndexCreationTask index)
 {
     try
     {
         index.Execute(store);
     }
     catch (Exception) // Apparently ArgumentException can be thrown as well as a WebException; not taking any chances
     {
         var existingIndex = store.DatabaseCommands.GetIndex(index.IndexName);
         if (existingIndex == null || !index.CreateIndexDefinition().Equals(existingIndex))
         {
             throw;
         }
     }
 }
Beispiel #5
0
        private void CanUseOverLoad(AbstractIndexCreationTask index)
        {
            using (var store = GetDocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    session.Store(new Order
                    {
                        Company = "Hibernating Rhinos"
                    });
                    session.SaveChanges();
                }

                index.Execute(store);

                Indexes.WaitForIndexing(store);

                Assert.Null(Indexes.WaitForIndexingErrors(store, errorsShouldExists: false));
            }
        }
Beispiel #6
0
        private void CanUseOverLoad(AbstractIndexCreationTask index)
        {
            using (var store = GetDocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    session.Store(new Order
                    {
                        Company = "Hibernating Rhinos"
                    });
                    session.SaveChanges();
                }

                index.Execute(store);

                WaitForIndexing(store);

                var errors = store.Maintenance.Send(new GetIndexErrorsOperation());
                Assert.Equal(0, errors[0].Errors.Length);
            }
        }
Beispiel #7
0
        /// <summary>
        /// Executes the index creation against each of the shards Async.
        /// </summary>
        public override Task ExecuteIndexAsync(AbstractIndexCreationTask indexCreationTask)
        {
            var list = ShardStrategy.Shards.Values.Select(x => x.AsyncDatabaseCommands).ToList();

            return(ShardStrategy.ShardAccessStrategy.ApplyAsync(list, new ShardRequestData(), (commands, i) =>
            {
                var tcs = new TaskCompletionSource <bool>();

                try
                {
                    indexCreationTask.ExecuteAsync(commands, Conventions)
                    .ContinueWith(t => tcs.SetResult(true));
                }
                catch (Exception e)
                {
                    tcs.SetException(e);
                }

                return tcs.Task;
            }));
        }
Beispiel #8
0
        public override Task SideBySideExecuteIndexAsync(AbstractIndexCreationTask indexCreationTask, Etag minimumEtagBeforeReplace = null, DateTime?replaceTimeUtc = null)
        {
            var list = ShardStrategy.Shards.Values.Select(x => x.AsyncDatabaseCommands).ToList();

            return(ShardStrategy.ShardAccessStrategy.ApplyAsync(list, new ShardRequestData(), (commands, i) =>
            {
                var tcs = new TaskCompletionSource <bool>();

                try
                {
                    indexCreationTask.SideBySideExecuteAsync(commands, Conventions, minimumEtagBeforeReplace, replaceTimeUtc)
                    .ContinueWith(t => tcs.SetResult(true));
                }
                catch (Exception e)
                {
                    tcs.SetException(e);
                }

                return tcs.Task;
            }));
        }
Beispiel #9
0
 /// <summary>
 /// Executes index creation.
 /// </summary>
 public virtual Task ExecuteIndexAsync(AbstractIndexCreationTask task, CancellationToken token = default(CancellationToken))
 {
     return(task.ExecuteAsync(this, Conventions, token));
 }
Beispiel #10
0
 /// <summary>
 /// Executes index creation.
 /// </summary>
 public virtual void ExecuteIndex(AbstractIndexCreationTask task)
 {
     AsyncHelpers.RunSync(() => ExecuteIndexAsync(task));
 }
Beispiel #11
0
 public Task ExecuteIndexAsync(AbstractIndexCreationTask indexCreationTask)
 {
     return(Inner.ExecuteIndexAsync(indexCreationTask));
 }
Beispiel #12
0
 public void ExecuteIndex(AbstractIndexCreationTask indexCreationTask)
 {
     this.ThrowIfNotInitialized();
     this.InnerStore.ExecuteIndex(indexCreationTask);
 }
Beispiel #13
0
 /// <summary>
 /// Executes the index creation using side-by-side mode.
 /// </summary>
 /// <param name="indexCreationTask"></param>
 /// <param name="minimumEtagBeforeReplace"></param>
 /// <param name="replaceTimeUtc"></param>
 public void SideBySideExecuteIndex(AbstractIndexCreationTask indexCreationTask, Etag minimumEtagBeforeReplace = null, DateTime?replaceTimeUtc = null)
 {
     server.DocumentStore.SideBySideExecuteIndex(indexCreationTask, minimumEtagBeforeReplace, replaceTimeUtc);
 }
Beispiel #14
0
 /// <summary>
 ///     Executes the index creation.
 /// </summary>
 public void ExecuteIndex(AbstractIndexCreationTask indexCreationTask)
 {
     server.DocumentStore.ExecuteIndex(indexCreationTask);
 }
Beispiel #15
0
 public void ExecuteIndex(AbstractIndexCreationTask indexCreationTask)
 {
     _docStore.ExecuteIndex(indexCreationTask);
 }
Beispiel #16
0
 /// <summary>
 /// Executes index creation in side-by-side mode.
 /// </summary>
 public virtual Task SideBySideExecuteIndexAsync(AbstractIndexCreationTask indexCreationTask, Etag minimumEtagBeforeReplace = null, DateTime?replaceTimeUtc = null)
 {
     return(indexCreationTask.SideBySideExecuteAsync(AsyncDatabaseCommands, Conventions, minimumEtagBeforeReplace, replaceTimeUtc));
 }
Beispiel #17
0
 /// <summary>
 /// Executes index creation in side-by-side mode.
 /// </summary>
 public virtual void SideBySideExecuteIndex(AbstractIndexCreationTask indexCreationTask, Etag minimumEtagBeforeReplace = null, DateTime?replaceTimeUtc = null)
 {
     indexCreationTask.SideBySideExecute(DatabaseCommands, Conventions, minimumEtagBeforeReplace, replaceTimeUtc);
 }
Beispiel #18
0
 public void RegisterIndex(AbstractIndexCreationTask type)
 {
     IndexCreation.CreateIndexes(new List <AbstractIndexCreationTask> {
         type
     }, _store);
 }
Beispiel #19
0
 /// <inheritdoc />
 public virtual Task ExecuteIndexAsync(AbstractIndexCreationTask task, string database = null, CancellationToken token = default)
 {
     AssertInitialized();
     return(task.ExecuteAsync(this, Conventions, database, token));
 }
Beispiel #20
0
 /// <inheritdoc />
 public virtual void ExecuteIndex(AbstractIndexCreationTask task, string database = null)
 {
     AsyncHelpers.RunSync(() => ExecuteIndexAsync(task, database));
 }
Beispiel #21
0
 /// <summary>
 /// Executes the index creation.
 /// </summary>
 public virtual void ExecuteIndex(AbstractIndexCreationTask indexCreationTask)
 {
     indexCreationTask.Execute(DatabaseCommands, Conventions);
 }
Beispiel #22
0
 /// <summary>
 /// Executes index creation.
 /// </summary>
 public virtual Task ExecuteIndexAsync(AbstractIndexCreationTask indexCreationTask)
 {
     return(indexCreationTask.ExecuteAsync(Conventions));
 }
Beispiel #23
0
 public virtual Task ExecuteIndexAsync(AbstractIndexCreationTask indexCreationTask)
 {
     return(indexCreationTask.ExecuteAsync(AsyncDatabaseCommands, Conventions));
 }
Beispiel #24
0
 internal Task ExecuteIndex(IDocumentStore store, AbstractIndexCreationTask index) =>
 index.ExecuteAsync(store);
Beispiel #25
0
 public Task ExecuteIndexAsync(AbstractIndexCreationTask indexCreationTask)
 {
     return(_docStore.ExecuteIndexAsync(indexCreationTask));
 }
Beispiel #26
0
 /// <summary>
 /// Safely add the index to the RavenDB database, protect against possible failures caused by documented
 /// and undocumented possibilities of failure.
 /// Will throw iff index registration failed and index doesn't exist or it exists but with a non-current definition.
 /// </summary>
 internal void CreateIndexOnInitialization(AbstractIndexCreationTask index)
 {
     indexesToCreate.Add(index);
 }
Beispiel #27
0
 /// <summary>
 ///     Executes the index creation.
 /// </summary>
 /// <param name="indexCreationTask"></param>
 public Task ExecuteIndexAsync(AbstractIndexCreationTask indexCreationTask)
 {
     return(server.DocumentStore.ExecuteIndexAsync(indexCreationTask));
 }
Beispiel #28
0
 public void ExecuteIndex(AbstractIndexCreationTask indexCreationTask)
 {
     Inner.ExecuteIndex(indexCreationTask);
 }
Beispiel #29
0
 /// <summary>
 /// Executes the index creation using side-by-side mode.
 /// </summary>
 /// <param name="indexCreationTask"></param>
 /// <param name="minimumEtagBeforeReplace"></param>
 /// <param name="replaceTimeUtc"></param>
 /// <returns></returns>
 public Task SideBySideExecuteIndexAsync(AbstractIndexCreationTask indexCreationTask, Etag minimumEtagBeforeReplace = null, DateTime?replaceTimeUtc = null)
 {
     return(server.DocumentStore.SideBySideExecuteIndexAsync(indexCreationTask, minimumEtagBeforeReplace, replaceTimeUtc));
 }
Beispiel #30
0
        private async Task Can_Use_No_Tracking_For_Referenced_Items_Internal(AbstractIndexCreationTask productsBySupplierNoTracking, AbstractIndexCreationTask productsBySupplier)
        {
            using (var store = GetDocumentStore())
            {
                await productsBySupplierNoTracking.ExecuteAsync(store);

                await productsBySupplier.ExecuteAsync(store);

                var database = await Databases.GetDocumentDatabaseInstanceFor(store);

                var i = database.IndexStore.GetIndex(productsBySupplierNoTracking.IndexName);
                Assert.Empty(i.GetReferencedCollections());

                i = database.IndexStore.GetIndex(productsBySupplier.IndexName);
                Assert.NotEmpty(i.GetReferencedCollections());

                using (var session = store.OpenAsyncSession())
                {
                    var supplier = new Supplier {
                        Name = "Bob"
                    };

                    await session.StoreAsync(supplier, "suppliers/1");

                    var product = new Product {
                        Name = "Cheese", Supplier = supplier.Id
                    };

                    await session.StoreAsync(product, "products/1");

                    await session.SaveChangesAsync();
                }

                Indexes.WaitForIndexing(store);

                var terms = await store.Maintenance.SendAsync(new GetTermsOperation(productsBySupplierNoTracking.IndexName, "Name", fromValue : null));

                Assert.Equal(1, terms.Length);
                Assert.Equal("bob", terms[0]);

                terms = await store.Maintenance.SendAsync(new GetTermsOperation(productsBySupplier.IndexName, "Name", fromValue : null));

                Assert.Equal(1, terms.Length);
                Assert.Equal("bob", terms[0]);

                using (var session = store.OpenAsyncSession())
                {
                    var supplier = await session.LoadAsync <Supplier>("suppliers/1");

                    supplier.Name = "John";

                    await session.SaveChangesAsync();
                }

                Indexes.WaitForIndexing(store);

                terms = await store.Maintenance.SendAsync(new GetTermsOperation(productsBySupplierNoTracking.IndexName, "Name", fromValue : null));

                Assert.Equal(1, terms.Length);
                Assert.Equal("bob", terms[0]);

                terms = await store.Maintenance.SendAsync(new GetTermsOperation(productsBySupplier.IndexName, "Name", fromValue : null));

                Assert.Equal(1, terms.Length);
                Assert.Equal("john", terms[0]);
            }
        }