示例#1
0
        public void SideBySideIndexCreated()
        {
            using (var store = NewDocumentStore())
            {
                IndexCreation.CreateIndexes(new CompositionContainer(new TypeCatalog(typeof(OldIndex))), store);

                WaitForIndexing(store);

                var e = Assert.Throws <InvalidOperationException>(() =>
                {
                    using (var session = store.OpenSession())
                    {
                        var count = session.Query <Person, OldIndex>()
                                    .Count(x => x.LastName == "Doe");
                    }
                });

                Assert.Contains("The field 'LastName' is not indexed, cannot query on fields that are not indexed", e.InnerException.Message);

                var mre = new ManualResetEventSlim(false);
                var documentDatabase = store.ServerIfEmbedded.Server.GetDatabaseInternal(store.DefaultDatabase).Result;
                documentDatabase.IndexReplacer.IndexReplaced += s =>
                {
                    mre.Set();
                };
                IndexCreation.SideBySideCreateIndexes(new CompositionContainer(new TypeCatalog(typeof(NewIndex))), store);
                WaitForUserToContinueTheTest(store);

                Assert.True(mre.Wait(10000));
                Assert.Equal(2, store.DatabaseCommands.GetStatistics().CountOfIndexes);
            }
        }
示例#2
0
 public void can_use_conventions_with_create_side_by_side_indexes_container()
 {
     using (var store = NewDocumentStore())
     {
         var container = new CompositionContainer(new TypeCatalog(typeof(CustomIdInIndexCreationTask)));
         IndexCreation.SideBySideCreateIndexes(container, store.DatabaseCommands, conventions);
         Assert.True(testFailed == false);
     }
 }
示例#3
0
        public void should_not_reset_lock_mode_on_multiple_side_by_side_index_creation()
        {
            using (var documentStore = NewDocumentStore())
            {
                var container = new CompositionContainer(new TypeCatalog(typeof(Entity_ById_V1)));
                IndexCreation.SideBySideCreateIndexes(container, documentStore.DatabaseCommands, documentStore.Conventions);
                WaitForIndexing(documentStore);

                documentStore.DatabaseCommands.SetIndexLock("Entity/ById", IndexLockMode.SideBySide);

                var databaseStatisticsBefore = documentStore.DatabaseCommands.GetStatistics();
                var indexStatsBefore         = databaseStatisticsBefore.Indexes.Single(i => i.Name == "Entity/ById");

                Assert.Equal(2, databaseStatisticsBefore.Indexes.Length);
                Assert.Equal(IndexLockMode.SideBySide, indexStatsBefore.LockMode);

                while (true)
                {
                    var index = documentStore.DatabaseCommands.GetStatistics().Indexes.FirstOrDefault(x => x.Name == "Entity/ById");
                    if (index != null)
                    {
                        break;
                    }
                    Thread.Sleep(100);
                }

                container = new CompositionContainer(new TypeCatalog(typeof(Entity_ById_V2)));
                IndexCreation.SideBySideCreateIndexes(container, documentStore.DatabaseCommands, documentStore.Conventions);
                WaitForIndexing(documentStore);

                while (documentStore.DatabaseCommands.GetStatistics().Indexes.Length != 2)
                {
                    Thread.Sleep(100);
                }

                var databaseStatisticsAfter = documentStore.DatabaseCommands.GetStatistics();
                var indexStatsAfter         = databaseStatisticsAfter.Indexes.Single(i => i.Name == "Entity/ById");

                Assert.Equal(2, databaseStatisticsAfter.Indexes.Length);
                Assert.Equal(IndexLockMode.SideBySide, indexStatsAfter.LockMode);
            }
        }
示例#4
0
        public void ReplaceAfterNonStale()
        {
            using (var store = NewDocumentStore())
            {
                IndexCreation.CreateIndexes(new CompositionContainer(new TypeCatalog(typeof(OldIndex))), store);

                WaitForIndexing(store);

                var e = Assert.Throws <InvalidOperationException>(() =>
                {
                    using (var session = store.OpenSession())
                    {
                        var count = session.Query <Person, OldIndex>()
                                    .Count(x => x.LastName == "Doe");
                    }
                });

                Assert.Contains("The field 'LastName' is not indexed, cannot query on fields that are not indexed", e.InnerException.Message);

                IndexCreation.SideBySideCreateIndexes(new CompositionContainer(new TypeCatalog(typeof(NewIndex))), store);

                WaitForIndexing(store);

                var indexReplaceDocId = Constants.IndexReplacePrefix + "ReplacementOf/" + new NewIndex().IndexName;

                Assert.True(SpinWait.SpinUntil(() => store.DatabaseCommands.Get(indexReplaceDocId) == null, TimeSpan.FromSeconds(30)));                 // wait for index replacement

                using (var session = store.OpenSession())
                {
                    var count = session.Query <Person, OldIndex>()
                                .Count(x => x.LastName == "Doe");

                    Assert.Equal(0, count);
                }
            }
        }
示例#5
0
        public void ShouldNotReplaceIndexIfSameDefinition()
        {
            using (var store = NewDocumentStore())
            {
                IndexCreation.CreateIndexes(new CompositionContainer(new TypeCatalog(typeof(OldIndex))), store);
                WaitForIndexing(store);

                var e = Assert.Throws <InvalidOperationException>(() =>
                {
                    using (var session = store.OpenSession())
                    {
                        var count = session.Query <Person, OldIndex>()
                                    .Count(x => x.LastName == "Doe");
                    }
                });

                var error = "The field 'LastName' is not indexed, cannot query on fields that are not indexed";
                Assert.Contains(error, e.InnerException.Message);

                IndexCreation.SideBySideCreateIndexes(new CompositionContainer(new TypeCatalog(typeof(OldIndex))), store);
                WaitForIndexing(store);

                Assert.Equal(2, store.DatabaseCommands.GetStatistics().CountOfIndexes);

                e = Assert.Throws <InvalidOperationException>(() =>
                {
                    using (var session = store.OpenSession())
                    {
                        var count = session.Query <Person, OldIndex>()
                                    .Count(x => x.LastName == "Doe");
                    }
                });

                Assert.Contains("The field 'LastName' is not indexed, cannot query on fields that are not indexed", e.InnerException.Message);
            }
        }