diff --git a/src/core/Synapse.Core/Resources/RuntimeDefinition.cs b/src/core/Synapse.Core/Resources/RuntimeDefinition.cs index 067f793f..307d5ef1 100644 --- a/src/core/Synapse.Core/Resources/RuntimeDefinition.cs +++ b/src/core/Synapse.Core/Resources/RuntimeDefinition.cs @@ -42,6 +42,6 @@ public record RuntimeDefinition /// Gets the runtime mode /// [IgnoreDataMember, JsonIgnore, YamlIgnore] - public virtual string Mode => this.Native != null ? OperatorRuntimeMode.Native : this.Docker != null ? OperatorRuntimeMode.Docker : this.Kubernetes != null ? OperatorRuntimeMode.Kubernetes : throw new Exception("The runtime mode must be set"); + public virtual string Mode => this.Kubernetes != null ? OperatorRuntimeMode.Kubernetes : this.Native != null ? OperatorRuntimeMode.Native : this.Docker != null ? OperatorRuntimeMode.Docker : throw new Exception("The runtime mode must be set"); } diff --git a/src/dashboard/Synapse.Dashboard/Pages/Workflows/Details/View.razor b/src/dashboard/Synapse.Dashboard/Pages/Workflows/Details/View.razor index d9be2b6d..d572e87e 100644 --- a/src/dashboard/Synapse.Dashboard/Pages/Workflows/Details/View.razor +++ b/src/dashboard/Synapse.Dashboard/Pages/Workflows/Details/View.razor @@ -28,34 +28,36 @@ - +
+ +
diff --git a/src/operator/Synapse.Operator/Services/WorkflowInstanceHandler.cs b/src/operator/Synapse.Operator/Services/WorkflowInstanceHandler.cs index 984aa749..768893a5 100644 --- a/src/operator/Synapse.Operator/Services/WorkflowInstanceHandler.cs +++ b/src/operator/Synapse.Operator/Services/WorkflowInstanceHandler.cs @@ -219,23 +219,16 @@ protected virtual async Task OnPersistLogBatchAsync() protected virtual async Task UpdateWorkflowInstanceStatusAsync(Action statusUpdate, CancellationToken cancellationToken) { ArgumentNullException.ThrowIfNull(statusUpdate); - var maxRetries = 3; - for (var attempt = 0; attempt < maxRetries; attempt++) + try { - try - { - var original = this.WorkflowInstance.Resource; - var updated = original.Clone()!; - updated.Status ??= new(); - statusUpdate(updated.Status); - var patch = JsonPatchUtility.CreateJsonPatchFromDiff(original, updated); - await this.Resources.PatchStatusAsync(new Patch(PatchType.JsonPatch, patch), updated.GetName(), updated.GetNamespace(), null, false, cancellationToken).ConfigureAwait(false); - } - catch (ConcurrencyException) when (attempt + 1 < maxRetries) - { - await Task.Delay(TimeSpan.FromMilliseconds(100 * (attempt + 1)), cancellationToken).ConfigureAwait(false); - } + var original = this.WorkflowInstance.Resource; + var updated = original.Clone()!; + updated.Status ??= new(); + statusUpdate(updated.Status); + var patch = JsonPatchUtility.CreateJsonPatchFromDiff(original, updated); + await this.Resources.PatchStatusAsync(new Patch(PatchType.JsonPatch, patch), updated.GetName(), updated.GetNamespace(), null, false, cancellationToken).ConfigureAwait(false); } + catch (ProblemDetailsException ex) when (ex.Problem.Status == (int)HttpStatusCode.NotModified) { } } /// diff --git a/src/operator/Synapse.Operator/appsettings.Development.json b/src/operator/Synapse.Operator/appsettings.Development.json index 5bdc5c48..011b4398 100644 --- a/src/operator/Synapse.Operator/appsettings.Development.json +++ b/src/operator/Synapse.Operator/appsettings.Development.json @@ -15,9 +15,12 @@ "Uri": "http://localhost:5257" }, "Runtime": { - "Native": { - "Directory": "..\\..\\..\\..\\..\\runner\\Synapse.Runner\\bin\\Debug\\net9.0\\", - "Executable": "Synapse.Runner.exe" + //"Native": { + // "Directory": "..\\..\\..\\..\\..\\runner\\Synapse.Runner\\bin\\Debug\\net9.0\\", + // "Executable": "Synapse.Runner.exe" + //} + "Kubernetes": { + "Namespace": "default" } } } diff --git a/src/runtime/Synapse.Runtime.Kubernetes/Services/KubernetesRuntime.cs b/src/runtime/Synapse.Runtime.Kubernetes/Services/KubernetesRuntime.cs index 441ad73e..95990cbb 100644 --- a/src/runtime/Synapse.Runtime.Kubernetes/Services/KubernetesRuntime.cs +++ b/src/runtime/Synapse.Runtime.Kubernetes/Services/KubernetesRuntime.cs @@ -68,10 +68,12 @@ public class KubernetesRuntime(IServiceProvider serviceProvider, ILoggerFactory protected virtual async Task InitializeAsync(CancellationToken cancellationToken = default) { if (this.Runner.Runtime.Kubernetes == null) throw new NullReferenceException($"Failed to initialize the Kubernetes Runtime because the operator is not configured to use Kubernetes as a runtime"); - var kubeconfig = string.IsNullOrWhiteSpace(this.Runner.Runtime.Kubernetes.Kubeconfig) - ? KubernetesClientConfiguration.InClusterConfig() - : await KubernetesClientConfiguration.BuildConfigFromConfigFileAsync(new FileInfo(this.Runner.Runtime.Kubernetes.Kubeconfig)).ConfigureAwait(false); - this.Kubernetes = new k8s.Kubernetes(kubeconfig); + var configuration = Environment.RunsInKubernetes() + ? KubernetesClientConfiguration.InClusterConfig() + : (string.IsNullOrWhiteSpace(this.Runner.Runtime.Kubernetes.Kubeconfig) + ? KubernetesClientConfiguration.BuildDefaultConfig() + : await KubernetesClientConfiguration.BuildConfigFromConfigFileAsync(new FileInfo(this.Runner.Runtime.Kubernetes.Kubeconfig)).ConfigureAwait(false)); + this.Kubernetes = new k8s.Kubernetes(configuration); } ///