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. 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 {