/// <inheritdoc /> public Task <UploadSession> GetImageStoreUploadSessionByIdAsync( Guid?sessionId, long?serverTimeout = 60, CancellationToken cancellationToken = default(CancellationToken)) { sessionId.ThrowIfNull(nameof(sessionId)); serverTimeout?.ThrowIfOutOfInclusiveRange("serverTimeout", 1, 4294967295); var requestId = Guid.NewGuid().ToString(); var url = "ImageStore/$/GetUploadSession"; var queryParams = new List <string>(); // Append to queryParams if not null. sessionId?.AddToQueryParameters(queryParams, $"session-id={sessionId.ToString()}"); serverTimeout?.AddToQueryParameters(queryParams, $"timeout={serverTimeout}"); queryParams.Add("api-version=6.0"); url += "?" + string.Join("&", queryParams); HttpRequestMessage RequestFunc() { var request = new HttpRequestMessage() { Method = HttpMethod.Get, }; return(request); } return(this.httpClient.SendAsyncGetResponse(RequestFunc, url, UploadSessionConverter.Deserialize, requestId, cancellationToken)); }
/// <inheritdoc /> public Task CancelOperationAsync( Guid?operationId, bool?force, long?serverTimeout = 60, CancellationToken cancellationToken = default(CancellationToken)) { operationId.ThrowIfNull(nameof(operationId)); force.ThrowIfNull(nameof(force)); serverTimeout?.ThrowIfOutOfInclusiveRange("serverTimeout", 1, 4294967295); var requestId = Guid.NewGuid().ToString(); var url = "Faults/$/Cancel"; var queryParams = new List <string>(); // Append to queryParams if not null. operationId?.AddToQueryParameters(queryParams, $"OperationId={operationId.ToString()}"); force?.AddToQueryParameters(queryParams, $"Force={force}"); serverTimeout?.AddToQueryParameters(queryParams, $"timeout={serverTimeout}"); queryParams.Add("api-version=6.0"); url += "?" + string.Join("&", queryParams); HttpRequestMessage RequestFunc() { var request = new HttpRequestMessage() { Method = HttpMethod.Post, }; return(request); } return(this.httpClient.SendAsync(RequestFunc, url, requestId, cancellationToken)); }
/// <inheritdoc /> public Task <NodeTransitionProgress> GetNodeTransitionProgressAsync( NodeName nodeName, Guid?operationId, long?serverTimeout = 60, CancellationToken cancellationToken = default(CancellationToken)) { nodeName.ThrowIfNull(nameof(nodeName)); operationId.ThrowIfNull(nameof(operationId)); serverTimeout?.ThrowIfOutOfInclusiveRange("serverTimeout", 1, 4294967295); var requestId = Guid.NewGuid().ToString(); var url = "Faults/Nodes/{nodeName}/$/GetTransitionProgress"; url = url.Replace("{nodeName}", Uri.EscapeDataString(nodeName.ToString())); var queryParams = new List <string>(); // Append to queryParams if not null. operationId?.AddToQueryParameters(queryParams, $"OperationId={operationId.ToString()}"); serverTimeout?.AddToQueryParameters(queryParams, $"timeout={serverTimeout}"); queryParams.Add("api-version=6.0"); url += "?" + string.Join("&", queryParams); HttpRequestMessage RequestFunc() { var request = new HttpRequestMessage() { Method = HttpMethod.Get, }; return(request); } return(this.httpClient.SendAsyncGetResponse(RequestFunc, url, NodeTransitionProgressConverter.Deserialize, requestId, cancellationToken)); }
/// <summary> /// Uploads a file chunk to the image store relative path. Used by IApplicationClient.UploadApplicationPackageAsync to trace a request Id associated with original Uplaod call. /// </summary> /// <param name="fileChunkToUpload">Byte array containing file chunk to upload.</param> /// <param name ="pathInImageStore">Relative path to file or folder in the image store from its root.</param> /// <param name ="sessionId">A GUID generated by the user for a file uploading. It identifies an image store upload /// session which keeps track of all file chunks until it is committed.</param> /// <param name ="startBytePosition">The start position of the chunk in byte array represnting file contents.</param> /// <param name ="endBytePosition">The end position of the chunk in byte array representing file contents.</param> /// <param name="length">The size, in bytes, of the file for which chunk is to be uploaded.</param> /// <param name="requestId">Request Id to use for tracing.</param> /// <param name ="serverTimeout">The server timeout for performing the operation in seconds. This specifies the time /// duration that the client is willing to wait for the requested operation to complete. The default value for this /// parameter is 60 seconds.</param> /// <param name ="cancellationToken">Cancels the client-side operation.</param> /// <returns> /// A task that represents the asynchronous operation. /// </returns> /// <remarks> /// When uploading file chunks to the image store, the Content Range information is sent to server. /// Example: if the total file length is 20,000 bytes, and chunk being uploaded is for first 5,000 bytes, /// value of <paramref name="startBytePosition"/> would be 0, value of <paramref name="endBytePosition"/> would be 4999 and value of /// <paramref name="length"/> would be 5000. /// </remarks> internal Task UploadFileChunkAsync( byte[] fileChunkToUpload, string pathInImageStore, Guid?sessionId, long startBytePosition, long endBytePosition, long length, string requestId = null, long?serverTimeout = 60, CancellationToken cancellationToken = default(CancellationToken)) { fileChunkToUpload.ThrowIfNull(nameof(fileChunkToUpload)); pathInImageStore.ThrowIfNull(nameof(pathInImageStore)); sessionId.ThrowIfNull(nameof(sessionId)); startBytePosition.ThrowIfNull(nameof(startBytePosition)); endBytePosition.ThrowIfNull(nameof(endBytePosition)); length.ThrowIfNull(nameof(length)); serverTimeout?.ThrowIfOutOfInclusiveRange("serverTimeout", 1, 4294967295); requestId = requestId ?? Guid.NewGuid().ToString(); var url = "ImageStore/{pathInImageStore}/$/UploadChunk"; url = url.Replace("{pathInImageStore}", Uri.EscapeDataString(pathInImageStore.ToString())); var queryParams = new List <string>(); // Append to queryParams if not null. sessionId?.AddToQueryParameters(queryParams, $"session-id={sessionId}"); serverTimeout?.AddToQueryParameters(queryParams, $"timeout={serverTimeout}"); queryParams.Add("api-version=6.0"); url += "?" + string.Join("&", queryParams); HttpRequestMessage RequestFunc() { var request = new HttpRequestMessage() { Method = HttpMethod.Put, Content = new ByteArrayContent(fileChunkToUpload), }; request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/octet-stream"); request.Content.Headers.ContentRange = new ContentRangeHeaderValue(startBytePosition, endBytePosition, length); return(request); } return(this.httpClient.SendAsync(RequestFunc, url, requestId, cancellationToken)); }
/// <inheritdoc /> public Task StartNodeTransitionAsync( NodeName nodeName, Guid?operationId, NodeTransitionType?nodeTransitionType, string nodeInstanceId, int?stopDurationInSeconds, long?serverTimeout = 60, CancellationToken cancellationToken = default(CancellationToken)) { nodeName.ThrowIfNull(nameof(nodeName)); operationId.ThrowIfNull(nameof(operationId)); nodeTransitionType.ThrowIfNull(nameof(nodeTransitionType)); nodeInstanceId.ThrowIfNull(nameof(nodeInstanceId)); stopDurationInSeconds.ThrowIfNull(nameof(stopDurationInSeconds)); serverTimeout?.ThrowIfOutOfInclusiveRange("serverTimeout", 1, 4294967295); var requestId = Guid.NewGuid().ToString(); var url = "Faults/Nodes/{nodeName}/$/StartTransition/"; url = url.Replace("{nodeName}", Uri.EscapeDataString(nodeName.ToString())); var queryParams = new List <string>(); // Append to queryParams if not null. operationId?.AddToQueryParameters(queryParams, $"OperationId={operationId.ToString()}"); nodeTransitionType?.AddToQueryParameters(queryParams, $"NodeTransitionType={nodeTransitionType.ToString()}"); nodeInstanceId?.AddToQueryParameters(queryParams, $"NodeInstanceId={nodeInstanceId}"); stopDurationInSeconds?.AddToQueryParameters(queryParams, $"StopDurationInSeconds={stopDurationInSeconds}"); serverTimeout?.AddToQueryParameters(queryParams, $"timeout={serverTimeout}"); queryParams.Add("api-version=6.0"); url += "?" + string.Join("&", queryParams); HttpRequestMessage RequestFunc() { var request = new HttpRequestMessage() { Method = HttpMethod.Post, }; return(request); } return(this.httpClient.SendAsync(RequestFunc, url, requestId, cancellationToken)); }
/// <inheritdoc /> public Task StartQuorumLossAsync( string serviceId, PartitionId partitionId, Guid?operationId, QuorumLossMode?quorumLossMode, int?quorumLossDuration, long?serverTimeout = 60, CancellationToken cancellationToken = default(CancellationToken)) { serviceId.ThrowIfNull(nameof(serviceId)); partitionId.ThrowIfNull(nameof(partitionId)); operationId.ThrowIfNull(nameof(operationId)); quorumLossMode.ThrowIfNull(nameof(quorumLossMode)); quorumLossDuration.ThrowIfNull(nameof(quorumLossDuration)); serverTimeout?.ThrowIfOutOfInclusiveRange("serverTimeout", 1, 4294967295); var requestId = Guid.NewGuid().ToString(); var url = "Faults/Services/{serviceId}/$/GetPartitions/{partitionId}/$/StartQuorumLoss"; url = url.Replace("{serviceId}", serviceId); url = url.Replace("{partitionId}", partitionId.ToString()); var queryParams = new List <string>(); // Append to queryParams if not null. operationId?.AddToQueryParameters(queryParams, $"OperationId={operationId.ToString()}"); quorumLossMode?.AddToQueryParameters(queryParams, $"QuorumLossMode={quorumLossMode.ToString()}"); quorumLossDuration?.AddToQueryParameters(queryParams, $"QuorumLossDuration={quorumLossDuration}"); serverTimeout?.AddToQueryParameters(queryParams, $"timeout={serverTimeout}"); queryParams.Add("api-version=6.0"); url += "?" + string.Join("&", queryParams); HttpRequestMessage RequestFunc() { var request = new HttpRequestMessage() { Method = HttpMethod.Post, }; return(request); } return(this.httpClient.SendAsync(RequestFunc, url, requestId, cancellationToken)); }