Пример #1
0
        /// <summary>
        /// Restore CompareExchange, Identities and Subscriptions from smuggler file when restoring snapshot.
        /// </summary>
        /// <param name="onProgress"></param>
        /// <param name="database"></param>
        /// <param name="smugglerFile"></param>
        /// <param name="context"></param>
        protected async Task RestoreFromSmugglerFile(Action <IOperationProgress> onProgress, DocumentDatabase database, string smugglerFile, DocumentsOperationContext context)
        {
            var destination = new DatabaseDestination(database);

            var smugglerOptions = new DatabaseSmugglerOptionsServerSide
            {
                AuthorizationStatus  = AuthorizationStatus.DatabaseAdmin,
                OperateOnTypes       = DatabaseItemType.CompareExchange | DatabaseItemType.Identities | DatabaseItemType.Subscriptions,
                SkipRevisionCreation = true
            };

            var lastPath = GetSmugglerBackupPath(smugglerFile);

            using (var zip = await GetZipArchiveForSnapshot(lastPath))
            {
                foreach (var entry in zip.Entries)
                {
                    if (entry.Name == RestoreSettings.SmugglerValuesFileName)
                    {
                        using (var input = entry.Open())
                            using (var inputStream = GetSnapshotInputStream(input, database.Name))
                                using (var uncompressed = new GZipStream(inputStream, CompressionMode.Decompress))
                                {
                                    var source   = new StreamSource(uncompressed, context, database);
                                    var smuggler = new Smuggler.Documents.DatabaseSmuggler(database, source, destination,
                                                                                           database.Time, smugglerOptions, onProgress: onProgress, token: _operationCancelToken.Token);

                                    smuggler.Execute(ensureStepsProcessed: true, isLastFile: true);
                                }
                        break;
                    }
                }
            }
        }
Пример #2
0
 private async Task ImportSingleBackupFile(DocumentDatabase database,
                                           Action <IOperationProgress> onProgress, RestoreResult restoreResult,
                                           string filePath, DocumentsOperationContext context,
                                           DatabaseDestination destination, DatabaseSmugglerOptionsServerSide options, bool isLastFile,
                                           Action <IndexDefinitionAndType> onIndexAction  = null,
                                           Action <DatabaseRecord> onDatabaseRecordAction = null)
 {
     using (var fileStream = await GetStream(filePath))
         using (var inputStream = GetInputStream(fileStream, database.MasterKey))
             using (var gzipStream = new GZipStream(inputStream, CompressionMode.Decompress))
                 using (var source = new StreamSource(gzipStream, context, database))
                 {
                     var smuggler = new Smuggler.Documents.DatabaseSmuggler(database, source, destination,
                                                                            database.Time, options, result: restoreResult, onProgress: onProgress, token: _operationCancelToken.Token)
                     {
                         OnIndexAction          = onIndexAction,
                         OnDatabaseRecordAction = onDatabaseRecordAction
                     };
                     smuggler.Execute(ensureStepsProcessed: false, isLastFile);
                 }
 }