diff --git a/ProtoActor.sln b/ProtoActor.sln index 49a9f0ad61..b0457a07da 100644 --- a/ProtoActor.sln +++ b/ProtoActor.sln @@ -272,6 +272,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Proto.Cluster.AzureContaine EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Proto.Cluster.SeedNode.Redis", "src\Proto.Cluster.SeedNode.Redis\Proto.Cluster.SeedNode.Redis.csproj", "{BDB67DAB-12F8-4D9F-BF7E-9F5D9E723816}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KubernetesDiagnostics", "benchmarks\KubernetesDiagnostics\KubernetesDiagnostics.csproj", "{5FECD1A8-A873-4927-81C3-E5C5A37D80C5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1374,6 +1376,18 @@ Global {BDB67DAB-12F8-4D9F-BF7E-9F5D9E723816}.Release|x64.Build.0 = Release|Any CPU {BDB67DAB-12F8-4D9F-BF7E-9F5D9E723816}.Release|x86.ActiveCfg = Release|Any CPU {BDB67DAB-12F8-4D9F-BF7E-9F5D9E723816}.Release|x86.Build.0 = Release|Any CPU + {5FECD1A8-A873-4927-81C3-E5C5A37D80C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5FECD1A8-A873-4927-81C3-E5C5A37D80C5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5FECD1A8-A873-4927-81C3-E5C5A37D80C5}.Debug|x64.ActiveCfg = Debug|Any CPU + {5FECD1A8-A873-4927-81C3-E5C5A37D80C5}.Debug|x64.Build.0 = Debug|Any CPU + {5FECD1A8-A873-4927-81C3-E5C5A37D80C5}.Debug|x86.ActiveCfg = Debug|Any CPU + {5FECD1A8-A873-4927-81C3-E5C5A37D80C5}.Debug|x86.Build.0 = Debug|Any CPU + {5FECD1A8-A873-4927-81C3-E5C5A37D80C5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5FECD1A8-A873-4927-81C3-E5C5A37D80C5}.Release|Any CPU.Build.0 = Release|Any CPU + {5FECD1A8-A873-4927-81C3-E5C5A37D80C5}.Release|x64.ActiveCfg = Release|Any CPU + {5FECD1A8-A873-4927-81C3-E5C5A37D80C5}.Release|x64.Build.0 = Release|Any CPU + {5FECD1A8-A873-4927-81C3-E5C5A37D80C5}.Release|x86.ActiveCfg = Release|Any CPU + {5FECD1A8-A873-4927-81C3-E5C5A37D80C5}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1500,6 +1514,7 @@ Global {E56413ED-8205-4AC1-A7CE-24A2C1711F54} = {9AA2BCF0-19AB-4DD9-8D91-7D188E463806} {4DF9BBFF-C480-4550-B2BA-6603DAE6BC6F} = {3D12F5E5-9774-4D7E-8A5B-B1F64544925B} {BDB67DAB-12F8-4D9F-BF7E-9F5D9E723816} = {3D12F5E5-9774-4D7E-8A5B-B1F64544925B} + {5FECD1A8-A873-4927-81C3-E5C5A37D80C5} = {0F3AB331-C042-4371-A2F0-0AFDFA13DC9F} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {CD0D1E44-8118-4682-8793-6B20ABFA824C} diff --git a/benchmarks/KubernetesDiagnostics/.dockerignore b/benchmarks/KubernetesDiagnostics/.dockerignore deleted file mode 100644 index cd967fc3a2..0000000000 --- a/benchmarks/KubernetesDiagnostics/.dockerignore +++ /dev/null @@ -1,25 +0,0 @@ -**/.dockerignore -**/.env -**/.git -**/.gitignore -**/.project -**/.settings -**/.toolstarget -**/.vs -**/.vscode -**/.idea -**/*.*proj.user -**/*.dbmdl -**/*.jfm -**/azds.yaml -**/bin -**/charts -**/docker-compose* -**/Dockerfile* -**/node_modules -**/npm-debug.log -**/obj -**/secrets.dev.yaml -**/values.dev.yaml -LICENSE -README.md \ No newline at end of file diff --git a/benchmarks/KubernetesDiagnostics/Dockerfile b/benchmarks/KubernetesDiagnostics/Dockerfile deleted file mode 100644 index 7c0b92be47..0000000000 --- a/benchmarks/KubernetesDiagnostics/Dockerfile +++ /dev/null @@ -1,18 +0,0 @@ -FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base -WORKDIR /app - -FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build -WORKDIR /src -COPY ["KubernetesDiagnostics.csproj", "/src"] -RUN dotnet restore "/src/KubernetesDiagnostics.csproj" -COPY . . -WORKDIR /src -RUN dotnet build "/src/KubernetesDiagnostics.csproj" -c Release -o /app/build - -FROM build AS publish -RUN dotnet publish "KubernetesDiagnostics.csproj" -c Release -o /app/publish - -FROM base AS final -WORKDIR /app -COPY --from=publish /app/publish . -ENTRYPOINT ["dotnet", "KubernetesDiagnostics.dll"] \ No newline at end of file diff --git a/benchmarks/KubernetesDiagnostics/Dockerfile-amd64 b/benchmarks/KubernetesDiagnostics/Dockerfile-amd64 deleted file mode 100644 index d8afa03515..0000000000 --- a/benchmarks/KubernetesDiagnostics/Dockerfile-amd64 +++ /dev/null @@ -1,18 +0,0 @@ -FROM mcr.microsoft.com/dotnet/aspnet:5.0-focal-amd64 AS base -WORKDIR /app - -FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build -WORKDIR /src -COPY ["KubernetesDiagnostics.csproj", "/src"] -RUN dotnet restore "/src/KubernetesDiagnostics.csproj" -COPY . . -WORKDIR /src -RUN dotnet build "/src/KubernetesDiagnostics.csproj" -c Release -o /app/build - -FROM build AS publish -RUN dotnet publish "KubernetesDiagnostics.csproj" -c Release -o /app/publish - -FROM base AS final -WORKDIR /app -COPY --from=publish /app/publish . -ENTRYPOINT ["dotnet", "KubernetesDiagnostics.dll"] diff --git a/benchmarks/KubernetesDiagnostics/KubernetesDiagnostics.csproj b/benchmarks/KubernetesDiagnostics/KubernetesDiagnostics.csproj index 3eb2c4c48b..ef49c265e6 100644 --- a/benchmarks/KubernetesDiagnostics/KubernetesDiagnostics.csproj +++ b/benchmarks/KubernetesDiagnostics/KubernetesDiagnostics.csproj @@ -8,7 +8,7 @@ - + diff --git a/benchmarks/KubernetesDiagnostics/Program.cs b/benchmarks/KubernetesDiagnostics/Program.cs index e56dddb081..3cb163b141 100644 --- a/benchmarks/KubernetesDiagnostics/Program.cs +++ b/benchmarks/KubernetesDiagnostics/Program.cs @@ -33,7 +33,7 @@ public static async Task Main() var log = Log.CreateLogger("main"); var identity = new PartitionIdentityLookup(TimeSpan.FromSeconds(2), TimeSpan.FromSeconds(2) - ); // new IdentityStorageLookup(GetRedisId("MyCluster")); + ); /* - name: "REDIS" @@ -57,10 +57,7 @@ public static async Task Main() var noOpsProps = Props.FromFunc(ctx => Task.CompletedTask); var echoKind = new ClusterKind("echo", noOpsProps); - var system = new ActorSystem(new ActorSystemConfig() - // .WithDeveloperReceiveLogging(TimeSpan.FromSeconds(1)) - // .WithDeveloperSupervisionLogging(true) - ) + var system = new ActorSystem(new ActorSystemConfig()) .WithRemote(GrpcNetRemoteConfig .BindTo(host, port) .WithAdvertisedHost(advertisedHost) @@ -72,21 +69,13 @@ public static async Task Main() .WithClusterKind(echoKind) ); - system.EventStream.Subscribe(e => { Console.WriteLine($"{DateTime.Now:O} Gossip update Member {e.MemberId} Key {e.Key}"); } - ); + // system.EventStream.Subscribe(e => { Console.WriteLine($"{DateTime.Now:O} Gossip update Member {e.MemberId} Key {e.Key}"); }); system.EventStream.Subscribe(e => { - var members = e.Members; - var x = members.Select(m => m.Id).OrderBy(i => i).ToArray(); - var key = string.Join("", x); - var hash = MurmurHash2.Hash(key); - Console.WriteLine($"{DateTime.Now:O} My members {hash}"); + var hash = e.TopologyHash; - // foreach (var member in members.OrderBy(m => m.Id)) - // { - // Console.WriteLine(member.Id + "\t" + member.Address + "\t" + member.Kinds); - // } + Console.WriteLine($"{DateTime.Now:O} My members {hash}"); } ); @@ -97,6 +86,12 @@ public static async Task Main() await system .Cluster() .StartMemberAsync(); + + system.Shutdown.Register(() => + { + Console.WriteLine("Shutting down..."); + Environment.Exit(0); + }); var props = Props.FromFunc(ctx => Task.CompletedTask); system.Root.SpawnNamed(props, "dummy"); @@ -105,8 +100,6 @@ await system while (!cts.IsCancellationRequested) { - // var res = await system.Cluster().MemberList.TopologyConsensus(CancellationTokens.FromSeconds(5)); - var m = system.Cluster().MemberList.GetAllMembers(); var hash = Member.TopologyHash(m); diff --git a/benchmarks/KubernetesDiagnostics/build-amd64.sh b/benchmarks/KubernetesDiagnostics/build-amd64.sh deleted file mode 100755 index b926ad7580..0000000000 --- a/benchmarks/KubernetesDiagnostics/build-amd64.sh +++ /dev/null @@ -1,4 +0,0 @@ -kubectl delete --filename service.yaml -docker build . -t rogeralsing/kubdiagg:amd64 -f Dockerfile-amd64 -docker push docker.io/rogeralsing/kubdiagg:amd64 -kubectl apply --filename service-amd64.yaml --namespace rogerroger \ No newline at end of file diff --git a/benchmarks/KubernetesDiagnostics/build.sh b/benchmarks/KubernetesDiagnostics/build.sh index 7f489c3b5e..b2a94dfbb1 100755 --- a/benchmarks/KubernetesDiagnostics/build.sh +++ b/benchmarks/KubernetesDiagnostics/build.sh @@ -1,3 +1,6 @@ +docker login kubectl delete --filename service.yaml -dotnet publish --os linux -c Release --arch x64 -p:PublishProfile=DefaultContainer +dotnet publish --os linux -c Release --arch arm64 -p:PublishProfile=DefaultContainer +docker tag kubernetesdiagnostics:1.0.0 rogeralsing/kubediag +docker push rogeralsing/kubediag kubectl apply --filename service.yaml \ No newline at end of file diff --git a/benchmarks/KubernetesDiagnostics/service-amd64.yaml b/benchmarks/KubernetesDiagnostics/service-amd64.yaml deleted file mode 100644 index b1b6ba2504..0000000000 --- a/benchmarks/KubernetesDiagnostics/service-amd64.yaml +++ /dev/null @@ -1,86 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: proto-cluster ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - name: proto-cluster - labels: - app: kubdiag -rules: - - apiGroups: - - "" - resources: - - endpoints - - pods - - services - - services/status - verbs: - - get - - list - - watch - - patch ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: proto-cluster - labels: - app: kubdiag -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: proto-cluster -subjects: - - kind: ServiceAccount - name: proto-cluster ---- -apiVersion: v1 -kind: Service -metadata: - name: testing - labels: - app: kubdiag -spec: - ports: - - port: 8080 - name: protoactor - selector: - app: kubdiag ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: diagapp -spec: - replicas: 3 - selector: - matchLabels: - app: kubdiag - template: - metadata: - labels: - app: kubdiag - version: v1 - spec: - serviceAccountName: proto-cluster - containers: - - name: kubdiag - # there is nothing sensitive in here, its just a diagnostics app - image: rogeralsing/kubdiagg:amd64 - imagePullPolicy: Always - ports: - - containerPort: 8080 - env: - - name: "REDIS" - value: "redis" - - name: PROTOPORT - value: "8080" - - name: PROTOHOST - value: "0.0.0.0" - - name: "PROTOHOSTPUBLIC" - valueFrom: - fieldRef: - fieldPath: status.podIP diff --git a/benchmarks/KubernetesDiagnostics/service.yaml b/benchmarks/KubernetesDiagnostics/service.yaml index 24680c5779..b6d66f2b87 100644 --- a/benchmarks/KubernetesDiagnostics/service.yaml +++ b/benchmarks/KubernetesDiagnostics/service.yaml @@ -1,22 +1,24 @@ apiVersion: v1 +kind: Namespace +metadata: + name: my-namespace +--- +apiVersion: v1 kind: ServiceAccount metadata: name: proto-cluster + namespace: my-namespace --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: proto-cluster - labels: - app: kubdiag + namespace: my-namespace rules: - apiGroups: - "" resources: - - endpoints - pods - - services - - services/status verbs: - get - list @@ -28,7 +30,8 @@ kind: RoleBinding metadata: name: proto-cluster labels: - app: kubdiag + app: kubediag + namespace: my-namespace roleRef: apiGroup: rbac.authorization.k8s.io kind: Role @@ -40,37 +43,38 @@ subjects: apiVersion: v1 kind: Service metadata: - name: testing + name: kubediag labels: - app: kubdiag + app: kubediag + namespace: my-namespace spec: ports: - port: 8080 name: protoactor selector: - app: kubdiag + app: kubediag --- apiVersion: apps/v1 kind: Deployment metadata: - name: diagapp + name: kubediag + namespace: my-namespace spec: replicas: 3 selector: matchLabels: - app: kubdiag + app: kubediag template: metadata: labels: - app: kubdiag + app: kubediag version: v1 spec: serviceAccountName: proto-cluster containers: - - name: kubdiag - # there is nothing sensitive in here, its just a diagnostics app - image: rogeralsing/kubdiagg:default2 - imagePullPolicy: Never + - name: kubediag + image: rogeralsing/kubediag:latest + imagePullPolicy: Always ports: - containerPort: 8080 env: diff --git a/service.yaml b/service.yaml index e834b600db..b417855343 100644 --- a/service.yaml +++ b/service.yaml @@ -37,8 +37,6 @@ spec: value: "8080" - name: PROTOHOST value: "0.0.0.0" - - name: "MONGO" - value: "mongodb://mongo" - name: "PROTOHOSTPUBLIC" valueFrom: fieldRef: @@ -70,8 +68,6 @@ spec: value: "8080" - name: PROTOHOST value: "0.0.0.0" - - name: "MONGO" - value: "mongodb://mongo" - name: "PROTOHOSTPUBLIC" valueFrom: fieldRef: diff --git a/src/Proto.Actor/Context/ActorLoggingContext.cs b/src/Proto.Actor/Context/ActorLoggingContext.cs index b7bf6473b7..00cac80574 100644 --- a/src/Proto.Actor/Context/ActorLoggingContext.cs +++ b/src/Proto.Actor/Context/ActorLoggingContext.cs @@ -47,7 +47,7 @@ public override async Task Receive(MessageEnvelope envelope) if (logLevel != LogLevel.None && _logger.IsEnabled(logLevel)) { - _logger.Log(logLevel, "Actor {Self} {ActorType} received message {MessageType}:{Message} from {Sender}", + _logger.Log(logLevel, "Actor {Self} {ActorType} received message {MessageType}:{MessagePayload} from {Sender}", Self, ActorType, message.GetMessageTypeName(), message, SenderOrNone(envelope) @@ -61,7 +61,7 @@ public override async Task Receive(MessageEnvelope envelope) if (logLevel != LogLevel.None && _logger.IsEnabled(logLevel)) { _logger.Log(logLevel, - "Actor {Self} {ActorType} completed message {MessageType}:{Message} from {Sender}", Self, ActorType, + "Actor {Self} {ActorType} completed message {MessageType}:{MessagePayload} from {Sender}", Self, ActorType, message.GetMessageTypeName(), message, SenderOrNone(envelope) @@ -73,7 +73,7 @@ public override async Task Receive(MessageEnvelope envelope) if (_exceptionLogLevel != LogLevel.None && _logger.IsEnabled(_exceptionLogLevel)) { _logger.Log(_exceptionLogLevel, x, - "Actor {Self} {ActorType} failed during message {MessageType}:{Message} from {Sender}", Self, + "Actor {Self} {ActorType} failed during message {MessageType}:{MessagePayload} from {Sender}", Self, ActorType, message.GetMessageTypeName(), message, SenderOrNone(envelope) @@ -110,7 +110,7 @@ public override async Task RequestAsync(PID target, object message, Cancel { if (_logLevel != LogLevel.None && _logger.IsEnabled(_logLevel)) { - _logger.Log(_logLevel, "Actor {Self} {ActorType} Sending RequestAsync {MessageType}:{Message} to {Target}", + _logger.Log(_logLevel, "Actor {Self} {ActorType} Sending RequestAsync {MessageType}:{MessagePayload} to {Target}", Self, ActorType, message.GetMessageTypeName(), message, target ); @@ -123,7 +123,7 @@ public override async Task RequestAsync(PID target, object message, Cancel if (_logLevel != LogLevel.None && _logger.IsEnabled(_logLevel)) { _logger.Log(_logLevel, - "Actor {Self} {ActorType} Got response {Response} to {MessageType}:{Message} from {Target}", Self, + "Actor {Self} {ActorType} Got response {Response} to {MessageType}:{MessagePayload} from {Target}", Self, ActorType, response, message.GetMessageTypeName(), message, target ); @@ -136,7 +136,7 @@ public override async Task RequestAsync(PID target, object message, Cancel if (_exceptionLogLevel != LogLevel.None && _logger.IsEnabled(_exceptionLogLevel)) { _logger.Log(_exceptionLogLevel, x, - "Actor {Self} {ActorType} Got exception waiting for RequestAsync response of {MessageType}:{Message} from {Target}", + "Actor {Self} {ActorType} Got exception waiting for RequestAsync response of {MessageType}:{MessagePayload} from {Target}", Self, ActorType, message.GetMessageTypeName(), message, target @@ -195,7 +195,7 @@ public override void Respond(object message) if (logLevel != LogLevel.None && _logger.IsEnabled(logLevel)) { - _logger.Log(logLevel, "Actor {Self} {ActorType} responded with {MessageType}:{Message} to {Sender}", Self, + _logger.Log(logLevel, "Actor {Self} {ActorType} responded with {MessageType}:{MessagePayload} to {Sender}", Self, ActorType, message.GetMessageTypeName(), message, Sender ); @@ -218,7 +218,7 @@ public override void Request(PID target, object message, PID? sender) { if (_logLevel != LogLevel.None && _logger.IsEnabled(_logLevel)) { - _logger.Log(_logLevel, "Actor {Self} {ActorType} Sending Request {MessageType}:{Message} to {Target}", + _logger.Log(_logLevel, "Actor {Self} {ActorType} Sending Request {MessageType}:{MessagePayload} to {Target}", Self, ActorType, message.GetMessageTypeName(), message, target ); @@ -231,7 +231,7 @@ public override void Send(PID target, object message) { if (_logLevel != LogLevel.None && _logger.IsEnabled(_logLevel)) { - _logger.Log(_logLevel, "Actor {Self} {ActorType} Sending {MessageType}:{Message} to {Target}", Self, + _logger.Log(_logLevel, "Actor {Self} {ActorType} Sending {MessageType}:{MessagePayload} to {Target}", Self, ActorType, message.GetMessageTypeName(), message, target ); diff --git a/src/Proto.Actor/Context/DeadlineContextDecorator.cs b/src/Proto.Actor/Context/DeadlineContextDecorator.cs index ae333e7e81..526247b657 100644 --- a/src/Proto.Actor/Context/DeadlineContextDecorator.cs +++ b/src/Proto.Actor/Context/DeadlineContextDecorator.cs @@ -61,7 +61,7 @@ public override async Task Receive(MessageEnvelope envelope) if (!ok) { - _logger.LogWarning("Actor {Self} deadline {Deadline}, exceeded on message {Message}", _context.Self, + _logger.LogWarning("Actor {Self} deadline {Deadline}, exceeded on message {MessagePayload}", _context.Self, _deadline, envelope.Message); // keep waiting, we cannot just ignore and continue as an async task might still be running and updating state of the actor diff --git a/src/Proto.Actor/Context/RootLoggingContext.cs b/src/Proto.Actor/Context/RootLoggingContext.cs index a10da58808..3a6995b91e 100644 --- a/src/Proto.Actor/Context/RootLoggingContext.cs +++ b/src/Proto.Actor/Context/RootLoggingContext.cs @@ -33,7 +33,7 @@ public override void Send(PID target, object message) if (logLevel != LogLevel.None && _logger.IsEnabled(logLevel)) { - _logger.Log(logLevel, "RootContext Sending {MessageType}:{Message} to {Target}", message.GetMessageTypeName(), message, + _logger.Log(logLevel, "RootContext Sending {MessageType}:{MessagePayload} to {Target}", message.GetMessageTypeName(), message, target); } @@ -59,7 +59,7 @@ public override void Request(PID target, object message, PID? sender) if (logLevel != LogLevel.None && _logger.IsEnabled(logLevel)) { - _logger.Log(logLevel, "Sending Request {MessageType}:{Message} to {Target}", message.GetMessageTypeName(), + _logger.Log(logLevel, "Sending Request {MessageType}:{MessagePayload} to {Target}", message.GetMessageTypeName(), message, target); } @@ -137,7 +137,7 @@ public override void Request(PID target, object message) if (logLevel != LogLevel.None && _logger.IsEnabled(logLevel)) { - _logger.Log(logLevel, "RootContext Sending Request {MessageType}:{Message} to {Target}", message.GetMessageTypeName(), + _logger.Log(logLevel, "RootContext Sending Request {MessageType}:{MessagePayload} to {Target}", message.GetMessageTypeName(), message, target); } @@ -148,7 +148,7 @@ public override async Task RequestAsync(PID target, object message, Cancel { if (_logLevel != LogLevel.None && _logger.IsEnabled(_logLevel)) { - _logger.Log(_logLevel, "RootContext Sending RequestAsync {MessageType}:{Message} to {Target}", + _logger.Log(_logLevel, "RootContext Sending RequestAsync {MessageType}:{MessagePayload} to {Target}", message.GetMessageTypeName(), message, target ); } @@ -160,7 +160,7 @@ public override async Task RequestAsync(PID target, object message, Cancel if (_logLevel != LogLevel.None && _logger.IsEnabled(_logLevel)) { _logger.Log(_logLevel, - "RootContext Got response {Response} to {MessageType}:{Message} from {Target}", + "RootContext Got response {Response} to {MessageType}:{MessagePayload} from {Target}", response, message.GetMessageTypeName(), message, target ); } @@ -172,7 +172,7 @@ public override async Task RequestAsync(PID target, object message, Cancel if (_exceptionLogLevel != LogLevel.None && _logger.IsEnabled(_exceptionLogLevel)) { _logger.Log(_exceptionLogLevel, x, - "RootContext Got exception waiting for RequestAsync response of {MessageType}:{Message} from {Target}", + "RootContext Got exception waiting for RequestAsync response of {MessageType}:{MessagePayload} from {Target}", message.GetMessageTypeName(), message, target ); } diff --git a/src/Proto.Actor/Diagnostics/DiagnosticsStore.cs b/src/Proto.Actor/Diagnostics/DiagnosticsStore.cs index 3240f881f1..0c9e0e523d 100644 --- a/src/Proto.Actor/Diagnostics/DiagnosticsStore.cs +++ b/src/Proto.Actor/Diagnostics/DiagnosticsStore.cs @@ -51,7 +51,7 @@ public void RegisterEvent(string module, string message) var entry = new DiagnosticsEntry(module, message, null); if (_entries.TryAdd(entry)) { - _logger.Log(_logLevel, "[Diagnostics] {Module}: {Message}", module, message); + _logger.Log(_logLevel, "[Diagnostics] {Module}: {MessagePayload}", module, message); } } diff --git a/src/Proto.Actor/EventStream/EventStream.cs b/src/Proto.Actor/EventStream/EventStream.cs index d4397a926f..d4b8553445 100644 --- a/src/Proto.Actor/EventStream/EventStream.cs +++ b/src/Proto.Actor/EventStream/EventStream.cs @@ -50,7 +50,7 @@ internal EventStream(ActorSystem system) dl.Message is not IIgnoreDeadLetterLogging) { _logger.LogInformation( - "[DeadLetter] could not deliver '{MessageType}:{Message}' to '{Target}' from '{Sender}'", + "[DeadLetter] could not deliver '{MessageType}:{MessagePayload}' to '{Target}' from '{Sender}'", dl.Message.GetMessageTypeName(), dl.Message, dl.Pid, diff --git a/src/Proto.Actor/Logging/Log.cs b/src/Proto.Actor/Logging/Log.cs index cabc928dbf..b974e137bf 100644 --- a/src/Proto.Actor/Logging/Log.cs +++ b/src/Proto.Actor/Logging/Log.cs @@ -4,6 +4,7 @@ // // ----------------------------------------------------------------------- +using System; using JetBrains.Annotations; using Microsoft.Extensions.Logging; using Proto.Logging; @@ -44,5 +45,6 @@ public static class Log /// /// /// + [Obsolete("Inject ILogger instead", false)] public static ILogger CreateLogger() => _loggerFactory.CreateLogger(); } \ No newline at end of file diff --git a/src/Proto.Cluster.Kubernetes/KubernetesClusterMonitor.cs b/src/Proto.Cluster.Kubernetes/KubernetesClusterMonitor.cs index b43beb0fb3..8ca2bd9423 100644 --- a/src/Proto.Cluster.Kubernetes/KubernetesClusterMonitor.cs +++ b/src/Proto.Cluster.Kubernetes/KubernetesClusterMonitor.cs @@ -79,25 +79,30 @@ private Task StopWatchingCluster() return Task.CompletedTask; } - private async Task StartWatchingCluster(IContext context) + private Task StartWatchingCluster(IContext context) { - try + _ = SafeTask.Run(async () => { - await Poll(); - } - catch (Exception x) - { - Logger.LogError(x, "[Cluster][KubernetesProvider] Failed to poll the Kubernetes API"); - } + try + { + await Poll(); + } + catch (Exception x) + { + Logger.LogError(x, "[Cluster][KubernetesProvider] Failed to poll the Kubernetes API"); + } - if (!_config.DisableWatch) - { - await Watch(); - } + if (!_config.DisableWatch) + { + await Watch(); + } + + await Task.Delay(1000); - await Task.Delay(1000); + context.Send(context.Self, new StartWatchingCluster(_clusterName)); + }); - context.Send(context.Self, new StartWatchingCluster(_clusterName)); + return Task.CompletedTask; } private Task Watch() @@ -290,6 +295,12 @@ private void Watch(WatchEventType eventType, V1Pod eventPod) private void UpdateTopology() { + if (_clusterPods?.Values is null) + { + Logger.LogInformation("[Cluster][KubernetesProvider] No pods found in the cluster"); + return; + } + var memberStatuses = _clusterPods.Values .Select(x => x.GetMemberStatus()) .Where(x => x.IsRunning && (x.IsReady || x.Member.Id == _cluster.System.Id)) diff --git a/src/Proto.Cluster/Member/MemberList.cs b/src/Proto.Cluster/Member/MemberList.cs index 59383c0236..9ebbcd13a1 100644 --- a/src/Proto.Cluster/Member/MemberList.cs +++ b/src/Proto.Cluster/Member/MemberList.cs @@ -361,7 +361,7 @@ public void BroadcastEvent(object message, bool includeSelf = true) catch (Exception x) { x.CheckFailFast(); - Logger.LogError(x, "[MemberList] Failed to broadcast {Message} to {Pid}", message, pid); + Logger.LogError(x, "[MemberList] Failed to broadcast {MessagePayload} to {Pid}", message, pid); } } } diff --git a/src/Proto.Remote/Endpoints/Endpoint.cs b/src/Proto.Remote/Endpoints/Endpoint.cs index 3719b64f6e..06148d4e23 100644 --- a/src/Proto.Remote/Endpoints/Endpoint.cs +++ b/src/Proto.Remote/Endpoints/Endpoint.cs @@ -100,7 +100,7 @@ public void SendMessage(PID target, object msg) if (_logger.IsEnabled(LogLevel.Trace)) { - _logger.LogTrace("[{SystemAddress}] Sending message {MessageType} {Message} to {Target} from {Sender}", + _logger.LogTrace("[{SystemAddress}] Sending message {MessageType} {MessagePayload} to {Target} from {Sender}", System.Address, message.GetMessageTypeName(), message, target, sender ); @@ -115,7 +115,7 @@ public void SendMessage(PID target, object msg) if (CancellationToken.IsCancellationRequested || !_remoteDelivers.Writer.TryWrite(env)) { - _logger.LogWarning("[{SystemAddress}] Dropping message {MessageType} {Message} to {Target} from {Sender}", + _logger.LogWarning("[{SystemAddress}] Dropping message {MessageType} {MessagePayload} to {Target} from {Sender}", System.Address, message.GetMessageTypeName(), message, target, sender ); @@ -249,7 +249,7 @@ private int DropMessagesInBatch(RemoteMessage remoteMessage) message = RemoteConfig.Serialization.Deserialize(typeName, envelope.MessageData, envelope.SerializerId); - // _logger.LogDebug("Received (Type) {Message}", message.GetType(), message); + // _logger.LogDebug("Received (Type) {MessagePayload}", message.GetType(), message); //translate from on-the-wire representation to in-process representation //this only applies to root level messages, and never on nested child messages @@ -468,14 +468,14 @@ private MessageBatch CreateBatch(IReadOnlyCollection m) catch (CodedOutputStream.OutOfSpaceException oom) { System.Diagnostics.RegisterEvent("Remote", $"Message is too large {message.GetMessageTypeName()}"); - _logger.LogError(oom, "Message is too large {Message}", message.GetMessageTypeName()); + _logger.LogError(oom, "Message is too large {MessagePayload}", message.GetMessageTypeName()); throw; } catch (Exception x) { System.Diagnostics.RegisterEvent("Remote", $"Missing serializer for {message.GetMessageTypeName()}"); - _logger.LogError(x, "Serialization failed for message {Message}", message.GetMessageTypeName()); + _logger.LogError(x, "Serialization failed for message {MessagePayload}", message.GetMessageTypeName()); throw; } diff --git a/src/Proto.Remote/Endpoints/RemoteMessageHandler.cs b/src/Proto.Remote/Endpoints/RemoteMessageHandler.cs index 13e3631d47..7bedcb800c 100644 --- a/src/Proto.Remote/Endpoints/RemoteMessageHandler.cs +++ b/src/Proto.Remote/Endpoints/RemoteMessageHandler.cs @@ -142,7 +142,7 @@ public void HandleRemoteMessage(RemoteMessage currentMessage, string remoteAddre if (_logger.IsEnabled(LogLevel.Trace)) { _logger.LogTrace( - "[{SystemAddress}] Received message {MessageType} {Message} for {Target}", + "[{SystemAddress}] Received message {MessageType} {MessagePayload} for {Target}", _system.Address, msg.GetType().Name, msg, target ); @@ -159,7 +159,7 @@ public void HandleRemoteMessage(RemoteMessage currentMessage, string remoteAddre if (_logger.IsEnabled(LogLevel.Trace)) { _logger.LogTrace( - "[{SystemAddress}] Received system message {MessageType} {Message} for {Target}", + "[{SystemAddress}] Received system message {MessageType} {MessagePayload} for {Target}", _system.Address, sys.GetType().Name, sys, target ); @@ -190,7 +190,7 @@ public void HandleRemoteMessage(RemoteMessage currentMessage, string remoteAddre if (_logger.IsEnabled(LogLevel.Trace)) { _logger.LogTrace( - "[{SystemAddress}] Received user message {MessageType} {Message} for {Target} from {Sender}", + "[{SystemAddress}] Received user message {MessageType} {MessagePayload} for {Target} from {Sender}", _system.Address, message.GetMessageTypeName(), message, target, sender ); } diff --git a/src/Proto.Remote/Endpoints/ServerConnector.cs b/src/Proto.Remote/Endpoints/ServerConnector.cs index f7c0b986e0..d85dabbc0e 100644 --- a/src/Proto.Remote/Endpoints/ServerConnector.cs +++ b/src/Proto.Remote/Endpoints/ServerConnector.cs @@ -318,7 +318,7 @@ private Task StartReader(AsyncDuplexStreamingCall if (_connectorType == Type.ServerSide) { _logger.LogWarning( - "[ServerConnector][{SystemAddress}] Received {Message} from {Addres}", + "[ServerConnector][{SystemAddress}] Received {MessagePayload} from {Addres}", _system.Address, currentMessage, _address); } else diff --git a/src/Proto.Remote/GrpcNet/GrpcNetClientRemote.cs b/src/Proto.Remote/GrpcNet/GrpcNetClientRemote.cs index 4c2f94bf4b..847c554c02 100644 --- a/src/Proto.Remote/GrpcNet/GrpcNetClientRemote.cs +++ b/src/Proto.Remote/GrpcNet/GrpcNetClientRemote.cs @@ -69,7 +69,7 @@ public Task ShutdownAsync(bool graceful = true) catch (Exception ex) { _logger.LogError( - ex, "Proto.Actor client {Id} stopped with error: {Message}", + ex, "Proto.Actor client {Id} stopped with error: {MessagePayload}", System.Id, ex.Message ); } diff --git a/src/Proto.Remote/GrpcNet/GrpcNetRemote.cs b/src/Proto.Remote/GrpcNet/GrpcNetRemote.cs index 727f6ad0ec..038441bcd5 100644 --- a/src/Proto.Remote/GrpcNet/GrpcNetRemote.cs +++ b/src/Proto.Remote/GrpcNet/GrpcNetRemote.cs @@ -174,7 +174,7 @@ public async Task ShutdownAsync(bool graceful = true) catch (Exception ex) { _logger.LogError( - ex, "Proto.Actor server stopped on {Address} with error: {Message}", + ex, "Proto.Actor server stopped on {Address} with error: {MessagePayload}", System.Address, ex.Message ); } diff --git a/src/Proto.Remote/GrpcNet/HostedGrpcNetRemote.cs b/src/Proto.Remote/GrpcNet/HostedGrpcNetRemote.cs index e1ebe5688a..fca7e8e3d3 100644 --- a/src/Proto.Remote/GrpcNet/HostedGrpcNetRemote.cs +++ b/src/Proto.Remote/GrpcNet/HostedGrpcNetRemote.cs @@ -87,7 +87,7 @@ public Task ShutdownAsync(bool graceful = true) catch (Exception ex) { _logger.LogError( - ex, "Proto.Actor server stopped on {Address} with error: {Message}", + ex, "Proto.Actor server stopped on {Address} with error: {MessagePayload}", System.Address, ex.Message ); diff --git a/src/Proto.Remote/Serialization/ForcedSerializationSenderMiddleware.cs b/src/Proto.Remote/Serialization/ForcedSerializationSenderMiddleware.cs index a9145938c2..df5cb86fbb 100644 --- a/src/Proto.Remote/Serialization/ForcedSerializationSenderMiddleware.cs +++ b/src/Proto.Remote/Serialization/ForcedSerializationSenderMiddleware.cs @@ -78,7 +78,7 @@ public static Func Create(Func? sho } catch (CodedOutputStream.OutOfSpaceException oom) { - Logger.LogError(oom, "Message is too large for serialization {Message}", message?.GetType().Name); + Logger.LogError(oom, "Message is too large for serialization {MessagePayload}", message?.GetType().Name); throw; } @@ -86,7 +86,7 @@ public static Func Create(Func? sho { ex.CheckFailFast(); - Logger.LogError(ex, "Forced serialization -> deserialization failed for message {Message}", + Logger.LogError(ex, "Forced serialization -> deserialization failed for message {MessagePayload}", message?.GetType().Name); throw; diff --git a/tests/Proto.Cluster.Tests/ClusterFixture.cs b/tests/Proto.Cluster.Tests/ClusterFixture.cs index fab5663f0c..f0fe6808c8 100644 --- a/tests/Proto.Cluster.Tests/ClusterFixture.cs +++ b/tests/Proto.Cluster.Tests/ClusterFixture.cs @@ -68,6 +68,7 @@ static ClusterFixture() { TracingSettings.OpenTelemetryUrl = Environment.GetEnvironmentVariable("OPENTELEMETRY_URL"); TracingSettings.TraceViewUrl = Environment.GetEnvironmentVariable("TRACEVIEW_URL"); + // TracingSettings.OpenTelemetryUrl = "http://Localhost:4317"; TracingSettings.EnableTracing = TracingSettings.OpenTelemetryUrl != null; //TODO: check if this helps low resource envs like github actions. @@ -293,7 +294,7 @@ protected virtual async Task SpawnClusterMember(Func(e => { - logger?.LogDebug("EventStream {MessageType}:{Message}", e.GetType().Name, e); + logger?.LogDebug("EventStream {MessageType}:{MessagePayload}", e.GetType().Name, e); } );