Package com.linkedin.venice.client.store
Class LoggingTrackingStoreClient<K,V>
java.lang.Object
com.linkedin.venice.client.store.InternalAvroStoreClient<K,V>
com.linkedin.venice.client.store.DelegatingStoreClient<K,V>
com.linkedin.venice.client.store.LoggingTrackingStoreClient<K,V>
- Type Parameters:
K
- the type of keys used by the store clientV
- the type of values returned by the store client
- All Implemented Interfaces:
AvroGenericReadComputeStoreClient<K,
,V> AvroGenericStoreClient<K,
,V> Closeable
,AutoCloseable
- Direct Known Subclasses:
SpecificLoggingTrackingStoreClient
This class is a client wrapper that adds logging and tracking capabilities to store client operations.
The class is intended to be used when
ClientConfig.isStatTrackingEnabled()
is set to false. It will try to
log exceptions and high latency requests with rate limiting. It is not intended to be used in production environments
where performance and metric monitoring is critical.
This class extends DelegatingStoreClient
to encapsulate an internal store client and
override its key operations such as get
, getRaw
, batchGet
, and
streamingBatchGet
with additional logging and tracking functionality. It captures
the latency of operations and logs warnings when the latency exceeds predefined thresholds.
It also handles exceptions by logging unhealthy requests and rethrowing the exceptions for further handling.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionGet the values associated with the given keys and return them in a map of keys to values.void
compute
(ComputeRequestWrapper computeRequestWrapper, Set<K> keys, org.apache.avro.Schema resultSchema, StreamingCallback<K, ComputeGenericRecord> callback, long preRequestTimeInNS) Lookup the value by given key, and get(key).get() will return null if it doesn't exist.static <T> BiFunction<? super T,
Throwable, ? extends T> getLoggingCallback
(String storeName, long startTimeInNS) CompletableFuture<byte[]>
static void
handleStoreExceptionInternally
(Throwable throwable) streamingBatchGet
(Set<K> keys) Get the values associated with the given keys and return them in a map of keys to values.void
streamingBatchGet
(Set<K> keys, StreamingCallback<K, V> callback) Streaming interface forAvroGenericStoreClient.batchGet(Set)
.Methods inherited from class com.linkedin.venice.client.store.DelegatingStoreClient
close, compute, computeWithKeyPrefixFilter, get, getDeserializationExecutor, getInnerStoreClient, getKeySchema, getLatestValueSchema, getRaw, getSchemaReader, getStoreName, isProjectionFieldValidationEnabled, start, startWithExceptionThrownWhenFail
Methods inherited from class com.linkedin.venice.client.store.InternalAvroStoreClient
getStreamingCallback
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface com.linkedin.venice.client.store.AvroGenericReadComputeStoreClient
compute, compute, compute, computeAggregation
Methods inherited from interface com.linkedin.venice.client.store.AvroGenericStoreClient
get
-
Constructor Details
-
LoggingTrackingStoreClient
-
-
Method Details
-
get
Description copied from interface:AvroGenericStoreClient
Lookup the value by given key, and get(key).get() will return null if it doesn't exist. For now, if any backend error/exception happens, get(Object key).get() will throwExecutionException
, which is a wrapper of the real exception.- Specified by:
get
in interfaceAvroGenericStoreClient<K,
V> - Overrides:
get
in classInternalAvroStoreClient<K,
V> - Returns:
-
getRaw
- Overrides:
getRaw
in classInternalAvroStoreClient<K,
V>
-
batchGet
Description copied from interface:AvroGenericStoreClient
Get the values associated with the given keys and return them in a map of keys to values. Note that the returned map will only contain entries for the keys which have a value associated with them.- Specified by:
batchGet
in interfaceAvroGenericStoreClient<K,
V> - Overrides:
batchGet
in classDelegatingStoreClient<K,
V> - Returns:
- Throws:
VeniceClientException
-
streamingBatchGet
public void streamingBatchGet(Set<K> keys, StreamingCallback<K, V> callback) throws VeniceClientExceptionDescription copied from interface:AvroGenericStoreClient
Streaming interface forAvroGenericStoreClient.batchGet(Set)
. You can find more info inStreamingCallback
.- Specified by:
streamingBatchGet
in interfaceAvroGenericStoreClient<K,
V> - Overrides:
streamingBatchGet
in classDelegatingStoreClient<K,
V> - Throws:
VeniceClientException
-
streamingBatchGet
public CompletableFuture<VeniceResponseMap<K,V>> streamingBatchGet(Set<K> keys) throws VeniceClientException Description copied from interface:AvroGenericStoreClient
Get the values associated with the given keys and return them in a map of keys to values. When time-out happens for the following invocation:streamingBatchGet(keys).get(waitingTime, unit);
This function will return the available response instead of throwing aTimeoutException
. It means this function could return either full response or partial response.- Returns:
- Throws:
VeniceClientException
-
compute
public void compute(ComputeRequestWrapper computeRequestWrapper, Set<K> keys, org.apache.avro.Schema resultSchema, StreamingCallback<K, ComputeGenericRecord> callback, long preRequestTimeInNS) throws VeniceClientException- Specified by:
compute
in interfaceAvroGenericReadComputeStoreClient<K,
V> - Overrides:
compute
in classDelegatingStoreClient<K,
V> - Throws:
VeniceClientException
-
getLoggingCallback
public static <T> BiFunction<? super T,Throwable, getLoggingCallback? extends T> (String storeName, long startTimeInNS) -
handleStoreExceptionInternally
-