parent
05529154e7
commit
5a97383283
8 changed files with 62 additions and 34 deletions
@ -0,0 +1,57 @@ |
|||||||
|
#region Copyright notice and license |
||||||
|
|
||||||
|
// Copyright 2019 The gRPC Authors |
||||||
|
// |
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
// you may not use this file except in compliance with the License. |
||||||
|
// You may obtain a copy of the License at |
||||||
|
// |
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
// |
||||||
|
// Unless required by applicable law or agreed to in writing, software |
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
// See the License for the specific language governing permissions and |
||||||
|
// limitations under the License. |
||||||
|
|
||||||
|
#endregion |
||||||
|
|
||||||
|
using System; |
||||||
|
using Grpc.Core.Utils; |
||||||
|
|
||||||
|
namespace Grpc.Core.Internal |
||||||
|
{ |
||||||
|
internal static class CallOptionsExtensions |
||||||
|
{ |
||||||
|
/// <summary> |
||||||
|
/// Returns a new instance of <see cref="CallOptions"/> with |
||||||
|
/// all previously unset values set to their defaults and deadline and cancellation |
||||||
|
/// token propagated when appropriate. |
||||||
|
/// </summary> |
||||||
|
internal static CallOptions Normalize(this CallOptions options) |
||||||
|
{ |
||||||
|
var newOptions = options; |
||||||
|
// silently ignore the context propagation token if it wasn't produced by "us" |
||||||
|
var propagationTokenImpl = options.PropagationToken.AsImplOrNull(); |
||||||
|
if (propagationTokenImpl != null) |
||||||
|
{ |
||||||
|
if (propagationTokenImpl.Options.IsPropagateDeadline) |
||||||
|
{ |
||||||
|
GrpcPreconditions.CheckArgument(!newOptions.Deadline.HasValue, |
||||||
|
"Cannot propagate deadline from parent call. The deadline has already been set explicitly."); |
||||||
|
newOptions = newOptions.WithDeadline(propagationTokenImpl.ParentDeadline); |
||||||
|
} |
||||||
|
if (propagationTokenImpl.Options.IsPropagateCancellation) |
||||||
|
{ |
||||||
|
GrpcPreconditions.CheckArgument(!newOptions.CancellationToken.CanBeCanceled, |
||||||
|
"Cannot propagate cancellation token from parent call. The cancellation token has already been set to a non-default value."); |
||||||
|
newOptions = newOptions.WithCancellationToken(propagationTokenImpl.ParentCancellationToken); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
newOptions = newOptions.WithHeaders(newOptions.Headers ?? Metadata.Empty); |
||||||
|
newOptions = newOptions.WithDeadline(newOptions.Deadline ?? DateTime.MaxValue); |
||||||
|
return newOptions; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue