Class RequestExecutor
java.lang.Object
com.cognite.client.servicesV1.executor.RequestExecutor
This class will execute an okhttp3 request on a separate thread and publish the result via a
CompletableFuture. This allows the client code to spin off multiple concurrent request without blocking
the main thread.
This represents the "blocking IO on a separate thread" pattern, and will work fine for client workloads (limited
number of concurrent requests).-
Nested Class Summary
Nested Classes -
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionexecuteRequest(okhttp3.Request request) Executes a given request.executeRequestAsync(okhttp3.Request request) Executes a given request.static RequestExecutorof(okhttp3.OkHttpClient client) withExecutor(Executor executor) Sets the executor to use for running the api requests.withHttpClient(okhttp3.OkHttpClient client) Sets the http client to use for executing the http requests.withMaxRetries(int retries) Sets the maximum number of retries.withValidResponseCodes(List<Integer> validResponseCodes) Specifies a set of valid http response codes *in addition* to the 200-range.
-
Field Details
-
LOG
protected final org.slf4j.Logger LOG
-
-
Constructor Details
-
RequestExecutor
public RequestExecutor()
-
-
Method Details
-
of
-
withHttpClient
Sets the http client to use for executing the http requests.- Parameters:
client- the http client to use for requests.- Returns:
- the RequestExecutor with the applied configuration.
-
withExecutor
Sets the executor to use for running the api requests. The default executor is aForkJoinPoolwith a target parallelism of four threads per core.- Parameters:
executor- the executor to use for running the api requests.- Returns:
- the RequestExecutor with the applied configuration.
-
withMaxRetries
Sets the maximum number of retries. The default setting is 3.- Parameters:
retries- the max number of retries- Returns:
- the RequestExecutor with the applied configuration.
-
withValidResponseCodes
Specifies a set of valid http response codes *in addition* to the 200-range. By default, any 2xx response is considered a valid response. By specifying additional codes, this executor will return responses from outside the 200-range. This could be useful in case you want to handle non-200 responses with custom logic. For example, duplicate detection and constraint violations are reported as non-200 responses from the Cognite API.- Parameters:
validResponseCodes- A list of valid response codes.- Returns:
- the RequestExecutor with the applied configuration.
-
executeRequestAsync
Executes a given request. Checks for transient server errors and retires the request until a valid response is produced, or the max number of retries is reached. This method executes as a blocking I/O operation on a separate thread--the calling thread is not blocked and can continue working on its tasks. Each retry is performed with exponential back-off in case the api is overloaded. If no valid response can be produced, this method will throw an exception.- Parameters:
request- The request to execute- Returns:
- a
CompletableFutureencapsulating the future response.
-
executeRequest
Executes a given request. Checks for transient server errors and retires the request until a valid response is produced, or the max number of retries is reached. This method blocks until aResponseis produced. Each retry is performed with exponential back-off in case the api is overloaded. If no valid response can be produced, this method will throw an exception. The async version of this method isexecuteRequestAsync- Throws:
Exception
-