From 09519997dc4a22bf70b2fff1540fddf29a2d62d2 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Fri, 20 Oct 2023 13:04:30 +0200 Subject: [PATCH] Hibernation --- pom.xml | 2 +- .../java/it/cavallium/filequeue/SimpleQueueMemorySegment.java | 4 ++++ .../filequeue/SimpleQueueMemorySegmentFixedSize.java | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 601d3e7..f86fee7 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ it.cavallium filequeue file queue project - 3.1.6 + 3.1.7 jar Light weight, high performance, simple, reliable and persistent queue 4.0.0 diff --git a/src/main/java/it/cavallium/filequeue/SimpleQueueMemorySegment.java b/src/main/java/it/cavallium/filequeue/SimpleQueueMemorySegment.java index 1b4b61a..bdeaa43 100644 --- a/src/main/java/it/cavallium/filequeue/SimpleQueueMemorySegment.java +++ b/src/main/java/it/cavallium/filequeue/SimpleQueueMemorySegment.java @@ -73,6 +73,10 @@ public class SimpleQueueMemorySegment implements SimpleQueue, Closeable { private SimpleQueueMemorySegmentFixedSize expandQueueSegmentForWrite() throws IOException { synchronized (queueSegments) { var queueMemorySegment = new SimpleQueueMemorySegmentFixedSize(arena, segmentSize, generateQueuePath()); + // Hibernate the middle segments, if there will be 3 or more segments after the expansion + if (queueSegments.size() >= 2) { + queueSegments.getLast().hibernate(); + } queueSegments.add(queueMemorySegment); return queueMemorySegment; } diff --git a/src/main/java/it/cavallium/filequeue/SimpleQueueMemorySegmentFixedSize.java b/src/main/java/it/cavallium/filequeue/SimpleQueueMemorySegmentFixedSize.java index 85e6e8e..0dd4b11 100644 --- a/src/main/java/it/cavallium/filequeue/SimpleQueueMemorySegmentFixedSize.java +++ b/src/main/java/it/cavallium/filequeue/SimpleQueueMemorySegmentFixedSize.java @@ -86,4 +86,8 @@ public class SimpleQueueMemorySegmentFixedSize implements Closeable { public int size() { return Math.max(0, size.get()); } + + public void hibernate() { + this.writer.unload(); + } }