use of org.apache.jackrabbit.oak.segment.Segment in project jackrabbit-oak by apache.
the class DefaultStandbySegmentReader method readSegment.
@Override
public byte[] readSegment(String id) {
UUID uuid = UUID.fromString(id);
long msb = uuid.getMostSignificantBits();
long lsb = uuid.getLeastSignificantBits();
SegmentId segmentId = store.getSegmentIdProvider().newSegmentId(msb, lsb);
if (store.containsSegment(segmentId)) {
Segment segment = store.readSegment(segmentId);
try (ByteArrayOutputStream stream = new ByteArrayOutputStream()) {
segment.writeTo(stream);
return stream.toByteArray();
} catch (IOException e) {
log.warn("Error while reading segment content", e);
return null;
}
}
return null;
}
use of org.apache.jackrabbit.oak.segment.Segment in project jackrabbit-oak by apache.
the class AbstractFileStore method writeSegment.
private void writeSegment(UUID id, byte[] data, EntryRecovery w) throws IOException {
long msb = id.getMostSignificantBits();
long lsb = id.getLeastSignificantBits();
ByteBuffer buffer = ByteBuffer.wrap(data);
GCGeneration generation = SegmentId.isDataSegmentId(lsb) ? Segment.getGcGeneration(newSegmentData(buffer), id) : GCGeneration.NULL;
w.recoverEntry(msb, lsb, data, 0, data.length, generation);
if (SegmentId.isDataSegmentId(lsb)) {
Segment segment = new Segment(tracker, segmentReader, tracker.newSegmentId(msb, lsb), buffer);
populateTarGraph(segment, w);
populateTarBinaryReferences(segment, w);
}
}
use of org.apache.jackrabbit.oak.segment.Segment 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