コード例 #1
0
        /// <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));
        }
コード例 #2
0
        /// <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));
        }
コード例 #3
0
        /// <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));
        }
コード例 #4
0
        /// <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));
        }
コード例 #5
0
        /// <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));
        }
コード例 #6
0
        /// <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));
        }