/// <summary> /// Creates the indexes found in the specified catalog in side-by-side mode. /// </summary> public static async Task SideBySideCreateIndexesAsync(ExportProvider catalogToGetnIndexingTasksFrom, IAsyncDatabaseCommands databaseCommands, DocumentConvention conventions, Etag minimumEtagBeforeReplace = null, DateTime?replaceTimeUtc = null) { var indexCompilationExceptions = new List <IndexCompilationException>(); var failed = false; try { var tasks = catalogToGetnIndexingTasksFrom .GetExportedValues <AbstractIndexCreationTask>() .ToList(); var indexesToAdd = CreateIndexesToAdd(tasks, conventions); await databaseCommands.PutSideBySideIndexesAsync(indexesToAdd, minimumEtagBeforeReplace, replaceTimeUtc).ConfigureAwait(false); foreach (var task in tasks) { await task.AfterExecuteAsync(databaseCommands, conventions).ConfigureAwait(false); } } // For old servers that don't have the new endpoint for executing multiple indexes catch (Exception) { failed = true; } if (failed) { foreach (var task in catalogToGetnIndexingTasksFrom.GetExportedValues <AbstractIndexCreationTask>()) { try { await task.SideBySideExecuteAsync(databaseCommands, conventions, minimumEtagBeforeReplace, replaceTimeUtc).ConfigureAwait(false); } catch (IndexCompilationException e) { indexCompilationExceptions.Add(new IndexCompilationException("Failed to compile side by side index name = " + task.IndexName, e)); } } } await CreateTransformersAsync(catalogToGetnIndexingTasksFrom, databaseCommands, conventions).ConfigureAwait(false); if (indexCompilationExceptions.Any()) { throw new AggregateException("Failed to create one or more side by side indexes. Please see inner exceptions for more details.", indexCompilationExceptions); } }
/// <summary> /// Creates the indexes found in the specified assembly in side-by-side mode. /// </summary> public static async Task SideBySideCreateIndexesAsync(Assembly assemblyToScan, IAsyncDatabaseCommands databaseCommands, DocumentConvention conventions, Etag minimumEtagBeforeReplace = null, DateTime?replaceTimeUtc = null) { var indexCompilationExceptions = new List <IndexCompilationException>(); try { var tasks = GetAllInstancesOfType <AbstractIndexCreationTask>(assemblyToScan) .ToList(); var indexesToAdd = CreateIndexesToAdd(tasks, conventions); await databaseCommands.PutSideBySideIndexesAsync(indexesToAdd, minimumEtagBeforeReplace, replaceTimeUtc).ConfigureAwait(false); foreach (var task in tasks) { await task.AfterExecuteAsync(databaseCommands, conventions).ConfigureAwait(false); } } // For old servers that don't have the new endpoint for executing multiple indexes catch (Exception) { foreach (var task in GetAllInstancesOfType <AbstractIndexCreationTask>(assemblyToScan)) { try { await task.SideBySideExecuteAsync(databaseCommands, conventions, minimumEtagBeforeReplace, replaceTimeUtc).ConfigureAwait(false); } catch (IndexCompilationException e) { indexCompilationExceptions.Add(new IndexCompilationException("Failed to compile side by side index name = " + task.IndexName, e)); } } } await CreateTransformersAsync(assemblyToScan, databaseCommands, conventions).ConfigureAwait(false); if (indexCompilationExceptions.Any()) { throw new AggregateException("Failed to create one or more side by side indexes. Please see inner exceptions for more details.", indexCompilationExceptions); } }
/// <summary> /// Creates the indexes found in the specified catalog in side-by-side mode. /// </summary> public static async Task SideBySideCreateIndexesAsync(ExportProvider catalogToGetnIndexingTasksFrom, IAsyncDatabaseCommands databaseCommands, DocumentConvention conventions, Etag minimumEtagBeforeReplace = null, DateTime? replaceTimeUtc = null) { var indexCompilationExceptions = new List<IndexCompilationException>(); var failed = false; try { var tasks = catalogToGetnIndexingTasksFrom .GetExportedValues<AbstractIndexCreationTask>() .ToList(); var indexesToAdd = CreateIndexesToAdd(tasks, conventions); await databaseCommands.PutSideBySideIndexesAsync(indexesToAdd, minimumEtagBeforeReplace, replaceTimeUtc).ConfigureAwait(false); foreach (var task in tasks) await task.AfterExecuteAsync(databaseCommands, conventions).ConfigureAwait(false); } // For old servers that don't have the new endpoint for executing multiple indexes catch (Exception) { failed = true; } if (failed) { foreach (var task in catalogToGetnIndexingTasksFrom.GetExportedValues<AbstractIndexCreationTask>()) { try { await task.SideBySideExecuteAsync(databaseCommands, conventions, minimumEtagBeforeReplace, replaceTimeUtc).ConfigureAwait(false); } catch (IndexCompilationException e) { indexCompilationExceptions.Add(new IndexCompilationException("Failed to compile side by side index name = " + task.IndexName, e)); } } } await CreateTransformersAsync(catalogToGetnIndexingTasksFrom, databaseCommands, conventions).ConfigureAwait(false); if (indexCompilationExceptions.Any()) throw new AggregateException("Failed to create one or more side by side indexes. Please see inner exceptions for more details.", indexCompilationExceptions); }