diff options
Diffstat (limited to 'clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/communication/http/RequestQueue.java')
-rw-r--r-- | clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/communication/http/RequestQueue.java | 87 |
1 files changed, 0 insertions, 87 deletions
diff --git a/clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/communication/http/RequestQueue.java b/clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/communication/http/RequestQueue.java deleted file mode 100644 index 2a3af5724ab..00000000000 --- a/clustercontroller-utils/src/main/java/com/yahoo/vespa/clustercontroller/utils/communication/http/RequestQueue.java +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.clustercontroller.utils.communication.http; - -import com.yahoo.vespa.clustercontroller.utils.communication.async.AsyncCallback; -import com.yahoo.vespa.clustercontroller.utils.communication.async.AsyncOperation; - -import java.util.LinkedList; -import java.util.logging.Logger; - -/** - * Utility class to schedule HTTP requests and keeping a maximum amount of them pending at a time. - */ -public class RequestQueue<V extends HttpResult> { - - private static final Logger log = Logger.getLogger(RequestQueue.class.getName()); - private final AsyncHttpClient<V> httpClient; - private final LinkedList<Request<V>> requestQueue = new LinkedList<>(); - private final int maxPendingRequests; - private int pendingRequests = 0; - - public RequestQueue(AsyncHttpClient<V> httpClient, int maxPendingRequests) { - this.httpClient = httpClient; - this.maxPendingRequests = maxPendingRequests; - } - - public boolean empty() { - synchronized (requestQueue) { - return (requestQueue.isEmpty() && pendingRequests == 0); - } - } - - public void waitUntilEmpty() throws InterruptedException { - synchronized (requestQueue) { - while (!empty()) { - requestQueue.wait(); - } - } - } - - public void schedule(HttpRequest request, AsyncCallback<V> callback) { - log.fine("Scheduling " + request + " call"); - synchronized (requestQueue) { - requestQueue.addLast(new Request<>(request, callback)); - sendMore(); - } - } - - private void sendMore() { - while (pendingRequests < maxPendingRequests && !requestQueue.isEmpty()) { - Request<V> call = requestQueue.removeFirst(); - log.fine("Sending " + call.getRequest() + "."); - ++pendingRequests; - AsyncOperation<V> op = httpClient.execute(call.getRequest()); - op.register(call); - } - } - - private class Request<V extends HttpResult> implements AsyncCallback<V> { - private final HttpRequest request; - private final AsyncCallback<V> callback; - - Request(HttpRequest request, AsyncCallback<V> callback) { - this.request = request; - this.callback = callback; - } - - public HttpRequest getRequest() { return request; } - - @Override - public void done(AsyncOperation<V> op) { - if (op.isSuccess()) { - log.fine("Operation " + op.getName() + " completed successfully"); - } else { - log.fine("Operation " + op.getName() + " failed: " + op.getCause()); - } - synchronized (requestQueue) { - --pendingRequests; - } - callback.done(op); - synchronized (requestQueue) { - requestQueue.notifyAll(); - sendMore(); - } - } - } - -} |