Replies: 2 comments 4 replies
-
We could only after you'll provide some insights to us :) e.g. how to reproduce could be a good starting point |
Beta Was this translation helpful? Give feedback.
-
Hey everyone. The // RetryProcess, lines 88 - 90
protected boolean retriesExhausted(E entity) {
return entity.getStateCount() > configuration.getRetryLimit();
} The // StatefulEntity, lines 94 - 99
protected void transitionTo(int targetState) {
stateCount = state == targetState ? stateCount + 1 : 1;
state = targetState;
updateStateTimestamp();
setModified();
} During the processing of the RECEIVED state, the // DataPlaneManagerImpl, lines 244 - 281
private boolean processReceived(DataFlow dataFlow) {
var request = dataFlow.toRequest();
var transferService = transferServiceRegistry.resolveTransferService(request);
if (transferService == null) {
dataFlow.transitToFailed("No transferService available for DataFlow " + dataFlow.getId());
update(dataFlow);
return true;
}
dataFlow.transitionToStarted(runtimeId); // This transition ensures that the DataFlow's stateCount will always be 1
monitor.info("UPDATE dataflow %s. RuntimeId %s, UpdatedAt %s".formatted(dataFlow.getId(), dataFlow.getRuntimeId(), dataFlow.getUpdatedAt()));
update(dataFlow);
return entityRetryProcessFactory.doAsyncProcess(dataFlow, () -> transferService.transfer(request))
.entityRetrieve(id -> store.findByIdAndLease(id).orElse(f -> null))
.onSuccess((f, r) -> {
if (f.getState() != STARTED.code()) {
return;
}
if (r.succeeded()) {
f.transitToCompleted();
} else {
f.transitToFailed(r.getFailureDetail());
}
update(f);
})
.onFailure((f, t) -> {
f.transitToReceived(); // processReceived() will be executed again, but the stateCount won't increment
update(f);
})
.onRetryExhausted((f, t) -> {
f.transitToFailed(t.getMessage());
update(f);
})
.execute("start data flow");
} The constant oscillation between RECEIVED and STARTED doesn't allow the NOTE: These references are from v0.11.1! The latest developments in main are using the new |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Hello,
We've encountered an issue while upgrading our EDC-based project to version 0.11.1. During testing, we discovered that transfers configured for AmazonS3-PUSH with incorrect information for data destination result in an infinite retry loop.
Specifically, the dataplane gets stuck in the RECEIVED state, and the onProcessReceived method (DataPlaneManagerImpl) is executed indefinitely. This occurs because the method transitions the state to STARTED, and the asynchronous process subsequently fails, triggering the onFailure handler. This, in turn, causes the process to loop back to the onProcessReceived method. Importantly, the stateCount does not increment as the state oscillates between RECEIVED and STARTED.
Note: It's possible that this behavior existed in earlier versions as well. However, we only noticed it after upgrading to version 0.11.1 due to the addition of a log line within the onProcessReceived method, which highlighted the repeated execution.
We would like to inquire whether this behavior is intended.
Could you please provide some insights on this issue?
Thanks in advance for your help.
Beta Was this translation helpful? Give feedback.
All reactions