public class SingleChronicleQueue extends net.openhft.chronicle.core.io.AbstractCloseable implements RollingChronicleQueue
| Modifier and Type | Field and Description |
|---|---|
static String |
DISK_SPACE_CHECKER_NAME |
protected boolean |
doubleBuffer |
protected @NotNull net.openhft.chronicle.core.threads.EventLoop |
eventLoop |
protected @NotNull TableStore<SCQMeta> |
metaStore |
protected @NotNull WireStorePool |
pool |
static String |
QUEUE_METADATA_FILE |
protected int |
sourceId |
protected ThreadLocal<ExcerptAppender> |
strongExcerptAppenderThreadLocal |
static String |
SUFFIX |
CHECK_THREAD_SAFETY, DISABLE_DISCARD_WARNING, DISABLE_THREAD_SAFETY, STRICT_DISCARD_WARNING, WARN_NSTEST_BLOCK_SIZE| Modifier | Constructor and Description |
|---|---|
protected |
SingleChronicleQueue(@NotNull SingleChronicleQueueBuilder builder) |
| Modifier and Type | Method and Description |
|---|---|
@NotNull ExcerptAppender |
acquireAppender()
Returns a ExcerptAppender for this ChronicleQueue that is local to the current Thread.
|
<T> void |
addCloseListener(net.openhft.chronicle.core.io.Closeable key) |
WriteLock |
appendLock() |
long |
blockSize() |
long |
bufferCapacity() |
boolean |
buffered() |
void |
clear()
Removes all the excerpts in the current ChronicleQueue.
|
void |
closeStore(@Nullable SingleChronicleQueueStore store) |
long |
countExcerpts(long fromIndex,
long toIndex)
Will give you the number of excerpts between 2 index?s ( as exists on the current file system ).
|
protected void |
createAppenderCondition(@NotNull Condition createAppenderCondition) |
@NotNull ExcerptTailer |
createTailer()
Creates and returns a new ExcerptTailer for this ChronicleQueue.
|
@NotNull ExcerptTailer |
createTailer(String id)
Creates and returns a new ExcerptTailer for this ChronicleQueue with the given unique
id. |
int |
cycle() |
int |
cycle(net.openhft.chronicle.core.time.TimeProvider timeProvider) |
protected CycleCalculator |
cycleCalculator(ZoneId zoneId) |
int |
deltaCheckpointInterval()
Returns the Delta Checkpoint Interval for this ChronicleQueue.
|
@NotNull String |
dump()
Creates and returns a new String representation of this ChronicleQueue in YAML-format.
|
void |
dump(@NotNull Writer writer,
long fromIndex,
long toIndex)
Dumps a representation of this ChronicleQueue to the provided
writer in YAML-format. |
@NotNull String |
dumpLastHeader()
Creates and returns a new String representation of this ChronicleQueue's last header in YAML-format.
|
long |
entryCount()
This method creates a tailer and count the number of messages between the start of the queue ( see @link firstIndex() ) and the end.
|
long |
epoch() |
@NotNull net.openhft.chronicle.core.threads.EventLoop |
eventLoop() |
long |
exceptsPerCycle(int cycle) |
@NotNull File |
file()
Returns the base directory where ChronicleQueue stores its data.
|
@NotNull String |
fileAbsolutePath()
Returns the absolute path of the base directory where ChronicleQueue stores its data.
|
protected int |
fileToCycle(File queueFile)
Deprecated.
|
protected void |
finalize() |
int |
firstCycle() |
long |
firstIndex()
Returns the lowest valid index available for this ChronicleQueue, or
Long.MAX_VALUE
if no such index exists. |
int |
indexCount() |
@NotNull net.openhft.chronicle.core.values.LongValue |
indexForId(@NotNull String id) |
int |
indexSpacing() |
long |
lastAcknowledgedIndexReplicated()
when using replication to another host, this is the highest last index that has been confirmed to have been read by all of the remote host(s).
|
void |
lastAcknowledgedIndexReplicated(long newValue)
Sets the last index that has been sent to a remote host.
|
int |
lastCycle() |
long |
lastIndex()
Returns the index of the last non-metadata excerpt written to this ChronicleQueue,
or -1 if the queue is empty.
|
long |
lastIndexReplicated()
when using replication to another host, this is the maximum last index that has been sent to any of the remote host(s).
|
void |
lastIndexReplicated(long indexReplicated)
Sets the last index that has been sent to a remote host.
|
NavigableSet<Long> |
listCyclesBetween(int lowerCycle,
int upperCycle) |
TableStore |
metaStore() |
protected @NotNull ExcerptAppender |
newAppender() |
int |
nextCycle(int cycle,
@NotNull TailerDirection direction)
the next available cycle, no cycle will be created by this method, this method is typically
used by a tailer to jump to the next cycle when the cycles are not adjacent.
|
@NotNull Consumer<net.openhft.chronicle.bytes.BytesRingBufferStats> |
onRingBufferStats() |
long |
overlapSize() |
protected void |
performClose() |
@NotNull QueueLock |
queueLock() |
void |
refreshDirectoryListing()
Refreshed this ChronicleQueue's view of the directory used for storing files.
|
@NotNull RollCycle |
rollCycle()
Returns the
RollCycle for this ChronicleQueue. |
int |
sourceId()
Returns the source id.
|
protected StoreFileListener |
storeFileListener() |
@Nullable SingleChronicleQueueStore |
storeForCycle(int cycle,
long epoch,
boolean createIfAbsent,
SingleChronicleQueueStore oldStore) |
protected @Nullable net.openhft.chronicle.core.values.LongValue |
tableStoreAcquire(CharSequence key,
long index) |
long |
tableStoreGet(CharSequence key) |
void |
tableStorePut(CharSequence key,
long index) |
protected boolean |
threadSafetyCheck(boolean isUsed) |
@NotNull net.openhft.chronicle.core.time.TimeProvider |
time()
Returns the
TimeProvider for this ChronicleQueue. |
@NotNull String |
toString() |
@NotNull net.openhft.chronicle.wire.WireType |
wireType()
Returns the
WireType used for this ChronicleQueue. |
assertCloseablesClosed, clearUsedByThread, close, createdHere, disableCloseableTracing, enableCloseableTracing, isClosed, isClosing, isInUserThread, performCloseInBackground, referenceId, resetUsedByThread, shouldPerformCloseInBackground, shouldWaitForClosed, throwExceptionIfClosed, throwExceptionIfClosedInSetter, unmonitor, waitForCloseablesToClose, waitForClosed, warnAndCloseIfNotClosedclone, equals, getClass, hashCode, notify, notifyAll, wait, wait, waitdump, methodWriter, methodWriterBuilder, single, singleBuilder, singleBuilder, singleBuilder, singleBuilderclose, closeQuietly, closeQuietly, notifyClosing, warnAndCloseIfNotClosedpublic static final String SUFFIX
public static final String QUEUE_METADATA_FILE
public static final String DISK_SPACE_CHECKER_NAME
@NotNull protected final @NotNull net.openhft.chronicle.core.threads.EventLoop eventLoop
@NotNull protected final @NotNull TableStore<SCQMeta> metaStore
@NotNull protected final @NotNull WireStorePool pool
protected final boolean doubleBuffer
protected int sourceId
protected final ThreadLocal<ExcerptAppender> strongExcerptAppenderThreadLocal
protected SingleChronicleQueue(@NotNull
@NotNull SingleChronicleQueueBuilder builder)
protected void createAppenderCondition(@NotNull
@NotNull Condition createAppenderCondition)
protected CycleCalculator cycleCalculator(ZoneId zoneId)
public int sourceId()
ChronicleQueueMessageHistory
The source id is non-negative.
sourceId in interface ChronicleQueuepublic long lastAcknowledgedIndexReplicated()
lastAcknowledgedIndexReplicated in interface ChronicleQueuepublic void lastAcknowledgedIndexReplicated(long newValue)
ChronicleQueuelastAcknowledgedIndexReplicated in interface ChronicleQueuenewValue - last acknowledged index that has been sent to the remote host(s).ChronicleQueue.lastAcknowledgedIndexReplicated()public void refreshDirectoryListing()
ChronicleQueueInvoke this method if you delete file from a chronicle-queue directory
The problem solved by this is that we cache the structure of the queue directory in order to reduce file system adds latency. Calling this method, after deleting .cq4 files, will update the internal caches accordingly,
refreshDirectoryListing in interface ChronicleQueuepublic long lastIndexReplicated()
lastIndexReplicated in interface ChronicleQueuepublic void lastIndexReplicated(long indexReplicated)
ChronicleQueuelastIndexReplicated in interface ChronicleQueueindexReplicated - last index that has been sent to the remote host.ChronicleQueue.lastIndexReplicated()public void clear()
ChronicleQueueclear in interface ChronicleQueue@NotNull public @NotNull File file()
ChronicleQueuefile in interface ChronicleQueue@NotNull public @NotNull String fileAbsolutePath()
ChronicleQueueThis value might be cached, as getAbsolutePath is expensive
fileAbsolutePath in interface ChronicleQueue@NotNull public @NotNull String dumpLastHeader()
ChronicleQueuedumpLastHeader in interface ChronicleQueue@NotNull public @NotNull String dump()
ChronicleQueuedump in interface ChronicleQueuepublic void dump(@NotNull
@NotNull Writer writer,
long fromIndex,
long toIndex)
ChronicleQueuewriter in YAML-format.
Dumping will be made from the provided (@code fromIndex) (inclusive) to the provided
toIndex (inclusive).dump in interface ChronicleQueuewriter - to write tofromIndex - first index (inclusive)toIndex - last index (inclusive)public int indexCount()
indexCount in interface RollingChronicleQueuepublic int indexSpacing()
indexSpacing in interface RollingChronicleQueuepublic long epoch()
epoch in interface RollingChronicleQueue@NotNull public @NotNull RollCycle rollCycle()
ChronicleQueueRollCycle for this ChronicleQueue.rollCycle in interface ChronicleQueuerollCycle in interface RollingChronicleQueueRollCycle for this ChronicleQueueRollCyclepublic int deltaCheckpointInterval()
ChronicleQueueThe value returned is always a power of two.
deltaCheckpointInterval in interface ChronicleQueuedeltaCheckpointInterval in interface RollingChronicleQueuepublic boolean buffered()
@NotNull public @NotNull net.openhft.chronicle.core.threads.EventLoop eventLoop()
@NotNull protected @NotNull ExcerptAppender newAppender()
protected StoreFileListener storeFileListener()
@NotNull public @NotNull ExcerptAppender acquireAppender()
ChronicleQueueAn Appender can be used to store new excerpts sequentially to the queue.
An Appender is NOT thread-safe and, in addition to that, confined to be used by the creating thread only.. Sharing an Appender across threads is unsafe and will inevitably lead to errors and unspecified behaviour.
This method returns a ThreadLocal appender, so does not produce any garbage, hence it's safe to simply call
this method every time an appender is needed.
acquireAppender in interface ChronicleQueue@NotNull public @NotNull QueueLock queueLock()
queueLock in interface RollingChronicleQueueQueueLock This lock is held while the queue replication cluster is back-filling.
By Back-filling we mean that, as part of the fail-over process a sink, may actually have more data than a source,
hence we need to back copy data from the sinks to the source upon startup.
While we are doing this we lock the queue so that new appenders can not be created.
Queue locks have no impact if you are not using queue replication because the are implemented as a no-op.
public WriteLock appendLock()
WriteLock that is used to lock appends. This is only used by Queue Enterprise
sink replication handlers. See Queue Enterprise docs for more details.@NotNull public @NotNull ExcerptTailer createTailer(String id)
ChronicleQueueid.
The id is used to persistently store the latest index for the Tailer. Any new Tailer with a previously used id will continue where the old one left off. A Tailer is NOT thread-safe. A Tailer can be created by one Thread and might be used by at most one other Thread.. Sharing a Tailer across threads is unsafe and will inevitably lead to errors and unspecified behaviour.
If the provided id is null, the Tailer will be unnamed and this is
equivalent to invoking ChronicleQueue.createTailer().
createTailer in interface ChronicleQueueid - unique id for a tailer which uses to track where it was up toidChronicleQueue.createTailer()@NotNull
public @NotNull net.openhft.chronicle.core.values.LongValue indexForId(@NotNull
@NotNull String id)
indexForId in interface ChronicleQueue@NotNull public @NotNull ExcerptTailer createTailer()
ChronicleQueueThe tailor is created at the start, so unless you are using named tailors, this method is the same as calling `net.openhft.chronicle.queue.ChronicleQueue#createTailer(java.lang.String).toStart()`
createTailer in interface ChronicleQueueChronicleQueue.createTailer(String)@Nullable public final @Nullable SingleChronicleQueueStore storeForCycle(int cycle, long epoch, boolean createIfAbsent, SingleChronicleQueueStore oldStore)
storeForCycle in interface RollingChronicleQueuecycle - the cycleepoch - an epoch offset as the number of number of milliseconds since January
1, 1970, 00:00:00 GMTcreateIfAbsent - create missing stores if true, or return null if missingWireStore associated with this cycle, or null if !createIfAbsent
is false and absentpublic int nextCycle(int cycle,
@NotNull
@NotNull TailerDirection direction)
throws ParseException
RollingChronicleQueuenextCycle in interface RollingChronicleQueuecycle - the current cycledirection - the directionParseExceptionpublic long exceptsPerCycle(int cycle)
public long countExcerpts(long fromIndex,
long toIndex)
countExcerpts in interface RollingChronicleQueuefromIndex - the lower indextoIndex - the higher indexIllegalStateException - if we are not able to read the chronicle filespublic NavigableSet<Long> listCyclesBetween(int lowerCycle, int upperCycle) throws ParseException
ParseExceptionpublic <T> void addCloseListener(net.openhft.chronicle.core.io.Closeable key)
protected void performClose()
performClose in class net.openhft.chronicle.core.io.AbstractCloseableprotected void finalize()
throws Throwable
public final void closeStore(@Nullable
@Nullable SingleChronicleQueueStore store)
public final int cycle()
cycle in interface RollingChronicleQueuepublic final int cycle(net.openhft.chronicle.core.time.TimeProvider timeProvider)
public long firstIndex()
ChronicleQueueLong.MAX_VALUE
if no such index exists.firstIndex in interface ChronicleQueueLong.MAX_VALUE
if no such index existspublic long lastIndex()
ChronicleQueueThe value returned by this method will not be reliable in the event the queue is being written to concurrently, as subsequent excerpts may have been written by the time it is returned.
lastIndex in interface ChronicleQueuepublic long entryCount()
entryCount in interface RollingChronicleQueuepublic int firstCycle()
firstCycle in interface RollingChronicleQueuepublic int lastCycle()
lastCycle in interface RollingChronicleQueue@Deprecated protected int fileToCycle(File queueFile)
@NotNull public @NotNull Consumer<net.openhft.chronicle.bytes.BytesRingBufferStats> onRingBufferStats()
public long blockSize()
public long overlapSize()
@NotNull public @NotNull net.openhft.chronicle.wire.WireType wireType()
ChronicleQueueWireType used for this ChronicleQueue.
For example, the WireType could be WireTypes.TEXT or WireTypes.BINARY.
wireType in interface ChronicleQueueWireTypepublic long bufferCapacity()
@NotNull public @NotNull String toString()
toString in class net.openhft.chronicle.core.io.AbstractCloseable@NotNull public @NotNull net.openhft.chronicle.core.time.TimeProvider time()
ChronicleQueueTimeProvider for this ChronicleQueue.time in interface ChronicleQueueTimeProvider for this ChronicleQueueTimeProviderpublic TableStore metaStore()
protected boolean threadSafetyCheck(boolean isUsed)
threadSafetyCheck in class net.openhft.chronicle.core.io.AbstractCloseablepublic void tableStorePut(CharSequence key, long index)
@Nullable protected @Nullable net.openhft.chronicle.core.values.LongValue tableStoreAcquire(CharSequence key, long index)
public long tableStoreGet(CharSequence key)
Copyright © 2022. All rights reserved.