Skip to content

Commit

Permalink
Block outbound request until previous one is completed
Browse files Browse the repository at this point in the history
  • Loading branch information
daniyaalk committed Oct 28, 2024
1 parent c1d271c commit 55b0d81
Showing 1 changed file with 17 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

import static com.degressly.proxy.core.Constants.DEGRESSLY_CACHE_POPULATION_REQUEST;
import static com.degressly.proxy.core.Constants.TRACE_ID;
Expand All @@ -44,18 +45,33 @@ public class DefaultReplayHandlerImpl implements ReplayHandler {

private final ExecutorService incomingExecutorService = Executors.newSingleThreadExecutor();

private Future<?> previousIncomingRequestFuture = null;

@Override
public void handle(DegresslyRequest degresslyRequest) {

if ("OUTGOING".equals(degresslyRequest.getType())) {
outgoingExecutorService.submit(() -> handleOutgoingRequest(degresslyRequest));
}
else {
incomingExecutorService.submit(() -> handleIncomingRequest(degresslyRequest));
performOneConcurrentOutgoingRequest(degresslyRequest);
}

}

private void performOneConcurrentOutgoingRequest(DegresslyRequest degresslyRequest) {
if (previousIncomingRequestFuture != null && !previousIncomingRequestFuture.isDone()) {
try {
previousIncomingRequestFuture.get();
}
catch (Exception e) {
log.error("Error while executing incoming request: ", e);
}
}
previousIncomingRequestFuture = incomingExecutorService
.submit(() -> handleIncomingRequest(degresslyRequest));
}

private void handleIncomingRequest(DegresslyRequest degresslyRequest) {
var httpServletRequest = getGeneratedHttpServletRequest(degresslyRequest);
if (httpServletRequest == null) {
Expand Down

0 comments on commit 55b0d81

Please sign in to comment.