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