Esempio n. 1
0
 /// <inheritdoc />
 public Task <RegisterContentLocationsResponse> RegisterContentLocationsAsync(RegisterContentLocationsRequest request, CallContext callContext = default)
 {
     return(ExecuteAsync(request, callContext, context =>
     {
         return _store.RegisterLocationAsync(context, request.MachineId, request.Hashes, touch: false).AsTask()
         .SelectAsync(_ => new RegisterContentLocationsResponse()
         {
             PersistRequest = true
         });
     },
                         extraEndMessage: r => {
         var csv = string.Join(",", request.Hashes.Select(h => h.Hash));
         return $"MachineId=[{request.MachineId}] Hashes=[{csv}]";
     }));
 }
 public Task <RegisterContentLocationsResponse> RegisterContentLocationsAsync(RegisterContentLocationsRequest request)
 {
     return(ExecuteAsync(request, async context =>
     {
         var result = await _store.RegisterLocationAsync(context, request.MachineId, request.Hashes, touch: false);
         if (result.Succeeded)
         {
             return Result.Success(new RegisterContentLocationsResponse());
         }
         else
         {
             return Result.FromError <RegisterContentLocationsResponse>(result);
         }
     }));
 }
Esempio n. 3
0
        /// <summary>
        /// An optimized low allocation version of <see cref="RegisterContentLocationsAsync"/>.
        /// </summary>
        // TODO: instead of manually doing all of that we should make our helpers more efficient and as allocation free as possible. Work Item: 1883860
        protected async ValueTask <ValueUnit> RegisterContentLocationsFastAsync(RegisterContentLocationsRequest request)
        {
            // This method is called extremely frequently in some cases so to avoid any unnecessary performance penalties
            // it does not use any helper methods.

            // Intentionally not tracking the shutdown here to avoid extra allocations and extra work that is rarely needed.
            // Plus this method should not be very long and we can just allow it to fail if the shutdown will cause some errors.
            // (consider adding a flag if we think it will be needed in the future).

            var tracingContext = new Context(request.ContextId, StartupLogger);
            var context        = new OperationContext(tracingContext);

            try
            {
                await _store.RegisterLocationAsync(context, request.MachineId, request.Hashes, touch : false).ThrowIfFailure();
            }
            catch (Exception e)
            {
                // Checking the errors for the synchronous case.
                Tracer.Info(context, $"Content location registration failed {e}");
            }

            return(ValueUnit.Void);
        }