示例#1
0
        private async Task <IGetReplicaResult> GetReplica(string id, short index, IRequestSpan span,
                                                          CancellationToken cancellationToken, ITranscoderOverrideOptions options)
        {
            using var childSpan = _tracer.RequestSpan(OuterRequestSpans.ServiceSpan.Kv.ReplicaRead, span);
            using var getOp     = new ReplicaRead <object>(id, index)
                  {
                      Key   = id,
                      Cid   = Cid,
                      CName = Name,
                      SName = ScopeName,
                      Span  = childSpan
                  };
            _operationConfigurator.Configure(getOp, options);

            using var cts =
                      CreateRetryTimeoutCancellationTokenSource((ITimeoutOptions)options, getOp, out var tokenPair);
            await _bucket.RetryAsync(getOp, tokenPair).ConfigureAwait(false);

            return(new GetReplicaResult(getOp.ExtractBody(), getOp.Transcoder, _getLogger)
            {
                Id = getOp.Key,
                Cas = getOp.Cas,
                OpCode = getOp.OpCode,
                Flags = getOp.Flags,
                Header = getOp.Header,
                IsActive = false
            });
        }
 public void AddTags(IRequestSpan span)
 {
     span.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.LocalHostname, ((IPEndPoint)LocalEndPoint).Address.ToString());
     span.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.LocalPort, ((IPEndPoint)LocalEndPoint).Port.ToString());
     span.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.RemoteHostname, ((IPEndPoint)EndPoint).Address.ToString());
     span.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.RemotePort, ((IPEndPoint)EndPoint).Port.ToString());
     span.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.LocalId, ConnectionId.ToString());
 }
示例#3
0
 public static void AddTags(this IConnection connection, IRequestSpan span)
 {
     span.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.LocalHostname, connection.LocalEndPoint.ToString());
     span.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.LocalPort, ((IPEndPoint)connection.LocalEndPoint).Port.ToString());
     span.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.RemoteHostname, connection.EndPoint.ToString());
     span.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.RemotePort, ((IPEndPoint)connection.EndPoint).Port.ToString());
     span.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.LocalId, connection.ConnectionId.ToString());
 }
        public IInternalSpan InternalSpan(string operationName, IRequestSpan parent)
        {
            var parentInternalSpan = parent as OpenTelemetryInternalSpan;
            var span = parentInternalSpan == null
                ? _tracer.StartRootSpan(operationName, SpanKind.Client)
                : _tracer.StartSpan(operationName, parentInternalSpan.Span, SpanKind.Client);

            return(new OpenTelemetryInternalSpan(_tracer, span));
        }
        internal static IRequestSpan WithOperationId(this IRequestSpan span, AnalyticsOptions request)
        {
            if (span.CanWrite)
            {
                span.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.OperationId, request.ClientContextIdValue ?? Guid.NewGuid().ToString());
            }

            return(span);
        }
        internal static IRequestSpan WithStatement(this IRequestSpan span, string statement)
        {
            if (span.CanWrite)
            {
                span.SetAttribute(OuterRequestSpans.Attributes.Statement, statement);
            }

            return(span);
        }
        internal static IRequestSpan WithLocalAddress(this IRequestSpan span)
        {
            if (span.CanWrite)
            {
                span.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.LocalHostname, _dnsHostName ??= Dns.GetHostName());
            }

            return(span);
        }
        internal static IRequestSpan WithOperation(this IRequestSpan span, string operation)
        {
            if (span.CanWrite)
            {
                span.SetAttribute(OuterRequestSpans.Attributes.Operation, operation);
            }

            return(span);
        }
        internal static IRequestSpan WithOperationId(this IRequestSpan span, IOperation operation)
        {
            if (span.CanWrite)
            {
                span.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.OperationId, operation.Opaque);
            }

            return(span);
        }
        internal static IRequestSpan WithOperationId(this IRequestSpan span, QueryOptions options)
        {
            if (span.CanWrite)
            {
                span.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.OperationId, options.CurrentContextId ?? Guid.NewGuid().ToString());
            }

            return(span);
        }
        internal static IRequestSpan WithRemoteAddress(this IRequestSpan span, Uri remoteUri)
        {
            if (span.CanWrite)
            {
                span.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.RemoteHostname, remoteUri.Host);
                span.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.RemotePort, $"{remoteUri.Port}");
            }

            return(span);
        }
 private static void AddCompressionTags(IRequestSpan span, double ratio, bool used)
 {
     if (span.CanWrite)
     {
         span.SetAttribute(InnerRequestSpans.CompressionSpan.Attributes.CompressionRatio,
                           ratio.ToString("0.0000", CultureInfo.InvariantCulture));
         span.SetAttribute(InnerRequestSpans.CompressionSpan.Attributes.CompressionUsed,
                           used);
     }
 }
        /// <inheritdoc />
        public Task <HttpResponseMessage> DeleteAsync(string path, IRequestSpan parentSpan, IRequestSpan encodeSpan, CancellationToken token)
        {
            var requestUri = GetUri(path);

            parentSpan.WithRemoteAddress(requestUri);

            encodeSpan.Dispose();
            using var dispatchSpan = parentSpan.DispatchSpan();
            return(HttpClient.DeleteAsync(requestUri, token));
        }
示例#14
0
 protected async Task <string> SaslList(IConnection connection, IRequestSpan span, CancellationToken token)
 {
     using var op = new SaslList()
           {
               Timeout = Timeout,
               Span    = span,
           };
     OperationConfigurator.Configure(op, SaslOptions.Instance);
     return(await SendAsync(op, connection, token).ConfigureAwait(false));
 }
        public static IRequestSpan WithCommonTags(this IRequestSpan span)
        {
            if (span.CanWrite)
            {
                span.SetAttribute(OuterRequestSpans.Attributes.System.Key, OuterRequestSpans.Attributes.System.Value);
                span.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.NetTransport.Key,
                                  InnerRequestSpans.DispatchSpan.Attributes.NetTransport.Value);
            }

            return(span);
        }
        internal static IRequestSpan DispatchSpan(this IRequestSpan parentSpan, FunctionOptionsBase eventingFunctionOptions)
        {
            var childSpan = DispatchSpan(parentSpan);

            if (childSpan.CanWrite)
            {
                childSpan.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.OperationId, eventingFunctionOptions.ClientContextId ?? Guid.NewGuid().ToString());
            }

            return(childSpan);
        }
        internal static IRequestSpan DispatchSpan(this IRequestSpan parentSpan, IViewQuery viewQuery)
        {
            var childSpan = DispatchSpan(parentSpan);

            if (childSpan.CanWrite)
            {
                childSpan.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.OperationId, viewQuery.ClientContextId ?? Guid.NewGuid().ToString());
            }

            return(childSpan);
        }
        internal static IRequestSpan DispatchSpan(this IRequestSpan parentSpan, AnalyticsOptions request)
        {
            var childSpan = DispatchSpan(parentSpan);

            if (childSpan.CanWrite)
            {
                childSpan.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.OperationId, request.ClientContextIdValue ?? Guid.NewGuid().ToString());
            }

            return(childSpan);
        }
        internal static IRequestSpan DispatchSpan(this IRequestSpan parentSpan, IOperation operation)
        {
            var childSpan = DispatchSpan(parentSpan);

            if (childSpan.CanWrite)
            {
                childSpan.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.OperationId,
                                       operation.Opaque.ToStringInvariant());
            }

            return(childSpan);
        }
        internal static IRequestSpan CompressionSpan(this IRequestSpan parentSpan)
        {
            var childSpan = parentSpan.ChildSpan(InnerRequestSpans.CompressionSpan.Name);

            if (childSpan.CanWrite)
            {
                childSpan.SetAttribute(InnerRequestSpans.CompressionSpan.Attributes.System.Key,
                                       InnerRequestSpans.CompressionSpan.Attributes.System.Value);
            }

            return(childSpan);
        }
        /// <inheritdoc />
        public Task <HttpResponseMessage> PostAsync(string path, IRequestSpan parentSpan, IRequestSpan encodeSpan, CancellationToken token, EventingFunction eventingFunction = null)
        {
            var requestUri = GetUri(path);

            parentSpan.WithRemoteAddress(requestUri);

            var content = eventingFunction != null ?
                          new StringContent(eventingFunction.ToJson()) :
                          new StringContent(string.Empty);

            encodeSpan.Dispose();
            using var dispatchSpan = parentSpan.DispatchSpan();
            return(HttpClient.PostAsync(requestUri, content, token));
        }
        internal static IRequestSpan DispatchSpan(this IRequestSpan parentSpan)
        {
            var childSpan = parentSpan.ChildSpan(InnerRequestSpans.DispatchSpan.Name);

            if (childSpan.CanWrite)
            {
                childSpan.SetAttribute(InnerRequestSpans.EncodingSpan.Attributes.System.Key,
                                       InnerRequestSpans.EncodingSpan.Attributes.System.Value);
                childSpan.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.NetTransport.Key,
                                       InnerRequestSpans.DispatchSpan.Attributes.NetTransport.Value);
            }

            return(childSpan);
        }
        public IInternalSpan InternalSpan(string operationName, IRequestSpan parent)
        {
            var activity = new Activity(operationName);

            if (parent?.Activity == null)
            {
                activity.SetIdFormat(ActivityIdFormat.W3C);
            }


            var span = new ActivitySpan(this, _diagnosticListener, activity, parent);

            _diagnosticListener.StartActivity(activity, span);
            return(span);
        }
        public static IRequestSpan LogOrphaned(this IRequestSpan span)
        {
            try
            {
                if (span.CanWrite)
                {
                    span.SetAttribute("orphaned", "true");
                }
            }
            catch
            {
                //ignore likely a duplicate attribute
            }

            return(span);
        }
        public IMemoryOwner <byte>?Compress(ReadOnlyMemory <byte> input, IRequestSpan parentSpan)
        {
            if (!_clusterOptions.Compression || input.Length < _clusterOptions.CompressionMinSize)
            {
                LogSkipLength(_logger, input.Length, _clusterOptions.CompressionMinSize, null);
                return(null);
            }

            using var compressionSpan = parentSpan.CompressionSpan();

            var compressed = _compressionAlgorithm.Compress(input);

            try
            {
                var compressedMemory = compressed.Memory;
                var compressionRatio = compressedMemory.Length == 0
                    ? 1f
                    : (float)compressedMemory.Length / input.Length;

                if (compressionRatio > _clusterOptions.CompressionMinRatio)
                {
                    AddCompressionTags(compressionSpan, compressionRatio, false);

                    LogSkipCompressionRatio(_logger, compressionRatio, _clusterOptions.CompressionMinRatio, null);

                    // Insufficient compression, so drop it
                    compressed.Dispose();
                    return(null);
                }

                AddCompressionTags(compressionSpan, compressionRatio, true);

                return(compressed);
            }
            catch
            {
                compressed.Dispose();
                throw;
            }
        }
 public IRequestSpan RequestSpan(string operationName, IRequestSpan parent) =>
 InternalSpan(operationName, parent);
示例#27
0
 public SearchOptions RequestSpan(IRequestSpan span)
 {
     RequestSpanValue = span;
     return(this);
 }
示例#28
0
        private async Task <MultiLookup <byte[]> > ExecuteLookupIn(string id, IEnumerable <LookupInSpec> specs,
                                                                   LookupInOptions options, IRequestSpan span)
        {
            //sanity check for deferred bootstrapping errors
            _bucket.ThrowIfBootStrapFailed();

            //Get the collection ID
            await PopulateCidAsync().ConfigureAwait(false);

            //add the virtual xattr attribute to get the doc expiration time
            if (options.ExpiryValue)
            {
                specs = specs.Concat(new [] {
                    new LookupInSpec
                    {
                        Path      = VirtualXttrs.DocExpiryTime,
                        OpCode    = OpCode.SubGet,
                        PathFlags = SubdocPathFlags.Xattr,
                        DocFlags  = SubdocDocFlags.None
                    }
                });
            }

            var lookup = new MultiLookup <byte[]>(id, specs)
            {
                Cid      = Cid,
                CName    = Name,
                SName    = ScopeName,
                DocFlags = options.AccessDeletedValue ? SubdocDocFlags.AccessDeleted : SubdocDocFlags.None,
                Span     = span
            };

            _operationConfigurator.Configure(lookup, options);

            using var cts = CreateRetryTimeoutCancellationTokenSource(options, lookup, out var tokenPair);
            await _bucket.RetryAsync(lookup, tokenPair).ConfigureAwait(false);

            return(lookup);
        }
示例#29
0
 public IRequestSpan RequestSpan(string operationName, IRequestSpan parent) => NullSpanInstance;
 internal static IRequestSpan WithOperation(this IRequestSpan span, IViewQuery viewQuery)
 {
     return(span.WithOperation($"{viewQuery.DesignDocName}/{viewQuery.ViewName}"));
 }