Package org.apache.cassandra.cdc.sidecar
Class SidecarStatePersister
- java.lang.Object
-
- org.apache.cassandra.cdc.sidecar.SidecarStatePersister
-
- All Implemented Interfaces:
org.apache.cassandra.cdc.api.StatePersister
public class SidecarStatePersister extends java.lang.Object implements org.apache.cassandra.cdc.api.StatePersisterSidecarStatePersister buffers CDC state and flushes at regular time intervals, so we only write the latest CDC state and don't wastefully write expired data.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static classSidecarStatePersister.PersistWrapperprotected static classSidecarStatePersister.TimedFutureWrapper
-
Field Summary
Fields Modifier and Type Field Description protected java.util.concurrent.ConcurrentLinkedQueue<SidecarStatePersister.TimedFutureWrapper>activeFlushprotected java.util.concurrent.ConcurrentHashMap<SidecarStatePersister.PersistWrapper.Key,SidecarStatePersister.PersistWrapper>latestState
-
Constructor Summary
Constructors Constructor Description SidecarStatePersister(SidecarCdcOptions sidecarCdcOptions, org.apache.cassandra.cdc.api.CdcOptions cdcOptions, SidecarCdcStats sidecarCdcStats, SidecarCdcCassandraClient cassandraClient, org.apache.cassandra.spark.utils.AsyncExecutor asyncExecutor)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidflush()Flush active state persist callsprotected voidflushActive()Flush active in-flight persist writes.protected voidflushActiveSafe()java.util.List<org.apache.cassandra.cdc.state.CdcState>loadState(java.lang.String jobId, int partitionId, org.apache.cassandra.bridge.TokenRange tokenRange)java.util.stream.Stream<byte[]>loadStateForRange(java.lang.String jobId, org.apache.cassandra.bridge.TokenRange tokenRange)voidpersist(java.lang.String jobId, int partitionId, org.apache.cassandra.bridge.TokenRange tokenRange, java.nio.ByteBuffer buf)protected voidpersistToCassandra()protected voidpersistToCassandra(boolean force)protected SidecarStatePersister.TimedFutureWrapperpersistToCassandra(SidecarStatePersister.PersistWrapper state)voidstart()Start the SidecarStatePersister to flush to Cassandra every `persistDelay()`.voidstop()Stop the SidecarStatePersister gracefully, blocking to await for any pending flushes to complete.voidstop(boolean flush)
-
-
-
Field Detail
-
latestState
protected final java.util.concurrent.ConcurrentHashMap<SidecarStatePersister.PersistWrapper.Key,SidecarStatePersister.PersistWrapper> latestState
-
activeFlush
protected final java.util.concurrent.ConcurrentLinkedQueue<SidecarStatePersister.TimedFutureWrapper> activeFlush
-
-
Constructor Detail
-
SidecarStatePersister
public SidecarStatePersister(SidecarCdcOptions sidecarCdcOptions, org.apache.cassandra.cdc.api.CdcOptions cdcOptions, SidecarCdcStats sidecarCdcStats, SidecarCdcCassandraClient cassandraClient, org.apache.cassandra.spark.utils.AsyncExecutor asyncExecutor)
-
-
Method Detail
-
persist
public void persist(java.lang.String jobId, int partitionId, @Nullable org.apache.cassandra.bridge.TokenRange tokenRange, @NotNull java.nio.ByteBuffer buf)- Specified by:
persistin interfaceorg.apache.cassandra.cdc.api.StatePersister
-
loadState
@NotNull public java.util.List<org.apache.cassandra.cdc.state.CdcState> loadState(java.lang.String jobId, int partitionId, @Nullable org.apache.cassandra.bridge.TokenRange tokenRange)- Specified by:
loadStatein interfaceorg.apache.cassandra.cdc.api.StatePersister
-
loadStateForRange
public java.util.stream.Stream<byte[]> loadStateForRange(java.lang.String jobId, @Nullable org.apache.cassandra.bridge.TokenRange tokenRange)
-
start
public void start()
Start the SidecarStatePersister to flush to Cassandra every `persistDelay()`.
-
stop
public void stop()
Stop the SidecarStatePersister gracefully, blocking to await for any pending flushes to complete.
-
stop
public void stop(boolean flush)
-
persistToCassandra
protected void persistToCassandra()
-
persistToCassandra
protected void persistToCassandra(boolean force)
-
persistToCassandra
@Nullable protected SidecarStatePersister.TimedFutureWrapper persistToCassandra(@NotNull SidecarStatePersister.PersistWrapper state)
-
flush
protected void flush()
Flush active state persist calls
-
flushActiveSafe
protected void flushActiveSafe()
-
flushActive
protected void flushActive() throws java.util.concurrent.ExecutionException, java.lang.InterruptedExceptionFlush active in-flight persist writes.- Throws:
java.util.concurrent.ExecutionExceptionjava.lang.InterruptedException
-
-