private void SetUpExecutor(int attempts) { cassandraClusterSettings = GetMock <ICassandraClusterSettings>(); cassandraClusterSettings.Expect(x => x.EnableMetrics).Return(false).Repeat.Any(); cassandraClusterSettings.Expect(settings => settings.Attempts).Return(attempts).Repeat.Any(); executor = new SimpleCommandExecutor(dataConnectionPool, cassandraClusterSettings, new SilentLog()); }
/// <summary> /// Adds missing data (by downloading and infering) to an <see cref="Implementation"/>. /// </summary> /// <param name="implementation">The <see cref="Implementation"/> to add data to.</param> /// <param name="handler">A callback object used when the the user is to be informed about progress.</param> /// <param name="executor">Used to apply properties in an undoable fashion.</param> /// <param name="keepDownloads"><see langword="true"/> to store the directory as an implementation in the default <see cref="IStore"/>.</param> /// <exception cref="OperationCanceledException">The user canceled the operation.</exception> /// <exception cref="WebException">A file could not be downloaded from the internet.</exception> /// <exception cref="IOException">There is a problem access a temporary file.</exception> /// <exception cref="UnauthorizedAccessException">Read or write access to a temporary file is not permitted.</exception> /// <exception cref="DigestMismatchException">An existing digest does not match the newly calculated one.</exception> public static void AddMissing([NotNull] this Implementation implementation, [NotNull] ITaskHandler handler, [CanBeNull] ICommandExecutor executor = null, bool keepDownloads = false) { #region Sanity checks if (implementation == null) { throw new ArgumentNullException("implementation"); } if (handler == null) { throw new ArgumentNullException("handler"); } #endregion if (executor == null) { executor = new SimpleCommandExecutor(); } ConvertSha256ToSha256New(implementation, executor); foreach (var retrievalMethod in implementation.RetrievalMethods) { if (implementation.IsManifestDigestMissing() || retrievalMethod.IsDownloadSizeMissing()) { using (var tempDir = retrievalMethod.DownloadAndApply(handler, executor)) implementation.UpdateDigest(tempDir, handler, executor, keepDownloads); } } if (string.IsNullOrEmpty(implementation.ID)) { implementation.ID = @"sha1new=" + implementation.ManifestDigest.Sha1New; } }
private void SetUpExecutor(int attempts) { cassandraClusterSettings = GetMock <ICassandraClusterSettings>(); cassandraClusterSettings.SetupGet(x => x.EnableMetrics).Returns(false); cassandraClusterSettings.SetupGet(settings => settings.Attempts).Returns(attempts); executor = new SimpleCommandExecutor(dataConnectionPool.Object, cassandraClusterSettings.Object, new SilentLog()); }
/// <summary> /// Adds missing data (by downloading and inferring) to an <see cref="Implementation"/>. /// </summary> /// <param name="implementation">The <see cref="Implementation"/> to add data to.</param> /// <param name="handler">A callback object used when the the user is to be informed about progress.</param> /// <param name="executor">Used to apply properties in an undoable fashion.</param> /// <param name="keepDownloads">Used to retain downloaded implementations; can be <c>null</c>.</param> /// <exception cref="OperationCanceledException">The user canceled the task.</exception> /// <exception cref="UriFormatException"><see cref="DownloadRetrievalMethod.Href"/> inside <paramref name="implementation"/> is a relative URI that cannot be resolved.</exception> /// <exception cref="WebException">A file could not be downloaded from the internet.</exception> /// <exception cref="IOException">There is a problem access a temporary file.</exception> /// <exception cref="UnauthorizedAccessException">Read or write access to a temporary file is not permitted.</exception> /// <exception cref="DigestMismatchException">An existing digest does not match the newly calculated one.</exception> public static void AddMissing(this Implementation implementation, ITaskHandler handler, ICommandExecutor?executor = null, IImplementationStore?keepDownloads = null) { #region Sanity checks if (implementation == null) { throw new ArgumentNullException(nameof(implementation)); } if (handler == null) { throw new ArgumentNullException(nameof(handler)); } #endregion if (executor == null) { executor = new SimpleCommandExecutor(); } ConvertSha256ToSha256New(implementation, executor); GenerateMissingArchive(implementation, handler, executor); foreach (var retrievalMethod in implementation.RetrievalMethods) { if (implementation.IsManifestDigestMissing() || retrievalMethod.IsDownloadSizeMissing()) { using var tempDir = retrievalMethod.DownloadAndApply(handler, executor); implementation.UpdateDigest(tempDir, handler, executor, keepDownloads); } } }
public static TemporaryFile Download([NotNull] this DownloadRetrievalMethod retrievalMethod, [NotNull] ITaskHandler handler, [CanBeNull] ICommandExecutor executor = null) { #region Sanity checks if (retrievalMethod == null) { throw new ArgumentNullException("retrievalMethod"); } if (handler == null) { throw new ArgumentNullException("handler"); } #endregion if (executor == null) { executor = new SimpleCommandExecutor(); } if (retrievalMethod.Href == null) { throw new ArgumentException(Resources.HrefMissing, "retrievalMethod"); } new PerTypeDispatcher <DownloadRetrievalMethod>(ignoreMissing: false) { // ReSharper disable AccessToDisposedClosure (Archive archive) => { // Guess MIME types now because the file ending is not known later if (string.IsNullOrEmpty(archive.MimeType)) { string mimeType = Archive.GuessMimeType(archive.Href.OriginalString); executor.Execute(new SetValueCommand <string>(() => archive.MimeType, value => archive.MimeType = value, mimeType)); } }, (SingleFile file) => { // Guess file name based on URL if (string.IsNullOrEmpty(file.Destination)) { string destination = file.Href.OriginalString.GetRightPartAtLastOccurrence('/').StripCharacters(Path.GetInvalidFileNameChars()); executor.Execute(new SetValueCommand <string>(() => file.Destination, value => file.Destination = value, destination)); } } // ReSharper restore AccessToDisposedClosure }.Dispatch(retrievalMethod); // Download the file var href = ModelUtils.GetAbsoluteHref(retrievalMethod.Href, string.IsNullOrEmpty(executor.Path) ? null : new FeedUri(executor.Path)); var downloadedFile = new TemporaryFile("0publish"); handler.RunTask(new DownloadFile(href, downloadedFile)); // Defer task to handler // Set downloaded file size long newSize = new FileInfo(downloadedFile).Length; if (retrievalMethod.Size != newSize) { executor.Execute(new SetValueCommand <long>(() => retrievalMethod.Size, value => retrievalMethod.Size = value, newSize)); } return(downloadedFile); }
public CassandraCluster(ICassandraClusterSettings settings, ILog logger) { this.logger = logger.ForContext("CassandraThriftClient"); dataCommandsConnectionPool = CreateDataConnectionPool(settings); fierceCommandsConnectionPool = CreateFierceConnectionPool(settings); commandExecutor = new SimpleCommandExecutor(dataCommandsConnectionPool, settings, logger); fierceCommandExecutor = new FierceCommandExecutor(fierceCommandsConnectionPool, settings); clusterSettings = settings; }
public static TemporaryDirectory LocalApply([NotNull] this DownloadRetrievalMethod retrievalMethod, string localPath, [NotNull] ITaskHandler handler, [CanBeNull] ICommandExecutor executor = null) { #region Sanity checks if (retrievalMethod == null) { throw new ArgumentNullException("retrievalMethod"); } if (string.IsNullOrEmpty(localPath)) { throw new ArgumentNullException("localPath"); } if (handler == null) { throw new ArgumentNullException("handler"); } #endregion if (executor == null) { executor = new SimpleCommandExecutor(); } // Set local file size long newSize = new FileInfo(localPath).Length; if (retrievalMethod.Size != newSize) { executor.Execute(new SetValueCommand <long>(() => retrievalMethod.Size, value => retrievalMethod.Size = value, newSize)); } var extractionDir = new TemporaryDirectory("0publish"); try { new PerTypeDispatcher <DownloadRetrievalMethod>(ignoreMissing: true) { // ReSharper disable AccessToDisposedClosure (Archive archive) => { // Guess MIME types now because the file ending is not known later if (string.IsNullOrEmpty(archive.MimeType)) { string mimeType = Archive.GuessMimeType(localPath); executor.Execute(new SetValueCommand <string>(() => archive.MimeType, value => archive.MimeType = value, mimeType)); } archive.Apply(localPath, extractionDir, handler); }, (SingleFile file) => { // Guess file name based on local path if (string.IsNullOrEmpty(file.Destination)) { string destination = Path.GetFileName(localPath); executor.Execute(new SetValueCommand <string>(() => file.Destination, value => file.Destination = value, destination)); } file.Apply(localPath, extractionDir, handler); } // ReSharper restore AccessToDisposedClosure }.Dispatch(retrievalMethod); } #region Error handling catch { extractionDir.Dispose(); throw; } #endregion return(extractionDir); }