Re-opening a chronicle queue results in exception

38 Views Asked by At

I'm using ChronicleQueue.close() and a forced GarbageCollector run to make sure that old cq files are released by my process:

  var oldQueue = queue;
  this.queue = SingleChronicleQueueBuilder.binary(logDir)
            .rollCycle(RollCycles.DAILY)
            .build();
  // make sure all appenders are update
  logHandlerSet.forEach(logHandler -> logHandler.updateAppender(queue));
  oldQueue.close();
   ... after some delay ...
    LOGGER.debug("Running gc");
    System.gc();
    LOGGER.debug("gc done");

I do the same for the tailers. However, when the finalizer runs I get this exception:

Dec 27 03:31:11 r-114 r[3810067]: 03:31:11.992 [Finalizer] WARN  n.o.c.b.i.ChunkedMappedBytes [on:50] -
Dec 27 03:31:11 r-114 r[3810067]: net.openhft.chronicle.core.io.ClosedIllegalStateException: net.openhft.chronicle.bytes.internal.ChunkedMappedFile released
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.core.io.VanillaReferenceCounted.newReleasedClosedIllegalStateException(VanillaReferenceCounted.java:249)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.core.io.VanillaReferenceCounted.release(VanillaReferenceCounted.java:142)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.core.io.AbstractReferenceCounted.release(AbstractReferenceCounted.java:195)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.core.io.AbstractCloseableReferenceCounted.release(AbstractCloseableReferenceCounted.java:97)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.bytes.internal.CommonMappedBytes.performRelease(CommonMappedBytes.java:232)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.core.io.AbstractReferenceCounted.inThreadPerformRelease(AbstractReferenceCounted.java:147)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.core.io.VanillaReferenceCounted.callOnRelease(VanillaReferenceCounted.java:160)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.core.io.VanillaReferenceCounted.release(VanillaReferenceCounted.java:148)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.core.io.AbstractReferenceCounted.release(AbstractReferenceCounted.java:195)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.bytes.internal.CommonMappedBytes.release(CommonMappedBytes.java:412)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.queue.impl.single.StoreTailer$StoreTailerContext.wire(StoreTailer.java:1454)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.queue.impl.single.StoreTailer.performClose(StoreTailer.java:156)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.core.io.AbstractCloseable.callPerformClose(AbstractCloseable.java:327)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.core.io.AbstractCloseable.close(AbstractCloseable.java:205)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.core.internal.CloseableUtils.closeQuietly(CloseableUtils.java:323)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.core.internal.CloseableUtils.closeQuietly(CloseableUtils.java:286)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.core.io.Closeable.closeQuietly(Closeable.java:73)
Dec 27 03:31:11 r-114 r[3810067]: #011at java.base/java.lang.Iterable.forEach(Iterable.java:75)
Dec 27 03:31:11 r-114 r[3810067]: #011at java.base/java.util.Collections$SetFromMap.forEach(Collections.java:5700)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.queue.impl.single.SingleChronicleQueue.performClose(SingleChronicleQueue.java:729)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.core.io.AbstractCloseable.callPerformClose(AbstractCloseable.java:327)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.core.io.AbstractCloseable.close(AbstractCloseable.java:205)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.core.io.AbstractCloseable.warnAndCloseIfNotClosed(AbstractCloseable.java:309)
Dec 27 03:31:11 r-114 r[3810067]: #011at net.openhft.chronicle.queue.impl.single.SingleChronicleQueue.finalize(SingleChronicleQueue.java:754)
Dec 27 03:31:11 r-114 r[3810067]: #011at java.base/java.lang.System$2.invokeFinalize(System.java:2297)
Dec 27 03:31:11 r-114 r[3810067]: #011at java.base/java.lang.ref.Finalizer.runFinalizer(Finalizer.java:88)
Dec 27 03:31:11 r-114 r[3810067]: #011at java.base/java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:173)

This happens hundreds of times, I had it with Chronicle Queue 5.23.37 and 5.25ea3. Is there anything I'm doing wrong? Is there a better way to release CQ files?

1

There are 1 best solutions below

0
vasquez On

I found my problem: I created a ExcerptTailer that wasn't closed. Wrapping it in a try-with-resources solved this problem.