Example #1
0
        public async Task PeriodicBackup_should_export_all_relevant_documents()
        {
            var existingData = new List <DummyDataEntry>();
            var backupFolder = new DirectoryInfo(Path.GetTempPath() + "\\periodic_backup_" + Guid.NewGuid());

            if (!backupFolder.Exists)
            {
                backupFolder.Create();
            }

            documentStore.DatabaseCommands.GlobalAdmin.CreateDatabase(new DatabaseDocument
            {
                Id       = "SourceDB",
                Settings =
                {
                    { "Raven/ActiveBundles", "PeriodicBackup"         },
                    { "Raven/DataDir",       "~\\Databases\\SourceDB" }
                }
            });

            documentStore.DatabaseCommands.GlobalAdmin.CreateDatabase(new DatabaseDocument
            {
                Id       = "DestDB",
                Settings = { { "Raven/DataDir", "~\\Databases\\DestDB" } }
            });
            //setup periodic export
            using (var session = documentStore.OpenSession("SourceDB"))
            {
                session.Store(new PeriodicExportSetup {
                    LocalFolderName = backupFolder.FullName, IntervalMilliseconds = 500
                },
                              PeriodicExportSetup.RavenDocumentKey);
                session.SaveChanges();
            }

            //now enter dummy data
            using (var session = documentStore.OpenSession())
            {
                for (int i = 0; i < 10000; i++)
                {
                    var dummyDataEntry = new DummyDataEntry {
                        Id = "Dummy/" + i, Data = "Data-" + i
                    };
                    existingData.Add(dummyDataEntry);
                    session.Store(dummyDataEntry);
                }
                session.SaveChanges();
            }

            var connection = new RavenConnectionStringOptions {
                Url = documentStore.Url, DefaultDatabase = "DestDB"
            };
            var smugglerApi = new SmugglerApi();
            await
            smugglerApi.ImportData(new SmugglerImportOptions { FromFile = backupFolder.FullName, To = connection }, new SmugglerOptions { Incremental = true });

            using (var session = documentStore.OpenSession())
            {
                var fetchedData = new List <DummyDataEntry>();
                using (var streamingQuery = session.Advanced.Stream <DummyDataEntry>("Dummy/"))
                {
                    while (streamingQuery.MoveNext())
                    {
                        fetchedData.Add(streamingQuery.Current.Document);
                    }
                }

                Assert.Equal(existingData.Count, fetchedData.Count);
                Assert.True(existingData.Select(row => row.Data).ToHashSet().SetEquals(fetchedData.Select(row => row.Data)));
            }
        }
Example #2
0
		public async Task PeriodicBackup_should_export_all_relevant_documents()
		{
			var existingData = new List<DummyDataEntry>();
			var backupFolder = new DirectoryInfo(Path.GetTempPath() + "\\periodic_backup_" + Guid.NewGuid());
			if (!backupFolder.Exists)
				backupFolder.Create();

			documentStore.DatabaseCommands.GlobalAdmin.CreateDatabase(new DatabaseDocument
			{
				Id = "SourceDB",
				Settings =
				{
					{"Raven/ActiveBundles", "PeriodicBackup"},
					{"Raven/DataDir", "~\\Databases\\SourceDB"}
				}
			});

			documentStore.DatabaseCommands.GlobalAdmin.CreateDatabase(new DatabaseDocument
			{
				Id = "DestDB",
				Settings = {{"Raven/DataDir", "~\\Databases\\DestDB"}}
			});
			//setup periodic export
			using (var session = documentStore.OpenSession("SourceDB"))
			{
				session.Store(new PeriodicExportSetup {LocalFolderName = backupFolder.FullName, IntervalMilliseconds = 500},
					PeriodicExportSetup.RavenDocumentKey);
				session.SaveChanges();
			}

			//now enter dummy data
			using (var session = documentStore.OpenSession())
			{
				for (int i = 0; i < 10000; i++)
				{
					var dummyDataEntry = new DummyDataEntry {Id = "Dummy/" + i, Data = "Data-" + i};
					existingData.Add(dummyDataEntry);
					session.Store(dummyDataEntry);
				}
				session.SaveChanges();
			}

			var connection = new RavenConnectionStringOptions {Url = documentStore.Url, DefaultDatabase = "DestDB"};
			var smugglerApi = new SmugglerApi();
			await
				smugglerApi.ImportData(new SmugglerImportOptions { FromFile = backupFolder.FullName, To = connection }, new SmugglerOptions { Incremental = true });

			using (var session = documentStore.OpenSession())
			{
				var fetchedData = new List<DummyDataEntry>();
				using (var streamingQuery = session.Advanced.Stream<DummyDataEntry>("Dummy/"))
				{
					while (streamingQuery.MoveNext())
						fetchedData.Add(streamingQuery.Current.Document);
				}

				Assert.Equal(existingData.Count, fetchedData.Count);
				Assert.True(existingData.Select(row => row.Data).ToHashSet().SetEquals(fetchedData.Select(row => row.Data)));
			}

		}
Example #3
0
		//[InlineData("munin")]
		public async Task PeriodicBackup_should_export_all_relevant_documents(string storageTypeName)
		{
			var existingData = new List<DummyDataEntry>();
			var backupFolder = new DirectoryInfo(Path.GetTempPath() + "\\periodic_backup_" + Guid.NewGuid());
			if (!backupFolder.Exists)
				backupFolder.Create();

			using (var store = NewRemoteDocumentStore(runInMemory: false, requestedStorage: storageTypeName))
			{
				store.DatabaseCommands.CreateDatabase(new DatabaseDocument
				{
					Id = "SourceDB",
					Settings =
					{
						{"Raven/ActiveBundles", "PeriodicBackup"},
						{"Raven/DataDir", "~\\Databases\\SourceDB"}
					}
				});

				store.DatabaseCommands.CreateDatabase(new DatabaseDocument
				{
					Id = "DestDB",
					Settings = {{"Raven/DataDir", "~\\Databases\\DestDB"}}
				});

			}

			using(var ravenServer = GetNewServer(runInMemory:false,requestedStorage:storageTypeName))
			using (var srcStore = NewRemoteDocumentStore(runInMemory: false, requestedStorage: storageTypeName,ravenDbServer:ravenServer, databaseName: "SourceDB"))
			{
				//setup periodic backup
				using (var session = srcStore.OpenSession("SourceDB"))
				{
					session.Store(new PeriodicBackupSetup { LocalFolderName = backupFolder.FullName, IntervalMilliseconds = 500 },
						PeriodicBackupSetup.RavenDocumentKey);

					session.SaveChanges();
				}

				//now enter dummy data
				using (var session = srcStore.OpenSession())
				{
					for (int i = 0; i < 10000; i++)
					{
						var dummyDataEntry = new DummyDataEntry {Id = "Dummy/" + i, Data = "Data-" + i};
						existingData.Add(dummyDataEntry);
						session.Store(dummyDataEntry);
					}
					session.SaveChanges();
				}
			
				Thread.Sleep(10000);
			}

			using (var destStore = NewRemoteDocumentStore(runInMemory: false, requestedStorage: storageTypeName, databaseName: "DestDB"))
			{
				var smugglerApi = new SmugglerApi(new SmugglerOptions(),
					new RavenConnectionStringOptions {Url = destStore.Url, DefaultDatabase = "DestDB"});
				await smugglerApi.ImportData(new SmugglerOptions {BackupPath = backupFolder.FullName}, true);

				using (var session = destStore.OpenSession())
				{
					var fetchedData = new List<DummyDataEntry>();
					using (var streamingQuery = session.Advanced.Stream<DummyDataEntry>("Dummy/"))
					{
						while (streamingQuery.MoveNext())
							fetchedData.Add(streamingQuery.Current.Document);
					}

					Assert.Equal(existingData.Count, fetchedData.Count);
					Assert.True(existingData.Select(row => row.Data).ToHashSet().SetEquals(fetchedData.Select(row => row.Data)));
				}
			}
		}
Example #4
0
        public async Task PeriodicBackup_should_export_all_relevant_documents()
        {
            var existingData = new List <DummyDataEntry>();
            var backupFolder = new DirectoryInfo(Path.GetTempPath() + "\\periodic_backup_" + Guid.NewGuid());

            if (backupFolder.Exists == false)
            {
                backupFolder.Create();
            }

            try
            {
                documentStore.DatabaseCommands.GlobalAdmin.CreateDatabase(new DatabaseDocument
                {
                    Id       = "SourceDB",
                    Settings =
                    {
                        { "Raven/ActiveBundles", "PeriodicBackup"         },
                        { "Raven/DataDir",       "~\\Databases\\SourceDB" }
                    }
                });

                documentStore.DatabaseCommands.GlobalAdmin.CreateDatabase(new DatabaseDocument
                {
                    Id       = "TestDB",
                    Settings = { { "Raven/DataDir", "~\\Databases\\TestDB" } }
                });

                //now enter dummy data
                using (var session = documentStore.OpenSession("SourceDB"))
                {
                    for (int i = 0; i < 10000; i++)
                    {
                        var dummyDataEntry = new DummyDataEntry {
                            Id = "Dummy/" + i, Data = "Data-" + i
                        };
                        existingData.Add(dummyDataEntry);
                        session.Store(dummyDataEntry);
                    }
                    session.SaveChanges();
                }

                var etag = documentStore.DatabaseCommands.ForDatabase("SourceDB").Get("Dummy/9999").Etag;
                //setup periodic export
                using (var session = documentStore.OpenSession("SourceDB"))
                {
                    session.Store(new PeriodicExportSetup {
                        LocalFolderName = backupFolder.FullName, IntervalMilliseconds = 500
                    },
                                  PeriodicExportSetup.RavenDocumentKey);
                    session.SaveChanges();
                }

                var timeout = Debugger.IsAttached ? TimeSpan.FromMinutes(5) : TimeSpan.FromSeconds(5);
                SpinWait.SpinUntil(() =>
                {
                    var doc = documentStore.DatabaseCommands.ForDatabase("SourceDB").Get(PeriodicExportStatus.RavenDocumentKey);
                    return(doc != null && doc.Etag == etag);
                }, timeout);

                var connection = new RavenConnectionStringOptions {
                    Url = documentStore.Url, DefaultDatabase = "TestDB"
                };
                var smugglerApi = new SmugglerDatabaseApi {
                    Options = { Incremental = false }
                };

                var actualBackupPath   = Directory.GetDirectories(backupFolder.FullName)[0];
                var fullBackupFilePath = Directory.GetFiles(actualBackupPath).FirstOrDefault(x => x.Contains("full"));
                Assert.NotNull(fullBackupFilePath);

                await smugglerApi.ImportData(new SmugglerImportOptions <RavenConnectionStringOptions> {
                    FromFile = fullBackupFilePath, To = connection
                });

                using (var session = documentStore.OpenSession("TestDB"))
                {
                    var fetchedData = new List <DummyDataEntry>();
                    using (var streamingQuery = session.Advanced.Stream <DummyDataEntry>("Dummy/"))
                    {
                        while (streamingQuery.MoveNext())
                        {
                            fetchedData.Add(streamingQuery.Current.Document);
                        }
                    }

                    Assert.Equal(existingData.Count, fetchedData.Count);
                    Assert.True(existingData.Select(row => row.Data).ToHashSet().SetEquals(fetchedData.Select(row => row.Data)));
                }
            }
            finally
            {
                IOExtensions.DeleteDirectory(backupFolder.FullName);
            }
        }
Example #5
0
        //[InlineData("munin")]
        public async Task PeriodicBackup_should_export_all_relevant_documents(string storageTypeName)
        {
            var existingData = new List <DummyDataEntry>();
            var backupFolder = new DirectoryInfo(Path.GetTempPath() + "\\periodic_backup_" + Guid.NewGuid());

            if (!backupFolder.Exists)
            {
                backupFolder.Create();
            }

            using (var store = NewRemoteDocumentStore(runInMemory: false, requestedStorage: storageTypeName))
            {
                store.DatabaseCommands.CreateDatabase(new DatabaseDocument
                {
                    Id       = "SourceDB",
                    Settings =
                    {
                        { "Raven/ActiveBundles", "PeriodicBackup"         },
                        { "Raven/DataDir",       "~\\Databases\\SourceDB" }
                    }
                });

                store.DatabaseCommands.CreateDatabase(new DatabaseDocument
                {
                    Id       = "DestDB",
                    Settings = { { "Raven/DataDir", "~\\Databases\\DestDB" } }
                });
            }

            using (var ravenServer = GetNewServer(runInMemory: false, requestedStorage: storageTypeName))
                using (var srcStore = NewRemoteDocumentStore(runInMemory: false, requestedStorage: storageTypeName, ravenDbServer: ravenServer, databaseName: "SourceDB"))
                {
                    //setup periodic backup
                    using (var session = srcStore.OpenSession("SourceDB"))
                    {
                        session.Store(new PeriodicBackupSetup {
                            LocalFolderName = backupFolder.FullName, IntervalMilliseconds = 500
                        },
                                      PeriodicBackupSetup.RavenDocumentKey);

                        session.SaveChanges();
                    }

                    //now enter dummy data
                    using (var session = srcStore.OpenSession())
                    {
                        for (int i = 0; i < 10000; i++)
                        {
                            var dummyDataEntry = new DummyDataEntry {
                                Id = "Dummy/" + i, Data = "Data-" + i
                            };
                            existingData.Add(dummyDataEntry);
                            session.Store(dummyDataEntry);
                        }
                        session.SaveChanges();
                    }

                    Thread.Sleep(10000);
                }

            using (var destStore = NewRemoteDocumentStore(runInMemory: false, requestedStorage: storageTypeName, databaseName: "DestDB"))
            {
                var smugglerApi = new SmugglerApi(new SmugglerOptions(),
                                                  new RavenConnectionStringOptions {
                    Url = destStore.Url, DefaultDatabase = "DestDB"
                });
                await smugglerApi.ImportData(new SmugglerOptions { BackupPath = backupFolder.FullName }, true);

                using (var session = destStore.OpenSession())
                {
                    var fetchedData = new List <DummyDataEntry>();
                    using (var streamingQuery = session.Advanced.Stream <DummyDataEntry>("Dummy/"))
                    {
                        while (streamingQuery.MoveNext())
                        {
                            fetchedData.Add(streamingQuery.Current.Document);
                        }
                    }

                    Assert.Equal(existingData.Count, fetchedData.Count);
                    Assert.True(existingData.Select(row => row.Data).ToHashSet().SetEquals(fetchedData.Select(row => row.Data)));
                }
            }
        }