Skip to content
This repository was archived by the owner on Oct 23, 2025. It is now read-only.

Commit 3cf0fcf

Browse files
authored
Fix for delete handler eventual consistency (#59)
* Modified the wait after delete to be 30secs from 10 secs * Fix for workgroup delete handler eventual consistency
1 parent 3f3a1ab commit 3cf0fcf

File tree

4 files changed

+29
-4
lines changed

4 files changed

+29
-4
lines changed

aws-redshiftserverless-workgroup/src/main/java/software/amazon/redshiftserverless/workgroup/BaseHandlerStd.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ public abstract class BaseHandlerStd extends BaseHandler<CallbackContext> {
4040
public static final String BUSY_WORKGROUP_RETRY_EXCEPTION_MESSAGE =
4141
"There is an operation running on the existing workgroup";
4242

43+
// This is for delete workgroup operation. We need AdminWF to finish the operation completely
44+
// This is needed for CTV2 to work
45+
public static final int EVENTUAL_CONSISTENCY_DELAY_SECONDS = 300;
46+
4347
protected static boolean isRetriableWorkgroupException(ConflictException exception) {
4448
return exception.getMessage().contains(BUSY_WORKGROUP_RETRY_EXCEPTION_MESSAGE);
4549
}

aws-redshiftserverless-workgroup/src/main/java/software/amazon/redshiftserverless/workgroup/CallbackContext.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@
88
@lombok.EqualsAndHashCode(callSuper = true)
99
public class CallbackContext extends StdCallbackContext {
1010
int retryOnResourceNotFound = 5;
11+
boolean propagationDelay = false;
1112
}

aws-redshiftserverless-workgroup/src/main/java/software/amazon/redshiftserverless/workgroup/DeleteHandler.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,16 @@ protected ProgressEvent<ResourceModel, CallbackContext> handleRequest(final Amaz
4242
return ProgressEvent.progress(Translator.translateFromDeleteResponse(awsResponse), callbackContext);
4343
})
4444
)
45+
.then(progress -> {
46+
if (progress.getCallbackContext().isPropagationDelay()) {
47+
logger.log("Propagation delay completed");
48+
return ProgressEvent.progress(progress.getResourceModel(), progress.getCallbackContext());
49+
}
50+
progress.getCallbackContext().setPropagationDelay(true);
51+
logger.log("Setting propagation delay");
52+
return ProgressEvent.defaultInProgressHandler(progress.getCallbackContext(),
53+
EVENTUAL_CONSISTENCY_DELAY_SECONDS, progress.getResourceModel());
54+
})
4555
.then(progress ->
4656
proxy.initiate("AWS-RedshiftServerless-Workgroup::ReadNameSpaceAfterDelete", proxyClient, progress.getResourceModel(), progress.getCallbackContext())
4757
.translateToServiceRequest(Translator::translateToReadNamespaceRequest)

aws-redshiftserverless-workgroup/src/test/java/software/amazon/redshiftserverless/workgroup/DeleteHandlerTest.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,21 @@ public void handleRequest_SimpleSuccess() {
7070
final ProgressEvent<ResourceModel, CallbackContext> response = handler.handleRequest(proxy, request, new CallbackContext(), proxyClient, logger);
7171

7272
assertThat(response).isNotNull();
73-
assertThat(response.getStatus()).isEqualTo(OperationStatus.SUCCESS);
74-
assertThat(response.getCallbackDelaySeconds()).isEqualTo(0);
75-
assertThat(response.getResourceModel()).isNull();
76-
assertThat(response.getResourceModels()).isNull();
73+
assertThat(response.getStatus()).isEqualTo(OperationStatus.IN_PROGRESS);
74+
assertThat(response.getCallbackDelaySeconds()).isEqualTo(300);
75+
assertThat(response.getResourceModel()).isNotNull();
7776
assertThat(response.getMessage()).isNull();
7877
assertThat(response.getErrorCode()).isNull();
78+
79+
final ProgressEvent<ResourceModel, CallbackContext> response2 =
80+
handler.handleRequest(proxy, request,response.getCallbackContext(), proxyClient, logger);
81+
82+
assertThat(response2).isNotNull();
83+
assertThat(response2.getStatus()).isEqualTo(OperationStatus.SUCCESS);
84+
assertThat(response2.getCallbackDelaySeconds()).isEqualTo(0);
85+
assertThat(response2.getResourceModel()).isNull();
86+
assertThat(response2.getResourceModels()).isNull();
87+
assertThat(response2.getMessage()).isNull();
88+
assertThat(response2.getErrorCode()).isNull();
7989
}
8090
}

0 commit comments

Comments
 (0)