Class ThreeDFileBinaryRequestExecutor
- java.lang.Object
-
- com.cognite.client.servicesV1.executor.ThreeDFileBinaryRequestExecutor
-
public abstract class ThreeDFileBinaryRequestExecutor extends Object
This request executor implements specific behavior to deal with very large request/response bodies when operating on file binaries. It will cap in-memory bodies at 200MiB and use temporary blob storage to host the binary. This "overflow to disk" behavior is supported for both downloads and uploads. This class will execute an okhttp3 request on a separate thread and publish the result via aCompletableFuture
. 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 Modifier and Type Class Description static class
ThreeDFileBinaryRequestExecutor.Builder
static class
ThreeDFileBinaryRequestExecutor.ClientRequestException
Represents a request error caused by a client error.
-
Field Summary
Fields Modifier and Type Field Description protected static org.slf4j.Logger
LOG
-
Constructor Summary
Constructors Constructor Description ThreeDFileBinaryRequestExecutor()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description ThreeDFileBinary
downloadBinary(okhttp3.Request request)
Executes a given request and returns the response body as a 3d file binary.CompletableFuture<ThreeDFileBinary>
downloadBinaryAsync(okhttp3.Request request)
Executes a given request and returns the response body as a 3d file binary.ThreeDFileBinaryRequestExecutor
enableDeleteTempFile(boolean enable)
Configure how to treat a temp blob after an upload.ThreeDFileBinaryRequestExecutor
enableForceTempStorage(boolean enable)
Forces the use of temp storage for all binaries--not just the >200MiB ones.static ThreeDFileBinaryRequestExecutor
of(okhttp3.OkHttpClient client)
ThreeDFileBinaryRequestExecutor
withExecutor(Executor executor)
Sets the executor to use for running the api requests.ThreeDFileBinaryRequestExecutor
withMaxRetries(int retries)
Sets the maximum number of retries.ThreeDFileBinaryRequestExecutor
withTempStoragePath(URI path)
Sets the temporary storage path for storing large file binaries.ThreeDFileBinaryRequestExecutor
withValidResponseCodes(List<Integer> validResponseCodes)
Specifies a set of valid http response codes *in addition* to the 200-range.
-
-
-
Method Detail
-
of
public static ThreeDFileBinaryRequestExecutor of(okhttp3.OkHttpClient client)
-
withExecutor
public ThreeDFileBinaryRequestExecutor withExecutor(Executor executor)
Sets the executor to use for running the api requests. The default executor is aForkJoinPool
with a target parallelism of four threads per core.- Parameters:
executor
-- Returns:
-
withMaxRetries
public ThreeDFileBinaryRequestExecutor withMaxRetries(int retries)
Sets the maximum number of retries. The default setting is 3.- Parameters:
retries
-- Returns:
-
withValidResponseCodes
public ThreeDFileBinaryRequestExecutor withValidResponseCodes(List<Integer> validResponseCodes)
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:
-
enableForceTempStorage
public ThreeDFileBinaryRequestExecutor enableForceTempStorage(boolean enable)
Forces the use of temp storage for all binaries--not just the >200MiB ones. The default isfalse
.- Parameters:
enable
-- Returns:
-
withTempStoragePath
public ThreeDFileBinaryRequestExecutor withTempStoragePath(URI path)
Sets the temporary storage path for storing large file binaries. If the binary is >200 MiB it will be stored in temp storage instead of in memory. The following storage providers are supported: - Google Cloud Storage. Specify the temp path asgs://<my-storage-bucket>/<my-path>/
.- Parameters:
path
-- Returns:
-
enableDeleteTempFile
public ThreeDFileBinaryRequestExecutor enableDeleteTempFile(boolean enable)
Configure how to treat a temp blob after an upload. This setting only affects behavior when uploading file binaries to the Cognite API--it has no effect on downloading file binaries. When set totrue
, the temp file (if present) will be removed after a successful upload. If the file binary is memory-based (which is the default for small and medium sized files), this setting has no effect. When set tofalse
, the temp file (if present) will not be deleted. The default setting istrue
.- Parameters:
enable
-- Returns:
-
downloadBinaryAsync
public CompletableFuture<ThreeDFileBinary> downloadBinaryAsync(okhttp3.Request request)
Executes a given request and returns the response body as a 3d file binary. 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:
-
downloadBinary
public ThreeDFileBinary downloadBinary(okhttp3.Request request) throws Exception
Executes a given request and returns the response body as a 3d file binary. 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 aResponse
is 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 isdownloadBinaryAsync
- Throws:
Exception
-
-