From 8105666f1dd2c3afda057cc287a2fab2b2bd3333 Mon Sep 17 00:00:00 2001 From: Lucas Weitzendorf Date: Wed, 4 Nov 2026 19:17:30 +0100 Subject: [PATCH 1/2] OAK-12486: Deprecate Buffer and replace its uses with ByteBuffer Buffer was introduced to avoid NoSuchMethodError when running Java 9+ compiled code on Java 8. Oak now requires Java 17, and the wrapper's restricted API is tedious to maintain and prevents use of more concise ByteBuffer methods (absolute bulk get, slice(int, int), etc.). - Deprecate Buffer (no other change to oak-commons) - Replace Buffer with ByteBuffer in oak-segment-tar, oak-segment-remote, oak-segment-aws, oak-segment-azure and oak-upgrade, including the segment persistence SPI and the oak-segment-remote hooks - Major version bumps of the affected internal packages: segment.spi.persistence.persistentcache 8.0.0, segment.remote 4.0.0, segment.remote.persistentcache 3.0.0, segment.remote.queue 2.0.0 --- .../apache/jackrabbit/oak/commons/Buffer.java | 4 ++ .../segment/aws/AwsSegmentArchiveReader.java | 10 ++-- .../segment/aws/AwsSegmentArchiveWriter.java | 20 +++---- .../oak/segment/aws/S3Directory.java | 15 ++--- .../aws/tool/AwsSegmentStoreMigrator.java | 6 +- .../oak/segment/aws/tool/AwsToolUtils.java | 4 +- .../oak/segment/aws/AwsReadSegmentTest.java | 6 +- .../segment/aws/tool/SegmentCopyTestBase.java | 10 ++-- .../azure/AzureSegmentArchiveReader.java | 10 ++-- .../azure/AzureSegmentArchiveWriter.java | 12 ++-- .../oak/segment/azure/AzureUtilities.java | 8 +-- .../oak/segment/azure/tool/SegmentCopy.java | 8 +-- .../azure/tool/SegmentStoreMigrator.java | 8 +-- .../oak/segment/azure/tool/ToolUtils.java | 4 +- .../azure/v8/AzureSegmentArchiveReaderV8.java | 10 ++-- .../azure/v8/AzureSegmentArchiveWriterV8.java | 12 ++-- .../segment/azure/v8/AzureUtilitiesV8.java | 8 +-- .../azure/AzureArchiveManagerTest.java | 10 ++-- .../azure/AzureHttpClientOperationsTest.java | 4 +- .../segment/azure/AzureReadSegmentTest.java | 6 +- .../azure/tool/SegmentCopyTestBase.java | 10 ++-- .../azure/v8/AzureArchiveManagerV8Test.java | 10 ++-- .../azure/v8/AzureReadSegmentV8Test.java | 6 +- .../AbstractRemoteSegmentArchiveReader.java | 20 +++---- .../AbstractRemoteSegmentArchiveWriter.java | 8 +-- .../oak/segment/remote/package-info.java | 2 +- .../persistentcache/PersistentDiskCache.java | 24 +++----- .../persistentcache/PersistentRedisCache.java | 34 ++++------- .../remote/persistentcache/package-info.java | 2 +- .../remote/queue/SegmentWriteAction.java | 6 +- .../segment/remote/queue/package-info.java | 2 +- ...bstractRemoteSegmentArchiveReaderTest.java | 10 ++-- .../AbstractPersistentCacheTest.java | 24 ++++---- ...PersistentDiskCacheSizeAccountingTest.java | 9 +-- .../PersistentDiskCacheTest.java | 14 ++--- .../PersistentRedisCacheTest.java | 4 +- .../oak/segment/CheckpointCompactor.java | 4 +- .../oak/segment/ClassicCompactor.java | 4 +- .../oak/segment/CompactorUtils.java | 4 +- .../oak/segment/DefaultSegmentWriter.java | 13 ++--- .../segment/LegacyCheckpointCompactor.java | 6 +- .../oak/segment/ParallelCompactor.java | 4 +- .../jackrabbit/oak/segment/RecordId.java | 6 +- .../jackrabbit/oak/segment/Segment.java | 10 ++-- .../jackrabbit/oak/segment/SegmentBlob.java | 2 +- .../oak/segment/SegmentBufferMonitor.java | 14 ++--- .../oak/segment/SegmentNodeState.java | 14 ++--- .../jackrabbit/oak/segment/SegmentStream.java | 11 ++-- .../jackrabbit/oak/segment/SegmentWriter.java | 6 +- .../oak/segment/data/SegmentData.java | 12 ++-- .../oak/segment/data/SegmentDataLoader.java | 6 +- .../oak/segment/data/SegmentDataRaw.java | 8 +-- .../oak/segment/data/SegmentDataUtils.java | 23 ++++---- .../oak/segment/data/SegmentDataV12.java | 8 +-- .../oak/segment/data/SegmentDataV13.java | 4 +- .../oak/segment/file/AbstractFileStore.java | 6 +- .../oak/segment/file/CompactionWriter.java | 6 +- .../oak/segment/file/FileStore.java | 10 ++-- .../file/preloader/SegmentPreloader.java | 10 ++-- .../oak/segment/file/tar/FileAccess.java | 28 +++++----- .../oak/segment/file/tar/SegmentGraph.java | 12 ++-- .../segment/file/tar/SegmentTarManager.java | 10 ++-- .../segment/file/tar/SegmentTarReader.java | 10 ++-- .../segment/file/tar/SegmentTarWriter.java | 12 ++-- .../oak/segment/file/tar/TarFiles.java | 8 +-- .../oak/segment/file/tar/TarReader.java | 6 +- .../oak/segment/file/tar/TarWriter.java | 4 +- .../binaries/BinaryReferencesIndexLoader.java | 13 ++--- .../BinaryReferencesIndexLoaderV1.java | 35 ++++++------ .../BinaryReferencesIndexLoaderV2.java | 35 ++++++------ .../binaries/BinaryReferencesIndexWriter.java | 4 +- .../segment/file/tar/index/IndexEntryV1.java | 6 +- .../segment/file/tar/index/IndexEntryV2.java | 6 +- .../segment/file/tar/index/IndexLoaderV1.java | 12 ++-- .../segment/file/tar/index/IndexLoaderV2.java | 12 ++-- .../oak/segment/file/tar/index/IndexV1.java | 6 +- .../oak/segment/file/tar/index/IndexV2.java | 6 +- .../segment/file/tar/index/IndexWriter.java | 4 +- .../oak/segment/memory/MemoryStore.java | 4 +- .../spi/persistence/SegmentArchiveReader.java | 6 +- .../spi/persistence/SegmentArchiveWriter.java | 4 +- .../AbstractPersistentCache.java | 10 ++-- .../CachingSegmentArchiveReader.java | 6 +- .../DelegatingPersistentCache.java | 6 +- .../persistentcache/PersistentCache.java | 6 +- .../split/UnclosedSegmentArchiveReader.java | 16 ++---- .../oak/segment/util/ReaderAtEnd.java | 4 +- .../oak/segment/CacheWeightEstimator.java | 4 +- .../oak/segment/ClassicCompactorTest.java | 4 +- .../oak/segment/FailedFlushTest.java | 4 +- .../oak/segment/NodeRecordTest.java | 4 +- .../oak/segment/RecordNumbersTest.java | 4 +- .../oak/segment/SegmentBufferMonitorTest.java | 6 +- .../oak/segment/SegmentReferencesTest.java | 4 +- .../oak/segment/data/SegmentDataTest.java | 18 +++--- .../file/preloader/SegmentPreloaderTest.java | 8 +-- .../oak/segment/file/tar/TarFileTest.java | 6 +- .../oak/segment/file/tar/TarFilesTest.java | 4 +- .../BinaryReferencesIndexLoaderTest.java | 22 ++++---- .../BinaryReferencesIndexLoaderV1Test.java | 28 +++++----- .../BinaryReferencesIndexLoaderV2Test.java | 28 +++++----- .../BinaryReferencesIndexWriterTest.java | 4 +- .../file/tar/index/IndexLoaderTest.java | 12 ++-- .../file/tar/index/IndexLoaderV1Test.java | 56 +++++++++---------- .../file/tar/index/IndexLoaderV2Test.java | 56 +++++++++---------- .../segment/file/tar/index/IndexV1Test.java | 12 ++-- .../segment/file/tar/index/IndexV2Test.java | 12 ++-- .../CachingSegmentArchiveReaderTest.java | 6 +- .../MemoryPersistentCache.java | 10 ++-- .../PersistentCacheStatsTest.java | 26 ++++----- .../oak/segment/standby/StandbyTestUtils.java | 4 +- .../oak/upgrade/PersistingDiff.java | 4 +- 112 files changed, 567 insertions(+), 621 deletions(-) diff --git a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/Buffer.java b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/Buffer.java index e894366480c..6ee846a1e44 100644 --- a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/Buffer.java +++ b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/Buffer.java @@ -41,7 +41,11 @@ * {@link ByteBuffer}. Since it is not possible to directly convert a {@link * Buffer} into a {@link ByteBuffer} and the other way around, {@link Buffer} * makes it less likely to develop dangerous code in the future. + * + * @deprecated For code that can rely on a Java version of at least 9, the + * compatibility concern above no longer applies. Use {@link ByteBuffer} directly. */ +@Deprecated final public class Buffer { private final ByteBuffer buffer; diff --git a/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/AwsSegmentArchiveReader.java b/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/AwsSegmentArchiveReader.java index 7b9fb3a97d4..e65d82b4a0a 100644 --- a/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/AwsSegmentArchiveReader.java +++ b/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/AwsSegmentArchiveReader.java @@ -20,10 +20,10 @@ import java.io.File; import java.io.IOException; +import java.nio.ByteBuffer; import java.util.Iterator; import java.util.NoSuchElementException; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.remote.AbstractRemoteSegmentArchiveReader; import org.apache.jackrabbit.oak.segment.remote.RemoteSegmentArchiveEntry; import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor; @@ -38,7 +38,7 @@ public class AwsSegmentArchiveReader extends AbstractRemoteSegmentArchiveReader } private static Iterable createEntryIterable(S3Directory directory, String archiveName) throws IOException{ - Buffer buffer = directory.readObjectToBuffer(archiveName + ".idx", OFF_HEAP); + ByteBuffer buffer = directory.readObjectToBuffer(archiveName + ".idx", OFF_HEAP); return () -> new Iterator<>() { @Override public boolean hasNext() { @@ -64,12 +64,12 @@ public ArchiveEntry next() { } @Override - protected void doReadSegmentToBuffer(String segmentFileName, Buffer buffer) throws IOException { + protected void doReadSegmentToBuffer(String segmentFileName, ByteBuffer buffer) throws IOException { directory.readObjectToBuffer(segmentFileName, buffer); } @Override - protected Buffer doReadDataFile(String extension) throws IOException { + protected ByteBuffer doReadDataFile(String extension) throws IOException { return readObjectToBuffer(getName() + extension); } @@ -78,7 +78,7 @@ protected File archivePathAsFile() { return new File(directory.getPath()); } - private Buffer readObjectToBuffer(String name) throws IOException { + private ByteBuffer readObjectToBuffer(String name) throws IOException { if (directory.doesObjectExist(name)) { return directory.readObjectToBuffer(name, false); } diff --git a/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/AwsSegmentArchiveWriter.java b/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/AwsSegmentArchiveWriter.java index b1b3e32d189..c7e28c84a3d 100644 --- a/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/AwsSegmentArchiveWriter.java +++ b/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/AwsSegmentArchiveWriter.java @@ -21,9 +21,9 @@ import java.io.File; import java.io.IOException; +import java.nio.ByteBuffer; import java.util.concurrent.TimeUnit; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.commons.time.Stopwatch; import org.apache.jackrabbit.oak.segment.remote.AbstractRemoteSegmentArchiveWriter; import org.apache.jackrabbit.oak.segment.remote.RemoteSegmentArchiveEntry; @@ -61,7 +61,7 @@ protected void doWriteArchiveEntry(RemoteSegmentArchiveEntry indexEntry, byte[] } @Override - protected Buffer doReadArchiveEntry(RemoteSegmentArchiveEntry indexEntry) throws IOException { + protected ByteBuffer doReadArchiveEntry(RemoteSegmentArchiveEntry indexEntry) throws IOException { return directory.readObjectToBuffer(getSegmentFileName(indexEntry), OFF_HEAP); } @@ -79,15 +79,15 @@ protected void afterQueueClosed() throws IOException { private void writeIndex() throws IOException { // 33 bytes = 2 x 8 bytes (long) + 4 x 4 bytes (int) + 1 x 1 byte (boolean) - Buffer buffer = Buffer.allocate(index.size() * 33); + ByteBuffer buffer = ByteBuffer.allocate(index.size() * 33); for (RemoteSegmentArchiveEntry entry : index.values()) { - buffer.putLong(entry.getMsb()); - buffer.putLong(entry.getLsb()); - buffer.putInt(entry.getPosition()); - buffer.putInt(entry.getLength()); - buffer.putInt(entry.getGeneration()); - buffer.putInt(entry.getFullGeneration()); - buffer.put(entry.isCompacted() ? (byte) 1 : 0); + buffer.putLong(entry.getMsb()) + .putLong(entry.getLsb()) + .putInt(entry.getPosition()) + .putInt(entry.getLength()) + .putInt(entry.getGeneration()) + .putInt(entry.getFullGeneration()) + .put(entry.isCompacted() ? (byte) 1 : 0); } directory.writeObject(archiveName + ".idx", buffer.array()); } diff --git a/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/S3Directory.java b/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/S3Directory.java index 31525e4f146..dd1ce38de93 100644 --- a/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/S3Directory.java +++ b/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/S3Directory.java @@ -30,12 +30,12 @@ import com.amazonaws.services.s3.model.S3ObjectSummary; import com.amazonaws.util.IOUtils; -import org.apache.jackrabbit.oak.commons.Buffer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.ByteArrayInputStream; import java.io.IOException; +import java.nio.ByteBuffer; import java.io.InputStream; import java.util.ArrayList; import java.util.List; @@ -101,18 +101,13 @@ public ObjectMetadata getObjectMetadata(String key) { return s3.getObjectMetadata(bucketName, key); } - public Buffer readObjectToBuffer(String name, boolean offHeap) throws IOException { + public ByteBuffer readObjectToBuffer(String name, boolean offHeap) throws IOException { byte[] data = readObject(rootDirectory + name); - Buffer buffer = offHeap ? Buffer.allocateDirect(data.length) : Buffer.allocate(data.length); - buffer.put(data); - buffer.flip(); - return buffer; + return offHeap ? ByteBuffer.allocateDirect(data.length).put(data).flip() : ByteBuffer.wrap(data); } - public void readObjectToBuffer(String name, Buffer buffer) throws IOException { - byte[] data = readObject(rootDirectory + name); - buffer.put(data); - buffer.flip(); + public void readObjectToBuffer(String name, ByteBuffer buffer) throws IOException { + buffer.put(readObject(rootDirectory + name)).flip(); } public byte[] readObject(String key) throws IOException { diff --git a/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/tool/AwsSegmentStoreMigrator.java b/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/tool/AwsSegmentStoreMigrator.java index 4f37a60d071..59675c71092 100644 --- a/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/tool/AwsSegmentStoreMigrator.java +++ b/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/tool/AwsSegmentStoreMigrator.java @@ -19,6 +19,7 @@ import static org.apache.jackrabbit.oak.segment.aws.tool.AwsToolUtils.fetchByteArray; import static org.apache.jackrabbit.oak.segment.aws.tool.AwsToolUtils.storeDescription; +import java.nio.ByteBuffer; import java.io.Closeable; import java.io.File; import java.io.IOException; @@ -34,7 +35,6 @@ import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.aws.AwsContext; import org.apache.jackrabbit.oak.segment.aws.AwsPersistence; import org.apache.jackrabbit.oak.segment.aws.tool.AwsToolUtils.SegmentStoreType; @@ -205,7 +205,7 @@ private void migrateSegments(SegmentArchiveReader reader, SegmentArchiveWriter w } private void migrateBinaryRef(SegmentArchiveReader reader, SegmentArchiveWriter writer) throws IOException { - Buffer binaryReferences = reader.getBinaryReferences(); + ByteBuffer binaryReferences = reader.getBinaryReferences(); if (binaryReferences != null) { byte[] array = fetchByteArray(binaryReferences); writer.writeBinaryReferences(array); @@ -264,7 +264,7 @@ private static class Segment { private final SegmentArchiveEntry entry; - private volatile Buffer data; + private volatile ByteBuffer data; private Segment(SegmentArchiveEntry entry) { this.entry = entry; diff --git a/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/tool/AwsToolUtils.java b/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/tool/AwsToolUtils.java index 8c7ce57c9e7..28180a39e92 100644 --- a/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/tool/AwsToolUtils.java +++ b/oak-segment-aws/src/main/java/org/apache/jackrabbit/oak/segment/aws/tool/AwsToolUtils.java @@ -22,12 +22,12 @@ import java.io.File; import java.io.IOException; +import java.nio.ByteBuffer; import java.io.PrintWriter; import java.lang.annotation.Annotation; import java.text.MessageFormat; import java.util.concurrent.TimeUnit; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.commons.time.Stopwatch; import org.apache.jackrabbit.oak.segment.aws.AwsContext; import org.apache.jackrabbit.oak.segment.aws.AwsPersistence; @@ -175,7 +175,7 @@ public static void printMessage(PrintWriter pw, String format, Object... arg) { pw.println(MessageFormat.format(format, arg)); } - public static byte[] fetchByteArray(Buffer buffer) throws IOException { + public static byte[] fetchByteArray(ByteBuffer buffer) throws IOException { byte[] data = new byte[buffer.remaining()]; buffer.get(data); return data; diff --git a/oak-segment-aws/src/test/java/org/apache/jackrabbit/oak/segment/aws/AwsReadSegmentTest.java b/oak-segment-aws/src/test/java/org/apache/jackrabbit/oak/segment/aws/AwsReadSegmentTest.java index f22f0179da1..92dc7926892 100644 --- a/oak-segment-aws/src/test/java/org/apache/jackrabbit/oak/segment/aws/AwsReadSegmentTest.java +++ b/oak-segment-aws/src/test/java/org/apache/jackrabbit/oak/segment/aws/AwsReadSegmentTest.java @@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.segment.aws; import java.io.File; +import java.nio.ByteBuffer; import java.io.IOException; import java.util.Date; @@ -26,7 +27,6 @@ import com.amazonaws.services.dynamodbv2.local.embedded.DynamoDBEmbedded; import com.amazonaws.services.s3.AmazonS3; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.SegmentId; import org.apache.jackrabbit.oak.segment.SegmentNotFoundException; import org.apache.jackrabbit.oak.segment.file.FileStore; @@ -101,7 +101,7 @@ public SegmentArchiveReader open(String archiveName) throws IOException { S3Directory archiveDirectory = awsContext.directory.withDirectory(archiveName); return new AwsSegmentArchiveReader(archiveDirectory, archiveName, ioMonitor) { @Override - public Buffer readSegment(long msb, long lsb) throws IOException { + public ByteBuffer readSegment(long msb, long lsb) throws IOException { throw new RepositoryNotReachableException(new RuntimeException("Cannot access AWS S3")); } }; @@ -112,7 +112,7 @@ public SegmentArchiveWriter create(String archiveName) throws IOException { S3Directory archiveDirectory = awsContext.directory.withDirectory(archiveName); return new AwsSegmentArchiveWriter(archiveDirectory, archiveName, ioMonitor, fileStoreMonitor) { @Override - public Buffer readSegment(long msb, long lsb) throws IOException { + public ByteBuffer readSegment(long msb, long lsb) throws IOException { throw new RepositoryNotReachableException(new RuntimeException("Cannot access AWS S3")); } }; diff --git a/oak-segment-aws/src/test/java/org/apache/jackrabbit/oak/segment/aws/tool/SegmentCopyTestBase.java b/oak-segment-aws/src/test/java/org/apache/jackrabbit/oak/segment/aws/tool/SegmentCopyTestBase.java index d5b9a65732f..1048439dbc3 100644 --- a/oak-segment-aws/src/test/java/org/apache/jackrabbit/oak/segment/aws/tool/SegmentCopyTestBase.java +++ b/oak-segment-aws/src/test/java/org/apache/jackrabbit/oak/segment/aws/tool/SegmentCopyTestBase.java @@ -24,12 +24,12 @@ import static org.junit.Assert.assertTrue; import java.io.File; +import java.nio.ByteBuffer; import java.io.IOException; import java.io.PrintWriter; import java.util.Collections; import java.util.List; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.SegmentCache; import org.apache.jackrabbit.oak.segment.SegmentNodeStore; import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders; @@ -167,14 +167,14 @@ private void checkArchives(SegmentArchiveManager srcArchiveManager, SegmentArchi assertEquals(srcSegment.getFullGeneration(), destSegment.getFullGeneration()); assertEquals(srcSegment.getGeneration(), destSegment.getFullGeneration()); - Buffer srcDataBuffer = srcArchiveReader.readSegment(srcSegment.getMsb(), srcSegment.getLsb()); - Buffer destDataBuffer = destArchiveReader.readSegment(destSegment.getMsb(), destSegment.getLsb()); + ByteBuffer srcDataBuffer = srcArchiveReader.readSegment(srcSegment.getMsb(), srcSegment.getLsb()); + ByteBuffer destDataBuffer = destArchiveReader.readSegment(destSegment.getMsb(), destSegment.getLsb()); assertEquals(srcDataBuffer, destDataBuffer); } - Buffer srcBinRefBuffer = srcArchiveReader.getBinaryReferences(); - Buffer destBinRefBuffer = destArchiveReader.getBinaryReferences(); + ByteBuffer srcBinRefBuffer = srcArchiveReader.getBinaryReferences(); + ByteBuffer destBinRefBuffer = destArchiveReader.getBinaryReferences(); assertEquals(srcBinRefBuffer, destBinRefBuffer); SegmentGraph srcGraph = srcArchiveReader.getGraph(); diff --git a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureSegmentArchiveReader.java b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureSegmentArchiveReader.java index 7a8be8198d5..8101a0c1fd6 100644 --- a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureSegmentArchiveReader.java +++ b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureSegmentArchiveReader.java @@ -20,11 +20,11 @@ import com.azure.storage.blob.models.BlobStorageException; import com.azure.storage.blob.models.ListBlobsOptions; import com.azure.storage.blob.specialized.BlockBlobClient; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.remote.AbstractRemoteSegmentArchiveReader; import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor; import org.jetbrains.annotations.NotNull; +import java.nio.ByteBuffer; import java.io.File; import java.io.IOException; import java.util.Map; @@ -61,12 +61,12 @@ private static Iterable createEntryIterable(BlobContainerClient bl } @Override - protected void doReadSegmentToBuffer(String segmentFileName, Buffer buffer) throws IOException { + protected void doReadSegmentToBuffer(String segmentFileName, ByteBuffer buffer) throws IOException { readBufferFully(getBlobClient(segmentFileName), buffer); } @Override - protected Buffer doReadDataFile(String extension) throws IOException { + protected ByteBuffer doReadDataFile(String extension) throws IOException { return readBlob(getName() + extension); } @@ -84,14 +84,14 @@ private BlockBlobClient getBlobClient(String name) throws IOException { } } - private Buffer readBlob(String name) throws IOException { + private ByteBuffer readBlob(String name) throws IOException { try { BlockBlobClient blob = getBlobClient(name); if (!blob.exists()) { return null; } long length = blob.getProperties().getBlobSize(); - Buffer buffer = Buffer.allocate((int) length); + ByteBuffer buffer = ByteBuffer.allocate((int) length); AzureUtilities.readBufferFully(blob, buffer); return buffer; } catch (BlobStorageException e) { diff --git a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureSegmentArchiveWriter.java b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureSegmentArchiveWriter.java index 9f28315bc9d..3a9f6928f76 100644 --- a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureSegmentArchiveWriter.java +++ b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureSegmentArchiveWriter.java @@ -22,7 +22,6 @@ import com.azure.storage.blob.models.BlobStorageException; import com.azure.storage.blob.options.BlockBlobSimpleUploadOptions; import com.azure.storage.blob.specialized.BlockBlobClient; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.commons.time.Stopwatch; import org.apache.jackrabbit.oak.segment.azure.util.Retrier; import org.apache.jackrabbit.oak.segment.remote.AbstractRemoteSegmentArchiveWriter; @@ -31,6 +30,7 @@ import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitor; import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor; +import java.nio.ByteBuffer; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; @@ -95,13 +95,9 @@ protected void doWriteArchiveEntry(RemoteSegmentArchiveEntry indexEntry, byte[] } @Override - protected Buffer doReadArchiveEntry(RemoteSegmentArchiveEntry indexEntry) throws IOException { - Buffer buffer; - if (OFF_HEAP) { - buffer = Buffer.allocateDirect(indexEntry.getLength()); - } else { - buffer = Buffer.allocate(indexEntry.getLength()); - } + protected ByteBuffer doReadArchiveEntry(RemoteSegmentArchiveEntry indexEntry) throws IOException { + int length = indexEntry.getLength(); + ByteBuffer buffer = OFF_HEAP ? ByteBuffer.allocateDirect(length) : ByteBuffer.allocate(length); readBufferFully(getBlockBlobClient(getSegmentFileName(indexEntry)), buffer); return buffer; } diff --git a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureUtilities.java b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureUtilities.java index c2563925377..a05f1d44e55 100644 --- a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureUtilities.java +++ b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureUtilities.java @@ -23,13 +23,13 @@ import com.azure.storage.blob.models.ListBlobsOptions; import com.azure.storage.blob.specialized.AppendBlobClient; import com.azure.storage.blob.specialized.BlockBlobClient; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.commons.PathUtils; import org.apache.jackrabbit.oak.segment.spi.RepositoryNotReachableException; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.nio.ByteBuffer; import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; @@ -77,7 +77,7 @@ public static boolean archiveExists(BlobContainerClient blobContainerClient, Str } - public static void readBufferFully(BlockBlobClient blob, Buffer buffer) throws IOException { + public static void readBufferFully(BlockBlobClient blob, ByteBuffer buffer) throws IOException { try { blob.downloadStream(new ByteBufferOutputStream(buffer)); buffer.flip(); @@ -124,9 +124,9 @@ public static void deleteAllEntries(BlobContainerClient blobContainerClient, Lis private static class ByteBufferOutputStream extends OutputStream { @NotNull - private final Buffer buffer; + private final ByteBuffer buffer; - public ByteBufferOutputStream(@NotNull Buffer buffer) { + public ByteBufferOutputStream(@NotNull ByteBuffer buffer) { this.buffer = buffer; } diff --git a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentCopy.java b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentCopy.java index 8ceb766d08d..7f5d874c928 100644 --- a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentCopy.java +++ b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentCopy.java @@ -42,7 +42,6 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.commons.time.Stopwatch; import org.apache.jackrabbit.oak.segment.azure.tool.SegmentStoreMigrator.Segment; import org.apache.jackrabbit.oak.segment.azure.tool.ToolUtils.SegmentStoreType; @@ -322,17 +321,12 @@ public int run() { for (Future future : futures) { Segment segment = future.get(); RETRIER.execute(() -> { - final byte[] array = segment.data.array(); String segmentId = new UUID(segment.entry.getMsb(), segment.entry.getLsb()).toString(); File segmentFile = new File(directory, segmentId); File tempSegmentFile = new File(directory, segmentId + System.nanoTime() + ".part"); - Buffer buffer = Buffer.wrap(array); - - Buffer bufferCopy = buffer.duplicate(); - try { try (FileChannel channel = new FileOutputStream(tempSegmentFile).getChannel()) { - bufferCopy.write(channel); + channel.write(segment.data.duplicate()); } try { Files.move(tempSegmentFile.toPath(), segmentFile.toPath(), diff --git a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentStoreMigrator.java b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentStoreMigrator.java index 18199ef633a..6a6f80a2232 100644 --- a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentStoreMigrator.java +++ b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentStoreMigrator.java @@ -20,7 +20,6 @@ import static org.apache.jackrabbit.oak.segment.azure.tool.ToolUtils.storeDescription; import com.azure.storage.blob.BlobContainerClient; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.azure.AzurePersistence; import org.apache.jackrabbit.oak.segment.azure.tool.ToolUtils.SegmentStoreType; import org.apache.jackrabbit.oak.segment.azure.util.Retrier; @@ -42,6 +41,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.nio.ByteBuffer; import java.io.Closeable; import java.io.File; import java.io.IOException; @@ -212,8 +212,8 @@ private void migrateSegments(SegmentArchiveReader reader, SegmentArchiveWriter w } private void migrateBinaryRef(SegmentArchiveReader reader, SegmentArchiveWriter writer) throws IOException, ExecutionException, InterruptedException { - Future future = executor.submit(() -> RETRIER.execute(reader::getBinaryReferences)); - Buffer binaryReferences = future.get(); + Future future = executor.submit(() -> RETRIER.execute(reader::getBinaryReferences)); + ByteBuffer binaryReferences = future.get(); if (binaryReferences != null) { byte[] array = fetchByteArray(binaryReferences); RETRIER.execute(() -> writer.writeBinaryReferences(array)); @@ -240,7 +240,7 @@ static class Segment { final SegmentArchiveEntry entry; - volatile Buffer data; + volatile ByteBuffer data; Segment(SegmentArchiveEntry entry) { this.entry = entry; diff --git a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/ToolUtils.java b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/ToolUtils.java index fddb0ff68ad..9ea8310f519 100644 --- a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/ToolUtils.java +++ b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/tool/ToolUtils.java @@ -25,6 +25,7 @@ import static org.apache.jackrabbit.oak.segment.azure.util.AzureConfigurationParserUtils.parseAzureConfigurationFromUri; import static org.apache.jackrabbit.oak.segment.compaction.SegmentGCOptions.defaultGCOptions; +import java.nio.ByteBuffer; import java.io.File; import java.io.IOException; import java.io.PrintWriter; @@ -35,7 +36,6 @@ import java.util.Map; import java.util.concurrent.TimeUnit; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.commons.collections.IteratorUtils; import org.apache.jackrabbit.oak.commons.collections.ListUtils; import org.apache.jackrabbit.oak.commons.time.Stopwatch; @@ -211,7 +211,7 @@ public static void printMessage(PrintWriter pw, String format, Object... arg) { pw.println(MessageFormat.format(format, arg)); } - public static byte[] fetchByteArray(Buffer buffer) throws IOException { + public static byte[] fetchByteArray(ByteBuffer buffer) throws IOException { byte[] data = new byte[buffer.remaining()]; buffer.get(data); return data; diff --git a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureSegmentArchiveReaderV8.java b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureSegmentArchiveReaderV8.java index 7242de4fe25..074d0bbf1d6 100644 --- a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureSegmentArchiveReaderV8.java +++ b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureSegmentArchiveReaderV8.java @@ -18,6 +18,7 @@ import static org.apache.jackrabbit.oak.segment.azure.v8.AzureUtilitiesV8.readBufferFully; +import java.nio.ByteBuffer; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; @@ -27,7 +28,6 @@ import com.microsoft.azure.storage.blob.CloudBlobDirectory; import com.microsoft.azure.storage.blob.CloudBlockBlob; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.azure.AzureBlobMetadata; import org.apache.jackrabbit.oak.segment.remote.AbstractRemoteSegmentArchiveReader; import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor; @@ -56,12 +56,12 @@ private static Iterable createEntryIterable(CloudBlobDirectory arc } @Override - protected void doReadSegmentToBuffer(String segmentFileName, Buffer buffer) throws IOException { + protected void doReadSegmentToBuffer(String segmentFileName, ByteBuffer buffer) throws IOException { readBufferFully(getBlob(segmentFileName), buffer); } @Override - protected Buffer doReadDataFile(String extension) throws IOException { + protected ByteBuffer doReadDataFile(String extension) throws IOException { return readBlob(getName() + extension); } @@ -78,14 +78,14 @@ private CloudBlockBlob getBlob(String name) throws IOException { } } - private Buffer readBlob(String name) throws IOException { + private ByteBuffer readBlob(String name) throws IOException { try { CloudBlockBlob blob = getBlob(name); if (!blob.exists()) { return null; } long length = blob.getProperties().getLength(); - Buffer buffer = Buffer.allocate((int) length); + ByteBuffer buffer = ByteBuffer.allocate((int) length); AzureUtilitiesV8.readBufferFully(blob, buffer); return buffer; } catch (StorageException e) { diff --git a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureSegmentArchiveWriterV8.java b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureSegmentArchiveWriterV8.java index cd3e15ca8ee..3003f61ffcb 100644 --- a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureSegmentArchiveWriterV8.java +++ b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureSegmentArchiveWriterV8.java @@ -20,6 +20,7 @@ import static org.apache.jackrabbit.oak.segment.remote.RemoteUtilities.getSegmentFileName; import static org.apache.jackrabbit.oak.segment.remote.RemoteUtilities.OFF_HEAP; +import java.nio.ByteBuffer; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; @@ -31,7 +32,6 @@ import com.microsoft.azure.storage.blob.CloudBlobDirectory; import com.microsoft.azure.storage.blob.CloudBlockBlob; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.commons.time.Stopwatch; import org.apache.jackrabbit.oak.segment.azure.AzureBlobMetadata; import org.apache.jackrabbit.oak.segment.azure.util.AzureRequestOptionsV8; @@ -96,13 +96,9 @@ protected void doWriteArchiveEntry(RemoteSegmentArchiveEntry indexEntry, byte[] } @Override - protected Buffer doReadArchiveEntry(RemoteSegmentArchiveEntry indexEntry) throws IOException { - Buffer buffer; - if (OFF_HEAP) { - buffer = Buffer.allocateDirect(indexEntry.getLength()); - } else { - buffer = Buffer.allocate(indexEntry.getLength()); - } + protected ByteBuffer doReadArchiveEntry(RemoteSegmentArchiveEntry indexEntry) throws IOException { + int length = indexEntry.getLength(); + ByteBuffer buffer = OFF_HEAP ? ByteBuffer.allocateDirect(length) : ByteBuffer.allocate(length); readBufferFully(getBlob(getSegmentFileName(indexEntry)), buffer); return buffer; } diff --git a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureUtilitiesV8.java b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureUtilitiesV8.java index 2a95c41d0da..145730d0093 100644 --- a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureUtilitiesV8.java +++ b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureUtilitiesV8.java @@ -28,13 +28,13 @@ import com.microsoft.azure.storage.blob.CloudBlobDirectory; import com.microsoft.azure.storage.blob.LeaseStatus; import com.microsoft.azure.storage.blob.ListBlobItem; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.azure.AzureUtilities; import org.apache.jackrabbit.oak.segment.spi.RepositoryNotReachableException; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.nio.ByteBuffer; import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; @@ -82,7 +82,7 @@ public static List getBlobs(CloudBlobDirectory directory) throws IOEx return blobList; } - public static void readBufferFully(CloudBlob blob, Buffer buffer) throws IOException { + public static void readBufferFully(CloudBlob blob, ByteBuffer buffer) throws IOException { try { blob.download(new ByteBufferOutputStream(buffer)); buffer.flip(); @@ -174,9 +174,9 @@ public static void deleteAllBlobs(@NotNull CloudBlobDirectory directory) throws private static class ByteBufferOutputStream extends OutputStream { @NotNull - private final Buffer buffer; + private final ByteBuffer buffer; - public ByteBufferOutputStream(@NotNull Buffer buffer) { + public ByteBufferOutputStream(@NotNull ByteBuffer buffer) { this.buffer = buffer; } diff --git a/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureArchiveManagerTest.java b/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureArchiveManagerTest.java index 8a15229a2d0..caeea4fbc91 100644 --- a/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureArchiveManagerTest.java +++ b/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureArchiveManagerTest.java @@ -27,7 +27,6 @@ import org.apache.jackrabbit.oak.api.CommitFailedException; import org.apache.jackrabbit.oak.api.PropertyState; import org.apache.jackrabbit.oak.api.Type; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.SegmentId; import org.apache.jackrabbit.oak.segment.SegmentNodeStore; import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders; @@ -62,6 +61,7 @@ import org.mockito.Mockito; import java.io.File; +import java.nio.ByteBuffer; import java.io.FileNotFoundException; import java.io.IOException; import java.net.URISyntaxException; @@ -331,7 +331,7 @@ public void testSegmentDeletedAfterCreatingReader() throws IOException, BlobStor writer.close(); SegmentArchiveReader reader = manager.open("data00000a.tar"); - Buffer segment = reader.readSegment(u.getMostSignificantBits(), u.getLeastSignificantBits()); + ByteBuffer segment = reader.readSegment(u.getMostSignificantBits(), u.getLeastSignificantBits()); assertNotNull(segment); ListBlobsOptions listOptions = new ListBlobsOptions(); @@ -363,7 +363,7 @@ public void testMissingSegmentDetectedInFileStore() throws IOException, BlobStor writer.close(); SegmentArchiveReader reader = manager.open("data00000a.tar"); - Buffer segment = reader.readSegment(u.getMostSignificantBits(), u.getLeastSignificantBits()); + ByteBuffer segment = reader.readSegment(u.getMostSignificantBits(), u.getLeastSignificantBits()); assertNotNull(segment); ListBlobsOptions listOptions = new ListBlobsOptions(); @@ -678,7 +678,7 @@ private void createArchive(SegmentArchiveManager manager, String archiveName) th private PersistentCache createPersistenceCache() { return new AbstractPersistentCache() { @Override - protected Buffer readSegmentInternal(long msb, long lsb) { + protected ByteBuffer readSegmentInternal(long msb, long lsb) { return null; } @@ -688,7 +688,7 @@ public boolean containsSegment(long msb, long lsb) { } @Override - public void writeSegment(long msb, long lsb, Buffer buffer) { + public void writeSegment(long msb, long lsb, ByteBuffer buffer) { } diff --git a/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureHttpClientOperationsTest.java b/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureHttpClientOperationsTest.java index 32f97d26308..c258af8e78c 100644 --- a/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureHttpClientOperationsTest.java +++ b/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureHttpClientOperationsTest.java @@ -19,6 +19,7 @@ import java.io.IOException; import java.io.InputStream; import java.net.InetSocketAddress; +import java.nio.ByteBuffer; import java.time.Duration; import java.util.ArrayList; import java.util.List; @@ -38,7 +39,6 @@ import io.netty.handler.ssl.SslContext; import io.netty.handler.ssl.SslContextBuilder; import io.netty.util.ReferenceCountUtil; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.remote.WriteAccessController; import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitorAdapter; import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter; @@ -199,7 +199,7 @@ public void writesAndReadsSegmentThroughProxy() throws Exception { writer.writeSegment(id.getMostSignificantBits(), id.getLeastSignificantBits(), data, 0, data.length, 1, 1, false); writer.flush(); - Buffer result = writer.readSegment(id.getMostSignificantBits(), id.getLeastSignificantBits()); + ByteBuffer result = writer.readSegment(id.getMostSignificantBits(), id.getLeastSignificantBits()); Assert.assertNotNull(result); byte[] actual = new byte[result.remaining()]; result.get(actual); diff --git a/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureReadSegmentTest.java b/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureReadSegmentTest.java index 20c8bfa59fa..4fea55c04cd 100644 --- a/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureReadSegmentTest.java +++ b/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureReadSegmentTest.java @@ -20,7 +20,6 @@ import com.azure.storage.blob.BlobContainerClient; import com.azure.storage.blob.models.BlobStorageException; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.SegmentId; import org.apache.jackrabbit.oak.segment.SegmentNotFoundException; import org.apache.jackrabbit.oak.segment.file.FileStore; @@ -37,6 +36,7 @@ import org.junit.Test; import java.io.File; +import java.nio.ByteBuffer; import java.io.IOException; import java.net.URISyntaxException; import java.security.InvalidKeyException; @@ -90,7 +90,7 @@ public SegmentArchiveManager createArchiveManager(boolean mmap, boolean offHeapA public SegmentArchiveReader open(String archiveName) throws IOException { return new AzureSegmentArchiveReader(readBlobContainerClient, rootPrefix, archiveName, ioMonitor) { @Override - public Buffer readSegment(long msb, long lsb) throws IOException { + public ByteBuffer readSegment(long msb, long lsb) throws IOException { throw new RepositoryNotReachableException( new RuntimeException("Cannot access Azure storage")); } @@ -101,7 +101,7 @@ public Buffer readSegment(long msb, long lsb) throws IOException { public SegmentArchiveWriter create(String archiveName) throws IOException { return new AzureSegmentArchiveWriter(writeBlobContainerClient, rootPrefix, archiveName, ioMonitor, fileStoreMonitor, writeAccessController) { @Override - public Buffer readSegment(long msb, long lsb) throws IOException { + public ByteBuffer readSegment(long msb, long lsb) throws IOException { throw new RepositoryNotReachableException( new RuntimeException("Cannot access Azure storage")); } diff --git a/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentCopyTestBase.java b/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentCopyTestBase.java index e0397602ceb..327d470f255 100644 --- a/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentCopyTestBase.java +++ b/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/tool/SegmentCopyTestBase.java @@ -29,6 +29,7 @@ import static org.junit.Assert.assertTrue; import java.io.File; +import java.nio.ByteBuffer; import java.io.IOException; import java.io.PrintWriter; import java.net.URISyntaxException; @@ -45,7 +46,6 @@ import com.microsoft.azure.storage.blob.SharedAccessBlobPolicy; import org.apache.jackrabbit.oak.blob.cloud.azure.blobstorage.AzuriteDockerRule; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.SegmentCache; import org.apache.jackrabbit.oak.segment.SegmentNodeStore; import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders; @@ -186,14 +186,14 @@ private void checkArchives(SegmentArchiveManager srcArchiveManager, SegmentArchi assertEquals(srcSegment.getFullGeneration(), destSegment.getFullGeneration()); assertEquals(srcSegment.getGeneration(), destSegment.getFullGeneration()); - Buffer srcDataBuffer = srcArchiveReader.readSegment(srcSegment.getMsb(), srcSegment.getLsb()); - Buffer destDataBuffer = destArchiveReader.readSegment(destSegment.getMsb(), destSegment.getLsb()); + ByteBuffer srcDataBuffer = srcArchiveReader.readSegment(srcSegment.getMsb(), srcSegment.getLsb()); + ByteBuffer destDataBuffer = destArchiveReader.readSegment(destSegment.getMsb(), destSegment.getLsb()); assertEquals(srcDataBuffer, destDataBuffer); } - Buffer srcBinRefBuffer = srcArchiveReader.getBinaryReferences(); - Buffer destBinRefBuffer = destArchiveReader.getBinaryReferences(); + ByteBuffer srcBinRefBuffer = srcArchiveReader.getBinaryReferences(); + ByteBuffer destBinRefBuffer = destArchiveReader.getBinaryReferences(); assertEquals(srcBinRefBuffer, destBinRefBuffer); SegmentGraph srcGraph = srcArchiveReader.getGraph(); diff --git a/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureArchiveManagerV8Test.java b/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureArchiveManagerV8Test.java index 9065977487e..0f2ade6b47b 100644 --- a/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureArchiveManagerV8Test.java +++ b/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureArchiveManagerV8Test.java @@ -27,7 +27,6 @@ import org.apache.jackrabbit.oak.api.PropertyState; import org.apache.jackrabbit.oak.api.Type; import org.apache.jackrabbit.oak.blob.cloud.azure.blobstorage.AzuriteDockerRule; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.SegmentId; import org.apache.jackrabbit.oak.segment.SegmentNodeStore; import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders; @@ -59,6 +58,7 @@ import org.mockito.Mockito; import java.io.File; +import java.nio.ByteBuffer; import java.io.FileNotFoundException; import java.io.IOException; import java.net.URISyntaxException; @@ -314,7 +314,7 @@ public void testSegmentDeletedAfterCreatingReader() throws IOException, URISynta writer.close(); SegmentArchiveReader reader = manager.open("data00000a.tar"); - Buffer segment = reader.readSegment(u.getMostSignificantBits(), u.getLeastSignificantBits()); + ByteBuffer segment = reader.readSegment(u.getMostSignificantBits(), u.getLeastSignificantBits()); assertNotNull(segment); ListBlobItem segment0000 = container.listBlobs("oak/data00000a.tar/0000.").iterator().next(); @@ -345,7 +345,7 @@ public void testMissngSegmentDetectedInFileStore() throws IOException, StorageEx writer.close(); SegmentArchiveReader reader = manager.open("data00000a.tar"); - Buffer segment = reader.readSegment(u.getMostSignificantBits(), u.getLeastSignificantBits()); + ByteBuffer segment = reader.readSegment(u.getMostSignificantBits(), u.getLeastSignificantBits()); assertNotNull(segment); ListBlobItem segment0000 = container.listBlobs("oak/data00000a.tar/0000.").iterator().next(); @@ -622,7 +622,7 @@ private static void createArchive(SegmentArchiveManager manager, String archiveN private PersistentCache createPersistenceCache() { return new AbstractPersistentCache() { @Override - protected Buffer readSegmentInternal(long msb, long lsb) { + protected ByteBuffer readSegmentInternal(long msb, long lsb) { return null; } @@ -632,7 +632,7 @@ public boolean containsSegment(long msb, long lsb) { } @Override - public void writeSegment(long msb, long lsb, Buffer buffer) { + public void writeSegment(long msb, long lsb, ByteBuffer buffer) { } diff --git a/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureReadSegmentV8Test.java b/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureReadSegmentV8Test.java index 6e9583a7c46..beb84411fa6 100644 --- a/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureReadSegmentV8Test.java +++ b/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/v8/AzureReadSegmentV8Test.java @@ -23,7 +23,6 @@ import com.microsoft.azure.storage.blob.CloudBlobDirectory; import org.apache.jackrabbit.oak.blob.cloud.azure.blobstorage.AzuriteDockerRule; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.SegmentId; import org.apache.jackrabbit.oak.segment.SegmentNotFoundException; import org.apache.jackrabbit.oak.segment.azure.FileStoreTestUtil; @@ -41,6 +40,7 @@ import org.junit.Test; import java.io.File; +import java.nio.ByteBuffer; import java.io.IOException; import java.net.URISyntaxException; import java.security.InvalidKeyException; @@ -92,7 +92,7 @@ public SegmentArchiveReader open(String archiveName) throws IOException { CloudBlobDirectory archiveDirectory = getDirectory(archiveName); return new AzureSegmentArchiveReaderV8(archiveDirectory, ioMonitor) { @Override - public Buffer readSegment(long msb, long lsb) throws IOException { + public ByteBuffer readSegment(long msb, long lsb) throws IOException { throw new RepositoryNotReachableException( new RuntimeException("Cannot access Azure storage")); } @@ -104,7 +104,7 @@ public SegmentArchiveWriter create(String archiveName) throws IOException { CloudBlobDirectory archiveDirectory = getDirectory(archiveName); return new AzureSegmentArchiveWriterV8(archiveDirectory, ioMonitor, fileStoreMonitor, writeAccessController) { @Override - public Buffer readSegment(long msb, long lsb) throws IOException { + public ByteBuffer readSegment(long msb, long lsb) throws IOException { throw new RepositoryNotReachableException( new RuntimeException("Cannot access Azure storage")); } }; diff --git a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveReader.java b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveReader.java index 0db075da094..61ae78a2dd7 100644 --- a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveReader.java +++ b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveReader.java @@ -19,7 +19,6 @@ import static org.apache.jackrabbit.oak.segment.remote.RemoteUtilities.getSegmentFileName; import static org.apache.jackrabbit.oak.segment.remote.RemoteUtilities.OFF_HEAP; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.commons.time.Stopwatch; import org.apache.jackrabbit.oak.segment.file.tar.SegmentGraph; import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor; @@ -30,6 +29,7 @@ import java.io.File; import java.io.IOException; +import java.nio.ByteBuffer; import java.util.Comparator; import java.util.List; import java.util.Set; @@ -82,18 +82,14 @@ public long length() { } @Override - public Buffer readSegment(long msb, long lsb) throws IOException { + public ByteBuffer readSegment(long msb, long lsb) throws IOException { RemoteSegmentArchiveEntry indexEntry = index.get(msb, lsb); if (indexEntry == null) { return null; } - Buffer buffer; - if (OFF_HEAP) { - buffer = Buffer.allocateDirect(indexEntry.getLength()); - } else { - buffer = Buffer.allocate(indexEntry.getLength()); - } + int length = indexEntry.getLength(); + ByteBuffer buffer = OFF_HEAP ? ByteBuffer.allocateDirect(length) : ByteBuffer.allocate(length); ioMonitor.beforeSegmentRead(archivePathAsFile(), msb, lsb, indexEntry.getLength()); Stopwatch stopwatch = Stopwatch.createStarted(); String segmentFileName = getSegmentFileName(indexEntry); @@ -126,7 +122,7 @@ public List listSegments() { @Override public @NotNull SegmentGraph getGraph() throws IOException { - Buffer buffer = doReadDataFile(".gph"); + ByteBuffer buffer = doReadDataFile(".gph"); if (buffer != null) { return SegmentGraph.parse(buffer); } @@ -134,7 +130,7 @@ public List listSegments() { } @Override - public @Nullable Buffer getBinaryReferences() throws IOException { + public @Nullable ByteBuffer getBinaryReferences() throws IOException { return doReadDataFile(".brf"); } @@ -153,14 +149,14 @@ public int getEntrySize(int size) { * @param segmentFileName, the name of the segment (msb + lsb) prefixed by its position in the archive * @param buffer, the buffer to which to read */ - protected abstract void doReadSegmentToBuffer(String segmentFileName, Buffer buffer) throws IOException; + protected abstract void doReadSegmentToBuffer(String segmentFileName, ByteBuffer buffer) throws IOException; /** * Reads a data file inside the archive. This entry is not a segment. Its full name is given by archive name + extension. * @param extension, extension of the file * @return the buffer containing the data file bytes */ - protected abstract Buffer doReadDataFile(String extension) throws IOException; + protected abstract ByteBuffer doReadDataFile(String extension) throws IOException; /** * Returns the decoded file component of this archive. diff --git a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveWriter.java b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveWriter.java index 3e1964bb264..0891fe26c11 100644 --- a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveWriter.java +++ b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveWriter.java @@ -16,7 +16,6 @@ */ package org.apache.jackrabbit.oak.segment.remote; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.remote.queue.SegmentWriteAction; import org.apache.jackrabbit.oak.segment.remote.queue.SegmentWriteQueue; import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitor; @@ -25,6 +24,7 @@ import org.jetbrains.annotations.NotNull; import java.io.IOException; +import java.nio.ByteBuffer; import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; @@ -73,11 +73,11 @@ public void writeSegment(long msb, long lsb, @NotNull byte[] data, int offset, i } @Override - public Buffer readSegment(long msb, long lsb) throws IOException { + public ByteBuffer readSegment(long msb, long lsb) throws IOException { UUID uuid = new UUID(msb, lsb); Optional segment = queue.map(q -> q.read(uuid)); if (segment.isPresent()) { - return segment.get().toBuffer(); + return segment.get().toByteBuffer(); } RemoteSegmentArchiveEntry indexEntry = index.get(uuid); @@ -176,7 +176,7 @@ public int getMaxEntryCount() { * @param indexEntry, the archive index entry to read * @return th buffer containing the segment bytes */ - protected abstract Buffer doReadArchiveEntry(RemoteSegmentArchiveEntry indexEntry) throws IOException; + protected abstract ByteBuffer doReadArchiveEntry(RemoteSegmentArchiveEntry indexEntry) throws IOException; /** * Writes a data file inside the archive. This entry is not a segment. Its full name is given by archive name + extension. diff --git a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/package-info.java b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/package-info.java index 5c70f9fbe82..63f8dcdd15c 100644 --- a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/package-info.java +++ b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/package-info.java @@ -15,7 +15,7 @@ * limitations under the License. */ @Internal(since = "1.0.0") -@Version("3.0.0") +@Version("4.0.0") package org.apache.jackrabbit.oak.segment.remote; import org.apache.jackrabbit.oak.commons.annotations.Internal; diff --git a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentDiskCache.java b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentDiskCache.java index 46f9ed7dfd7..ca1849b1cef 100644 --- a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentDiskCache.java +++ b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentDiskCache.java @@ -21,7 +21,7 @@ import java.nio.file.DirectoryIteratorException; import java.nio.file.DirectoryStream; import java.nio.file.NoSuchFileException; -import org.apache.jackrabbit.oak.commons.Buffer; +import org.apache.jackrabbit.oak.commons.IOUtils; import org.apache.jackrabbit.oak.commons.time.Stopwatch; import org.apache.jackrabbit.oak.segment.spi.persistence.persistentcache.AbstractPersistentCache; import org.apache.jackrabbit.oak.segment.spi.persistence.persistentcache.SegmentCacheStats; @@ -36,6 +36,7 @@ import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; +import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.file.AtomicMoveNotSupportedException; import java.nio.file.Files; @@ -141,7 +142,7 @@ public PersistentDiskCache(File directory, int cacheMaxSizeMB, DiskCacheIOMonito } @Override - protected Buffer readSegmentInternal(long msb, long lsb) { + protected ByteBuffer readSegmentInternal(long msb, long lsb) { try { String segmentId = new UUID(msb, lsb).toString(); File segmentFile = new File(directory, segmentId); @@ -152,22 +153,15 @@ protected Buffer readSegmentInternal(long msb, long lsb) { try (FileInputStream fis = new FileInputStream(segmentFile); FileChannel channel = fis.getChannel()) { int length = (int) channel.size(); - Buffer buffer; - if (OFF_HEAP) { - buffer = Buffer.allocateDirect(length); - } else { - buffer = Buffer.allocate(length); - } - if (buffer.readFully(channel, 0) < length) { + ByteBuffer buffer = OFF_HEAP ? ByteBuffer.allocateDirect(length) : ByteBuffer.allocate(length); + if (IOUtils.readFully(channel, 0, buffer) < length) { throw new EOFException(); } long elapsed = stopwatch.elapsed(TimeUnit.NANOSECONDS); diskCacheIOMonitor.afterSegmentRead(segmentFile, msb, lsb, (int) segmentFile.length(), elapsed); - buffer.flip(); - - return buffer; + return buffer.flip(); } catch (FileNotFoundException e) { logger.info("Segment {} deleted from file system!", segmentId); } catch (IOException e) { @@ -187,12 +181,12 @@ public boolean containsSegment(long msb, long lsb) { } @Override - public void writeSegment(long msb, long lsb, Buffer buffer) { + public void writeSegment(long msb, long lsb, ByteBuffer buffer) { String segmentId = new UUID(msb, lsb).toString(); File segmentFile = new File(directory, segmentId); File tempSegmentFile = new File(directory, segmentId + System.nanoTime() + TEMP_FILE_SUFFIX); - Buffer bufferCopy = buffer.duplicate(); + ByteBuffer bufferCopy = buffer.duplicate(); Runnable task = () -> { if (writesPending.add(segmentId)) { @@ -208,7 +202,7 @@ public void writeSegment(long msb, long lsb, Buffer buffer) { if (FT_OAK_12212_SKIP_MISSING_FILE_CHECK.get() || !segmentFile.exists()) { int fileSize; try (FileChannel channel = new FileOutputStream(tempSegmentFile).getChannel()) { - fileSize = bufferCopy.write(channel); + fileSize = channel.write(bufferCopy); } try { Files.move(tempSegmentFile.toPath(), segmentFile.toPath(), StandardCopyOption.ATOMIC_MOVE); diff --git a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentRedisCache.java b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentRedisCache.java index 754e657fc56..2280ccc054d 100644 --- a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentRedisCache.java +++ b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentRedisCache.java @@ -17,7 +17,6 @@ */ package org.apache.jackrabbit.oak.segment.remote.persistentcache; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.commons.time.Stopwatch; import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor; import org.apache.jackrabbit.oak.segment.spi.persistence.persistentcache.AbstractPersistentCache; @@ -31,11 +30,9 @@ import redis.clients.jedis.exceptions.JedisException; import redis.clients.jedis.params.SetParams; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.StringReader; -import java.nio.channels.Channels; -import java.nio.channels.WritableByteChannel; +import java.nio.ByteBuffer; import java.util.Properties; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -123,7 +120,7 @@ private String getRedisProperty(String section, String propertyName) throws IOEx } @Override - protected Buffer readSegmentInternal(long msb, long lsb) { + protected ByteBuffer readSegmentInternal(long msb, long lsb) { String segmentId = new UUID(msb, lsb).toString(); Stopwatch stopwatch = Stopwatch.createStarted(); @@ -135,15 +132,10 @@ protected Buffer readSegmentInternal(long msb, long lsb) { long elapsed = stopwatch.elapsed(TimeUnit.NANOSECONDS); redisCacheIOMonitor.afterSegmentRead(null, msb, lsb, bytes.length, elapsed); - Buffer buffer; - if (OFF_HEAP) { - buffer = Buffer.allocateDirect(bytes.length); - } else { - buffer = Buffer.allocate(bytes.length); + if (!OFF_HEAP) { + return ByteBuffer.wrap(bytes); } - buffer.put(bytes); - buffer.flip(); - return buffer; + return ByteBuffer.allocateDirect(bytes.length).put(bytes).flip(); } } catch (Exception e) { logger.error("Error loading segment {} from cache", segmentId, e); @@ -166,20 +158,18 @@ public boolean containsSegment(long msb, long lsb) { } @Override - public void writeSegment(long msb, long lsb, Buffer buffer) { + public void writeSegment(long msb, long lsb, ByteBuffer buffer) { String segmentId = new UUID(msb, lsb).toString(); - Buffer bufferCopy = buffer.duplicate(); + ByteBuffer bufferCopy = buffer.duplicate(); Runnable task = () -> { if (writesPending.add(segmentId)) { - final ByteArrayOutputStream bos = new ByteArrayOutputStream(); - try (WritableByteChannel channel = Channels.newChannel(bos); Jedis redis = redisPool.getResource()) { - while (bufferCopy.hasRemaining()) { - bufferCopy.write(channel); - } + try (Jedis redis = redisPool.getResource()) { + final byte[] bytes = new byte[bufferCopy.remaining()]; + bufferCopy.get(bytes); final byte[] key = (REDIS_PREFIX + ":" + segmentId).getBytes(); - redis.set(key, bos.toByteArray(), setParamsWithExpire); - cacheSize.addAndGet(bos.size()); + redis.set(key, bytes, setParamsWithExpire); + cacheSize.addAndGet(bytes.length); } catch (Throwable t) { logger.debug("Unable to write segment {} to cache: {}", segmentId, t.getMessage()); } finally { diff --git a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/package-info.java b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/package-info.java index 96b4c9aa148..b3b738b3f81 100644 --- a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/package-info.java +++ b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/package-info.java @@ -15,7 +15,7 @@ * limitations under the License. */ @Internal -@Version("2.1.1") +@Version("3.0.0") package org.apache.jackrabbit.oak.segment.remote.persistentcache; import org.apache.jackrabbit.oak.commons.annotations.Internal; diff --git a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/queue/SegmentWriteAction.java b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/queue/SegmentWriteAction.java index 0df01445f30..c76e074a53f 100644 --- a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/queue/SegmentWriteAction.java +++ b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/queue/SegmentWriteAction.java @@ -16,10 +16,10 @@ */ package org.apache.jackrabbit.oak.segment.remote.queue; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.remote.RemoteSegmentArchiveEntry; import java.io.IOException; +import java.nio.ByteBuffer; import java.util.UUID; public class SegmentWriteAction { @@ -47,8 +47,8 @@ public UUID getUuid() { return new UUID(indexEntry.getMsb(), indexEntry.getLsb()); } - public Buffer toBuffer() { - return Buffer.wrap(buffer, offset, length); + public ByteBuffer toByteBuffer() { + return ByteBuffer.wrap(buffer, offset, length); } public void passTo(SegmentWriteQueue.SegmentConsumer consumer) throws IOException { diff --git a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/queue/package-info.java b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/queue/package-info.java index 865efd882aa..1a293bbef8e 100644 --- a/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/queue/package-info.java +++ b/oak-segment-remote/src/main/java/org/apache/jackrabbit/oak/segment/remote/queue/package-info.java @@ -15,7 +15,7 @@ * limitations under the License. */ @Internal(since = "1.0.0") -@Version("1.0.0") +@Version("2.0.0") package org.apache.jackrabbit.oak.segment.remote.queue; import org.apache.jackrabbit.oak.commons.annotations.Internal; diff --git a/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveReaderTest.java b/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveReaderTest.java index 09902031c77..f5867d8e521 100644 --- a/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveReaderTest.java +++ b/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/AbstractRemoteSegmentArchiveReaderTest.java @@ -18,7 +18,7 @@ */ package org.apache.jackrabbit.oak.segment.remote; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.file.tar.SegmentGraph; import org.apache.jackrabbit.oak.segment.remote.AbstractRemoteSegmentArchiveReader.ArchiveEntry; import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter; @@ -50,14 +50,14 @@ public TestSegmentArchiveReader(String archiveName, Iterable entri } @Override - protected void doReadSegmentToBuffer(String segmentFileName, Buffer buffer) throws IOException { + protected void doReadSegmentToBuffer(String segmentFileName, ByteBuffer buffer) throws IOException { for (int i = 0; i < buffer.limit(); i++) { buffer.put((byte) 1); } } @Override - protected Buffer doReadDataFile(String extension) throws IOException { + protected ByteBuffer doReadDataFile(String extension) throws IOException { return null; } @@ -98,7 +98,7 @@ public void setup() { @Test public void testReadSegment() throws IOException { - Buffer buffer = reader.readSegment(0L, 1L); + ByteBuffer buffer = reader.readSegment(0L, 1L); assertNotNull(buffer); assertEquals(20, buffer.limit()); for (int i = 0; i < buffer.limit(); i++) { @@ -108,7 +108,7 @@ public void testReadSegment() throws IOException { @Test public void testReadNonExistentSegment() throws IOException { - Buffer buffer = reader.readSegment(1L, 3L); + ByteBuffer buffer = reader.readSegment(1L, 3L); assertNull(buffer); } diff --git a/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/AbstractPersistentCacheTest.java b/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/AbstractPersistentCacheTest.java index 529dc24a895..3f05f607e12 100644 --- a/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/AbstractPersistentCacheTest.java +++ b/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/AbstractPersistentCacheTest.java @@ -17,7 +17,7 @@ */ package org.apache.jackrabbit.oak.segment.remote.persistentcache; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.spi.persistence.persistentcache.AbstractPersistentCache; import org.junit.Ignore; import org.junit.Test; @@ -71,14 +71,14 @@ protected void waitWhile(Supplier condition) { @Ignore("OAK-10543") public void writeAndReadManySegments() { final List testSegments = new ArrayList<>(SEGMENTS); - final List> segmentsRead = new ArrayList<>(THREADS); + final List> segmentsRead = new ArrayList<>(THREADS); for (int i = 0; i < SEGMENTS; ++i) { testSegments.add(TestSegment.createSegment()); } for (int i = 0; i < THREADS; ++i) { - final Map segmentsReadThisThread = new HashMap<>(SEGMENTS_PER_THREAD); + final Map segmentsReadThisThread = new HashMap<>(SEGMENTS_PER_THREAD); segmentsRead.add(segmentsReadThisThread); } @@ -102,11 +102,11 @@ public void writeAndReadManySegments() { done.set(0); runConcurrently((nThread, nSegment) -> { - final Map segmentsReadThisThread = segmentsRead.get(nThread); + final Map segmentsReadThisThread = segmentsRead.get(nThread); final TestSegment segment = testSegments.get(nSegment); final long[] id = segment.getSegmentId(); try { - final Buffer segmentRead = persistentCache.readSegment(id[0], id[1], () -> null); + final ByteBuffer segmentRead = persistentCache.readSegment(id[0], id[1], () -> null); segmentsReadThisThread.put(new UUID(id[0], id[1]).toString(), segmentRead); } finally { done.incrementAndGet(); @@ -121,9 +121,9 @@ public void writeAndReadManySegments() { for (int i = 0; i < THREADS; ++i) { for (int j = i * SEGMENTS_PER_THREAD; j < (i + 1) * SEGMENTS_PER_THREAD; ++j) { TestSegment testSegment = testSegments.get(j); - Map segmentsReadThisThread = segmentsRead.get(i); + Map segmentsReadThisThread = segmentsRead.get(i); long[] segmentReadId = testSegment.getSegmentId(); - Buffer segmentRead = segmentsReadThisThread.get(new UUID(segmentReadId[0], segmentReadId[1]).toString()); + ByteBuffer segmentRead = segmentsReadThisThread.get(new UUID(segmentReadId[0], segmentReadId[1]).toString()); if (segmentRead == null) { errors.incrementAndGet(); continue; @@ -221,7 +221,7 @@ public void testConcurrentWritesSameSegment() { waitWhile(() -> done.get() < SEGMENTS); - Buffer segmentRead = persistentCache.readSegment(segmentId[0], segmentId[1], () -> null); + ByteBuffer segmentRead = persistentCache.readSegment(segmentId[0], segmentId[1], () -> null); assertNotNull("The segment was not found", segmentRead); assertSegmentBufferEquals(testSegment.getSegmentBuffer(), segmentRead); } @@ -252,7 +252,7 @@ private static byte[] createSegmentIdBytes() { } protected long[] getSegmentId() { - final Buffer buffer = Buffer.allocate(segmentId.length); + final ByteBuffer buffer = ByteBuffer.allocate(segmentId.length); buffer.put(segmentId); long[] ret = new long[2]; ret[0] = buffer.getLong(0); @@ -260,8 +260,8 @@ protected long[] getSegmentId() { return ret; } - protected Buffer getSegmentBuffer() { - return Buffer.wrap(segmentBytes); + protected ByteBuffer getSegmentBuffer() { + return ByteBuffer.wrap(segmentBytes); } private TestSegment(byte[] segmentId, byte[] segmentBytes) { @@ -274,7 +274,7 @@ protected byte[] getSegmentBytes() { } } - protected static void assertSegmentBufferEquals(Buffer expected, Buffer actual) { + protected static void assertSegmentBufferEquals(ByteBuffer expected, ByteBuffer actual) { expected.rewind(); actual.rewind(); assertEquals("Segment size is different", TestSegment.SEGMENT_LEN, actual.remaining()); diff --git a/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentDiskCacheSizeAccountingTest.java b/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentDiskCacheSizeAccountingTest.java index 4922e7fcaec..0945b528166 100644 --- a/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentDiskCacheSizeAccountingTest.java +++ b/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentDiskCacheSizeAccountingTest.java @@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak.segment.remote.persistentcache; import org.apache.commons.io.FileUtils; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.spi.persistence.persistentcache.AbstractPersistentCache; import org.junit.After; import org.junit.Before; @@ -50,7 +51,7 @@ *

Before the OAK-12212 fix, the in-memory {@code cacheSize} counter * maintained by {@link PersistentDiskCache} could drift well above the actual * size of the cache directory: the {@code writesPending} guard in - * {@link PersistentDiskCache#writeSegment(long, long, org.apache.jackrabbit.oak.commons.Buffer)} + * {@link PersistentDiskCache#writeSegment(long, long, java.nio.ByteBuffer)} * only prevents simultaneously running write tasks for the same * segment id, not sequentially running ones. Every {@code writeSegment} * invocation that reached the body still added {@code fileSize} to @@ -136,7 +137,7 @@ public void cacheSizeCounterMustMatchDirectorySizeAfterRepeatedWritesOfSameSegme final int writes = 4; // mirrors the ~4x drift seen in the heap dump for (int i = 0; i < writes; i++) { - persistentCache.writeSegment(msb, lsb, org.apache.jackrabbit.oak.commons.Buffer.wrap(segmentBytes)); + persistentCache.writeSegment(msb, lsb, java.nio.ByteBuffer.wrap(segmentBytes)); drainExecutor(persistentCache); } @@ -193,7 +194,7 @@ public void cacheSizeCounterMustMatchDirectorySizeAcrossWriteAndCleanupCycles() final int writes = 8; for (int i = 0; i < writes; i++) { - persistentCache.writeSegment(msb, lsb, org.apache.jackrabbit.oak.commons.Buffer.wrap(segmentBytes)); + persistentCache.writeSegment(msb, lsb, java.nio.ByteBuffer.wrap(segmentBytes)); drainExecutor(persistentCache); } @@ -235,7 +236,7 @@ public void killSwitchRestoresLegacyDoubleCountingBehaviour() throws Exception { final int writes = 4; for (int i = 0; i < writes; i++) { - persistentCache.writeSegment(msb, lsb, org.apache.jackrabbit.oak.commons.Buffer.wrap(segmentBytes)); + persistentCache.writeSegment(msb, lsb, java.nio.ByteBuffer.wrap(segmentBytes)); drainExecutor(persistentCache); } diff --git a/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentDiskCacheTest.java b/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentDiskCacheTest.java index f233b46498c..e14cdaab56e 100644 --- a/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentDiskCacheTest.java +++ b/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentDiskCacheTest.java @@ -17,7 +17,7 @@ */ package org.apache.jackrabbit.oak.segment.remote.persistentcache; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.stats.StatisticsProvider; import org.junit.After; import org.junit.Before; @@ -64,14 +64,14 @@ public void cleanupTest() throws Exception { persistentCache.close(); persistentCache = new PersistentDiskCache(temporaryFolder.newFolder(), 0, new DiskCacheIOMonitor(StatisticsProvider.NOOP), 500); final List testSegments = new ArrayList<>(SEGMENTS); - final List> segmentsRead = new ArrayList<>(THREADS); + final List> segmentsRead = new ArrayList<>(THREADS); for (int i = 0; i < SEGMENTS; ++i) { testSegments.add(TestSegment.createSegment()); } for (int i = 0; i < THREADS; ++i) { - final Map segmentsReadThisThread = new HashMap<>(SEGMENTS_PER_THREAD); + final Map segmentsReadThisThread = new HashMap<>(SEGMENTS_PER_THREAD); segmentsRead.add(segmentsReadThisThread); } @@ -102,8 +102,8 @@ public void cleanupTest() throws Exception { final TestSegment segment = testSegments.get(nSegment); final long[] id = segment.getSegmentId(); try { - final Map segmentsReadThisThread = segmentsRead.get(nThread); - final Buffer segmentRead = persistentCache.readSegment(id[0], id[1], () -> null); + final Map segmentsReadThisThread = segmentsRead.get(nThread); + final ByteBuffer segmentRead = persistentCache.readSegment(id[0], id[1], () -> null); segmentsReadThisThread.put(new UUID(id[0], id[1]).toString(), segmentRead); } catch (Throwable t) { errors.incrementAndGet(); @@ -121,9 +121,9 @@ public void cleanupTest() throws Exception { for (int i = 0; i < THREADS; ++i) { for (int j = i * SEGMENTS_PER_THREAD; j < (i + 1) * SEGMENTS_PER_THREAD; ++j) { TestSegment testSegment = testSegments.get(j); - Map segmentsReadThisThread = segmentsRead.get(i); + Map segmentsReadThisThread = segmentsRead.get(i); long[] segmentReadId = testSegment.getSegmentId(); - Buffer segmentRead = segmentsReadThisThread.get(new UUID(segmentReadId[0], segmentReadId[1]).toString()); + ByteBuffer segmentRead = segmentsReadThisThread.get(new UUID(segmentReadId[0], segmentReadId[1]).toString()); if (segmentRead == null) { errors.incrementAndGet(); } diff --git a/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentRedisCacheTest.java b/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentRedisCacheTest.java index 17804ed1958..325e51508cd 100644 --- a/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentRedisCacheTest.java +++ b/oak-segment-remote/src/test/java/org/apache/jackrabbit/oak/segment/remote/persistentcache/PersistentRedisCacheTest.java @@ -17,7 +17,7 @@ */ package org.apache.jackrabbit.oak.segment.remote.persistentcache; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter; import org.junit.After; import org.junit.Assume; @@ -95,7 +95,7 @@ public void testIOMonitor() throws InterruptedException { //Segment not in cache, monitor methods not invoked verify(ioMonitorAdapter, never()).afterSegmentRead(any(), anyLong(), anyLong(), anyInt(), anyLong()); - persistentCache.writeSegment(msb, lsb, Buffer.wrap("segment_content".getBytes())); + persistentCache.writeSegment(msb, lsb, ByteBuffer.wrap("segment_content".getBytes())); Thread.sleep(300); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CheckpointCompactor.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CheckpointCompactor.java index 8bf4137d23d..27e68af039e 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CheckpointCompactor.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CheckpointCompactor.java @@ -38,7 +38,7 @@ import java.util.stream.Stream; import org.apache.jackrabbit.oak.api.PropertyState; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.commons.conditions.Validate; import org.apache.jackrabbit.oak.plugins.memory.MemoryChildNodeEntry; import org.apache.jackrabbit.oak.segment.file.CompactedNodeState; @@ -126,7 +126,7 @@ public CheckpointCompactor( "softCanceller is only supported for compactDown, i.e. when Objects.equals(after, onto)"); Set superRoots = collectSuperRootPaths(before, after); - Buffer stableIdBytes = requireNonNull(CompactorUtils.getStableIdBytes(after)); + ByteBuffer stableIdBytes = requireNonNull(CompactorUtils.getStableIdBytes(after)); NodeBuilder rootBuilder = onto.builder(); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ClassicCompactor.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ClassicCompactor.java index ae76061ae0d..e76735ca857 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ClassicCompactor.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ClassicCompactor.java @@ -33,7 +33,7 @@ import org.apache.jackrabbit.oak.api.Blob; import org.apache.jackrabbit.oak.api.PropertyState; import org.apache.jackrabbit.oak.api.Type; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.commons.conditions.Validate; import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder; import org.apache.jackrabbit.oak.plugins.memory.ModifiedNodeState; @@ -142,7 +142,7 @@ public ClassicCompactor( protected @Nullable CompactedNodeState writeNodeState( @NotNull NodeState nodeState, - @Nullable Buffer stableIdBytes, + @Nullable ByteBuffer stableIdBytes, boolean complete ) throws IOException { if (complete) { diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CompactorUtils.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CompactorUtils.java index 51607437c9d..8830268615d 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CompactorUtils.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/CompactorUtils.java @@ -18,13 +18,13 @@ package org.apache.jackrabbit.oak.segment; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.spi.state.NodeState; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; final class CompactorUtils { - static @Nullable Buffer getStableIdBytes(@NotNull NodeState state) { + static @Nullable ByteBuffer getStableIdBytes(@NotNull NodeState state) { if (state instanceof SegmentNodeState) { return ((SegmentNodeState) state).getStableIdBytes(); } else { diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java index e0917f6931d..4017528bc0f 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/DefaultSegmentWriter.java @@ -57,7 +57,7 @@ import org.apache.jackrabbit.oak.api.Blob; import org.apache.jackrabbit.oak.api.PropertyState; import org.apache.jackrabbit.oak.api.Type; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.commons.conditions.Validate; import org.apache.jackrabbit.oak.plugins.blob.BlobStoreBlob; import org.apache.jackrabbit.oak.plugins.memory.ModifiedNodeState; @@ -196,7 +196,7 @@ RecordId writeProperty(@NotNull final PropertyState state) throws IOException { @Override @NotNull - public RecordId writeNode(@NotNull final NodeState state, @Nullable final Buffer stableIdBytes) throws IOException { + public RecordId writeNode(@NotNull final NodeState state, @Nullable final ByteBuffer stableIdBytes) throws IOException { return new SegmentWriteOperation(writeOperationHandler.getGCGeneration()) .writeNode(state, stableIdBytes); } @@ -828,7 +828,7 @@ private RecordId writeTemplate(Template template) throws IOException { return tid; } - private RecordId writeNode(@NotNull NodeState state, @Nullable Buffer stableIdBytes) + private RecordId writeNode(@NotNull NodeState state, @Nullable ByteBuffer stableIdBytes) throws IOException { RecordId compactedId = deduplicateNode(state); @@ -855,7 +855,7 @@ private byte cost(NodeState node) { return (byte) (Byte.MIN_VALUE + 64 - numberOfLeadingZeros(childCount)); } - private RecordId writeNodeUncached(@NotNull NodeState state, @Nullable Buffer stableIdBytes) + private RecordId writeNodeUncached(@NotNull NodeState state, @Nullable ByteBuffer stableIdBytes) throws IOException { RecordId beforeId = null; @@ -940,9 +940,8 @@ private RecordId writeNodeUncached(@NotNull NodeState state, @Nullable Buffer st RecordId stableId; if (stableIdBytes != null) { - Buffer buffer = stableIdBytes.duplicate(); - byte[] bytes = new byte[buffer.remaining()]; - buffer.get(bytes); + byte[] bytes = new byte[stableIdBytes.remaining()]; + stableIdBytes.get(stableIdBytes.position(), bytes); stableId = writeBlock(bytes, 0, bytes.length); } else { stableId = null; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/LegacyCheckpointCompactor.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/LegacyCheckpointCompactor.java index 897c46c16f5..73c864123b6 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/LegacyCheckpointCompactor.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/LegacyCheckpointCompactor.java @@ -34,7 +34,7 @@ import java.util.Map; import java.util.Map.Entry; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.commons.conditions.Validate; import org.apache.jackrabbit.oak.plugins.memory.MemoryChildNodeEntry; import org.apache.jackrabbit.oak.segment.file.CompactedNodeState; @@ -117,7 +117,7 @@ public LegacyCheckpointCompactor( } NodeBuilder builder = after.builder(); - Buffer stableIdBytes = requireNonNull(CompactorUtils.getStableIdBytes(after)); + ByteBuffer stableIdBytes = requireNonNull(CompactorUtils.getStableIdBytes(after)); getChild(builder, getParentPath(path)).setChildNode(getName(path), compacted); @@ -161,7 +161,7 @@ public LegacyCheckpointCompactor( LinkedHashMap roots = collectRoots(before, after); NodeBuilder builder = after.builder(); - Buffer stableIdBytes = requireNonNull(CompactorUtils.getStableIdBytes(after)); + ByteBuffer stableIdBytes = requireNonNull(CompactorUtils.getStableIdBytes(after)); before = getRoot(before); onto = getRoot(onto); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ParallelCompactor.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ParallelCompactor.java index 0e4e4a0d552..836239346e5 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ParallelCompactor.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/ParallelCompactor.java @@ -19,7 +19,7 @@ package org.apache.jackrabbit.oak.segment; import org.apache.jackrabbit.oak.api.PropertyState; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.commons.conditions.Validate; import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder; import org.apache.jackrabbit.oak.segment.file.CompactedNodeState; @@ -241,7 +241,7 @@ private boolean tryCancelCompaction() { } NodeBuilder builder = new MemoryNodeBuilder(onto); - Buffer stableIdBytes = CompactorUtils.getStableIdBytes(after); + ByteBuffer stableIdBytes = CompactorUtils.getStableIdBytes(after); for (int i = 0; i < modifiedChildren.size(); i++) { Entry entry = modifiedChildren.get(i); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordId.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordId.java index 3392b025099..6d826fb1028 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordId.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/RecordId.java @@ -26,7 +26,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.jetbrains.annotations.NotNull; /** @@ -103,12 +103,12 @@ public Segment getSegment() { * @return this record id as byte array */ @NotNull - Buffer getBytes() { + ByteBuffer getBytes() { byte[] buffer = new byte[SERIALIZED_RECORD_ID_BYTES]; BinaryUtils.writeLong(buffer, 0, segmentId.getMostSignificantBits()); BinaryUtils.writeLong(buffer, 8, segmentId.getLeastSignificantBits()); BinaryUtils.writeInt(buffer, 16, offset); - return Buffer.wrap(buffer); + return ByteBuffer.wrap(buffer); } //--------------------------------------------------------< Comparable >-- diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java index 01fd329d1d6..33bbfe0a0d8 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/Segment.java @@ -37,7 +37,7 @@ import org.apache.commons.io.HexDump; import org.apache.commons.io.output.ByteArrayOutputStream; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.commons.StringUtils; import org.apache.jackrabbit.oak.commons.conditions.Validate; import org.apache.jackrabbit.oak.segment.RecordNumbers.Entry; @@ -165,9 +165,9 @@ static int align(int address, int boundary) { this.id = requireNonNull(id); this.info = requireNonNull(info); if (id.isDataSegmentId()) { - this.data = newSegmentData(Buffer.wrap(buffer)); + this.data = newSegmentData(ByteBuffer.wrap(buffer)); } else { - this.data = newRawSegmentData(Buffer.wrap(buffer)); + this.data = newRawSegmentData(ByteBuffer.wrap(buffer)); } this.version = SegmentVersion.fromByte(buffer[3]); this.recordNumbers = recordNumbers; @@ -177,7 +177,7 @@ static int align(int address, int boundary) { public Segment(@NotNull SegmentIdProvider idProvider, @NotNull final SegmentId id, - @NotNull final Buffer data) { + @NotNull final ByteBuffer data) { this.id = requireNonNull(id); if (id.isDataSegmentId()) { this.data = newSegmentData(requireNonNull(data).slice()); @@ -329,7 +329,7 @@ public void readBytes(int recordNumber, int position, byte[] buffer, int offset, readBytes(recordNumber, position, length).get(buffer, offset, length); } - public Buffer readBytes(int recordNumber, int position, int length) { + public ByteBuffer readBytes(int recordNumber, int position, int length) { return data.readBytes(recordNumbers.getOffset(recordNumber) + position, length); } diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java index 6a73ab6bb95..539bfd7a3fd 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBlob.java @@ -238,7 +238,7 @@ public int hashCode() { private static String readShortBlobId(Segment segment, int recordNumber, byte head) { int length = (head & 0x0f) << 8 | (segment.readByte(recordNumber, 1) & 0xff); - return segment.readBytes(recordNumber, 2, length).decode(StandardCharsets.UTF_8).toString(); + return StandardCharsets.UTF_8.decode(segment.readBytes(recordNumber, 2, length)).toString(); } private static String readLongBlobId(Segment segment, int recordNumber, Function getSegmentFunction) { diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferMonitor.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferMonitor.java index fef7a3e5212..79210788379 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferMonitor.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentBufferMonitor.java @@ -24,7 +24,7 @@ import java.lang.ref.WeakReference; import java.util.Set; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.commons.collections.SetUtils; import org.apache.jackrabbit.oak.stats.CounterStats; import org.apache.jackrabbit.oak.stats.StatisticsProvider; @@ -44,7 +44,7 @@ * heap byte buffers. * *

- * Users of this class call {@link #trackAllocation(Buffer)} to update above statistics. + * Users of this class call {@link #trackAllocation(ByteBuffer)} to update above statistics. */ public class SegmentBufferMonitor { @@ -72,7 +72,7 @@ public class SegmentBufferMonitor { private final Set buffers = SetUtils.newConcurrentHashSet(); @NotNull - private final ReferenceQueue referenceQueue = new ReferenceQueue<>(); + private final ReferenceQueue referenceQueue = new ReferenceQueue<>(); @NotNull private final CounterStats directBufferCount; @@ -98,12 +98,12 @@ public SegmentBufferMonitor(@NotNull StatisticsProvider statisticsProvider) { heapBufferCapacity = statisticsProvider.getCounterStats(HEAP_BUFFER_CAPACITY, METRICS_ONLY); } - private static class BufferReference extends WeakReference { + private static class BufferReference extends WeakReference { private final int capacity; private final boolean isDirect; - public BufferReference(@NotNull Buffer buffer, - @NotNull ReferenceQueue queue) { + public BufferReference(@NotNull ByteBuffer buffer, + @NotNull ReferenceQueue queue) { super(buffer, queue); this.capacity = buffer.capacity(); this.isDirect = buffer.isDirect(); @@ -114,7 +114,7 @@ public BufferReference(@NotNull Buffer buffer, * Track the allocation of a {@code buffer} and update the exposed statistics. * @param buffer */ - public void trackAllocation(@NotNull Buffer buffer) { + public void trackAllocation(@NotNull ByteBuffer buffer) { BufferReference reference = new BufferReference(buffer, referenceQueue); buffers.add(reference); allocated(reference); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeState.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeState.java index 3a57091523f..b0099001517 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeState.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeState.java @@ -43,7 +43,7 @@ import org.apache.jackrabbit.oak.api.PropertyState; import org.apache.jackrabbit.oak.api.Type; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState; import org.apache.jackrabbit.oak.plugins.memory.MemoryChildNodeEntry; import org.apache.jackrabbit.oak.spi.blob.BlobStore; @@ -133,11 +133,11 @@ MapRecord getChildNodeMap() { } @NotNull - static String getStableId(@NotNull Buffer stableId) { - Buffer buffer = stableId.duplicate(); - long msb = buffer.getLong(); - long lsb = buffer.getLong(); - int offset = buffer.getInt(); + static String getStableId(@NotNull ByteBuffer stableId) { + int pos = stableId.position(); + long msb = stableId.getLong(pos); + long lsb = stableId.getLong(pos + 8); + int offset = stableId.getInt(pos + 16); return new UUID(msb, lsb) + ":" + offset; } @@ -160,7 +160,7 @@ public String getStableId() { * * @return the stable ID of this node. */ - public Buffer getStableIdBytes() { + public ByteBuffer getStableIdBytes() { // The first record id of this node points to the stable id. RecordId id = getSegment().readRecordId(getRecordNumber()); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStream.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStream.java index 10f3ec5285c..b71e3adf304 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStream.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentStream.java @@ -27,7 +27,7 @@ import java.nio.charset.StandardCharsets; import java.util.List; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.commons.IOUtils; import org.apache.jackrabbit.oak.commons.conditions.Validate; import org.jetbrains.annotations.NotNull; @@ -55,7 +55,7 @@ public static RecordId getRecordIdIfAvailable( private final RecordId recordId; - private final Buffer inline; + private final ByteBuffer inline; private final ListRecord blocks; @@ -73,7 +73,7 @@ public static RecordId getRecordIdIfAvailable( this.length = length; } - SegmentStream(RecordId recordId, Buffer inline, int length) { + SegmentStream(RecordId recordId, ByteBuffer inline, int length) { this.recordId = requireNonNull(recordId); this.inline = inline.duplicate(); this.blocks = null; @@ -94,7 +94,7 @@ public long getLength() { public String getString() { if (inline != null) { - return inline.decode(StandardCharsets.UTF_8).toString(); + return StandardCharsets.UTF_8.decode(inline).toString(); } else if (length > Integer.MAX_VALUE) { throw new IllegalStateException("Too long value: " + length); } else { @@ -152,8 +152,7 @@ public int read(@NotNull byte[] b, int off, int len) { } if (inline != null) { - inline.position((int) position); - inline.get(b, off, len); + inline.get((int) position, b, off, len); } else { int blockIndex = (int) (position / BLOCK_SIZE); int blockOffset = (int) (position % BLOCK_SIZE); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java index 05ebc154689..aa74fb835c1 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java @@ -21,7 +21,7 @@ import java.io.InputStream; import org.apache.jackrabbit.oak.api.Blob; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.spi.state.NodeState; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -65,14 +65,14 @@ public interface SegmentWriter { * @throws IOException */ @NotNull - RecordId writeNode(@NotNull NodeState state, @Nullable Buffer stableIdBytes) throws IOException; + RecordId writeNode(@NotNull NodeState state, @Nullable ByteBuffer stableIdBytes) throws IOException; /** * Write a node state. *

* Equivalent to {@code writeNode(state, null)} * - * @see #writeNode(NodeState, Buffer) + * @see #writeNode(NodeState, ByteBuffer) */ @NotNull default RecordId writeNode(@NotNull NodeState state) throws IOException { diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentData.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentData.java index 599946ae6a8..93cc69357db 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentData.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentData.java @@ -21,7 +21,7 @@ import java.io.OutputStream; import java.nio.charset.StandardCharsets; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; /** * Access the data of a segment. @@ -68,11 +68,11 @@ public interface SegmentData { int MAX_MEDIUM_LENGTH_VALUE = (1 << 14) + MAX_SMALL_LENGTH_VALUE; - static SegmentData newSegmentData(Buffer buffer) { + static SegmentData newSegmentData(ByteBuffer buffer) { return SegmentDataLoader.newSegmentData(buffer); } - static SegmentData newRawSegmentData(Buffer buffer) { + static SegmentData newRawSegmentData(ByteBuffer buffer) { return SegmentDataLoader.newRawSegmentData(buffer); } @@ -129,8 +129,8 @@ default StringData readString(int recordReferenceOffset) { int index = length >= MAX_SMALL_LENGTH_VALUE ? recordReferenceOffset + Short.BYTES : recordReferenceOffset + Byte.BYTES; - Buffer buffer = readBytes(index, (int) length); - String string = buffer.decode(StandardCharsets.UTF_8).toString(); + ByteBuffer buffer = readBytes(index, (int) length); + String string = StandardCharsets.UTF_8.decode(buffer).toString(); return new StringData(string, (int)length); } @@ -148,7 +148,7 @@ default RecordIdData readRecordId(int recordReferenceOffset) { long readLong(int recordReferenceOffset); - Buffer readBytes(int recordReferenceOffset, int size); + ByteBuffer readBytes(int recordReferenceOffset, int size); int size(); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataLoader.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataLoader.java index 10ae8b04707..be24bca8ac2 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataLoader.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataLoader.java @@ -17,7 +17,7 @@ package org.apache.jackrabbit.oak.segment.data; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; class SegmentDataLoader { @@ -27,7 +27,7 @@ class SegmentDataLoader { private static final byte SEGMENT_DATA_V13 = 13; - static SegmentData newSegmentData(Buffer buffer) { + static SegmentData newSegmentData(ByteBuffer buffer) { switch (buffer.get(VERSION_OFFSET)) { case SEGMENT_DATA_V12: return new SegmentDataV12(buffer); @@ -38,7 +38,7 @@ static SegmentData newSegmentData(Buffer buffer) { } } - static SegmentData newRawSegmentData(Buffer buffer) { + static SegmentData newRawSegmentData(ByteBuffer buffer) { return new SegmentDataRaw(buffer); } diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataRaw.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataRaw.java index 01212afa044..66a13975440 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataRaw.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataRaw.java @@ -20,13 +20,13 @@ import java.io.IOException; import java.io.OutputStream; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; class SegmentDataRaw implements SegmentData { - private final Buffer buffer; + private final ByteBuffer buffer; - SegmentDataRaw(Buffer buffer) { + SegmentDataRaw(ByteBuffer buffer) { this.buffer = buffer; } @@ -35,7 +35,7 @@ private int index(int recordReferenceOffset) { } @Override - public Buffer readBytes(int recordReferenceOffset, int size) { + public ByteBuffer readBytes(int recordReferenceOffset, int size) { return SegmentDataUtils.readBytes(buffer, index(recordReferenceOffset), size); } diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataUtils.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataUtils.java index 9f5abef787d..d5adb5f11de 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataUtils.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataUtils.java @@ -23,7 +23,7 @@ import java.nio.channels.WritableByteChannel; import org.apache.commons.io.HexDump; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import static org.apache.jackrabbit.oak.segment.Segment.MAX_SEGMENT_SIZE; @@ -33,33 +33,30 @@ private SegmentDataUtils() { // Prevent instantiation } - static void hexDump(Buffer buffer, OutputStream stream) throws IOException { + static void hexDump(ByteBuffer buffer, OutputStream stream) throws IOException { byte[] data = new byte[buffer.remaining()]; - buffer.duplicate().get(data); + buffer.get(buffer.position(), data); HexDump.dump(data, 0, stream, 0); } - static void binDump(Buffer buffer, OutputStream stream) throws IOException { - Buffer data = buffer.duplicate(); + static void binDump(ByteBuffer buffer, OutputStream stream) throws IOException { + ByteBuffer data = buffer.duplicate(); try (WritableByteChannel channel = Channels.newChannel(stream)) { while (data.hasRemaining()) { - data.write(channel); + channel.write(data); } } } - static int estimateMemoryUsage(Buffer buffer) { + static int estimateMemoryUsage(ByteBuffer buffer) { return buffer.isDirect() ? 0 : buffer.remaining(); } - static Buffer readBytes(Buffer buffer, int index, int size) { - Buffer duplicate = buffer.duplicate(); - duplicate.position(index); - duplicate.limit(index + size); - return duplicate.slice(); + static ByteBuffer readBytes(ByteBuffer buffer, int index, int size) { + return buffer.slice(index, size); } - static int index(Buffer buffer, int recordReferenceOffset) { + static int index(ByteBuffer buffer, int recordReferenceOffset) { return buffer.limit() - (MAX_SEGMENT_SIZE - recordReferenceOffset); } diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataV12.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataV12.java index dfd19cd7609..19265dbcbe2 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataV12.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataV12.java @@ -21,7 +21,7 @@ import java.io.OutputStream; import java.nio.charset.StandardCharsets; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; class SegmentDataV12 implements SegmentData { @@ -62,9 +62,9 @@ class SegmentDataV12 implements SegmentData { // Relative to a record reference - END - final Buffer buffer; + final ByteBuffer buffer; - SegmentDataV12(Buffer buffer) { + SegmentDataV12(ByteBuffer buffer) { this.buffer = buffer; } @@ -167,7 +167,7 @@ public long readLong(int recordReferenceOffset) { } @Override - public Buffer readBytes(int recordReferenceOffset, int size) { + public ByteBuffer readBytes(int recordReferenceOffset, int size) { return SegmentDataUtils.readBytes(buffer, index(recordReferenceOffset), size); } diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataV13.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataV13.java index eb238f5b012..4b41ba6274c 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataV13.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/data/SegmentDataV13.java @@ -17,13 +17,13 @@ package org.apache.jackrabbit.oak.segment.data; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; class SegmentDataV13 extends SegmentDataV12 { private static final int FULL_GENERATION_OFFSET = 4; - SegmentDataV13(Buffer buffer) { + SegmentDataV13(ByteBuffer buffer) { super(buffer); } diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java index bad5068a77d..69f47c0639c 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/AbstractFileStore.java @@ -31,7 +31,7 @@ import java.util.function.Supplier; import org.apache.jackrabbit.oak.api.jmx.CacheStatsMBean; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.commons.conditions.Validate; import org.apache.jackrabbit.oak.commons.pio.Closer; import org.apache.jackrabbit.oak.segment.CachingSegmentReader; @@ -253,7 +253,7 @@ public BlobStore getBlobStore() { private void writeSegment(UUID id, byte[] data, EntryRecovery w) throws IOException { long msb = id.getMostSignificantBits(); long lsb = id.getLeastSignificantBits(); - Buffer buffer = Buffer.wrap(data); + ByteBuffer buffer = ByteBuffer.wrap(data); GCGeneration generation = SegmentId.isDataSegmentId(lsb) ? Segment.getGcGeneration(newSegmentData(buffer), id) : GCGeneration.NULL; @@ -339,7 +339,7 @@ static void closeAndLogOnFail(Closeable closeable) { } Segment readSegmentUncached(SegmentId id) { - Buffer buffer; + ByteBuffer buffer; if (persistentCache != null) { buffer = persistentCache.readSegment(id.getMostSignificantBits(), id.getLeastSignificantBits(), () -> getTarFiles().readSegment(id.getMostSignificantBits(), id.getLeastSignificantBits())); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CompactionWriter.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CompactionWriter.java index 200205e1253..d7d98466293 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CompactionWriter.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/CompactionWriter.java @@ -19,7 +19,7 @@ package org.apache.jackrabbit.oak.segment.file; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.RecordId; import org.apache.jackrabbit.oak.segment.SegmentNodeState; import org.apache.jackrabbit.oak.segment.SegmentReader; @@ -72,7 +72,7 @@ public CompactionWriter( public @NotNull FullyCompactedNodeState writeFullyCompactedNode( @NotNull NodeState nodeState, - @Nullable Buffer stableId + @Nullable ByteBuffer stableId ) throws IOException { RecordId nodeId = targetWriter.writeNode(nodeState, stableId); return new FullyCompactedNodeState(reader, targetWriter, blobStore, nodeId); @@ -80,7 +80,7 @@ public CompactionWriter( public @Nullable PartiallyCompactedNodeState writePartiallyCompactedNode( @NotNull NodeState nodeState, - @Nullable Buffer stableId + @Nullable ByteBuffer stableId ) throws IOException { RecordId nodeId = partialWriter.writeNode(nodeState, stableId); return new PartiallyCompactedNodeState(reader, partialWriter, blobStore, nodeId); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java index 0ed54e314cc..26c4d30fcda 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java @@ -36,7 +36,7 @@ import java.util.function.Consumer; import java.util.function.Supplier; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.commons.pio.Closer; import org.apache.jackrabbit.oak.segment.RecordId; import org.apache.jackrabbit.oak.segment.Segment; @@ -556,14 +556,14 @@ public void writeSegment(SegmentId id, byte[] buffer, int offset, int length) th Set binaryReferences = null; if (id.isDataSegmentId()) { - Buffer data; + ByteBuffer data; if (offset > 4096) { - data = Buffer.allocate(length); + data = ByteBuffer.allocate(length); data.put(buffer, offset, length); data.rewind(); } else { - data = Buffer.wrap(buffer, offset, length); + data = ByteBuffer.wrap(buffer, offset, length); } segment = new Segment(tracker, id, data); @@ -593,7 +593,7 @@ public void writeSegment(SegmentId id, byte[] buffer, int offset, int length) th } if (persistentCache != null) { - persistentCache.writeSegment(id.getMostSignificantBits(), id.getLeastSignificantBits(), Buffer.wrap(buffer, offset, length)); + persistentCache.writeSegment(id.getMostSignificantBits(), id.getLeastSignificantBits(), ByteBuffer.wrap(buffer, offset, length)); } } } diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/preloader/SegmentPreloader.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/preloader/SegmentPreloader.java index 372d06133a8..cee24a08e61 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/preloader/SegmentPreloader.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/preloader/SegmentPreloader.java @@ -18,7 +18,7 @@ */ package org.apache.jackrabbit.oak.segment.file.preloader; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.commons.internal.function.Suppliers; import org.apache.jackrabbit.oak.segment.SegmentId; import org.apache.jackrabbit.oak.segment.data.SegmentData; @@ -192,8 +192,8 @@ protected PersistentCache delegate() { } @Override - public @Nullable Buffer readSegment(long msb, long lsb, @NotNull Callable loader) { - Buffer buffer = super.readSegment(msb, lsb, loader); + public @Nullable ByteBuffer readSegment(long msb, long lsb, @NotNull Callable loader) { + ByteBuffer buffer = super.readSegment(msb, lsb, loader); dispatch(msb, lsb, getReferencedSegments(lsb, buffer), 1); return buffer; } @@ -338,7 +338,7 @@ public int compareTo(@NotNull SegmentPreloader.DispatchTask o) { } } - private static SegmentIds getReferencedSegments(long lsb, @Nullable Buffer buffer) { + private static SegmentIds getReferencedSegments(long lsb, @Nullable ByteBuffer buffer) { if (buffer == null || !SegmentId.isDataSegmentId(lsb)) { return SegmentIds.EMPTY; } @@ -378,7 +378,7 @@ public void run() { LOG.debug("Running: {}", this); try { if (depth < preloadDepth || !containsSegment(msb, lsb)) { - Buffer buffer = delegate().readSegment(msb, lsb, () -> tarFiles.readSegment(msb, lsb)); + ByteBuffer buffer = delegate().readSegment(msb, lsb, () -> tarFiles.readSegment(msb, lsb)); dispatch(msb, lsb, getReferencedSegments(lsb, buffer), depth + 1); } } catch (RuntimeException e) { diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/FileAccess.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/FileAccess.java index 56ad5f354fc..2842615798a 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/FileAccess.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/FileAccess.java @@ -18,6 +18,7 @@ */ package org.apache.jackrabbit.oak.segment.file.tar; +import static org.apache.jackrabbit.oak.commons.IOUtils.readFully; import static java.nio.channels.FileChannel.MapMode.READ_ONLY; import java.io.EOFException; @@ -25,7 +26,7 @@ import java.io.RandomAccessFile; import java.nio.channels.FileChannel; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.commons.conditions.Validate; /** @@ -38,7 +39,7 @@ abstract class FileAccess { abstract int length() throws IOException; - abstract Buffer read(int position, int length) throws IOException; + abstract ByteBuffer read(int position, int length) throws IOException; abstract void close() throws IOException; @@ -51,11 +52,11 @@ static class Mapped extends FileAccess { private final RandomAccessFile file; - private Buffer buffer; + private ByteBuffer buffer; Mapped(RandomAccessFile file) throws IOException { this.file = file; - this.buffer = Buffer.map(file.getChannel(), READ_ONLY, 0, file.length()); + this.buffer = file.getChannel().map(READ_ONLY, 0, file.length()); } @Override @@ -69,11 +70,8 @@ public int length() { } @Override - public Buffer read(int position, int length) { - Buffer entry = buffer.asReadOnlyBuffer(); - entry.position(entry.position() + position); - entry.limit(entry.position() + length); - return entry.slice(); + public ByteBuffer read(int position, int length) { + return buffer.asReadOnlyBuffer().slice(position, length); } @Override @@ -110,9 +108,9 @@ public synchronized int length() throws IOException { } @Override - public synchronized Buffer read(int position, int length) throws IOException { - Buffer entry = Buffer.allocate(length); - if (entry.readFully(channel, position) < length) { + public synchronized ByteBuffer read(int position, int length) throws IOException { + ByteBuffer entry = ByteBuffer.allocate(length); + if (readFully(channel, position, entry) < length) { throw new EOFException(); } entry.flip(); @@ -137,9 +135,9 @@ static class RandomOffHeap extends Random { } @Override - public synchronized Buffer read(int position, int length) throws IOException { - Buffer entry = Buffer.allocateDirect(length); - if (entry.readFully(channel, position) < length) { + public synchronized ByteBuffer read(int position, int length) throws IOException { + ByteBuffer entry = ByteBuffer.allocateDirect(length); + if (readFully(channel, position, entry) < length) { throw new EOFException(); } entry.flip(); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentGraph.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentGraph.java index 353eaf52f5b..eab6048485f 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentGraph.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentGraph.java @@ -27,7 +27,7 @@ import java.util.UUID; import java.util.zip.CRC32; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.SegmentId; import org.apache.jackrabbit.oak.segment.data.SegmentData; import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveEntry; @@ -93,7 +93,7 @@ public void addEdge(@NotNull UUID from, @NotNull UUID to) { * @throws IOException if the tar file could not be read */ public static @Nullable SegmentGraph load(ReaderAtEnd readerAtEnd) throws IOException { - Buffer meta = readerAtEnd.readAtEnd(FOOTER_SIZE, FOOTER_SIZE); + ByteBuffer meta = readerAtEnd.readAtEnd(FOOTER_SIZE, FOOTER_SIZE); int crc32 = meta.getInt(); int count = meta.getInt(); @@ -115,7 +115,7 @@ public void addEdge(@NotNull UUID from, @NotNull UUID to) { return null; } - Buffer buffer = readerAtEnd.readAtEnd(bytes, bytes); + ByteBuffer buffer = readerAtEnd.readAtEnd(bytes, bytes); byte[] b = new byte[bytes - FOOTER_SIZE]; buffer.mark(); @@ -145,7 +145,7 @@ public void addEdge(@NotNull UUID from, @NotNull UUID to) { continue; } UUID from = new UUID(entry.getMsb(), entry.getLsb()); - Buffer buffer = archiveReader.readSegment(entry.getMsb(), entry.getLsb()); + ByteBuffer buffer = archiveReader.readSegment(entry.getMsb(), entry.getLsb()); SegmentData data = SegmentData.newSegmentData(buffer); for (int i = 0; i < data.getSegmentReferencesCount(); i++) { UUID to = new UUID(data.getSegmentReferenceMsb(i), data.getSegmentReferenceLsb(i)); @@ -155,7 +155,7 @@ public void addEdge(@NotNull UUID from, @NotNull UUID to) { return graph; } - public static @NotNull SegmentGraph parse(@NotNull Buffer buffer) { + public static @NotNull SegmentGraph parse(@NotNull ByteBuffer buffer) { int nEntries = buffer.getInt(buffer.limit() - 12); Map> edgeMap = new HashMap<>(nEntries); @@ -180,7 +180,7 @@ public void addEdge(@NotNull UUID from, @NotNull UUID to) { public byte[] write() { int graphSize = size(); - Buffer buffer = Buffer.allocate(graphSize); + ByteBuffer buffer = ByteBuffer.allocate(graphSize); for (Map.Entry> entry : edgeMap.entrySet()) { UUID from = entry.getKey(); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarManager.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarManager.java index 4b11e3d0c75..f7ef67c1952 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarManager.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarManager.java @@ -18,7 +18,7 @@ */ package org.apache.jackrabbit.oak.segment.file.tar; -import static org.apache.jackrabbit.oak.commons.Buffer.wrap; +import static java.nio.ByteBuffer.wrap; import static org.apache.jackrabbit.oak.segment.file.tar.TarConstants.BLOCK_SIZE; import java.io.File; @@ -36,7 +36,7 @@ import java.util.zip.CRC32; import org.apache.commons.io.filefilter.SuffixFileFilter; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.file.tar.index.Index; import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitor; import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitor; @@ -234,7 +234,7 @@ private static void recoverEntries(File file, RandomAccessFile access, LinkedHas } // The header checksum passes, so read the entry name and size - Buffer buffer = wrap(header); + ByteBuffer buffer = wrap(header); String name = readString(buffer, 100); buffer.position(124); int size = readNumber(buffer, 12); @@ -285,7 +285,7 @@ private static void recoverEntries(File file, RandomAccessFile access, LinkedHas } } - private static String readString(Buffer buffer, int fieldSize) { + private static String readString(ByteBuffer buffer, int fieldSize) { byte[] b = new byte[fieldSize]; buffer.get(b); int n = 0; @@ -295,7 +295,7 @@ private static String readString(Buffer buffer, int fieldSize) { return new String(b, 0, n, StandardCharsets.UTF_8); } - private static int readNumber(Buffer buffer, int fieldSize) { + private static int readNumber(ByteBuffer buffer, int fieldSize) { byte[] b = new byte[fieldSize]; buffer.get(b); int number = 0; diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarReader.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarReader.java index 3e22e34d51f..762b8329091 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarReader.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarReader.java @@ -29,7 +29,7 @@ import java.util.List; import java.util.concurrent.TimeUnit; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.commons.time.Stopwatch; import org.apache.jackrabbit.oak.segment.file.tar.binaries.BinaryReferencesIndexLoader; import org.apache.jackrabbit.oak.segment.file.tar.binaries.InvalidBinaryReferencesIndexException; @@ -70,7 +70,7 @@ public SegmentTarReader(File file, FileAccess access, Index index, IOMonitor ioM } @Override - public Buffer readSegment(long msb, long lsb) throws IOException { + public ByteBuffer readSegment(long msb, long lsb) throws IOException { int i = index.findEntry(msb, lsb); if (i == -1) { return null; @@ -78,7 +78,7 @@ public Buffer readSegment(long msb, long lsb) throws IOException { IndexEntry indexEntry = index.entry(i); ioMonitor.beforeSegmentRead(file, msb, lsb, indexEntry.getLength()); Stopwatch stopwatch = Stopwatch.createStarted(); - Buffer buffer = access.read(indexEntry.getPosition(), indexEntry.getLength()); + ByteBuffer buffer = access.read(indexEntry.getPosition(), indexEntry.getLength()); long elapsed = stopwatch.elapsed(TimeUnit.NANOSECONDS); ioMonitor.afterSegmentRead(file, msb, lsb, indexEntry.getLength(), elapsed); return buffer; @@ -114,7 +114,7 @@ public static Index loadAndValidateIndex(RandomAccessFile file, String name) thr return null; } ReaderAtEnd r = (whence, size) -> { - Buffer buffer = Buffer.allocate(size); + ByteBuffer buffer = ByteBuffer.allocate(size); file.seek(length - 2 * BLOCK_SIZE - whence); file.readFully(buffer.array()); return buffer; @@ -139,7 +139,7 @@ public static Index loadAndValidateIndex(RandomAccessFile file, String name) thr } @Override - public @NotNull Buffer getBinaryReferences() throws IOException { + public @NotNull ByteBuffer getBinaryReferences() throws IOException { try { int end = access.length() - 2 * BLOCK_SIZE - getIndexEntrySize() - getGraphEntrySize(); return BinaryReferencesIndexLoader.loadBinaryReferencesIndex((whence, amount) -> access.read(end - whence, amount)); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarWriter.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarWriter.java index ee2c68a29e5..19d6656d68c 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarWriter.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/SegmentTarWriter.java @@ -18,6 +18,7 @@ */ package org.apache.jackrabbit.oak.segment.file.tar; +import static org.apache.jackrabbit.oak.commons.IOUtils.readFully; import static org.apache.jackrabbit.oak.segment.file.tar.TarConstants.BLOCK_SIZE; import java.io.EOFException; @@ -33,7 +34,7 @@ import java.util.concurrent.TimeUnit; import java.util.zip.CRC32; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.commons.conditions.Validate; import org.apache.jackrabbit.oak.commons.time.Stopwatch; import org.apache.jackrabbit.oak.segment.file.tar.index.IndexEntry; @@ -132,18 +133,17 @@ public void writeSegment(long msb, long lsb, byte[] data, int offset, int size, } @Override - public Buffer readSegment(long msb, long lsb) throws IOException { + public ByteBuffer readSegment(long msb, long lsb) throws IOException { IndexEntry indexEntry = index.get(new UUID(msb, lsb)); if (indexEntry == null) { return null; } Validate.checkState(channel != null); // implied by entry != null - Buffer data = Buffer.allocate(indexEntry.getLength()); - if (data.readFully(channel, indexEntry.getPosition()) < indexEntry.getLength()) { + ByteBuffer data = ByteBuffer.allocate(indexEntry.getLength()); + if (readFully(channel, indexEntry.getPosition(), data) < indexEntry.getLength()) { throw new EOFException(); } - data.rewind(); - return data; + return data.rewind(); } @Override diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java index 59addf569d3..e12c44af092 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarFiles.java @@ -49,7 +49,7 @@ import java.util.stream.Stream; import org.apache.jackrabbit.oak.api.IllegalRepositoryStateException; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.commons.TimeDurationFormatter; import org.apache.jackrabbit.oak.commons.collections.IterableUtils; import org.apache.jackrabbit.oak.commons.collections.ListUtils; @@ -638,14 +638,14 @@ public boolean containsSegment(long msb, long lsb) { return false; } - public Buffer readSegment(long msb, long lsb) { + public ByteBuffer readSegment(long msb, long lsb) { try { Node head; lock.readLock().lock(); try { if (writer != null) { - Buffer b = writer.readEntry(msb, lsb); + ByteBuffer b = writer.readEntry(msb, lsb); if (b != null) { return b; } @@ -656,7 +656,7 @@ public Buffer readSegment(long msb, long lsb) { } for (TarReader reader : iterable(head)) { - Buffer b = reader.readEntry(msb, lsb); + ByteBuffer b = reader.readEntry(msb, lsb); if (b != null) { return b; } diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarReader.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarReader.java index f9c7382561c..f833d4b6e3d 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarReader.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarReader.java @@ -40,7 +40,7 @@ import java.util.function.Consumer; import java.util.function.Predicate; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.Segment; import org.apache.jackrabbit.oak.segment.SegmentId; import org.apache.jackrabbit.oak.segment.file.tar.binaries.BinaryReferencesIndex; @@ -323,7 +323,7 @@ boolean containsEntry(long msb, long lsb) { * @param lsb the least significant bits of the segment id * @return the byte buffer, or null if not in this file. */ - Buffer readEntry(long msb, long lsb) throws IOException { + ByteBuffer readEntry(long msb, long lsb) throws IOException { return archive.readSegment(msb, lsb); } @@ -589,7 +589,7 @@ public void close() throws IOException { */ @Nullable BinaryReferencesIndex getBinaryReferences() { try { - Buffer binaryReferences = archive.getBinaryReferences(); + ByteBuffer binaryReferences = archive.getBinaryReferences(); if (binaryReferences == null) { // This can happen because segment files and binary references files are flushed one after another in // {@link TarWriter#flush} diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriter.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriter.java index d9c57c3e4ef..8afc83f940e 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriter.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarWriter.java @@ -29,7 +29,7 @@ import java.io.IOException; import java.util.UUID; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.commons.conditions.Validate; import org.apache.jackrabbit.oak.segment.file.UnrecoverableArchiveException; import org.apache.jackrabbit.oak.segment.file.tar.binaries.BinaryReferencesIndexWriter; @@ -129,7 +129,7 @@ int getMaxEntryCount() { * @param lsb the least significant bits of the segment id * @return the byte buffer, or null if not in this file */ - Buffer readEntry(long msb, long lsb) throws IOException { + ByteBuffer readEntry(long msb, long lsb) throws IOException { synchronized (this) { Validate.checkState(!closed); } diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoader.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoader.java index 615edb720be..b6bc3d47c81 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoader.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoader.java @@ -19,7 +19,7 @@ import java.io.IOException; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.util.ReaderAtEnd; public class BinaryReferencesIndexLoader { @@ -41,7 +41,7 @@ private BinaryReferencesIndexLoader() { * @throws InvalidBinaryReferencesIndexException if the index is invalid or * malformed. */ - public static Buffer loadBinaryReferencesIndex(ReaderAtEnd reader) throws IOException, InvalidBinaryReferencesIndexException { + public static ByteBuffer loadBinaryReferencesIndex(ReaderAtEnd reader) throws IOException, InvalidBinaryReferencesIndexException { switch (readMagic(reader)) { case BinaryReferencesIndexLoaderV1.MAGIC: return BinaryReferencesIndexLoaderV1.loadBinaryReferencesIndex(reader); @@ -52,7 +52,7 @@ public static Buffer loadBinaryReferencesIndex(ReaderAtEnd reader) throws IOExce } } - public static BinaryReferencesIndex parseBinaryReferencesIndex(Buffer buffer) throws InvalidBinaryReferencesIndexException { + public static BinaryReferencesIndex parseBinaryReferencesIndex(ByteBuffer buffer) throws InvalidBinaryReferencesIndexException { switch (readMagic(buffer)) { case BinaryReferencesIndexLoaderV1.MAGIC: return BinaryReferencesIndexLoaderV1.parseBinaryReferencesIndex(buffer); @@ -67,10 +67,7 @@ private static int readMagic(ReaderAtEnd reader) throws IOException { return reader.readAtEnd(Integer.BYTES, Integer.BYTES).getInt(); } - private static int readMagic(Buffer buffer) { - buffer.position(buffer.limit() - Integer.BYTES); - int magic = buffer.getInt(); - buffer.rewind(); - return magic; + private static int readMagic(ByteBuffer buffer) { + return buffer.getInt(buffer.limit() - Integer.BYTES); } } diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV1.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV1.java index 760f59c8541..01fbfe436f7 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV1.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV1.java @@ -27,7 +27,7 @@ import java.util.zip.CRC32; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.util.ReaderAtEnd; class BinaryReferencesIndexLoaderV1 { @@ -36,8 +36,8 @@ class BinaryReferencesIndexLoaderV1 { static final int FOOTER_SIZE = 16; - static Buffer loadBinaryReferencesIndex(ReaderAtEnd reader) throws IOException, InvalidBinaryReferencesIndexException { - Buffer meta = reader.readAtEnd(FOOTER_SIZE, FOOTER_SIZE); + static ByteBuffer loadBinaryReferencesIndex(ReaderAtEnd reader) throws IOException, InvalidBinaryReferencesIndexException { + ByteBuffer meta = reader.readAtEnd(FOOTER_SIZE, FOOTER_SIZE); int crc32 = meta.getInt(); int count = meta.getInt(); @@ -57,12 +57,11 @@ static Buffer loadBinaryReferencesIndex(ReaderAtEnd reader) throws IOException, return reader.readAtEnd(size, size); } - public static BinaryReferencesIndex parseBinaryReferencesIndex(Buffer buffer) throws InvalidBinaryReferencesIndexException { - Buffer data = buffer.slice(); + public static BinaryReferencesIndex parseBinaryReferencesIndex(ByteBuffer buffer) throws InvalidBinaryReferencesIndexException { + ByteBuffer data = buffer.slice(); data.limit(data.limit() - FOOTER_SIZE); - buffer.position(buffer.limit() - FOOTER_SIZE); - Buffer meta = buffer.slice(); + ByteBuffer meta = buffer.slice(buffer.limit() - FOOTER_SIZE, FOOTER_SIZE); int crc32 = meta.getInt(); int count = meta.getInt(); @@ -80,9 +79,7 @@ public static BinaryReferencesIndex parseBinaryReferencesIndex(Buffer buffer) th } CRC32 checksum = new CRC32(); - data.mark(); - data.update(checksum); - data.reset(); + checksum.update(data.duplicate()); if ((int) (checksum.getValue()) != crc32) { throw new InvalidBinaryReferencesIndexException("Invalid checksum"); @@ -91,7 +88,7 @@ public static BinaryReferencesIndex parseBinaryReferencesIndex(Buffer buffer) th return new BinaryReferencesIndex(parseBinaryReferencesIndex(count, data)); } - private static Map>> parseBinaryReferencesIndex(int count, Buffer buffer) { + private static Map>> parseBinaryReferencesIndex(int count, ByteBuffer buffer) { Map>> result = new HashMap<>(count); for (int i = 0; i < count; i++) { Generation k = parseGeneration(buffer); @@ -101,16 +98,16 @@ private static Map>> parseBinaryReferencesInde return result; } - private static Generation parseGeneration(Buffer buffer) { + private static Generation parseGeneration(ByteBuffer buffer) { int generation = buffer.getInt(); return new Generation(generation, generation, true); } - private static Map> parseEntriesBySegment(Buffer buffer) { + private static Map> parseEntriesBySegment(ByteBuffer buffer) { return parseEntriesBySegment(buffer.getInt(), buffer); } - private static Map> parseEntriesBySegment(int count, Buffer buffer) { + private static Map> parseEntriesBySegment(int count, ByteBuffer buffer) { Map> result = new HashMap<>(count); for (int i = 0; i < count; i++) { UUID k = parseUUID(buffer); @@ -120,17 +117,17 @@ private static Map> parseEntriesBySegment(int count, Buffer bu return result; } - private static UUID parseUUID(Buffer buffer) { + private static UUID parseUUID(ByteBuffer buffer) { long msb = buffer.getLong(); long lsb = buffer.getLong(); return new UUID(msb, lsb); } - private static Set parseEntries(Buffer buffer) { + private static Set parseEntries(ByteBuffer buffer) { return parseEntries(buffer.getInt(), buffer); } - private static Set parseEntries(int count, Buffer buffer) { + private static Set parseEntries(int count, ByteBuffer buffer) { Set entries = new HashSet<>(count); for (int i = 0; i < count; i++) { entries.add(parseString(buffer)); @@ -138,11 +135,11 @@ private static Set parseEntries(int count, Buffer buffer) { return entries; } - private static String parseString(Buffer buffer) { + private static String parseString(ByteBuffer buffer) { return parseString(buffer.getInt(), buffer); } - private static String parseString(int length, Buffer buffer) { + private static String parseString(int length, ByteBuffer buffer) { byte[] data = new byte[length]; buffer.get(data); return new String(data, StandardCharsets.UTF_8); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV2.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV2.java index e464b5f5f1b..b70154a840a 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV2.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV2.java @@ -27,7 +27,7 @@ import java.util.zip.CRC32; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.util.ReaderAtEnd; class BinaryReferencesIndexLoaderV2 { @@ -36,8 +36,8 @@ class BinaryReferencesIndexLoaderV2 { static final int FOOTER_SIZE = 16; - static Buffer loadBinaryReferencesIndex(ReaderAtEnd reader) throws IOException, InvalidBinaryReferencesIndexException { - Buffer meta = reader.readAtEnd(FOOTER_SIZE, FOOTER_SIZE); + static ByteBuffer loadBinaryReferencesIndex(ReaderAtEnd reader) throws IOException, InvalidBinaryReferencesIndexException { + ByteBuffer meta = reader.readAtEnd(FOOTER_SIZE, FOOTER_SIZE); int crc32 = meta.getInt(); int count = meta.getInt(); @@ -57,12 +57,11 @@ static Buffer loadBinaryReferencesIndex(ReaderAtEnd reader) throws IOException, return reader.readAtEnd(size, size); } - public static BinaryReferencesIndex parseBinaryReferencesIndex(Buffer buffer) throws InvalidBinaryReferencesIndexException { - Buffer data = buffer.slice(); + public static BinaryReferencesIndex parseBinaryReferencesIndex(ByteBuffer buffer) throws InvalidBinaryReferencesIndexException { + ByteBuffer data = buffer.slice(); data.limit(data.limit() - FOOTER_SIZE); - buffer.position(buffer.limit() - FOOTER_SIZE); - Buffer meta = buffer.slice(); + ByteBuffer meta = buffer.slice(buffer.limit() - FOOTER_SIZE, FOOTER_SIZE); int crc32 = meta.getInt(); int count = meta.getInt(); @@ -80,9 +79,7 @@ public static BinaryReferencesIndex parseBinaryReferencesIndex(Buffer buffer) th } CRC32 checksum = new CRC32(); - data.mark(); - data.update(checksum); - data.reset(); + checksum.update(data.duplicate()); if ((int) (checksum.getValue()) != crc32) { throw new InvalidBinaryReferencesIndexException("Invalid checksum"); @@ -91,7 +88,7 @@ public static BinaryReferencesIndex parseBinaryReferencesIndex(Buffer buffer) th return new BinaryReferencesIndex(parseBinaryReferencesIndex(count, data)); } - private static Map>> parseBinaryReferencesIndex(int count, Buffer buffer) { + private static Map>> parseBinaryReferencesIndex(int count, ByteBuffer buffer) { Map>> result = new HashMap<>(count); for (int i = 0; i < count; i++) { Generation k = parseGeneration(buffer); @@ -101,18 +98,18 @@ private static Map>> parseBinaryReferencesInde return result; } - private static Generation parseGeneration(Buffer buffer) { + private static Generation parseGeneration(ByteBuffer buffer) { int generation = buffer.getInt(); int full = buffer.getInt(); boolean compacted = buffer.get() != 0; return new Generation(generation, full, compacted); } - private static Map> parseEntriesBySegment(Buffer buffer) { + private static Map> parseEntriesBySegment(ByteBuffer buffer) { return parseEntriesBySegment(buffer.getInt(), buffer); } - private static Map> parseEntriesBySegment(int count, Buffer buffer) { + private static Map> parseEntriesBySegment(int count, ByteBuffer buffer) { Map> result = new HashMap<>(count); for (int i = 0; i < count; i++) { UUID k = parseUUID(buffer); @@ -122,17 +119,17 @@ private static Map> parseEntriesBySegment(int count, Buffer bu return result; } - private static UUID parseUUID(Buffer buffer) { + private static UUID parseUUID(ByteBuffer buffer) { long msb = buffer.getLong(); long lsb = buffer.getLong(); return new UUID(msb, lsb); } - private static Set parseEntries(Buffer buffer) { + private static Set parseEntries(ByteBuffer buffer) { return parseEntries(buffer.getInt(), buffer); } - private static Set parseEntries(int count, Buffer buffer) { + private static Set parseEntries(int count, ByteBuffer buffer) { Set entries = new HashSet<>(count); for (int i = 0; i < count; i++) { entries.add(parseString(buffer)); @@ -140,11 +137,11 @@ private static Set parseEntries(int count, Buffer buffer) { return entries; } - private static String parseString(Buffer buffer) { + private static String parseString(ByteBuffer buffer) { return parseString(buffer.getInt(), buffer); } - private static String parseString(int length, Buffer buffer) { + private static String parseString(int length, ByteBuffer buffer) { byte[] data = new byte[length]; buffer.get(data); return new String(data, StandardCharsets.UTF_8); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexWriter.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexWriter.java index 5598bad9d81..085ba3cf101 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexWriter.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexWriter.java @@ -26,7 +26,7 @@ import java.util.UUID; import java.util.zip.CRC32; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; /** @@ -130,7 +130,7 @@ public byte[] write() { } } - Buffer buffer = Buffer.allocate(binaryReferenceSize); + ByteBuffer buffer = ByteBuffer.allocate(binaryReferenceSize); for (Entry>> be : entries.entrySet()) { Generation generation = be.getKey(); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntryV1.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntryV1.java index 6773a7fa171..73d9c9e526f 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntryV1.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntryV1.java @@ -17,17 +17,17 @@ package org.apache.jackrabbit.oak.segment.file.tar.index; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; class IndexEntryV1 implements IndexEntry { static final int SIZE = 28; - private final Buffer index; + private final ByteBuffer index; private final int position; - IndexEntryV1(Buffer index, int position) { + IndexEntryV1(ByteBuffer index, int position) { this.index = index; this.position = position; } diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntryV2.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntryV2.java index 6b773b76b39..4cd119a287e 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntryV2.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntryV2.java @@ -17,17 +17,17 @@ package org.apache.jackrabbit.oak.segment.file.tar.index; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; class IndexEntryV2 implements IndexEntry { static final int SIZE = 33; - private final Buffer index; + private final ByteBuffer index; private final int position; - IndexEntryV2(Buffer index, int position) { + IndexEntryV2(ByteBuffer index, int position) { this.index = index; this.position = position; } diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV1.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV1.java index eb3cbed75cb..99b66bd01f3 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV1.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV1.java @@ -17,12 +17,12 @@ package org.apache.jackrabbit.oak.segment.file.tar.index; -import static org.apache.jackrabbit.oak.commons.Buffer.wrap; +import static java.nio.ByteBuffer.wrap; import java.io.IOException; import java.util.zip.CRC32; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.util.ReaderAtEnd; class IndexLoaderV1 { @@ -36,7 +36,7 @@ class IndexLoaderV1 { } IndexV1 loadIndex(ReaderAtEnd reader) throws InvalidIndexException, IOException { - Buffer meta = reader.readAtEnd(IndexV1.FOOTER_SIZE, IndexV1.FOOTER_SIZE); + ByteBuffer meta = reader.readAtEnd(IndexV1.FOOTER_SIZE, IndexV1.FOOTER_SIZE); int crc32 = meta.getInt(); int count = meta.getInt(); @@ -56,11 +56,11 @@ IndexV1 loadIndex(ReaderAtEnd reader) throws InvalidIndexException, IOException throw new InvalidIndexException("Invalid size alignment"); } - Buffer entries = reader.readAtEnd(IndexV1.FOOTER_SIZE + count * IndexEntryV1.SIZE, count * IndexEntryV1.SIZE); + ByteBuffer entries = reader.readAtEnd(IndexV1.FOOTER_SIZE + count * IndexEntryV1.SIZE, count * IndexEntryV1.SIZE); CRC32 checksum = new CRC32(); entries.mark(); - entries.update(checksum); + checksum.update(entries); entries.reset(); if (crc32 != (int) checksum.getValue()) { throw new InvalidIndexException("Invalid checksum"); @@ -73,7 +73,7 @@ IndexV1 loadIndex(ReaderAtEnd reader) throws InvalidIndexException, IOException for (int i = 0; i < count; i++) { entries.get(entry); - Buffer buffer = wrap(entry); + ByteBuffer buffer = wrap(entry); long msb = buffer.getLong(); long lsb = buffer.getLong(); int offset = buffer.getInt(); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2.java index c3ecf30d33b..834222ed16f 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2.java @@ -17,12 +17,12 @@ package org.apache.jackrabbit.oak.segment.file.tar.index; -import static org.apache.jackrabbit.oak.commons.Buffer.wrap; +import static java.nio.ByteBuffer.wrap; import java.io.IOException; import java.util.zip.CRC32; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.util.ReaderAtEnd; class IndexLoaderV2 { @@ -36,7 +36,7 @@ class IndexLoaderV2 { } IndexV2 loadIndex(ReaderAtEnd reader) throws InvalidIndexException, IOException { - Buffer meta = reader.readAtEnd(IndexV2.FOOTER_SIZE, IndexV2.FOOTER_SIZE); + ByteBuffer meta = reader.readAtEnd(IndexV2.FOOTER_SIZE, IndexV2.FOOTER_SIZE); int crc32 = meta.getInt(); int count = meta.getInt(); @@ -56,11 +56,11 @@ IndexV2 loadIndex(ReaderAtEnd reader) throws InvalidIndexException, IOException throw new InvalidIndexException("Invalid size alignment"); } - Buffer entries = reader.readAtEnd(IndexV2.FOOTER_SIZE + count * IndexEntryV2.SIZE, count * IndexEntryV2.SIZE); + ByteBuffer entries = reader.readAtEnd(IndexV2.FOOTER_SIZE + count * IndexEntryV2.SIZE, count * IndexEntryV2.SIZE); CRC32 checksum = new CRC32(); entries.mark(); - entries.update(checksum); + checksum.update(entries); entries.reset(); if (crc32 != (int) checksum.getValue()) { throw new InvalidIndexException("Invalid checksum"); @@ -73,7 +73,7 @@ IndexV2 loadIndex(ReaderAtEnd reader) throws InvalidIndexException, IOException for (int i = 0; i < count; i++) { entries.get(entry); - Buffer buffer = wrap(entry); + ByteBuffer buffer = wrap(entry); long msb = buffer.getLong(); long lsb = buffer.getLong(); int offset = buffer.getInt(); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV1.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV1.java index e3c76eddec8..daf93a400c1 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV1.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV1.java @@ -20,7 +20,7 @@ import java.util.Set; import java.util.UUID; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.commons.collections.SetUtils; import static java.util.Objects.checkIndex; @@ -29,9 +29,9 @@ class IndexV1 implements Index { static final int FOOTER_SIZE = 16; - private final Buffer entries; + private final ByteBuffer entries; - IndexV1(Buffer entries) { + IndexV1(ByteBuffer entries) { this.entries = entries; } diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV2.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV2.java index dcf3698a673..65b62052b8c 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV2.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV2.java @@ -20,7 +20,7 @@ import java.util.Set; import java.util.UUID; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.commons.collections.SetUtils; import static java.util.Objects.checkIndex; @@ -29,9 +29,9 @@ class IndexV2 implements Index { static final int FOOTER_SIZE = 16; - private final Buffer entries; + private final ByteBuffer entries; - IndexV2(Buffer entries) { + IndexV2(ByteBuffer entries) { this.entries = entries; } diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexWriter.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexWriter.java index a4110ea1fb6..bf00c207a47 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexWriter.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexWriter.java @@ -23,7 +23,7 @@ import java.util.List; import java.util.zip.CRC32; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; /** * Builds an index incrementally in memory, and serializes its contents into a @@ -107,7 +107,7 @@ public byte[] write() { int dataSize = entries.size() * IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE; int totalSize = ((dataSize + blockSize - 1) / blockSize) * blockSize; - Buffer buffer = Buffer.allocate(totalSize); + ByteBuffer buffer = ByteBuffer.allocate(totalSize); buffer.position(totalSize - dataSize); entries.sort((a, b) -> { diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/memory/MemoryStore.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/memory/MemoryStore.java index 74d27bdf0e1..039f5b11f0a 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/memory/MemoryStore.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/memory/MemoryStore.java @@ -25,7 +25,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.CachingSegmentReader; import org.apache.jackrabbit.oak.segment.Revisions; import org.apache.jackrabbit.oak.segment.Segment; @@ -112,7 +112,7 @@ public Segment readSegment(SegmentId id) { @Override public void writeSegment( SegmentId id, byte[] data, int offset, int length) throws IOException { - Buffer buffer = Buffer.allocate(length); + ByteBuffer buffer = ByteBuffer.allocate(length); buffer.put(data, offset, length); buffer.rewind(); Segment segment = new Segment(tracker, id, buffer); diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentArchiveReader.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentArchiveReader.java index 8b22150516e..cdf8581a2bb 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentArchiveReader.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentArchiveReader.java @@ -20,12 +20,12 @@ import java.io.Closeable; import java.io.IOException; +import java.nio.ByteBuffer; import java.util.List; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.file.tar.SegmentGraph; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -44,7 +44,7 @@ public interface SegmentArchiveReader extends Closeable { * @return byte buffer containing the segment data or null if the segment doesn't exist */ @Nullable - Buffer readSegment(long msb, long lsb) throws IOException; + ByteBuffer readSegment(long msb, long lsb) throws IOException; /** * Check if the segment exists. @@ -89,7 +89,7 @@ default Set getSegmentUUIDs() { * @return byte buffer representing the binary references structure. */ @Nullable - Buffer getBinaryReferences() throws IOException; + ByteBuffer getBinaryReferences() throws IOException; /** * Get the current length of the archive. diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentArchiveWriter.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentArchiveWriter.java index 7fcff23b93b..60142dbeb18 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentArchiveWriter.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/SegmentArchiveWriter.java @@ -19,8 +19,8 @@ package org.apache.jackrabbit.oak.segment.spi.persistence; import java.io.IOException; +import java.nio.ByteBuffer; -import org.apache.jackrabbit.oak.commons.Buffer; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -74,7 +74,7 @@ public interface SegmentArchiveWriter { * @return byte buffer containing the segment data or null if segment doesn't exist */ @Nullable - Buffer readSegment(long msb, long lsb) throws IOException; + ByteBuffer readSegment(long msb, long lsb) throws IOException; /** * Check if the segment exists. diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/AbstractPersistentCache.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/AbstractPersistentCache.java index f1641ffb531..773869f79e0 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/AbstractPersistentCache.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/AbstractPersistentCache.java @@ -21,7 +21,6 @@ import static java.util.concurrent.TimeUnit.SECONDS; import org.apache.jackrabbit.oak.cache.AbstractCacheStats; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.commons.log.LogSilencer; import org.apache.jackrabbit.oak.commons.time.Stopwatch; import org.apache.jackrabbit.oak.segment.spi.RepositoryNotReachableException; @@ -30,6 +29,7 @@ import org.slf4j.LoggerFactory; import java.io.Closeable; +import java.nio.ByteBuffer; import java.util.Set; import java.util.UUID; import java.util.concurrent.BlockingQueue; @@ -88,8 +88,8 @@ public PersistentCache linkWith(AbstractPersistentCache nextCache) { } @Override - public Buffer readSegment(long msb, long lsb, @NotNull Callable loader) { - Buffer segment = readSegmentInternal(msb, lsb); + public ByteBuffer readSegment(long msb, long lsb, @NotNull Callable loader) { + ByteBuffer segment = readSegmentInternal(msb, lsb); if (segment != null) { segmentCacheStats.hitCount.incrementAndGet(); return segment; @@ -97,7 +97,7 @@ public Buffer readSegment(long msb, long lsb, @NotNull Callable loader) segmentCacheStats.missCount.incrementAndGet(); // Either use the next cache or the 'loader' - Callable nextLoader = nextCache != null + Callable nextLoader = nextCache != null ? () -> nextCache.readSegment(msb, lsb, loader) : loader; @@ -131,7 +131,7 @@ public Buffer readSegment(long msb, long lsb, @NotNull Callable loader) * @param lsb the least significant bits of the identifier of the segment * @return byte buffer containing the segment data or null if the segment doesn't exist */ - protected abstract Buffer readSegmentInternal(long msb, long lsb); + protected abstract ByteBuffer readSegmentInternal(long msb, long lsb); /** * Records time spent to load data from external source, after cache miss. diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReader.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReader.java index f81eaee7822..d7f02ebbdae 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReader.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReader.java @@ -18,7 +18,6 @@ package org.apache.jackrabbit.oak.segment.spi.persistence.persistentcache; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.file.tar.SegmentGraph; import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveEntry; import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveReader; @@ -26,6 +25,7 @@ import org.jetbrains.annotations.Nullable; import java.io.IOException; +import java.nio.ByteBuffer; import java.util.List; import java.util.Set; import java.util.UUID; @@ -47,7 +47,7 @@ public CachingSegmentArchiveReader( @Override @Nullable - public Buffer readSegment(long msb, long lsb) throws IOException { + public ByteBuffer readSegment(long msb, long lsb) throws IOException { if (delegate.containsSegment(msb, lsb)) { return persistentCache.readSegment(msb, lsb, () -> delegate.readSegment(msb, lsb)); } else { @@ -77,7 +77,7 @@ public Set getSegmentUUIDs() { @Override @Nullable - public Buffer getBinaryReferences() throws IOException { + public ByteBuffer getBinaryReferences() throws IOException { return delegate.getBinaryReferences(); } diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/DelegatingPersistentCache.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/DelegatingPersistentCache.java index db5f7c53d1e..85f376e59b6 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/DelegatingPersistentCache.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/DelegatingPersistentCache.java @@ -19,10 +19,10 @@ package org.apache.jackrabbit.oak.segment.spi.persistence.persistentcache; import org.apache.jackrabbit.oak.cache.AbstractCacheStats; -import org.apache.jackrabbit.oak.commons.Buffer; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.nio.ByteBuffer; import java.util.concurrent.Callable; /** @@ -34,7 +34,7 @@ public abstract class DelegatingPersistentCache implements PersistentCache { protected abstract PersistentCache delegate(); @Override - public @Nullable Buffer readSegment(long msb, long lsb, @NotNull Callable loader) { + public @Nullable ByteBuffer readSegment(long msb, long lsb, @NotNull Callable loader) { return delegate().readSegment(msb, lsb, loader); } @@ -44,7 +44,7 @@ public boolean containsSegment(long msb, long lsb) { } @Override - public void writeSegment(long msb, long lsb, Buffer buffer) { + public void writeSegment(long msb, long lsb, ByteBuffer buffer) { delegate().writeSegment(msb, lsb, buffer); } diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/PersistentCache.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/PersistentCache.java index aa71b10bf92..62118f7b1d2 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/PersistentCache.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/PersistentCache.java @@ -18,10 +18,10 @@ package org.apache.jackrabbit.oak.segment.spi.persistence.persistentcache; import org.apache.jackrabbit.oak.cache.AbstractCacheStats; -import org.apache.jackrabbit.oak.commons.Buffer; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.nio.ByteBuffer; import java.util.concurrent.Callable; /** @@ -40,7 +40,7 @@ public interface PersistentCache { * @return byte buffer containing the segment data or null if the segment doesn't exist */ @Nullable - Buffer readSegment(long msb, long lsb, @NotNull Callable loader); + ByteBuffer readSegment(long msb, long lsb, @NotNull Callable loader); /** * Check if the segment exists in the cache. @@ -58,7 +58,7 @@ public interface PersistentCache { * @param lsb the least significant bits of the identifier of the segment * @param buffer the byte buffer containing the segment data */ - void writeSegment(long msb, long lsb, Buffer buffer); + void writeSegment(long msb, long lsb, ByteBuffer buffer); /** * Purges the cache entries according to the implementation policy (e.g. maximum diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/split/UnclosedSegmentArchiveReader.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/split/UnclosedSegmentArchiveReader.java index f50ffd757c7..e480f7e60d3 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/split/UnclosedSegmentArchiveReader.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/spi/persistence/split/UnclosedSegmentArchiveReader.java @@ -17,11 +17,11 @@ package org.apache.jackrabbit.oak.segment.spi.persistence.split; import java.io.IOException; +import java.nio.ByteBuffer; import java.util.List; import java.util.Set; import java.util.UUID; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.segment.file.tar.SegmentGraph; import org.apache.jackrabbit.oak.segment.file.tar.binaries.BinaryReferencesIndexWriter; import org.apache.jackrabbit.oak.segment.spi.persistence.SegmentArchiveEntry; @@ -33,14 +33,14 @@ class UnclosedSegmentArchiveReader implements SegmentArchiveReader { private final SegmentArchiveReader delegate; - private static final Buffer EMPTY_BINARY_REF = Buffer.wrap(BinaryReferencesIndexWriter.newBinaryReferencesIndexWriter().write()).asReadOnlyBuffer(); + private static final ByteBuffer EMPTY_BINARY_REF = ByteBuffer.wrap(BinaryReferencesIndexWriter.newBinaryReferencesIndexWriter().write()).asReadOnlyBuffer(); UnclosedSegmentArchiveReader(SegmentArchiveReader delegate) { this.delegate = delegate; } @Override - public @Nullable Buffer readSegment(long msb, long lsb) throws IOException { + public @Nullable ByteBuffer readSegment(long msb, long lsb) throws IOException { return delegate.readSegment(msb, lsb); } @@ -65,13 +65,9 @@ public Set getSegmentUUIDs() { } @Override - public @NotNull Buffer getBinaryReferences() throws IOException { - Buffer buffer = delegate.getBinaryReferences(); - if (buffer == null) { - return EMPTY_BINARY_REF; - } else { - return buffer; - } + public @NotNull ByteBuffer getBinaryReferences() throws IOException { + ByteBuffer buffer = delegate.getBinaryReferences(); + return buffer == null ? EMPTY_BINARY_REF.duplicate() : buffer; } @Override diff --git a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/util/ReaderAtEnd.java b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/util/ReaderAtEnd.java index 5df813893ef..217839c0596 100644 --- a/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/util/ReaderAtEnd.java +++ b/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/util/ReaderAtEnd.java @@ -19,7 +19,7 @@ import java.io.IOException; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; /** * Read raw data from the end of an underlying data source. The data source is @@ -39,6 +39,6 @@ public interface ReaderAtEnd { * @throws IOException if an error occurs while reading from the underlying * data source. */ - Buffer readAtEnd(int whence, int amount) throws IOException; + ByteBuffer readAtEnd(int whence, int amount) throws IOException; } diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CacheWeightEstimator.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CacheWeightEstimator.java index e2707fb43c4..63378c2adf4 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CacheWeightEstimator.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/CacheWeightEstimator.java @@ -32,7 +32,7 @@ import org.apache.commons.lang3.RandomStringUtils; import org.apache.jackrabbit.oak.cache.AbstractCacheStats; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.commons.StringUtils; import org.apache.jackrabbit.oak.segment.CacheWeights.StringCacheWeigher; import org.apache.jackrabbit.oak.segment.file.PriorityCache; @@ -335,7 +335,7 @@ private Segment randomSegment(int bufferSize) { buffer[GC_FULL_GENERATION_OFFSET + 2] = (byte) (generation >> 8); buffer[GC_FULL_GENERATION_OFFSET + 3] = (byte) generation; - Buffer data = Buffer.wrap(buffer); + ByteBuffer data = ByteBuffer.wrap(buffer); SegmentId id = randomSegmentId(false); Segment segment = new Segment(store.getSegmentIdProvider(), id, data); diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ClassicCompactorTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ClassicCompactorTest.java index bbc86f36787..b8505ed1551 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ClassicCompactorTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/ClassicCompactorTest.java @@ -36,7 +36,7 @@ import org.apache.jackrabbit.oak.api.Blob; import org.apache.jackrabbit.oak.api.CommitFailedException; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.file.FileStore; import org.apache.jackrabbit.oak.segment.file.GCNodeWriteMonitor; import org.apache.jackrabbit.oak.segment.file.CompactionWriter; @@ -212,7 +212,7 @@ public RecordId writeStream(@NotNull InputStream stream) throws IOException { @NotNull @Override - public RecordId writeNode(@NotNull NodeState state, @Nullable Buffer stableIdBytes) throws IOException { + public RecordId writeNode(@NotNull NodeState state, @Nullable ByteBuffer stableIdBytes) throws IOException { if (state.hasChildNode(failOnName)) { throw new IOException("Encountered node with name " + failOnName); } diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/FailedFlushTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/FailedFlushTest.java index d23a0ba7204..e60cf614f4c 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/FailedFlushTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/FailedFlushTest.java @@ -17,7 +17,7 @@ package org.apache.jackrabbit.oak.segment; import org.apache.commons.lang3.RandomStringUtils; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.file.FileStore; import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder; import org.apache.jackrabbit.oak.segment.file.tar.SegmentTarManager; @@ -163,7 +163,7 @@ public void writeSegment(long msb, long lsb, byte[] data, int offset, int size, throw new IOException("Simulated failure before segment write"); } super.writeSegment(msb, lsb, data, offset, size, generation, fullGeneration, compacted); - Buffer segmentData = Buffer.wrap(data, offset, size); + ByteBuffer segmentData = ByteBuffer.wrap(data, offset, size); segmentId2Size.computeIfAbsent(new UUID(msb, lsb), uuid -> new HashSet<>()).add(size); if (store != null) { SegmentId id = new SegmentId(store, msb, lsb); diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NodeRecordTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NodeRecordTest.java index 2b9c0ef27a3..8bf89433778 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NodeRecordTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/NodeRecordTest.java @@ -25,7 +25,7 @@ import java.util.function.Supplier; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState; import org.apache.jackrabbit.oak.segment.file.FileStore; import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder; @@ -87,7 +87,7 @@ public void stableIdShouldPersistAcrossGenerations() throws Exception { } } - private static final byte[] asByteArray(Buffer bytes) { + private static final byte[] asByteArray(ByteBuffer bytes) { byte[] buffer = new byte[RecordId.SERIALIZED_RECORD_ID_BYTES]; bytes.get(buffer); return buffer; diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordNumbersTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordNumbersTest.java index a6e490db572..789f46edbaf 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordNumbersTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/RecordNumbersTest.java @@ -19,7 +19,7 @@ package org.apache.jackrabbit.oak.segment; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.data.SegmentData; import org.junit.Test; @@ -28,7 +28,7 @@ public class RecordNumbersTest { @Test public void shouldReadRecordNumbersFromSegmentData() { - SegmentData sampleSegmentData = SegmentData.newSegmentData(Buffer.wrap(new byte[] { + SegmentData sampleSegmentData = SegmentData.newSegmentData(ByteBuffer.wrap(new byte[] { 48, 97, 75, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -71, -35, -50, 87, -7, 64, 125, -96, -24, -82, 112, 44, -36, 63, 67, 0, 0, 0, 0, 4, 0, 3, -1, -40, 0, 0, 0, 1, 5, 0, 3, -1, -48, 0, 0, 0, 2, 4, 0, 3, -1, -56, 0, 0, 0, 3, 5, 0, 3, -1, -64, 0, 0, 0, 0, 0, diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentBufferMonitorTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentBufferMonitorTest.java index 152a0711db1..e397a823407 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentBufferMonitorTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentBufferMonitorTest.java @@ -31,7 +31,7 @@ import java.util.function.Supplier; import org.apache.jackrabbit.api.stats.RepositoryStatistics; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.stats.CounterStats; import org.apache.jackrabbit.oak.stats.GaugeStats; import org.apache.jackrabbit.oak.stats.HistogramStats; @@ -90,7 +90,7 @@ public void emptyStats() { @Test public void heapBuffer() { - Buffer buffer = Buffer.allocate(42); + ByteBuffer buffer = ByteBuffer.allocate(42); segmentBufferMonitor.trackAllocation(buffer); assertEquals(0, stats.get(DIRECT_BUFFER_COUNT).getCount()); @@ -109,7 +109,7 @@ public void heapBuffer() { @Test public void directBuffer() { - Buffer buffer = Buffer.allocateDirect(42); + ByteBuffer buffer = ByteBuffer.allocateDirect(42); segmentBufferMonitor.trackAllocation(buffer); assertEquals(1, stats.get(DIRECT_BUFFER_COUNT).getCount()); diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentReferencesTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentReferencesTest.java index 5bda113a0fc..b4d2efb2277 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentReferencesTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentReferencesTest.java @@ -24,7 +24,7 @@ import java.io.File; import java.io.IOException; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState; import org.apache.jackrabbit.oak.segment.data.SegmentData; import org.apache.jackrabbit.oak.segment.file.FileStore; @@ -98,7 +98,7 @@ public void segmentShouldExposeReferencedSegments() throws Exception { @Test public void shouldReadSegmentReferencesFromSegmentData() throws IOException { - SegmentData sampleSegmentData = SegmentData.newSegmentData(Buffer.wrap(new byte[] { + SegmentData sampleSegmentData = SegmentData.newSegmentData(ByteBuffer.wrap(new byte[] { 48, 97, 75, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -116, -71, -35, -50, 87, -7, 64, 125, -96, -24, -82, 112, 44, -36, 63, 67, 0, 0, 0, 0, 4, 0, 3, -1, -40, 0, 0, 0, 1, 5, 0, 3, -1, -48, 0, 0, 0, 2, 4, 0, 3, -1, -56, 0, 0, 0, 3, 5, 0, 3, -1, -64, 0, 0, 0, 0, 0, diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/data/SegmentDataTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/data/SegmentDataTest.java index e0f2e83fe98..cc702de6afd 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/data/SegmentDataTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/data/SegmentDataTest.java @@ -18,7 +18,7 @@ */ package org.apache.jackrabbit.oak.segment.data; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.Segment; import org.junit.Test; @@ -28,7 +28,7 @@ public class SegmentDataTest { @Test public void readSmallLength() { - Buffer buffer = Buffer.wrap(new byte[]{0b1111111}); + ByteBuffer buffer = ByteBuffer.wrap(new byte[]{0b1111111}); SegmentData segmentData = new SegmentDataV12(buffer); long length = segmentData.readLength(Segment.MAX_SEGMENT_SIZE - buffer.limit()); assertEquals(127, length); @@ -38,7 +38,7 @@ public void readSmallLength() { public void readMediumLength() { // Medium prefix -- // Arbitrary ------ -------- - Buffer buffer = Buffer.wrap(new byte[]{(byte) 0b10_000111, (byte)0b10101010}); + ByteBuffer buffer = ByteBuffer.wrap(new byte[]{(byte) 0b10_000111, (byte)0b10101010}); SegmentData segmentData = new SegmentDataV12(buffer); long length = segmentData.readLength(Segment.MAX_SEGMENT_SIZE - buffer.limit()); @@ -50,7 +50,7 @@ public void readMediumLength() { public void readLongLength() { // Long prefix -- // Arbitrary ------ -------- -------- -------- -------- -------- -------- -------- - Buffer buffer = Buffer.wrap(new byte[]{ + ByteBuffer buffer = ByteBuffer.wrap(new byte[]{ (byte) 0b11_111000, 0b00001111, 0b00101010, 0b00001010, 0b01010101, 0b00010001, 0b01111110, 0b00000000 }); SegmentData segmentData = new SegmentDataV12(buffer); @@ -62,7 +62,7 @@ public void readLongLength() { @Test(expected = IllegalStateException.class) public void readStringWithLengthLargerThanIntegerMaxValueThrows() { - Buffer buffer = Buffer.wrap(new byte[]{ + ByteBuffer buffer = ByteBuffer.wrap(new byte[]{ (byte)0b111111111, (byte)0b111111111, (byte)0b111111111, @@ -78,7 +78,7 @@ public void readStringWithLengthLargerThanIntegerMaxValueThrows() { @Test public void readStringWithSmallLength() { - Buffer buffer = Buffer.wrap(new byte[]{5, (byte)'H', (byte)'e', (byte)'l', (byte)'l', (byte)'o'}); + ByteBuffer buffer = ByteBuffer.wrap(new byte[]{5, (byte)'H', (byte)'e', (byte)'l', (byte)'l', (byte)'o'}); SegmentData segmentData = new SegmentDataV12(buffer); StringData str = segmentData.readString(Segment.MAX_SEGMENT_SIZE - buffer.limit()); assertEquals("Hello", str.getString()); @@ -89,7 +89,7 @@ public void readStringWithSmallLength() { @Test public void readStringWithMediumLength() { int stringLength = (1 << 7) + 42; - Buffer buffer = Buffer.wrap(padRight( + ByteBuffer buffer = ByteBuffer.wrap(padRight( // -- Medium prefix // ------ -- 42 new byte[] {(byte) 0b10_000000, (byte)42}, @@ -110,7 +110,7 @@ public void readStringStoredInExternalRecord() { // Long prefix -- // 42 ------ -------- -------- -------- -------- -------- -------- -------- - Buffer buffer = Buffer.wrap(new byte[]{ + ByteBuffer buffer = ByteBuffer.wrap(new byte[]{ (byte) 0b11_000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00101010, // seg ref record number @@ -129,7 +129,7 @@ public void readStringStoredInExternalRecord() { public void readRecordId() { // seg. ref. record number // ---------- ---------------------- - Buffer buffer = Buffer.wrap(new byte[]{0x01, 0x02, 0x03, 0x04, 0x05, 0x06}); + ByteBuffer buffer = ByteBuffer.wrap(new byte[]{0x01, 0x02, 0x03, 0x04, 0x05, 0x06}); SegmentData segmentData = new SegmentDataV12(buffer); var recordId = segmentData.readRecordId(Segment.MAX_SEGMENT_SIZE - buffer.limit()); assertEquals(0x01_02, recordId.getSegmentReference()); diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/preloader/SegmentPreloaderTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/preloader/SegmentPreloaderTest.java index 58319ee77cf..2622d6bb5df 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/preloader/SegmentPreloaderTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/preloader/SegmentPreloaderTest.java @@ -22,7 +22,7 @@ import org.apache.commons.lang3.RandomUtils; import org.apache.jackrabbit.oak.api.CommitFailedException; import org.apache.jackrabbit.oak.cache.AbstractCacheStats; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.Segment; import org.apache.jackrabbit.oak.segment.SegmentId; import org.apache.jackrabbit.oak.segment.SegmentNodeStore; @@ -422,10 +422,10 @@ private void generateContent(NodeBuilder builder, int childNodes, int depth) { private static class MemoryTestCache implements PersistentCache { - Map segments = new ConcurrentHashMap<>(); + Map segments = new ConcurrentHashMap<>(); @Override - public @Nullable Buffer readSegment(long msb, long lsb, @NotNull Callable loader) { + public @Nullable ByteBuffer readSegment(long msb, long lsb, @NotNull Callable loader) { return segments.computeIfAbsent(lsb, i -> { try { return loader.call(); @@ -441,7 +441,7 @@ public boolean containsSegment(long msb, long lsb) { } @Override - public void writeSegment(long msb, long lsb, Buffer buffer) { + public void writeSegment(long msb, long lsb, ByteBuffer buffer) { segments.put(lsb, buffer); } diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFileTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFileTest.java index 178df3f132b..d97b3952be8 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFileTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFileTest.java @@ -33,7 +33,7 @@ import java.util.Set; import java.util.UUID; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitorAdapter; import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter; import org.apache.jackrabbit.oak.segment.spi.persistence.GCGeneration; @@ -73,12 +73,12 @@ public void testWriteAndRead() throws IOException { try (TarWriter writer = new TarWriter(archiveManager, "data00000a.tar")) { writer.writeEntry(msb, lsb, data, 0, data.length, generation(0)); - assertEquals(Buffer.wrap(data), writer.readEntry(msb, lsb)); + assertEquals(ByteBuffer.wrap(data), writer.readEntry(msb, lsb)); } try (TarReader reader = TarReader.open("data00000a.tar", archiveManager)) { assertEquals(getWriteAndReadExpectedSize(), reader.size()); - assertEquals(Buffer.wrap(data), reader.readEntry(msb, lsb)); + assertEquals(ByteBuffer.wrap(data), reader.readEntry(msb, lsb)); } } diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFilesTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFilesTest.java index 80789efdf10..deaf72cf122 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFilesTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/TarFilesTest.java @@ -40,7 +40,7 @@ import java.util.UUID; import org.apache.jackrabbit.oak.api.IllegalRepositoryStateException; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.file.tar.TarFiles.CleanupResult; import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitor; import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitorAdapter; @@ -131,7 +131,7 @@ private boolean containsSegment(UUID id) { } private byte[] readSegment(UUID id) { - Buffer buffer = tarFiles.readSegment(id.getMostSignificantBits(), id.getLeastSignificantBits()); + ByteBuffer buffer = tarFiles.readSegment(id.getMostSignificantBits(), id.getLeastSignificantBits()); if (buffer == null) { return null; } diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderTest.java index caf707d81bf..fdc95f22025 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderTest.java @@ -29,7 +29,7 @@ import java.util.zip.CRC32; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.junit.Test; public class BinaryReferencesIndexLoaderTest { @@ -42,17 +42,17 @@ private static byte[] bytes(String s) { return s.getBytes(StandardCharsets.UTF_8); } - private static int checksum(Buffer buffer) { + private static int checksum(ByteBuffer buffer) { CRC32 checksum = new CRC32(); int position = buffer.position(); - buffer.update(checksum); + checksum.update(buffer); buffer.position(position); return (int) checksum.getValue(); } - private static BinaryReferencesIndex loadIndex(Buffer buffer) throws Exception { - Buffer data = BinaryReferencesIndexLoader.loadBinaryReferencesIndex((whence, length) -> { - Buffer slice = buffer.duplicate(); + private static BinaryReferencesIndex loadIndex(ByteBuffer buffer) throws Exception { + ByteBuffer data = BinaryReferencesIndexLoader.loadBinaryReferencesIndex((whence, length) -> { + ByteBuffer slice = buffer.duplicate(); slice.position(slice.limit() - whence); slice.limit(slice.position() + length); return slice.slice(); @@ -62,7 +62,7 @@ private static BinaryReferencesIndex loadIndex(Buffer buffer) throws Exception { @Test(expected = InvalidBinaryReferencesIndexException.class) public void testUnrecognizedMagicNumber() throws Exception { - Buffer buffer = Buffer.allocate(Integer.BYTES); + ByteBuffer buffer = ByteBuffer.allocate(Integer.BYTES); try { loadIndex(buffer); } catch (InvalidBinaryReferencesIndexException e) { @@ -73,7 +73,7 @@ public void testUnrecognizedMagicNumber() throws Exception { @Test public void testLoadV1() throws Exception { - Buffer entries = Buffer.allocate(512) + ByteBuffer entries = ByteBuffer.allocate(512) // First generation .putInt(1) .putInt(2) @@ -102,7 +102,7 @@ public void testLoadV1() throws Exception { .putInt(length("2.2.2")).put(bytes("2.2.2")); entries.flip(); - Buffer buffer = Buffer.allocate(entries.remaining() + BinaryReferencesIndexLoaderV1.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(entries.remaining() + BinaryReferencesIndexLoaderV1.FOOTER_SIZE); buffer.duplicate() .put(entries.duplicate()) .putInt(checksum(entries)) @@ -145,7 +145,7 @@ public void testLoadV1() throws Exception { @Test public void testLoadV2() throws Exception { - Buffer entries = Buffer.allocate(512) + ByteBuffer entries = ByteBuffer.allocate(512) // First generation .putInt(1).putInt(2).put((byte) 0) .putInt(2) @@ -174,7 +174,7 @@ public void testLoadV2() throws Exception { .putInt(length("2.2.2")).put(bytes("2.2.2")); entries.flip(); - Buffer buffer = Buffer.allocate(entries.remaining() + BinaryReferencesIndexLoaderV2.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(entries.remaining() + BinaryReferencesIndexLoaderV2.FOOTER_SIZE); buffer.duplicate() .put(entries.duplicate()) .putInt(checksum(entries)) diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV1Test.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV1Test.java index c5fde02a6d4..4e11e10be89 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV1Test.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV1Test.java @@ -28,7 +28,7 @@ import java.util.zip.CRC32; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.junit.Test; public class BinaryReferencesIndexLoaderV1Test { @@ -41,9 +41,9 @@ private static byte[] bytes(String s) { return s.getBytes(StandardCharsets.UTF_8); } - private static BinaryReferencesIndex loadIndex(Buffer buffer) throws Exception { - Buffer data = loadBinaryReferencesIndex((whence, length) -> { - Buffer slice = buffer.duplicate(); + private static BinaryReferencesIndex loadIndex(ByteBuffer buffer) throws Exception { + ByteBuffer data = loadBinaryReferencesIndex((whence, length) -> { + ByteBuffer slice = buffer.duplicate(); slice.position(slice.limit() - whence); slice.limit(slice.position() + length); return slice.slice(); @@ -51,7 +51,7 @@ private static BinaryReferencesIndex loadIndex(Buffer buffer) throws Exception { return parseBinaryReferencesIndex(data); } - private static void assertInvalidBinaryReferencesIndexException(Buffer buffer, String message) throws Exception { + private static void assertInvalidBinaryReferencesIndexException(ByteBuffer buffer, String message) throws Exception { try { loadIndex(buffer); } catch (InvalidBinaryReferencesIndexException e) { @@ -60,23 +60,23 @@ private static void assertInvalidBinaryReferencesIndexException(Buffer buffer, S } } - private static int checksum(Buffer buffer) { + private static int checksum(ByteBuffer buffer) { CRC32 checksum = new CRC32(); int position = buffer.position(); - buffer.update(checksum); + checksum.update(buffer); buffer.position(position); return (int) checksum.getValue(); } @Test(expected = InvalidBinaryReferencesIndexException.class) public void testInvalidMagicNumber() throws Exception { - Buffer buffer = Buffer.allocate(FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(FOOTER_SIZE); assertInvalidBinaryReferencesIndexException(buffer, "Invalid magic number"); } @Test(expected = InvalidBinaryReferencesIndexException.class) public void testInvalidCount() throws Exception { - Buffer buffer = Buffer.allocate(FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(FOOTER_SIZE); buffer.duplicate() .putInt(0) .putInt(-1) @@ -87,7 +87,7 @@ public void testInvalidCount() throws Exception { @Test(expected = InvalidBinaryReferencesIndexException.class) public void testInvalidSize() throws Exception { - Buffer buffer = Buffer.allocate(FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(FOOTER_SIZE); buffer.duplicate() .putInt(0) .putInt(0) @@ -98,7 +98,7 @@ public void testInvalidSize() throws Exception { @Test(expected = InvalidBinaryReferencesIndexException.class) public void testInvalidChecksum() throws Exception { - Buffer entries = Buffer.allocate(512) + ByteBuffer entries = ByteBuffer.allocate(512) // First generation .putInt(1) .putInt(2) @@ -127,7 +127,7 @@ public void testInvalidChecksum() throws Exception { .putInt(length("2.2.2")).put(bytes("2.2.2")); entries.flip(); - Buffer buffer = Buffer.allocate(entries.remaining() + FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(entries.remaining() + FOOTER_SIZE); buffer.duplicate() .put(entries.duplicate()) .putInt(checksum(entries) + 1) @@ -140,7 +140,7 @@ public void testInvalidChecksum() throws Exception { @Test public void testParse() throws Exception { - Buffer entries = Buffer.allocate(512) + ByteBuffer entries = ByteBuffer.allocate(512) // First generation .putInt(1) .putInt(2) @@ -169,7 +169,7 @@ public void testParse() throws Exception { .putInt(length("2.2.2")).put(bytes("2.2.2")); entries.flip(); - Buffer buffer = Buffer.allocate(entries.remaining() + FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(entries.remaining() + FOOTER_SIZE); buffer.duplicate() .put(entries.duplicate()) .putInt(checksum(entries)) diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV2Test.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV2Test.java index 8e874e2ba58..dbc9b23c909 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV2Test.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexLoaderV2Test.java @@ -28,7 +28,7 @@ import java.util.zip.CRC32; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.junit.Test; public class BinaryReferencesIndexLoaderV2Test { @@ -41,9 +41,9 @@ private static byte[] bytes(String s) { return s.getBytes(StandardCharsets.UTF_8); } - private static BinaryReferencesIndex loadIndex(Buffer buffer) throws Exception { - Buffer data = loadBinaryReferencesIndex((whence, length) -> { - Buffer slice = buffer.duplicate(); + private static BinaryReferencesIndex loadIndex(ByteBuffer buffer) throws Exception { + ByteBuffer data = loadBinaryReferencesIndex((whence, length) -> { + ByteBuffer slice = buffer.duplicate(); slice.position(slice.limit() - whence); slice.limit(slice.position() + length); return slice.slice(); @@ -51,7 +51,7 @@ private static BinaryReferencesIndex loadIndex(Buffer buffer) throws Exception { return parseBinaryReferencesIndex(data); } - private static void assertInvalidBinaryReferencesIndexException(Buffer buffer, String message) throws Exception { + private static void assertInvalidBinaryReferencesIndexException(ByteBuffer buffer, String message) throws Exception { try { loadIndex(buffer); } catch (InvalidBinaryReferencesIndexException e) { @@ -60,23 +60,23 @@ private static void assertInvalidBinaryReferencesIndexException(Buffer buffer, S } } - private static int checksum(Buffer buffer) { + private static int checksum(ByteBuffer buffer) { CRC32 checksum = new CRC32(); int position = buffer.position(); - buffer.update(checksum); + checksum.update(buffer); buffer.position(position); return (int) checksum.getValue(); } @Test(expected = InvalidBinaryReferencesIndexException.class) public void testInvalidMagicNumber() throws Exception { - Buffer buffer = Buffer.allocate(FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(FOOTER_SIZE); assertInvalidBinaryReferencesIndexException(buffer, "Invalid magic number"); } @Test(expected = InvalidBinaryReferencesIndexException.class) public void testInvalidCount() throws Exception { - Buffer buffer = Buffer.allocate(FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(FOOTER_SIZE); buffer.duplicate() .putInt(0) .putInt(-1) @@ -87,7 +87,7 @@ public void testInvalidCount() throws Exception { @Test(expected = InvalidBinaryReferencesIndexException.class) public void testInvalidSize() throws Exception { - Buffer buffer = Buffer.allocate(FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(FOOTER_SIZE); buffer.duplicate() .putInt(0) .putInt(0) @@ -98,7 +98,7 @@ public void testInvalidSize() throws Exception { @Test(expected = InvalidBinaryReferencesIndexException.class) public void testInvalidChecksum() throws Exception { - Buffer entries = Buffer.allocate(512) + ByteBuffer entries = ByteBuffer.allocate(512) // First generation .putInt(1).putInt(2).put((byte) 0) .putInt(2) @@ -127,7 +127,7 @@ public void testInvalidChecksum() throws Exception { .putInt(length("2.2.2")).put(bytes("2.2.2")); entries.flip(); - Buffer buffer = Buffer.allocate(entries.remaining() + FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(entries.remaining() + FOOTER_SIZE); buffer.duplicate() .put(entries.duplicate()) .putInt(checksum(entries) + 1) @@ -140,7 +140,7 @@ public void testInvalidChecksum() throws Exception { @Test public void testParse() throws Exception { - Buffer entries = Buffer.allocate(512) + ByteBuffer entries = ByteBuffer.allocate(512) // First generation .putInt(1).putInt(2).put((byte) 0) .putInt(2) @@ -169,7 +169,7 @@ public void testParse() throws Exception { .putInt(length("2.2.2")).put(bytes("2.2.2")); entries.flip(); - Buffer buffer = Buffer.allocate(entries.remaining() + FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(entries.remaining() + FOOTER_SIZE); buffer.duplicate() .put(entries.duplicate()) .putInt(checksum(entries)) diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexWriterTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexWriterTest.java index e1a72f61792..4ffdf6cc22e 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexWriterTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/binaries/BinaryReferencesIndexWriterTest.java @@ -29,7 +29,7 @@ import java.util.Set; import java.util.UUID; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.junit.Test; public class BinaryReferencesIndexWriterTest { @@ -53,7 +53,7 @@ public void testWrite() throws Exception { byte[] data = writer.write(); - Buffer buffer = loadBinaryReferencesIndex((whence, length) -> Buffer.wrap(data, data.length - whence, length)); + ByteBuffer buffer = loadBinaryReferencesIndex((whence, length) -> ByteBuffer.wrap(data, data.length - whence, length)); BinaryReferencesIndex index = parseBinaryReferencesIndex(buffer); Generation g1 = new Generation(1, 2, false); diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderTest.java index 4816dedf667..e4c18b91be7 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderTest.java @@ -21,14 +21,14 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.junit.Test; public class IndexLoaderTest { - private static Index loadIndex(Buffer buffer) throws Exception { + private static Index loadIndex(ByteBuffer buffer) throws Exception { return newIndexLoader(1).loadIndex((whence, length) -> { - Buffer slice = buffer.duplicate(); + ByteBuffer slice = buffer.duplicate(); slice.position(slice.limit() - whence); slice.limit(slice.position() + length); return slice.slice(); @@ -47,7 +47,7 @@ private static void assertEntry(IndexEntry entry, long msb, long lsb, int positi @Test(expected = InvalidIndexException.class) public void testUnrecognizedMagicNumber() throws Exception { - Buffer buffer = Buffer.allocate(Integer.SIZE); + ByteBuffer buffer = ByteBuffer.allocate(Integer.SIZE); buffer.duplicate().putInt(0xDEADBEEF); try { loadIndex(buffer); @@ -59,7 +59,7 @@ public void testUnrecognizedMagicNumber() throws Exception { @Test public void testLoadIndexV1() throws Exception { - Buffer buffer = Buffer.allocate(2 * IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(2 * IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE); buffer.duplicate() .putLong(1).putLong(2).putInt(3).putInt(4).putInt(5) .putLong(6).putLong(7).putInt(8).putInt(9).putInt(10) @@ -76,7 +76,7 @@ public void testLoadIndexV1() throws Exception { @Test public void testLoadIndexV2() throws Exception { - Buffer buffer = Buffer.allocate(2 * IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(2 * IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE); buffer.duplicate() .putLong(1).putLong(2).putInt(3).putInt(4).putInt(5).putInt(6).put((byte) 0) .putLong(7).putLong(8).putInt(9).putInt(10).putInt(11).putInt(12).put((byte) 1) diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV1Test.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV1Test.java index 30c1e939f39..6dc690ec734 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV1Test.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV1Test.java @@ -22,25 +22,25 @@ import java.util.zip.CRC32; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.junit.Test; public class IndexLoaderV1Test { - private static IndexV1 loadIndex(Buffer buffer) throws Exception { + private static IndexV1 loadIndex(ByteBuffer buffer) throws Exception { return loadIndex(1, buffer); } - private static IndexV1 loadIndex(int blockSize, Buffer buffer) throws Exception { + private static IndexV1 loadIndex(int blockSize, ByteBuffer buffer) throws Exception { return new IndexLoaderV1(blockSize).loadIndex((whence, length) -> { - Buffer slice = buffer.duplicate(); + ByteBuffer slice = buffer.duplicate(); slice.position(slice.limit() - whence); slice.limit(slice.position() + length); return slice.slice(); }); } - private static void assertInvalidIndexException(Buffer buffer, String message) throws Exception { + private static void assertInvalidIndexException(ByteBuffer buffer, String message) throws Exception { try { loadIndex(buffer); } catch (InvalidIndexException e) { @@ -49,7 +49,7 @@ private static void assertInvalidIndexException(Buffer buffer, String message) t } } - private static void assertInvalidIndexException(int blockSize, Buffer buffer, String message) throws Exception { + private static void assertInvalidIndexException(int blockSize, ByteBuffer buffer, String message) throws Exception { try { loadIndex(blockSize, buffer); } catch (InvalidIndexException e) { @@ -58,17 +58,17 @@ private static void assertInvalidIndexException(int blockSize, Buffer buffer, St } } - private static int checksum(Buffer buffer) { + private static int checksum(ByteBuffer buffer) { CRC32 checksum = new CRC32(); int position = buffer.position(); - buffer.update(checksum); + checksum.update(buffer); buffer.position(position); return (int) checksum.getValue(); } @Test(expected = InvalidIndexException.class) public void testInvalidMagic() throws Exception { - Buffer buffer = Buffer.allocate(IndexV1.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(IndexV1.FOOTER_SIZE); try { loadIndex(buffer); } catch (InvalidIndexException e) { @@ -79,7 +79,7 @@ public void testInvalidMagic() throws Exception { @Test(expected = InvalidIndexException.class) public void testInvalidCount() throws Exception { - Buffer buffer = Buffer.allocate(IndexV1.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(IndexV1.FOOTER_SIZE); buffer.duplicate() .putInt(0) .putInt(0) @@ -90,7 +90,7 @@ public void testInvalidCount() throws Exception { @Test(expected = InvalidIndexException.class) public void testInvalidSize() throws Exception { - Buffer buffer = Buffer.allocate(IndexV1.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(IndexV1.FOOTER_SIZE); buffer.duplicate() .putInt(0) .putInt(1) @@ -101,7 +101,7 @@ public void testInvalidSize() throws Exception { @Test(expected = InvalidIndexException.class) public void testInvalidSizeAlignment() throws Exception { - Buffer buffer = Buffer.allocate(IndexV1.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(IndexV1.FOOTER_SIZE); buffer.duplicate() .putInt(0) .putInt(1) @@ -112,7 +112,7 @@ public void testInvalidSizeAlignment() throws Exception { @Test(expected = InvalidIndexException.class) public void testInvalidChecksum() throws Exception { - Buffer buffer = Buffer.allocate(IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE); buffer.duplicate() .putLong(1).putLong(2).putInt(3).putInt(4).putInt(5) .putInt(0) @@ -124,12 +124,12 @@ public void testInvalidChecksum() throws Exception { @Test(expected = InvalidIndexException.class) public void testIncorrectEntryOrderingByMsb() throws Exception { - Buffer entries = Buffer.allocate(2 * IndexEntryV1.SIZE); + ByteBuffer entries = ByteBuffer.allocate(2 * IndexEntryV1.SIZE); entries.duplicate() .putLong(1).putLong(0).putInt(0).putInt(1).putInt(0) .putLong(0).putLong(0).putInt(1).putInt(1).putInt(0); - Buffer buffer = Buffer.allocate(2 * IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(2 * IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE); buffer.duplicate() .put(entries.duplicate()) .putInt(checksum(entries)) @@ -142,12 +142,12 @@ public void testIncorrectEntryOrderingByMsb() throws Exception { @Test(expected = InvalidIndexException.class) public void testIncorrectEntryOrderingByLsb() throws Exception { - Buffer entries = Buffer.allocate(2 * IndexEntryV1.SIZE); + ByteBuffer entries = ByteBuffer.allocate(2 * IndexEntryV1.SIZE); entries.duplicate() .putLong(0).putLong(1).putInt(0).putInt(1).putInt(0) .putLong(0).putLong(0).putInt(1).putInt(1).putInt(0); - Buffer buffer = Buffer.allocate(2 * IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(2 * IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE); buffer.duplicate() .put(entries.duplicate()) .putInt(checksum(entries)) @@ -160,12 +160,12 @@ public void testIncorrectEntryOrderingByLsb() throws Exception { @Test(expected = InvalidIndexException.class) public void testDuplicateEntry() throws Exception { - Buffer entries = Buffer.allocate(2 * IndexEntryV1.SIZE); + ByteBuffer entries = ByteBuffer.allocate(2 * IndexEntryV1.SIZE); entries.duplicate() .putLong(0).putLong(0).putInt(0).putInt(1).putInt(0) .putLong(0).putLong(0).putInt(1).putInt(1).putInt(0); - Buffer buffer = Buffer.allocate(2 * IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(2 * IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE); buffer.duplicate() .put(entries.duplicate()) .putInt(checksum(entries)) @@ -178,11 +178,11 @@ public void testDuplicateEntry() throws Exception { @Test(expected = InvalidIndexException.class) public void testInvalidEntryOffset() throws Exception { - Buffer entries = Buffer.allocate(IndexEntryV1.SIZE); + ByteBuffer entries = ByteBuffer.allocate(IndexEntryV1.SIZE); entries.duplicate() .putLong(0).putLong(0).putInt(-1).putInt(1).putInt(0); - Buffer buffer = Buffer.allocate(IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE); buffer.duplicate() .put(entries.duplicate()) .putInt(checksum(entries)) @@ -195,11 +195,11 @@ public void testInvalidEntryOffset() throws Exception { @Test(expected = InvalidIndexException.class) public void testInvalidEntryOffsetAlignment() throws Exception { - Buffer entries = Buffer.allocate(IndexEntryV1.SIZE); + ByteBuffer entries = ByteBuffer.allocate(IndexEntryV1.SIZE); entries.duplicate() .putLong(0).putLong(0).putInt(1).putInt(1).putInt(0); - Buffer index = Buffer.allocate(IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE); + ByteBuffer index = ByteBuffer.allocate(IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE); index.duplicate() .put(entries.duplicate()) .putInt(checksum(entries)) @@ -207,7 +207,7 @@ public void testInvalidEntryOffsetAlignment() throws Exception { .putInt(2 * (IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE)) .putInt(IndexLoaderV1.MAGIC); - Buffer buffer = Buffer.allocate(2 * (IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE)); + ByteBuffer buffer = ByteBuffer.allocate(2 * (IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE)); buffer.mark(); buffer.position(buffer.limit() - IndexEntryV1.SIZE - IndexV1.FOOTER_SIZE); buffer.put(index); @@ -218,11 +218,11 @@ public void testInvalidEntryOffsetAlignment() throws Exception { @Test(expected = InvalidIndexException.class) public void testInvalidEntrySize() throws Exception { - Buffer entries = Buffer.allocate(IndexEntryV1.SIZE); + ByteBuffer entries = ByteBuffer.allocate(IndexEntryV1.SIZE); entries.duplicate() .putLong(0).putLong(0).putInt(0).putInt(0).putInt(0); - Buffer buffer = Buffer.allocate(IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE); buffer.duplicate() .put(entries.duplicate()) .putInt(checksum(entries)) @@ -235,12 +235,12 @@ public void testInvalidEntrySize() throws Exception { @Test public void testLoadIndex() throws Exception { - Buffer entries = Buffer.allocate(2 * IndexEntryV1.SIZE); + ByteBuffer entries = ByteBuffer.allocate(2 * IndexEntryV1.SIZE); entries.duplicate() .putLong(0).putLong(0).putInt(0).putInt(1).putInt(0) .putLong(0).putLong(1).putInt(1).putInt(1).putInt(0); - Buffer buffer = Buffer.allocate(2 * IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(2 * IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE); buffer.duplicate() .put(entries.duplicate()) .putInt(checksum(entries)) diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2Test.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2Test.java index 7495d1f4afc..3aa149155d7 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2Test.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2Test.java @@ -22,25 +22,25 @@ import java.util.zip.CRC32; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.junit.Test; public class IndexLoaderV2Test { - private static IndexV2 loadIndex(Buffer buffer) throws Exception { + private static IndexV2 loadIndex(ByteBuffer buffer) throws Exception { return loadIndex(1, buffer); } - private static IndexV2 loadIndex(int blockSize, Buffer buffer) throws Exception { + private static IndexV2 loadIndex(int blockSize, ByteBuffer buffer) throws Exception { return new IndexLoaderV2(blockSize).loadIndex((whence, length) -> { - Buffer slice = buffer.duplicate(); + ByteBuffer slice = buffer.duplicate(); slice.position(slice.limit() - whence); slice.limit(slice.position() + length); return slice.slice(); }); } - private static void assertInvalidIndexException(Buffer buffer, String message) throws Exception { + private static void assertInvalidIndexException(ByteBuffer buffer, String message) throws Exception { try { loadIndex(buffer); } catch (InvalidIndexException e) { @@ -49,7 +49,7 @@ private static void assertInvalidIndexException(Buffer buffer, String message) t } } - private static void assertInvalidIndexException(int blockSize, Buffer buffer, String message) throws Exception { + private static void assertInvalidIndexException(int blockSize, ByteBuffer buffer, String message) throws Exception { try { loadIndex(blockSize, buffer); } catch (InvalidIndexException e) { @@ -58,23 +58,23 @@ private static void assertInvalidIndexException(int blockSize, Buffer buffer, St } } - private static int checksum(Buffer buffer) { + private static int checksum(ByteBuffer buffer) { CRC32 checksum = new CRC32(); int position = buffer.position(); - buffer.update(checksum); + checksum.update(buffer); buffer.position(position); return (int) checksum.getValue(); } @Test(expected = InvalidIndexException.class) public void testInvalidMagic() throws Exception { - Buffer buffer = Buffer.allocate(IndexV2.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(IndexV2.FOOTER_SIZE); assertInvalidIndexException(buffer, "Magic number mismatch"); } @Test(expected = InvalidIndexException.class) public void testInvalidCount() throws Exception { - Buffer buffer = Buffer.allocate(IndexV2.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(IndexV2.FOOTER_SIZE); buffer.duplicate() .putInt(0) .putInt(0) @@ -85,7 +85,7 @@ public void testInvalidCount() throws Exception { @Test(expected = InvalidIndexException.class) public void testInvalidSize() throws Exception { - Buffer buffer = Buffer.allocate(IndexV2.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(IndexV2.FOOTER_SIZE); buffer.duplicate() .putInt(0) .putInt(1) @@ -96,7 +96,7 @@ public void testInvalidSize() throws Exception { @Test(expected = InvalidIndexException.class) public void testInvalidSizeAlignment() throws Exception { - Buffer buffer = Buffer.allocate(IndexV2.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(IndexV2.FOOTER_SIZE); buffer.duplicate() .putInt(0) .putInt(1) @@ -107,7 +107,7 @@ public void testInvalidSizeAlignment() throws Exception { @Test(expected = InvalidIndexException.class) public void testInvalidChecksum() throws Exception { - Buffer buffer = Buffer.allocate(IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE); buffer.duplicate() .putLong(1).putLong(2).putInt(3).putInt(4).putInt(5).putInt(6).put((byte) 0) .putInt(0) @@ -119,12 +119,12 @@ public void testInvalidChecksum() throws Exception { @Test(expected = InvalidIndexException.class) public void testIncorrectEntryOrderingByMsb() throws Exception { - Buffer entries = Buffer.allocate(2 * IndexEntryV2.SIZE); + ByteBuffer entries = ByteBuffer.allocate(2 * IndexEntryV2.SIZE); entries.duplicate() .putLong(1).putLong(0).putInt(0).putInt(1).putInt(0).putInt(0).put((byte) 0) .putLong(0).putLong(0).putInt(1).putInt(1).putInt(0).putInt(0).put((byte) 0); - Buffer buffer = Buffer.allocate(2 * IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(2 * IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE); buffer.duplicate() .put(entries.duplicate()) .putInt(checksum(entries)) @@ -137,12 +137,12 @@ public void testIncorrectEntryOrderingByMsb() throws Exception { @Test(expected = InvalidIndexException.class) public void testIncorrectEntryOrderingByLsb() throws Exception { - Buffer entries = Buffer.allocate(2 * IndexEntryV2.SIZE); + ByteBuffer entries = ByteBuffer.allocate(2 * IndexEntryV2.SIZE); entries.duplicate() .putLong(0).putLong(1).putInt(0).putInt(1).putInt(0).putInt(0).put((byte) 0) .putLong(0).putLong(0).putInt(1).putInt(1).putInt(0).putInt(0).put((byte) 0); - Buffer buffer = Buffer.allocate(2 * IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(2 * IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE); buffer.duplicate() .put(entries.duplicate()) .putInt(checksum(entries)) @@ -155,12 +155,12 @@ public void testIncorrectEntryOrderingByLsb() throws Exception { @Test(expected = InvalidIndexException.class) public void testDuplicateEntry() throws Exception { - Buffer entries = Buffer.allocate(2 * IndexEntryV2.SIZE); + ByteBuffer entries = ByteBuffer.allocate(2 * IndexEntryV2.SIZE); entries.duplicate() .putLong(0).putLong(0).putInt(0).putInt(1).putInt(0).putInt(0).put((byte) 0) .putLong(0).putLong(0).putInt(1).putInt(1).putInt(0).putInt(0).put((byte) 0); - Buffer buffer = Buffer.allocate(2 * IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(2 * IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE); buffer.duplicate() .put(entries.duplicate()) .putInt(checksum(entries)) @@ -173,11 +173,11 @@ public void testDuplicateEntry() throws Exception { @Test(expected = InvalidIndexException.class) public void testInvalidEntryOffset() throws Exception { - Buffer entries = Buffer.allocate(IndexEntryV2.SIZE); + ByteBuffer entries = ByteBuffer.allocate(IndexEntryV2.SIZE); entries.duplicate() .putLong(0).putLong(0).putInt(-1).putInt(1).putInt(0).putInt(0).put((byte) 0); - Buffer buffer = Buffer.allocate(IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE); buffer.duplicate() .put(entries.duplicate()) .putInt(checksum(entries)) @@ -190,11 +190,11 @@ public void testInvalidEntryOffset() throws Exception { @Test(expected = InvalidIndexException.class) public void testInvalidEntryOffsetAlignment() throws Exception { - Buffer entries = Buffer.allocate(IndexEntryV2.SIZE); + ByteBuffer entries = ByteBuffer.allocate(IndexEntryV2.SIZE); entries.duplicate() .putLong(0).putLong(0).putInt(1).putInt(1).putInt(0).putInt(0).put((byte) 0); - Buffer index = Buffer.allocate(IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE); + ByteBuffer index = ByteBuffer.allocate(IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE); index.duplicate() .put(entries.duplicate()) .putInt(checksum(entries)) @@ -202,7 +202,7 @@ public void testInvalidEntryOffsetAlignment() throws Exception { .putInt(2 * (IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE)) .putInt(IndexLoaderV2.MAGIC); - Buffer buffer = Buffer.allocate(2 * (IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE)); + ByteBuffer buffer = ByteBuffer.allocate(2 * (IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE)); buffer.mark(); buffer.position(buffer.limit() - IndexEntryV2.SIZE - IndexV2.FOOTER_SIZE); buffer.put(index); @@ -213,11 +213,11 @@ public void testInvalidEntryOffsetAlignment() throws Exception { @Test(expected = InvalidIndexException.class) public void testInvalidEntrySize() throws Exception { - Buffer entries = Buffer.allocate(IndexEntryV2.SIZE); + ByteBuffer entries = ByteBuffer.allocate(IndexEntryV2.SIZE); entries.duplicate() .putLong(0).putLong(0).putInt(0).putInt(0).putInt(0).putInt(0).put((byte) 0); - Buffer buffer = Buffer.allocate(IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE); buffer.duplicate() .put(entries.duplicate()) .putInt(checksum(entries)) @@ -230,12 +230,12 @@ public void testInvalidEntrySize() throws Exception { @Test public void testLoadIndex() throws Exception { - Buffer entries = Buffer.allocate(2 * IndexEntryV2.SIZE); + ByteBuffer entries = ByteBuffer.allocate(2 * IndexEntryV2.SIZE); entries.duplicate() .putLong(0).putLong(0).putInt(0).putInt(1).putInt(0).putInt(0).put((byte) 0) .putLong(0).putLong(1).putInt(1).putInt(1).putInt(0).putInt(0).put((byte) 0); - Buffer buffer = Buffer.allocate(2 * IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE); + ByteBuffer buffer = ByteBuffer.allocate(2 * IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE); buffer.duplicate() .put(entries.duplicate()) .putInt(checksum(entries)) diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV1Test.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV1Test.java index ec0e0d2fdd8..530548f9c7e 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV1Test.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV1Test.java @@ -23,14 +23,14 @@ import java.util.Set; import java.util.UUID; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.junit.Test; public class IndexV1Test { @Test public void testGetUUIDs() throws Exception { - Buffer buffer = Buffer.allocate(2 * IndexEntryV1.SIZE); + ByteBuffer buffer = ByteBuffer.allocate(2 * IndexEntryV1.SIZE); buffer.duplicate() .putLong(1).putLong(2).putInt(3).putInt(4).putInt(5) .putLong(6).putLong(7).putInt(8).putInt(9).putInt(10); @@ -42,7 +42,7 @@ public void testGetUUIDs() throws Exception { @Test public void testFindEntry() throws Exception { - Buffer buffer = Buffer.allocate(4 * IndexEntryV1.SIZE); + ByteBuffer buffer = ByteBuffer.allocate(4 * IndexEntryV1.SIZE); buffer.duplicate() .putLong(1).putLong(1).putInt(0).putInt(0).putInt(0) .putLong(1).putLong(3).putInt(0).putInt(0).putInt(0) @@ -61,7 +61,7 @@ public void testFindEntry() throws Exception { @Test public void testSize() throws Exception { - Buffer buffer = Buffer.allocate(IndexEntryV1.SIZE); + ByteBuffer buffer = ByteBuffer.allocate(IndexEntryV1.SIZE); buffer.duplicate() .putLong(1).putLong(2).putInt(3).putInt(4).putInt(5); assertEquals(IndexEntryV1.SIZE + IndexV1.FOOTER_SIZE, new IndexV1(buffer).size()); @@ -69,7 +69,7 @@ public void testSize() throws Exception { @Test public void testCount() throws Exception { - Buffer buffer = Buffer.allocate(2 * IndexEntryV1.SIZE); + ByteBuffer buffer = ByteBuffer.allocate(2 * IndexEntryV1.SIZE); buffer.duplicate() .putLong(1).putLong(2).putInt(3).putInt(4).putInt(5) .putLong(6).putLong(7).putInt(8).putInt(9).putInt(10); @@ -78,7 +78,7 @@ public void testCount() throws Exception { @Test public void testEntry() throws Exception { - Buffer buffer = Buffer.allocate(IndexEntryV1.SIZE); + ByteBuffer buffer = ByteBuffer.allocate(IndexEntryV1.SIZE); buffer.duplicate() .putLong(1).putLong(2).putInt(3).putInt(4).putInt(5); IndexEntryV1 entry = new IndexV1(buffer).entry(0); diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV2Test.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV2Test.java index 369b50b5097..1dcdd910347 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV2Test.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV2Test.java @@ -23,14 +23,14 @@ import java.util.Set; import java.util.UUID; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.junit.Test; public class IndexV2Test { @Test public void testGetUUIDs() throws Exception { - Buffer buffer = Buffer.allocate(2 * IndexEntryV2.SIZE); + ByteBuffer buffer = ByteBuffer.allocate(2 * IndexEntryV2.SIZE); buffer.duplicate() .putLong(1).putLong(2).putInt(3).putInt(4).putInt(5).putInt(6).put((byte) 0) .putLong(7).putLong(8).putInt(9).putInt(10).putInt(11).putInt(12).put((byte) 1); @@ -42,7 +42,7 @@ public void testGetUUIDs() throws Exception { @Test public void testFindEntry() throws Exception { - Buffer buffer = Buffer.allocate(4 * IndexEntryV2.SIZE); + ByteBuffer buffer = ByteBuffer.allocate(4 * IndexEntryV2.SIZE); buffer.duplicate() .putLong(1).putLong(1).putInt(0).putInt(0).putInt(0).putInt(0).put((byte) 0) .putLong(1).putLong(3).putInt(0).putInt(0).putInt(0).putInt(0).put((byte) 0) @@ -61,7 +61,7 @@ public void testFindEntry() throws Exception { @Test public void testSize() throws Exception { - Buffer buffer = Buffer.allocate(IndexEntryV2.SIZE); + ByteBuffer buffer = ByteBuffer.allocate(IndexEntryV2.SIZE); buffer.duplicate() .putLong(1).putLong(2).putInt(3).putInt(4).putInt(5).putInt(6).put((byte) 0); assertEquals(IndexEntryV2.SIZE + IndexV2.FOOTER_SIZE, new IndexV2(buffer).size()); @@ -69,7 +69,7 @@ public void testSize() throws Exception { @Test public void testCount() throws Exception { - Buffer buffer = Buffer.allocate(2 * IndexEntryV2.SIZE); + ByteBuffer buffer = ByteBuffer.allocate(2 * IndexEntryV2.SIZE); buffer.duplicate() .putLong(1).putLong(2).putInt(3).putInt(4).putInt(5).putInt(6).put((byte) 0) .putLong(7).putLong(8).putInt(9).putInt(10).putInt(11).putInt(12).put((byte) 1); @@ -78,7 +78,7 @@ public void testCount() throws Exception { @Test public void testEntry() throws Exception { - Buffer buffer = Buffer.allocate(IndexEntryV2.SIZE); + ByteBuffer buffer = ByteBuffer.allocate(IndexEntryV2.SIZE); buffer.duplicate() .putLong(1).putLong(2).putInt(3).putInt(4).putInt(5).putInt(6).put((byte) 1); IndexEntryV2 entry = new IndexV2(buffer).entry(0); diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReaderTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReaderTest.java index feab41110d3..db239a7838f 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReaderTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/CachingSegmentArchiveReaderTest.java @@ -17,7 +17,7 @@ */ package org.apache.jackrabbit.oak.segment.spi.persistence.persistentcache; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.file.tar.SegmentTarManager; import org.apache.jackrabbit.oak.segment.spi.monitor.FileStoreMonitorAdapter; import org.apache.jackrabbit.oak.segment.spi.monitor.IOMonitorAdapter; @@ -74,10 +74,10 @@ public void containsSegmentDoesNotUsePersistentDiskCache() throws IOException { // Open the archives and read the segment. This will trigger caching of the segments. SegmentArchiveReader tar1 = cachingArchiveManager.open(archive1Name); - assertEquals(Buffer.wrap(data1), tar1.readSegment(msb1, lsb1)); + assertEquals(ByteBuffer.wrap(data1), tar1.readSegment(msb1, lsb1)); SegmentArchiveReader tar2 = cachingArchiveManager.open(archive2Name); - assertEquals(Buffer.wrap(data2), tar2.readSegment(msb2, lsb2)); + assertEquals(ByteBuffer.wrap(data2), tar2.readSegment(msb2, lsb2)); // Both segments are cached // Now check that each tar file only contains its own segment, that is, when searching for a segment that is diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/MemoryPersistentCache.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/MemoryPersistentCache.java index db0135f476b..ee3d8aabe3c 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/MemoryPersistentCache.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/MemoryPersistentCache.java @@ -17,7 +17,7 @@ */ package org.apache.jackrabbit.oak.segment.spi.persistence.persistentcache; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.spi.RepositoryNotReachableException; import org.jetbrains.annotations.NotNull; @@ -27,7 +27,7 @@ class MemoryPersistentCache extends AbstractPersistentCache { - private final Map segments = new ConcurrentHashMap<>(); + private final Map segments = new ConcurrentHashMap<>(); private boolean throwException = false; @@ -43,7 +43,7 @@ public MemoryPersistentCache(boolean throwException) { } @Override - protected Buffer readSegmentInternal(long msb, long lsb) { + protected ByteBuffer readSegmentInternal(long msb, long lsb) { return segments.get(String.valueOf(msb) + lsb); } @@ -53,12 +53,12 @@ public boolean containsSegment(long msb, long lsb) { } @Override - public void writeSegment(long msb, long lsb, Buffer buffer) { + public void writeSegment(long msb, long lsb, ByteBuffer buffer) { segments.put(String.valueOf(msb) + lsb, buffer); } @Override - public Buffer readSegment(long msb, long lsb, @NotNull Callable loader) throws RepositoryNotReachableException { + public ByteBuffer readSegment(long msb, long lsb, @NotNull Callable loader) throws RepositoryNotReachableException { return super.readSegment(msb, lsb, () -> { if (throwException) { throw new RepositoryNotReachableException(null); diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/PersistentCacheStatsTest.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/PersistentCacheStatsTest.java index 7aa5bcedd9d..b5b33b95976 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/PersistentCacheStatsTest.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/spi/persistence/persistentcache/PersistentCacheStatsTest.java @@ -17,7 +17,7 @@ */ package org.apache.jackrabbit.oak.segment.spi.persistence.persistentcache; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -35,10 +35,10 @@ public class PersistentCacheStatsTest { public void testCacheStats() { AbstractPersistentCache cache = new PersistentCacheImpl(); - cache.writeSegment(1, 1, Buffer.wrap(new byte[]{1})); + cache.writeSegment(1, 1, ByteBuffer.wrap(new byte[]{1})); //segment in cache - Buffer segment = cache.readSegment(1, 1, () -> null); + ByteBuffer segment = cache.readSegment(1, 1, () -> null); assertNotNull(segment); assertEquals(1, cache.getCacheStats().getHitCount()); @@ -47,7 +47,7 @@ public void testCacheStats() { //segment not in cache but loaded from remote store - segment = cache.readSegment(0, 0, () -> Buffer.wrap(new byte[]{0})); + segment = cache.readSegment(0, 0, () -> ByteBuffer.wrap(new byte[]{0})); assertNotNull(segment); assertEquals(1, cache.getCacheStats().getMissCount()); loadTime = cache.getCacheStats().getTotalLoadTime(); @@ -74,7 +74,7 @@ public void testCacheStatsForLinkedCaches() { cache1.linkWith(cache2); //segment not in either cache - Buffer segment = cache1.readSegment(0 ,0, () -> null); + ByteBuffer segment = cache1.readSegment(0 ,0, () -> null); assertNull(segment); assertEquals(1, cache1.getCacheStats().getMissCount()); @@ -87,7 +87,7 @@ public void testCacheStatsForLinkedCaches() { assertEquals(0, cache2.segmentCacheStats.getLoadExceptionCount()); //segment in first cache - cache1.writeSegment(1, 1, Buffer.wrap(new byte[]{1})); + cache1.writeSegment(1, 1, ByteBuffer.wrap(new byte[]{1})); segment = cache1.readSegment(1 ,1, () -> null); assertNotNull(segment); @@ -101,7 +101,7 @@ public void testCacheStatsForLinkedCaches() { assertEquals(0, cache2.segmentCacheStats.getLoadExceptionCount()); //segment in second cache - cache2.writeSegment(2, 2, Buffer.wrap(new byte[]{2})); + cache2.writeSegment(2, 2, ByteBuffer.wrap(new byte[]{2})); segment = cache1.readSegment(2 ,2, () -> null); assertNotNull(segment); @@ -115,7 +115,7 @@ public void testCacheStatsForLinkedCaches() { assertEquals(0, cache2.segmentCacheStats.getLoadExceptionCount()); //segment loaded from the remote storage - segment = cache1.readSegment(3 ,3, () -> Buffer.wrap(new byte[]{3})); + segment = cache1.readSegment(3 ,3, () -> ByteBuffer.wrap(new byte[]{3})); assertNotNull(segment); assertEquals(3, cache1.getCacheStats().getMissCount()); @@ -145,12 +145,12 @@ public void testCacheStatsForLinkedCaches() { //linked cache throws exception cache2 = new PersistentCacheImpl(){ @Override - protected Buffer readSegmentInternal(long msb, long lsb) { + protected ByteBuffer readSegmentInternal(long msb, long lsb) { throw new RuntimeException(); } }; cache1.linkWith(cache2); - segment = cache1.readSegment(5 ,5, () -> Buffer.wrap(new byte[]{5})); + segment = cache1.readSegment(5 ,5, () -> ByteBuffer.wrap(new byte[]{5})); assertNull(segment); assertEquals(5, cache1.getCacheStats().getMissCount()); @@ -167,7 +167,7 @@ protected Buffer readSegmentInternal(long msb, long lsb) { } class PersistentCacheImpl extends AbstractPersistentCache { - HashMap segments = new HashMap<>(); + HashMap segments = new HashMap<>(); public PersistentCacheImpl() { segmentCacheStats = new SegmentCacheStats("stats", () -> maximumWeight, () -> elementCount.get(), () -> currentWeight.get(), () -> evictionCount.get(), () -> 0L); @@ -188,7 +188,7 @@ public boolean containsSegment(long msb, long lsb) { } @Override - public void writeSegment(long msb, long lsb, Buffer buffer) { + public void writeSegment(long msb, long lsb, ByteBuffer buffer) { segments.put(new UUID(msb, lsb), buffer); } @@ -198,7 +198,7 @@ public void cleanUp() { } @Override - protected Buffer readSegmentInternal(long msb, long lsb) { + protected ByteBuffer readSegmentInternal(long msb, long lsb) { return segments.get(new UUID(msb, lsb)); } } diff --git a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestUtils.java b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestUtils.java index 7e658dd2b7e..efb213089ee 100644 --- a/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestUtils.java +++ b/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/standby/StandbyTestUtils.java @@ -26,7 +26,7 @@ import io.netty.buffer.Unpooled; import org.apache.commons.codec.digest.MurmurHash3; -import org.apache.jackrabbit.oak.commons.Buffer; +import java.nio.ByteBuffer; import org.apache.jackrabbit.oak.segment.RecordId; import org.apache.jackrabbit.oak.segment.Segment; import org.apache.jackrabbit.oak.segment.SegmentId; @@ -50,7 +50,7 @@ public static Segment mockSegment(UUID uuid, byte[] buffer) { long msb = uuid.getMostSignificantBits(); long lsb = uuid.getLeastSignificantBits(); SegmentId id = new SegmentId(store, msb, lsb); - Buffer data = Buffer.wrap(buffer); + ByteBuffer data = ByteBuffer.wrap(buffer); return new Segment(idProvider, id, data); } diff --git a/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/PersistingDiff.java b/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/PersistingDiff.java index 32aaf4f928d..8504044df0d 100644 --- a/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/PersistingDiff.java +++ b/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/PersistingDiff.java @@ -20,12 +20,12 @@ import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE; import java.io.IOException; +import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; import java.util.function.Supplier; import org.apache.jackrabbit.oak.api.PropertyState; -import org.apache.jackrabbit.oak.commons.Buffer; import org.apache.jackrabbit.oak.commons.collections.ListUtils; import org.apache.jackrabbit.oak.commons.conditions.Validate; import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeBuilder; @@ -215,7 +215,7 @@ public boolean childNodeDeleted(String name, NodeState before) { } @Nullable - private static Buffer getStableIdBytes(NodeState state) { + private static ByteBuffer getStableIdBytes(NodeState state) { if (state instanceof SegmentNodeState) { return ((SegmentNodeState) state).getStableIdBytes(); } else { From 365961c9506c8a79f2f70a0e8d0634c1cb0eb970 Mon Sep 17 00:00:00 2001 From: Lucas Weitzendorf Date: Wed, 4 Nov 2026 19:17:31 +0100 Subject: [PATCH 2/2] OAK-12486: Update Java version in AGENTS.md --- AGENTS.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 10f930801a0..d166540e8bd 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -4,7 +4,8 @@ Apache Jackrabbit Oak is a scalable, high-performance hierarchical content repository implementing the JCR (Java Content Repository) specification. It is a multi-module Maven -project with ~47 modules written in Java 11. +project with ~47 modules written in Java 17 (minimum build/runtime version; `oak-jackrabbit-api` +still compiles with release 11). ## General Guidelines @@ -248,7 +249,7 @@ via the Apache RAT plugin. Use this exact header: ## CI -- **GitHub Actions:** Runs on PRs and pushes to trunk. Builds with Java 11, runs full +- **GitHub Actions:** Runs on PRs and pushes to trunk. Builds with Java 17, runs full test suite with `SEGMENT_TAR` and `DOCUMENT_NS` fixtures. - **Jenkins:** Parallel module testing pipeline. - **SonarCloud:** Code quality analysis runs after build.