private async Task MigrateDatabase(long operationId, ImportInfo importInfo) { var startDocumentEtag = importInfo?.LastEtag ?? 0; var url = $"{ServerUrl}/databases/{DatabaseName}/smuggler/export?operationId={operationId}&startEtag={startDocumentEtag}"; var json = JsonConvert.SerializeObject(new DatabaseSmugglerOptionsServerSide()); var content = new StringContent(json, Encoding.UTF8, "application/json"); var request = new HttpRequestMessage(HttpMethod.Post, url) { Content = content }; var response = await _client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, CancelToken.Token); if (response.IsSuccessStatusCode == false) { var responseString = await response.Content.ReadAsStringAsync(); throw new InvalidOperationException($"Failed to export database from server: {ServerUrl}, " + $"status code: {response.StatusCode}, " + $"error: {responseString}"); } using (var responseStream = await response.Content.ReadAsStreamAsync()) using (var stream = new GZipStream(responseStream, mode: CompressionMode.Decompress)) using (Database.DocumentsStorage.ContextPool.AllocateOperationContext(out DocumentsOperationContext context)) using (var source = new StreamSource(stream, context)) { var destination = new DatabaseDestination(Database); var options = new DatabaseSmugglerOptionsServerSide(); var smuggler = new Documents.DatabaseSmuggler(Database, source, destination, Database.Time, options, Result, OnProgress, CancelToken.Token); smuggler.Execute(); } }
private async Task MigrateDatabase(long operationId, ImportInfo importInfo) { var startDocumentEtag = importInfo?.LastEtag ?? 0; var url = $"{Options.ServerUrl}/databases/{Options.DatabaseName}/smuggler/export?operationId={operationId}&startEtag={startDocumentEtag}"; var databaseSmugglerOptionsServerSide = new DatabaseSmugglerOptionsServerSide { OperateOnTypes = Options.OperateOnTypes, RemoveAnalyzers = Options.RemoveAnalyzers }; if (importInfo != null) { databaseSmugglerOptionsServerSide.OperateOnTypes |= DatabaseItemType.Tombstones; databaseSmugglerOptionsServerSide.OperateOnTypes |= DatabaseItemType.CompareExchangeTombstones; } var json = JsonConvert.SerializeObject(databaseSmugglerOptionsServerSide); var content = new StringContent(json, Encoding.UTF8, "application/json"); var request = new HttpRequestMessage(HttpMethod.Post, url) { Content = content }; var response = await Parameters.HttpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, Parameters.CancelToken.Token); if (response.IsSuccessStatusCode == false) { var responseString = await response.Content.ReadAsStringAsync(); throw new InvalidOperationException($"Failed to export database from server: {Options.ServerUrl}, " + $"status code: {response.StatusCode}, " + $"error: {responseString}"); } using (var responseStream = await response.Content.ReadAsStreamAsync()) using (var stream = new GZipStream(responseStream, mode: CompressionMode.Decompress)) using (Parameters.Database.DocumentsStorage.ContextPool.AllocateOperationContext(out DocumentsOperationContext context)) using (var source = new StreamSource(stream, context, Parameters.Database)) { var destination = new DatabaseDestination(Parameters.Database); var options = new DatabaseSmugglerOptionsServerSide { TransformScript = Options.TransformScript, OperateOnTypes = Options.OperateOnTypes, OperateOnDatabaseRecordTypes = Options.OperateOnDatabaseRecordTypes }; var smuggler = new Documents.DatabaseSmuggler(Parameters.Database, source, destination, Parameters.Database.Time, options, Parameters.Result, Parameters.OnProgress, Parameters.CancelToken.Token); smuggler.Execute(); } }