From cac1f9813cfd28eacd968aded89148ec6164e90f Mon Sep 17 00:00:00 2001 From: verboomp Date: Wed, 1 Feb 2017 09:05:27 +0100 Subject: [PATCH] MODE-2663 Added sorting to chunks in MongodbBinaryStore --- .../jcr/value/binary/MongodbBinaryStore.java | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/modeshape-jcr/src/main/java/org/modeshape/jcr/value/binary/MongodbBinaryStore.java b/modeshape-jcr/src/main/java/org/modeshape/jcr/value/binary/MongodbBinaryStore.java index e745425..4dd402d 100644 --- a/modeshape-jcr/src/main/java/org/modeshape/jcr/value/binary/MongodbBinaryStore.java +++ b/modeshape-jcr/src/main/java/org/modeshape/jcr/value/binary/MongodbBinaryStore.java @@ -59,6 +59,7 @@ public class MongodbBinaryStore extends AbstractBinaryStore { private static final String FIELD_UNUSED = "unused"; private static final String FIELD_CHUNK_SIZE = "chunk-size"; private static final String FIELD_CHUNK_BUFFER = "chunk-buffer"; + private static final String FIELD_CHUNK_ORDER = "chunk-order"; // chunk types private static final String CHUNK_TYPE_HEADER = "header"; @@ -67,6 +68,7 @@ public class MongodbBinaryStore extends AbstractBinaryStore { // keys for chunks(header or data) protected static final BasicDBObject HEADER = new BasicDBObject().append(FIELD_CHUNK_TYPE, CHUNK_TYPE_HEADER); protected static final BasicDBObject DATA_CHUNK = new BasicDBObject().append(FIELD_CHUNK_TYPE, CHUNK_TYPE_DATA_CHUNK); + protected static final BasicDBObject DATA_CHUNK_SORT = new BasicDBObject().append(FIELD_CHUNK_ORDER, 1); private FileSystemBinaryStore cache; @@ -403,6 +405,8 @@ public class MongodbBinaryStore extends AbstractBinaryStore { private byte[] buffer = new byte[chunkSize]; // current position in the local buffer private int offset; + + private int chunkOrder; // object for writting chunks into storage private BasicDBObject chunk = new BasicDBObject(); @@ -467,12 +471,14 @@ public class MongodbBinaryStore extends AbstractBinaryStore { chunk.put(FIELD_CHUNK_TYPE, CHUNK_TYPE_DATA_CHUNK); chunk.put(FIELD_CHUNK_SIZE, offset); chunk.put(FIELD_CHUNK_BUFFER, buffer); + chunk.put(FIELD_CHUNK_ORDER, chunkOrder); // store chink content.insert(chunk); // reset (weird thing is that we can't use mutable objects here) offset = 0; + chunkOrder++; chunk = new BasicDBObject(); } } @@ -496,7 +502,7 @@ public class MongodbBinaryStore extends AbstractBinaryStore { public ChunkInputStream( DBCollection chunks ) { // execute query for selecting data chunks only - cursor = chunks.find(DATA_CHUNK); + cursor = chunks.find(DATA_CHUNK).sort( DATA_CHUNK_SORT); } @Override -- 1.7.8.msysgit.0