New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Use grpc-dotnet instead of grpc #9149
Changes from all commits
a0dacd5
f3a1e9f
9485b58
40bfd60
09ea3fa
fc59747
7b460d6
a17c3f5
d426b2a
579de0e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,6 @@ | ||
### Improvements | ||
|
||
- [language/dotnet] - Updated Pulumi dotnet packages to use grpc-dotnet instead of grpc. | ||
[#9149](https://github.com/pulumi/pulumi/pull/9149) | ||
|
||
### Bug Fixes |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,42 @@ | ||
// Copyright 2016-2020, Pulumi Corporation | ||
|
||
using System; | ||
using System.Collections.Concurrent; | ||
using System.Collections.Generic; | ||
using System.Net; | ||
using System.Net.Http; | ||
using System.Threading.Tasks; | ||
using Grpc.Core; | ||
using Grpc.Net.Client; | ||
using Pulumirpc; | ||
|
||
namespace Pulumi | ||
{ | ||
internal class GrpcEngine : IEngine | ||
{ | ||
private readonly Engine.EngineClient _engine; | ||
// Using a static dictionary to keep track of and re-use gRPC channels | ||
// According to the docs (https://docs.microsoft.com/en-us/aspnet/core/grpc/performance?view=aspnetcore-6.0#reuse-grpc-channels), creating GrpcChannels is expensive so we keep track of a bunch of them here | ||
private static ConcurrentDictionary<string, GrpcChannel> _engineChannels = new ConcurrentDictionary<string, GrpcChannel>(); | ||
|
||
public GrpcEngine(string engine) | ||
public GrpcEngine(string engineAddress) | ||
{ | ||
// maxRpcMessageSize raises the gRPC Max Message size from `4194304` (4mb) to `419430400` (400mb) | ||
var maxRpcMessageSize = 400 * 1024 * 1024; | ||
var grpcChannelOptions = new List<ChannelOption> { new ChannelOption(ChannelOptions.MaxReceiveMessageLength, maxRpcMessageSize)}; | ||
this._engine = new Engine.EngineClient(new Channel(engine, ChannelCredentials.Insecure, grpcChannelOptions)); | ||
if (!_engineChannels.ContainsKey(engineAddress)) | ||
{ | ||
// Allow for insecure HTTP/2 transport (only needed for netcoreapp3.x) | ||
// https://docs.microsoft.com/en-us/aspnet/core/grpc/troubleshoot?view=aspnetcore-6.0#call-insecure-grpc-services-with-net-core-client | ||
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); | ||
// Inititialize the engine channel once for this address | ||
_engineChannels[engineAddress] = GrpcChannel.ForAddress(new Uri($"http://{engineAddress}"), new GrpcChannelOptions | ||
{ | ||
MaxReceiveMessageSize = maxRpcMessageSize, | ||
MaxSendMessageSize = maxRpcMessageSize, | ||
Credentials = Grpc.Core.ChannelCredentials.Insecure, | ||
}); | ||
} | ||
|
||
this._engine = new Engine.EngineClient(_engineChannels[engineAddress]); | ||
Comment on lines
+25
to
+39
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should we use var engineChannel = _engineChannels.GetOrAdd(engineAddress, address =>
{
// maxRpcMessageSize raises the gRPC Max Message size from `4194304` (4mb) to `419430400` (400mb)
var maxRpcMessageSize = 400 * 1024 * 1024;
// Allow for insecure HTTP/2 transport (only needed for netcoreapp3.x)
// https://docs.microsoft.com/en-us/aspnet/core/grpc/troubleshoot?view=aspnetcore-6.0#call-insecure-grpc-services-with-net-core-client
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
// Inititialize the engine channel once for this address
return GrpcChannel.ForAddress(new Uri($"http://{address}"), new GrpcChannelOptions
{
MaxReceiveMessageSize = maxRpcMessageSize,
MaxSendMessageSize = maxRpcMessageSize,
Credentials = Grpc.Core.ChannelCredentials.Insecure,
});
});
_engine = new Engine.EngineClient(engineChannel); There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That would be another way of implementing it. |
||
} | ||
|
||
public async Task LogAsync(LogRequest request) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit:
readonly