Class AbstractCommunicationProtocol<K,V>
- java.lang.Object
-
- io.github.dhruv1110.jcachex.distributed.communication.AbstractCommunicationProtocol<K,V>
-
- Type Parameters:
K
- the type of keysV
- the type of values
- All Implemented Interfaces:
CommunicationProtocol<K,V>
- Direct Known Subclasses:
TcpCommunicationProtocol
public abstract class AbstractCommunicationProtocol<K,V> extends Object implements CommunicationProtocol<K,V>
Abstract base class for communication protocol implementations.This class provides common functionality shared across all communication protocols, including serialization, broadcast operations, cache handling, and metrics. Concrete implementations only need to provide the transport-specific networking logic.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
AbstractCommunicationProtocol.CacheOperationRequest
Internal request structure for cache operations.protected static class
AbstractCommunicationProtocol.CacheOperationResponse
Internal response structure for cache operations.protected class
AbstractCommunicationProtocol.InternalCacheHandler<K,V>
Internal handler for actual cache operations.protected static class
AbstractCommunicationProtocol.OperationType
Internal operation types for cache communication.-
Nested classes/interfaces inherited from interface io.github.dhruv1110.jcachex.distributed.communication.CommunicationProtocol
CommunicationProtocol.CommunicationResult<T>, CommunicationProtocol.ProtocolConfig, CommunicationProtocol.ProtocolType
-
-
Field Summary
Fields Modifier and Type Field Description protected AbstractCommunicationProtocol.InternalCacheHandler<K,V>
cacheHandler
protected CommunicationProtocol.ProtocolConfig
config
protected AtomicLong
connectionFailures
protected Cache<K,V>
localCache
protected static Logger
logger
protected AtomicLong
messagesReceived
protected AtomicLong
messagesSent
protected AtomicBoolean
running
-
Constructor Summary
Constructors Modifier Constructor Description protected
AbstractCommunicationProtocol(CommunicationProtocol.ProtocolConfig config)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description CompletableFuture<Map<String,CommunicationProtocol.CommunicationResult<Void>>>
broadcastBatchInvalidation(Collection<String> nodeAddresses, Collection<K> keys)
Broadcast invalidation for multiple keys to multiple nodes.CompletableFuture<Map<String,CommunicationProtocol.CommunicationResult<Void>>>
broadcastClear(Collection<String> nodeAddresses)
Broadcast cache clear to multiple nodes.CompletableFuture<Map<String,CommunicationProtocol.CommunicationResult<Void>>>
broadcastInvalidation(Collection<String> nodeAddresses, K key)
Broadcast invalidation for a single key to multiple nodes.protected <T> T
deserializeObject(byte[] data)
CommunicationProtocol.ProtocolConfig
getConfig()
Get the protocol configuration.Map<String,Object>
getMetrics()
Get protocol-specific metrics.boolean
isRunning()
Check if the protocol is currently running.CompletableFuture<CommunicationProtocol.CommunicationResult<String>>
requestClusterInfo(String nodeAddress)
Request cluster information from a remote node.CompletableFuture<CommunicationProtocol.CommunicationResult<Map<K,V>>>
requestKeyMigration(String nodeAddress, Collection<K> keys)
Request key migration from a remote node during cluster rebalancing.CompletableFuture<CommunicationProtocol.CommunicationResult<V>>
sendGet(String nodeAddress, K key)
Send a GET request to retrieve a value from a remote node.CompletableFuture<CommunicationProtocol.CommunicationResult<String>>
sendHealthCheck(String nodeAddress)
Send a health check request to a remote node.CompletableFuture<CommunicationProtocol.CommunicationResult<Void>>
sendPut(String nodeAddress, K key, V value)
Send a PUT request to store a key-value pair on a remote node.CompletableFuture<CommunicationProtocol.CommunicationResult<V>>
sendRemove(String nodeAddress, K key)
Send a REMOVE request to delete a key from a remote node.protected abstract CompletableFuture<AbstractCommunicationProtocol.CacheOperationResponse>
sendRequest(String nodeAddress, AbstractCommunicationProtocol.CacheOperationRequest request)
Send a request to a remote node using the specific transport protocol.protected byte[]
serializeObject(Object obj)
void
setLocalCache(Cache<K,V> cache)
Set the local cache instance for handling incoming requests.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface io.github.dhruv1110.jcachex.distributed.communication.CommunicationProtocol
getProtocolType, startServer, stopServer
-
-
-
-
Field Detail
-
logger
protected static final Logger logger
-
config
protected final CommunicationProtocol.ProtocolConfig config
-
cacheHandler
protected final AbstractCommunicationProtocol.InternalCacheHandler<K,V> cacheHandler
-
running
protected final AtomicBoolean running
-
messagesSent
protected final AtomicLong messagesSent
-
messagesReceived
protected final AtomicLong messagesReceived
-
connectionFailures
protected final AtomicLong connectionFailures
-
-
Constructor Detail
-
AbstractCommunicationProtocol
protected AbstractCommunicationProtocol(CommunicationProtocol.ProtocolConfig config)
-
-
Method Detail
-
setLocalCache
public void setLocalCache(Cache<K,V> cache)
Description copied from interface:CommunicationProtocol
Set the local cache instance for handling incoming requests. This is called by the distributed cache implementation to provide the local cache instance that should be used when processing incoming requests from remote nodes.- Specified by:
setLocalCache
in interfaceCommunicationProtocol<K,V>
- Parameters:
cache
- the local cache instance
-
getConfig
public CommunicationProtocol.ProtocolConfig getConfig()
Description copied from interface:CommunicationProtocol
Get the protocol configuration.- Specified by:
getConfig
in interfaceCommunicationProtocol<K,V>
-
isRunning
public boolean isRunning()
Description copied from interface:CommunicationProtocol
Check if the protocol is currently running.- Specified by:
isRunning
in interfaceCommunicationProtocol<K,V>
-
getMetrics
public Map<String,Object> getMetrics()
Description copied from interface:CommunicationProtocol
Get protocol-specific metrics.- Specified by:
getMetrics
in interfaceCommunicationProtocol<K,V>
-
sendPut
public CompletableFuture<CommunicationProtocol.CommunicationResult<Void>> sendPut(String nodeAddress, K key, V value)
Description copied from interface:CommunicationProtocol
Send a PUT request to store a key-value pair on a remote node.- Specified by:
sendPut
in interfaceCommunicationProtocol<K,V>
-
sendGet
public CompletableFuture<CommunicationProtocol.CommunicationResult<V>> sendGet(String nodeAddress, K key)
Description copied from interface:CommunicationProtocol
Send a GET request to retrieve a value from a remote node.- Specified by:
sendGet
in interfaceCommunicationProtocol<K,V>
-
sendRemove
public CompletableFuture<CommunicationProtocol.CommunicationResult<V>> sendRemove(String nodeAddress, K key)
Description copied from interface:CommunicationProtocol
Send a REMOVE request to delete a key from a remote node.- Specified by:
sendRemove
in interfaceCommunicationProtocol<K,V>
-
sendHealthCheck
public CompletableFuture<CommunicationProtocol.CommunicationResult<String>> sendHealthCheck(String nodeAddress)
Description copied from interface:CommunicationProtocol
Send a health check request to a remote node.- Specified by:
sendHealthCheck
in interfaceCommunicationProtocol<K,V>
-
requestKeyMigration
public CompletableFuture<CommunicationProtocol.CommunicationResult<Map<K,V>>> requestKeyMigration(String nodeAddress, Collection<K> keys)
Description copied from interface:CommunicationProtocol
Request key migration from a remote node during cluster rebalancing.- Specified by:
requestKeyMigration
in interfaceCommunicationProtocol<K,V>
-
requestClusterInfo
public CompletableFuture<CommunicationProtocol.CommunicationResult<String>> requestClusterInfo(String nodeAddress)
Description copied from interface:CommunicationProtocol
Request cluster information from a remote node.- Specified by:
requestClusterInfo
in interfaceCommunicationProtocol<K,V>
-
broadcastInvalidation
public CompletableFuture<Map<String,CommunicationProtocol.CommunicationResult<Void>>> broadcastInvalidation(Collection<String> nodeAddresses, K key)
Description copied from interface:CommunicationProtocol
Broadcast invalidation for a single key to multiple nodes.- Specified by:
broadcastInvalidation
in interfaceCommunicationProtocol<K,V>
-
broadcastBatchInvalidation
public CompletableFuture<Map<String,CommunicationProtocol.CommunicationResult<Void>>> broadcastBatchInvalidation(Collection<String> nodeAddresses, Collection<K> keys)
Description copied from interface:CommunicationProtocol
Broadcast invalidation for multiple keys to multiple nodes.- Specified by:
broadcastBatchInvalidation
in interfaceCommunicationProtocol<K,V>
-
broadcastClear
public CompletableFuture<Map<String,CommunicationProtocol.CommunicationResult<Void>>> broadcastClear(Collection<String> nodeAddresses)
Description copied from interface:CommunicationProtocol
Broadcast cache clear to multiple nodes.- Specified by:
broadcastClear
in interfaceCommunicationProtocol<K,V>
-
sendRequest
protected abstract CompletableFuture<AbstractCommunicationProtocol.CacheOperationResponse> sendRequest(String nodeAddress, AbstractCommunicationProtocol.CacheOperationRequest request)
Send a request to a remote node using the specific transport protocol. This method must be implemented by concrete protocol classes.
-
serializeObject
protected byte[] serializeObject(Object obj)
-
deserializeObject
protected <T> T deserializeObject(byte[] data)
-
-