use of org.apache.jackrabbit.oak.segment.file.tar.GCGeneration in project jackrabbit-oak by apache.
the class FileStore method writeSegment.
@Override
public void writeSegment(SegmentId id, byte[] buffer, int offset, int length) throws IOException {
try (ShutDownCloser ignored = shutDown.keepAlive()) {
Segment segment = null;
// If the segment is a data segment, create a new instance of Segment to
// access some internal information stored in the segment and to store
// in an in-memory cache for later use.
GCGeneration generation = GCGeneration.NULL;
Set<UUID> references = null;
Set<String> binaryReferences = null;
if (id.isDataSegmentId()) {
ByteBuffer data;
if (offset > 4096) {
data = ByteBuffer.allocate(length);
data.put(buffer, offset, length);
data.rewind();
} else {
data = ByteBuffer.wrap(buffer, offset, length);
}
segment = new Segment(tracker, segmentReader, id, data);
generation = segment.getGcGeneration();
references = readReferences(segment);
binaryReferences = readBinaryReferences(segment);
}
tarFiles.writeSegment(id.asUUID(), buffer, offset, length, generation, references, binaryReferences);
// Keep this data segment in memory as it's likely to be accessed soon.
if (segment != null) {
segmentCache.putSegment(segment);
}
}
}
Aggregations