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); } }
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); } }
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); } }