From f3f39bb1c004b960e904cb501ba78eab16d13cfa Mon Sep 17 00:00:00 2001 From: 0utplay Date: Sat, 15 Apr 2023 18:32:40 +0200 Subject: [PATCH 1/5] fix: add missing environmentVariables map to process config --- .../rest/src/main/resources/documentation/swagger.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/rest/src/main/resources/documentation/swagger.json b/modules/rest/src/main/resources/documentation/swagger.json index ec1ffd463d..6e1ecad3fe 100644 --- a/modules/rest/src/main/resources/documentation/swagger.json +++ b/modules/rest/src/main/resources/documentation/swagger.json @@ -4519,6 +4519,15 @@ "type" : "string" }, "example" : [ "Parameter1", "Parameter2" ] + }, + "environmentVariables" : { + "type" : "object", + "additionalProperties" : { + "type" : "string" + }, + "example" : { + "MYSQL_PASSWORD" : "PASSWORD" + } } } }, From c11533dc1ab210209a3823e412d7497cd9545cba Mon Sep 17 00:00:00 2001 From: 0utplay Date: Sun, 7 May 2023 13:27:03 +0200 Subject: [PATCH 2/5] chore: update the openapi service configuration --- .../main/resources/documentation/swagger.json | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/modules/rest/src/main/resources/documentation/swagger.json b/modules/rest/src/main/resources/documentation/swagger.json index 6e1ecad3fe..56c1fa9b7c 100644 --- a/modules/rest/src/main/resources/documentation/swagger.json +++ b/modules/rest/src/main/resources/documentation/swagger.json @@ -4650,6 +4650,9 @@ "$ref" : "#/components/schemas/JsonDocPropertyable" }, { "properties" : { + "retryConfiguration" : { + "$ref" : "#/components/schemas/ServiceCreateRetryConfiguration" + }, "serviceId" : { "$ref" : "#/components/schemas/ServiceId" }, @@ -4745,6 +4748,25 @@ } } ] }, + "ServiceCreateRetryConfiguration" : { + "type" : "object", + "properties" : { + "maxRetries" : { + "type" : "integer", + "example" : 5 + }, + "backoffStrategy" : { + "type" : "array", + "items" : { + "type" : "integer", + "example" : [ 500, 1500 ] + } + }, + "eventReceivers" : { + "type" : "object" + } + } + }, "ServiceCreateResult" : { "type" : "object", "properties" : { From c3415b35e107b2e0f82e88aee052260f299a008c Mon Sep 17 00:00:00 2001 From: 0utplay Date: Sun, 7 May 2023 15:35:32 +0200 Subject: [PATCH 3/5] chore: make the service create result a class to prevent de-/serialization errors --- .../driver/service/ServiceCreateResult.java | 48 +++++++++++++------ 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/driver/src/main/java/eu/cloudnetservice/driver/service/ServiceCreateResult.java b/driver/src/main/java/eu/cloudnetservice/driver/service/ServiceCreateResult.java index c6509e84fc..4f4f73c646 100644 --- a/driver/src/main/java/eu/cloudnetservice/driver/service/ServiceCreateResult.java +++ b/driver/src/main/java/eu/cloudnetservice/driver/service/ServiceCreateResult.java @@ -18,7 +18,9 @@ import com.google.common.base.Preconditions; import java.util.UUID; +import lombok.EqualsAndHashCode; import lombok.NonNull; +import lombok.ToString; import org.jetbrains.annotations.Nullable; /** @@ -32,21 +34,16 @@ *
  • FAILED: indicates that the service couldn't be created. * * - * @param state the creation state of the service. - * @param creationId the creation id of this result, if the state is not {@code FAILED}. - * @param serviceInfo the underlying service info, if the service was created successfully. * @since 4.0 */ -public record ServiceCreateResult( - @NonNull State state, - @Nullable UUID creationId, - @Nullable ServiceInfoSnapshot serviceInfo -) { +@ToString +@EqualsAndHashCode +@SuppressWarnings("ClassCanBeRecord") +public final class ServiceCreateResult { - /** - * A static create result indicating that the service creation failed. - */ - public static final ServiceCreateResult FAILED = new ServiceCreateResult(State.FAILED, null, null); + private final State state; + private final UUID creationId; + private final ServiceInfoSnapshot serviceInfo; /** * Creates a new result instance. @@ -57,13 +54,26 @@ public record ServiceCreateResult( * @throws NullPointerException if the given state is null. * @throws IllegalArgumentException if the creation id is missing or the service info depending on the given state. */ - public ServiceCreateResult { + public ServiceCreateResult( + @NonNull State state, + @Nullable UUID creationId, + @Nullable ServiceInfoSnapshot serviceInfo + ) { // creation id must be present for deferred and created Preconditions.checkArgument(state == State.FAILED || creationId != null); // created services must have a service information present Preconditions.checkArgument(state != State.CREATED || serviceInfo != null); + + this.state = state; + this.creationId = creationId; + this.serviceInfo = serviceInfo; } + /** + * A static create result indicating that the service creation failed. + */ + public static final ServiceCreateResult FAILED = new ServiceCreateResult(State.FAILED, null, null); + /** * Creates a new result with the state set to deferred and using the given creation id. * @@ -94,7 +104,6 @@ public record ServiceCreateResult( * @return the creation id of this service. * @throws IllegalStateException if called when the state of this result is {@code FAILED}. */ - @Override public @NonNull UUID creationId() { // we could check for state != State.FAILED as well, but then IJ gives a warning that creationId might be null Preconditions.checkState(this.creationId != null, "Cannot retrieve creationId for State.FAILED"); @@ -108,13 +117,22 @@ public record ServiceCreateResult( * @return the service info of the created service. * @throws IllegalStateException if called when the state of this result is not {@code CREATED}. */ - @Override public @NonNull ServiceInfoSnapshot serviceInfo() { // we could check for state == State.CREATED as well, but then IJ gives a warning that serviceInfo might be null Preconditions.checkState(this.serviceInfo != null, "Can only retrieve service info for State.CREATED"); return this.serviceInfo; } + /** + * Get the state of this service creation. Use this to ensure that the service creation was successful when accessing + * {@link #creationId()} or {@link #serviceInfo()}. + * + * @return the state of this service creation. + */ + public @NonNull State state() { + return this.state; + } + /** * Represents the state of a service creation. * From e5e6f327fa3607b9e62a0cec2718a58f48aebf9a Mon Sep 17 00:00:00 2001 From: 0utplay Date: Sun, 7 May 2023 16:19:05 +0200 Subject: [PATCH 4/5] chore: make the constructor private --- .../cloudnetservice/driver/service/ServiceCreateResult.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/driver/src/main/java/eu/cloudnetservice/driver/service/ServiceCreateResult.java b/driver/src/main/java/eu/cloudnetservice/driver/service/ServiceCreateResult.java index 4f4f73c646..dbb0973626 100644 --- a/driver/src/main/java/eu/cloudnetservice/driver/service/ServiceCreateResult.java +++ b/driver/src/main/java/eu/cloudnetservice/driver/service/ServiceCreateResult.java @@ -38,6 +38,8 @@ */ @ToString @EqualsAndHashCode +// we need to be able to serialize this class and its fields without invoking the getters & setters to respond +// to service creation requests coming from the REST API @SuppressWarnings("ClassCanBeRecord") public final class ServiceCreateResult { @@ -54,7 +56,7 @@ public final class ServiceCreateResult { * @throws NullPointerException if the given state is null. * @throws IllegalArgumentException if the creation id is missing or the service info depending on the given state. */ - public ServiceCreateResult( + private ServiceCreateResult( @NonNull State state, @Nullable UUID creationId, @Nullable ServiceInfoSnapshot serviceInfo From 0deab4eb44a8f6ab4b5cd03fdc109c134ef0324d Mon Sep 17 00:00:00 2001 From: 0utplay Date: Tue, 9 May 2023 15:35:40 +0200 Subject: [PATCH 5/5] chore: move the failure instance up --- .../driver/service/ServiceCreateResult.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/driver/src/main/java/eu/cloudnetservice/driver/service/ServiceCreateResult.java b/driver/src/main/java/eu/cloudnetservice/driver/service/ServiceCreateResult.java index dbb0973626..fd150f247c 100644 --- a/driver/src/main/java/eu/cloudnetservice/driver/service/ServiceCreateResult.java +++ b/driver/src/main/java/eu/cloudnetservice/driver/service/ServiceCreateResult.java @@ -43,6 +43,11 @@ @SuppressWarnings("ClassCanBeRecord") public final class ServiceCreateResult { + /** + * A static create result indicating that the service creation failed. + */ + public static final ServiceCreateResult FAILED = new ServiceCreateResult(State.FAILED, null, null); + private final State state; private final UUID creationId; private final ServiceInfoSnapshot serviceInfo; @@ -71,11 +76,6 @@ private ServiceCreateResult( this.serviceInfo = serviceInfo; } - /** - * A static create result indicating that the service creation failed. - */ - public static final ServiceCreateResult FAILED = new ServiceCreateResult(State.FAILED, null, null); - /** * Creates a new result with the state set to deferred and using the given creation id. *