コード例 #1
0
ファイル: RavenDB_13759.cs プロジェクト: radtek/ravendb
        public async Task CanStoreTimeInformationInIndexStorageAndRecoverThatAfterReloadingDatabase()
        {
            var path = NewDataPath();

            using (var store = GetDocumentStore(new Options {
                Path = path
            }))
            {
                var index = new Orders_ByOrderBy();
                index.Execute(store);

                var database = await GetDocumentDatabaseInstanceFor(store);

                var indexInstance1 = database.IndexStore.GetIndex(index.IndexName);

                Assert.Equal(IndexDefinitionBase.IndexVersion.CurrentVersion, indexInstance1.Definition.Version);

                WaitForIndexing(store);

                var indexTimeFields = indexInstance1._indexStorage.ReadIndexTimeFields();
                Assert.Empty(indexTimeFields);

                var now1 = DateTime.Now;

                using (var session = store.OpenSession())
                {
                    session.Store(new Order {
                        OrderedAt = now1, ShippedAt = null
                    }, "orders/1");
                    session.SaveChanges();
                }

                WaitForIndexing(store);

                indexTimeFields = indexInstance1._indexStorage.ReadIndexTimeFields();
                Assert.Equal(1, indexTimeFields.Count);
                Assert.Contains("OrderedAt", indexTimeFields);

                var now2 = now1.AddDays(1);

                using (var session = store.OpenSession())
                {
                    session.Store(new Order {
                        OrderedAt = now2, ShippedAt = now2
                    }, "orders/2");
                    session.SaveChanges();
                }

                WaitForIndexing(store);

                indexTimeFields = indexInstance1._indexStorage.ReadIndexTimeFields();
                Assert.Equal(2, indexTimeFields.Count);
                Assert.Contains("OrderedAt", indexTimeFields);
                Assert.Contains("ShippedAt", indexTimeFields);

                Server.ServerStore.DatabasesLandlord.UnloadDirectly(store.Database);
                database = await GetDocumentDatabaseInstanceFor(store);

                var indexInstance2 = database.IndexStore.GetIndex(index.IndexName);
                Assert.NotEqual(indexInstance1, indexInstance2);

                Assert.Equal(IndexDefinitionBase.IndexVersion.CurrentVersion, indexInstance2.Definition.Version);

                indexTimeFields = indexInstance2._indexStorage.ReadIndexTimeFields();
                Assert.Equal(2, indexTimeFields.Count);
                Assert.Contains("OrderedAt", indexTimeFields);
                Assert.Contains("ShippedAt", indexTimeFields);
            }
        }
コード例 #2
0
ファイル: RavenDB_13759.cs プロジェクト: radtek/ravendb
        public async Task CanOpenIndexesWithOlderVersion()
        {
            var path = NewDataPath();

            using (var store = GetDocumentStore(new Options {
                Path = path
            }))
            {
                var index = new Orders_ByOrderBy();
                index.Execute(store);

                using (var session = store.OpenSession())
                {
                    var orders = session.Query <Order>()
                                 .Where(x => x.OrderedAt >= DateTime.Now)
                                 .ToList();
                }

                WaitForIndexing(store);

                var database = await GetDocumentDatabaseInstanceFor(store);

                var indexStoragePath1 = database.IndexStore.GetIndex(index.IndexName)._environment.Options.BasePath.FullPath;
                var indexStoragePath2 = database.IndexStore.GetIndex("Auto/Orders/ByOrderedAt")._environment.Options.BasePath.FullPath;

                Assert.NotNull(indexStoragePath1);
                Assert.NotNull(indexStoragePath2);

                using (await Server.ServerStore.DatabasesLandlord.UnloadAndLockDatabase(store.Database, nameof(RavenDB_13759)))
                {
                    using (var stream1 = GetFile("Orders_ByOrderBy.zip"))
                        using (var stream2 = GetFile("Auto_Orders_ByOrderedAt.zip"))
                            using (var archive1 = new ZipArchive(stream1))
                                using (var archive2 = new ZipArchive(stream2))
                                {
                                    IOExtensions.DeleteDirectory(indexStoragePath1);
                                    IOExtensions.DeleteDirectory(indexStoragePath2);

                                    archive1.ExtractToDirectory(indexStoragePath1);
                                    archive2.ExtractToDirectory(indexStoragePath2);
                                }
                }

                database = await GetDocumentDatabaseInstanceFor(store);

                WaitForIndexing(store);

                var indexInstance1 = database.IndexStore.GetIndex(index.IndexName);
                var indexInstance2 = database.IndexStore.GetIndex("Auto/Orders/ByOrderedAt");

                Assert.Equal(IndexDefinitionBase.IndexVersion.BaseVersion, indexInstance1.Definition.Version);
                Assert.Equal(IndexDefinitionBase.IndexVersion.BaseVersion, indexInstance2.Definition.Version);

                var indexTimeFields = indexInstance1._indexStorage.ReadIndexTimeFields();
                Assert.Equal(0, indexTimeFields.Count);

                indexTimeFields = indexInstance2._indexStorage.ReadIndexTimeFields();
                Assert.Equal(0, indexTimeFields.Count);

                Server.ServerStore.DatabasesLandlord.UnloadDirectly(store.Database);
                database = await GetDocumentDatabaseInstanceFor(store);

                indexInstance1 = database.IndexStore.GetIndex(index.IndexName);
                indexInstance2 = database.IndexStore.GetIndex("Auto/Orders/ByOrderedAt");

                Assert.Equal(IndexDefinitionBase.IndexVersion.BaseVersion, indexInstance1.Definition.Version);
                Assert.Equal(IndexDefinitionBase.IndexVersion.BaseVersion, indexInstance2.Definition.Version);

                store.Maintenance.Send(new ResetIndexOperation(index.IndexName));
                store.Maintenance.Send(new ResetIndexOperation("Auto/Orders/ByOrderedAt"));

                indexInstance1 = database.IndexStore.GetIndex(index.IndexName);
                indexInstance2 = database.IndexStore.GetIndex("Auto/Orders/ByOrderedAt");

                Assert.Equal(IndexDefinitionBase.IndexVersion.CurrentVersion, indexInstance1.Definition.Version);
                Assert.Equal(IndexDefinitionBase.IndexVersion.CurrentVersion, indexInstance2.Definition.Version);
            }
        }
コード例 #3
0
        public async Task CanOpenIndexesWithOlderVersion()
        {
            var    serverPath = NewDataPath();
            var    databasePath = NewDataPath();
            string indexStoragePath1, indexStoragePath2;
            string databaseName;

            var index = new Orders_ByOrderBy();

            using (var server = GetNewServer(new ServerCreationOptions {
                DataDirectory = serverPath, RunInMemory = false
            }))
                using (var store = GetDocumentStore(new Options {
                    Server = server, RunInMemory = false, Path = databasePath
                }))
                {
                    databaseName = store.Database;
                    index.Execute(store);

                    using (var session = store.OpenSession())
                    {
                        var orders = session.Query <Order>()
                                     .Where(x => x.OrderedAt >= DateTime.Now)
                                     .ToList();
                    }

                    WaitForIndexing(store);

                    var database = await server.ServerStore.DatabasesLandlord.TryGetOrCreateResourceStore(store.Database);

                    indexStoragePath1 = database.IndexStore.GetIndex(index.IndexName)._environment.Options.BasePath.FullPath;
                    indexStoragePath2 = database.IndexStore.GetIndex("Auto/Orders/ByOrderedAt")._environment.Options.BasePath.FullPath;

                    Assert.NotNull(indexStoragePath1);
                    Assert.NotNull(indexStoragePath2);
                }

            using (var stream1 = GetFile("Orders_ByOrderBy.zip"))
                using (var stream2 = GetFile("Auto_Orders_ByOrderedAt.zip"))
                    using (var archive1 = new ZipArchive(stream1))
                        using (var archive2 = new ZipArchive(stream2))
                        {
                            IOExtensions.DeleteDirectory(indexStoragePath1);
                            IOExtensions.DeleteDirectory(indexStoragePath2);

                            archive1.ExtractToDirectory(indexStoragePath1);
                            archive2.ExtractToDirectory(indexStoragePath2);
                        }

            using (var server = GetNewServer(new ServerCreationOptions {
                DataDirectory = serverPath, RunInMemory = false
            }))
                using (var store = GetDocumentStore(new Options {
                    Server = server, RunInMemory = false, Path = databasePath, ModifyDatabaseName = _ => databaseName
                }))
                {
                    var database = await server.ServerStore.DatabasesLandlord.TryGetOrCreateResourceStore(store.Database);

                    WaitForIndexing(store);

                    var indexInstance1 = database.IndexStore.GetIndex(index.IndexName);
                    var indexInstance2 = database.IndexStore.GetIndex("Auto/Orders/ByOrderedAt");

                    Assert.Equal(IndexDefinitionBase.IndexVersion.BaseVersion, indexInstance1.Definition.Version);
                    Assert.Equal(IndexDefinitionBase.IndexVersion.BaseVersion, indexInstance2.Definition.Version);

                    var indexTimeFields = indexInstance1._indexStorage.ReadIndexTimeFields();
                    Assert.Equal(0, indexTimeFields.Count);

                    indexTimeFields = indexInstance2._indexStorage.ReadIndexTimeFields();
                    Assert.Equal(0, indexTimeFields.Count);

                    server.ServerStore.DatabasesLandlord.UnloadDirectly(store.Database);
                    database = await server.ServerStore.DatabasesLandlord.TryGetOrCreateResourceStore(store.Database);

                    indexInstance1 = database.IndexStore.GetIndex(index.IndexName);
                    indexInstance2 = database.IndexStore.GetIndex("Auto/Orders/ByOrderedAt");

                    Assert.Equal(IndexDefinitionBase.IndexVersion.BaseVersion, indexInstance1.Definition.Version);
                    Assert.Equal(IndexDefinitionBase.IndexVersion.BaseVersion, indexInstance2.Definition.Version);

                    store.Maintenance.Send(new ResetIndexOperation(index.IndexName));
                    store.Maintenance.Send(new ResetIndexOperation("Auto/Orders/ByOrderedAt"));

                    indexInstance1 = database.IndexStore.GetIndex(index.IndexName);
                    indexInstance2 = database.IndexStore.GetIndex("Auto/Orders/ByOrderedAt");

                    Assert.Equal(IndexDefinitionBase.IndexVersion.CurrentVersion, indexInstance1.Definition.Version);
                    Assert.Equal(IndexDefinitionBase.IndexVersion.CurrentVersion, indexInstance2.Definition.Version);
                }
        }