use of org.apache.jackrabbit.core.data.FileDataStore in project jackrabbit-oak by apache.
the class LengthCachingDataStoreTest method writeBackNewEntries.
@Test
public void writeBackNewEntries() throws Exception {
//1. Add some entries to FDS
FileDataStore fds1 = new FileDataStore();
File fds1Dir = tempFolder.newFolder();
int minSize = fds1.getMinRecordLength();
fds1.init(fds1Dir.getAbsolutePath());
DataRecord dr1 = fds1.addRecord(byteStream(minSize + 10));
DataRecord dr2 = fds1.addRecord(byteStream(minSize + 100));
//2. Try reading them so as to populate the new mappings
LengthCachingDataStore fds2 = new LengthCachingDataStore();
fds2.setDelegateClass(FileDataStore.class.getName());
fds2.init(fds1Dir.getAbsolutePath());
fds2.getRecord(new DataIdentifier(dr1.getIdentifier().toString()));
fds2.getRecord(new DataIdentifier(dr2.getIdentifier().toString()));
File mappingFile = fds2.getMappingFile();
//3. Get the mappings pushed to file
fds2.close();
//4. Open a new FDS pointing to new directory. Read should still work fine
//as they would be served by the mapping data
LengthCachingDataStore fds3 = new LengthCachingDataStore();
fds3.setDelegateClass(FileDataStore.class.getName());
fds3.setMappingFilePath(mappingFile.getAbsolutePath());
fds3.init(tempFolder.newFolder().getAbsolutePath());
fds3.setReadOnly(false);
assertEquals(dr1.getLength(), fds3.getRecord(dr1.getIdentifier()).getLength());
assertEquals(dr2.getLength(), fds3.getRecord(dr2.getIdentifier()).getLength());
DataRecord dr3 = fds3.addRecord(byteStream(minSize + 200));
//5. Close again so see if update of existing file works
fds3.close();
LengthCachingDataStore fds4 = new LengthCachingDataStore();
fds4.setDelegateClass(FileDataStore.class.getName());
fds4.setMappingFilePath(mappingFile.getAbsolutePath());
fds4.init(tempFolder.newFolder().getAbsolutePath());
assertEquals(dr3.getLength(), fds4.getRecord(dr3.getIdentifier()).getLength());
assertEquals(dr2.getLength(), fds4.getRecord(dr2.getIdentifier()).getLength());
}
use of org.apache.jackrabbit.core.data.FileDataStore in project jackrabbit-oak by apache.
the class TemporaryBlobStore method before.
@Override
protected void before() throws Throwable {
FileDataStore fds = new FileDataStore();
fds.setMinRecordLength(4092);
fds.init(folder.newFolder().getAbsolutePath());
store = new DataStoreBlobStore(fds);
}
use of org.apache.jackrabbit.core.data.FileDataStore in project jackrabbit-oak by apache.
the class ExternalBlobIT method testDataStoreBlob.
@Test
public void testDataStoreBlob() throws Exception {
FileDataStore fds = createFileDataStore();
DataStoreBlobStore dbs = new DataStoreBlobStore(fds);
nodeStore = getNodeStore(dbs);
//Test for Blob which get inlined
Blob b1 = testCreateAndRead(createBlob(fds.getMinRecordLength() - 2));
assertTrue(b1 instanceof SegmentBlob);
assertNull(((SegmentBlob) b1).getBlobId());
//Test for Blob which need to be pushed to BlobStore
byte[] data2 = new byte[Segment.MEDIUM_LIMIT + 1];
new Random().nextBytes(data2);
Blob b2 = testCreateAndRead(nodeStore.createBlob(new ByteArrayInputStream(data2)));
assertTrue(b2 instanceof SegmentBlob);
assertNotNull(b2.getReference());
assertEquals(b2.getContentIdentity(), ((SegmentBlob) b2).getBlobId());
InputStream is = dbs.getInputStream(((SegmentBlob) b2).getBlobId());
assertNotNull(IOUtils.contentEquals(new ByteArrayInputStream(data2), is));
is.close();
}
use of org.apache.jackrabbit.core.data.FileDataStore in project jackrabbit-oak by apache.
the class ExternalBlobIT method testSize.
@Test
public void testSize() throws Exception {
FileDataStore fds = createFileDataStore();
DataStoreBlobStore dbs = new DataStoreBlobStore(fds);
nodeStore = getNodeStore(dbs);
int size = Segment.MEDIUM_LIMIT + 1;
byte[] data2 = new byte[size];
new Random().nextBytes(data2);
Blob b = nodeStore.createBlob(new ByteArrayInputStream(data2));
NodeBuilder builder = nodeStore.getRoot().builder();
builder.child("hello").setProperty("world", b);
nodeStore.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
PropertyState ps = nodeStore.getRoot().getChildNode("hello").getProperty("world");
// world = {2318851547697882338 bytes}
assertEquals(size, ps.size());
// assertEquals("{" + size + " bytes}", ps.toString());
}
use of org.apache.jackrabbit.core.data.FileDataStore in project jackrabbit-oak by apache.
the class ExternalBlobIT method testNullBlobId.
@Test
public void testNullBlobId() throws Exception {
FileDataStore fds = createFileDataStore();
DataStoreBlobStore dbs = new DataStoreBlobStore(fds);
nodeStore = getNodeStore(dbs);
NodeBuilder nb = nodeStore.getRoot().builder();
NodeBuilder cb = nb.child("hello");
cb.setProperty("blob1", createBlob(Segment.MEDIUM_LIMIT - 1));
int noOfBlobs = 4000;
for (int i = 0; i < noOfBlobs; i++) {
cb.setProperty("blob" + i, createBlob(Segment.MEDIUM_LIMIT + 1));
}
cb.setProperty("anotherBlob2", createBlob(Segment.MEDIUM_LIMIT + 1));
cb.setProperty("anotherBlob3", createBlob(Segment.MEDIUM_LIMIT + 1));
nodeStore.merge(nb, EmptyHook.INSTANCE, CommitInfo.EMPTY);
final List<String> refrences = Lists.newArrayList();
store.collectBlobReferences(new ReferenceCollector() {
@Override
public void addReference(String reference, String nodeId) {
assertNotNull(reference);
refrences.add(reference);
}
});
assertEquals(noOfBlobs + 2, refrences.size());
}
Aggregations