Class DispatchingAvroGenericStoreClient<K,V>
- All Implemented Interfaces:
AvroGenericReadComputeStoreClient<K,,V> AvroGenericStoreClient<K,,V> Closeable,AutoCloseable
- Direct Known Subclasses:
DispatchingAvroSpecificStoreClient,DispatchingVsonStoreClient
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final StoreMetadataprotected StoreDeserializerCache<V> -
Constructor Summary
ConstructorsConstructorDescriptionDispatchingAvroGenericStoreClient(StoreMetadata metadata, ClientConfig config) DispatchingAvroGenericStoreClient(StoreMetadata metadata, ClientConfig config, TransportClient transportClient) -
Method Summary
Modifier and TypeMethodDescriptionvoidclose()Release the internal resources.protected voidcompute(ComputeRequestContext<K, V> requestContext, ComputeRequestWrapper computeRequest, Set<K> keys, org.apache.avro.Schema resultSchema, StreamingCallback<K, ComputeGenericRecord> callback, long preRequestTimeInNS) decompressAndDeserialize(ByteBuffer rawValue, int version, K key) Fast Client implementation of the external-storage re-entry seam.protected CompletableFuture<V>get(GetRequestContext<K> requestContext, K key) protected RecordDeserializer<V>getDataRecordDeserializer(int schemaId) org.apache.avro.SchemaGet key schema.protected RecordSerializer<K>getKeySerializer(org.apache.avro.Schema keySchema) org.apache.avro.SchemaDeprecated.protected RecordDeserializer<MultiGetResponseRecordV1>getMultiGetResponseRecordDeserializer(int schemaId) protected StoreMetadatavoidRegister aStoreConfigChangeListenerthat fires when the underlying metadata layer observes a change to the store-level config snapshot (e.g.voidRegister aStoreVersionSwitchListenerthat fires when the underlying metadata layer observes a change to the store's current serving version.voidstart()protected voidstreamingBatchGet(BatchGetRequestContext<K, V> requestContext, Set<K> keys, StreamingCallback<K, V> callback) This is the main implementation of the "streaming" version of batch get.Methods inherited from class com.linkedin.venice.fastclient.InternalAvroStoreClient
batchGet, batchGet, compute, computeWithKeyPrefixFilter, get, isProjectionFieldValidationEnabled, streamingBatchGet, streamingBatchGet, streamingBatchGetMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface com.linkedin.venice.client.store.AvroGenericReadComputeStoreClient
compute, compute, compute, compute, computeAggregationMethods inherited from interface com.linkedin.venice.client.store.AvroGenericStoreClient
get
-
Field Details
-
metadata
-
storeDeserializerCache
-
-
Constructor Details
-
DispatchingAvroGenericStoreClient
-
DispatchingAvroGenericStoreClient
public DispatchingAvroGenericStoreClient(StoreMetadata metadata, ClientConfig config, TransportClient transportClient)
-
-
Method Details
-
getStoreMetadata
-
getClientConfig
- Specified by:
getClientConfigin classInternalAvroStoreClient<K,V>
-
get
protected CompletableFuture<V> get(GetRequestContext<K> requestContext, K key) throws VeniceClientException - Specified by:
getin classInternalAvroStoreClient<K,V> - Throws:
VeniceClientException
-
streamingBatchGet
protected void streamingBatchGet(BatchGetRequestContext<K, V> requestContext, Set<K> keys, StreamingCallback<K, V> callback) This is the main implementation of the "streaming" version of batch get. As such this API doesn't provide a way to handle early exceptions. Further we tend to mix callback style and future style of asynchronous programming which makes it hard to make flexible and composable abstractions on top of this. For future enhancements we could consider returning a java stream , a bounded stream in the shape of a flux (project reactor), or one of the similar java 9 flow constructs.- Specified by:
streamingBatchGetin classInternalAvroStoreClient<K,V> - Parameters:
requestContext-keys-callback-
-
compute
protected void compute(ComputeRequestContext<K, V> requestContext, ComputeRequestWrapper computeRequest, Set<K> keys, org.apache.avro.Schema resultSchema, StreamingCallback<K, throws VeniceClientExceptionComputeGenericRecord> callback, long preRequestTimeInNS) - Specified by:
computein classInternalAvroStoreClient<K,V> - Throws:
VeniceClientException
-
getMultiGetResponseRecordDeserializer
protected RecordDeserializer<MultiGetResponseRecordV1> getMultiGetResponseRecordDeserializer(int schemaId) -
getDataRecordDeserializer
protected RecordDeserializer<V> getDataRecordDeserializer(int schemaId) throws VeniceClientException - Throws:
VeniceClientException
-
start
- Throws:
VeniceClientException
-
getKeySerializer
-
close
public void close()Description copied from interface:AvroGenericStoreClientRelease the internal resources. -
getStoreName
-
getKeySchema
public org.apache.avro.Schema getKeySchema()Description copied from interface:AvroGenericStoreClientGet key schema. -
getLatestValueSchema
Deprecated.Description copied from interface:AvroGenericStoreClientGet the latest value schema known in current store client. This function doesn't guarantee it will return the latest schema if you add a new value schema when current store client is running. -
getSchemaReader
-
decompressAndDeserialize
public V decompressAndDeserialize(ByteBuffer rawValue, int version, K key) throws VeniceClientException Fast Client implementation of the external-storage re-entry seam. Reads the 4-byte BE writer-schema-id prefix fromrawValue, resolves the per-version compressor frommetadata(including any ZSTD dictionary cached on prior refreshes), decompresses the remainder, and runs the existing deserialization pipeline at the embedded schema id. ReusesgetDataRecordDeserializer(int)+tryToDeserialize(com.linkedin.venice.serializer.RecordDeserializer<T>, java.nio.ByteBuffer, int, K)so any future change to the in-band read path propagates here automatically.- Parameters:
rawValue- the value payload, prefixed by a 4-byte big-endian writer-schema id. Must not benulland must have at least 4 bytes.version- the store version therawValuebytes were written under. Used to resolve the per-version compressor (including any ZSTD dictionary). Throws if the version is unknown to the metadata layer.key- the key that produced this value (used only for error messages and tracing)- Returns:
- the deserialized value
- Throws:
VeniceClientException- if the version is unknown, or if decompression or deserialization fails
-
registerVersionSwitchListener
Description copied from interface:AvroGenericStoreClientRegister aStoreVersionSwitchListenerthat fires when the underlying metadata layer observes a change to the store's current serving version.Fast Client only. Thin-client implementations inherit the throwing default — there is no metadata refresh loop on the thin client, so version-switch transitions are not observable. See
com.linkedin.venice.fastclient.DispatchingAvroGenericStoreClientfor the Fast Client implementation andStoreVersionSwitchListenerfor threading and exception semantics.Registration timing. Listeners must be registered before
AvroGenericStoreClient.start()to observe the initial transition committed by the first metadata refresh. Listeners registered afterstart()returns observe only subsequent transitions (and re-entrant registration from inside a callback observes only subsequent transitions as well). Callers needing the initial transition should use the non-starting factory entry point (com.linkedin.venice.fastclient.factory.ClientFactory#getGenericStoreClient), register their listeners, then callstart()on the returned client.Registration is thread-safe.
-
registerStoreConfigChangeListener
Description copied from interface:AvroGenericStoreClientRegister aStoreConfigChangeListenerthat fires when the underlying metadata layer observes a change to the store-level config snapshot (e.g. operator-drivenexternalStorageReadModeflip).Fast Client only. Thin-client implementations inherit the throwing default. See
com.linkedin.venice.fastclient.DispatchingAvroGenericStoreClientfor the Fast Client implementation andStoreConfigChangeListenerfor threading and exception semantics.Registration timing. Same as
AvroGenericStoreClient.registerVersionSwitchListener(com.linkedin.venice.client.store.listeners.StoreVersionSwitchListener)— register beforeAvroGenericStoreClient.start()to observe the initial snapshot; post-start registration observes only subsequent changes.
-