Skip to content

Commit 509e49c

Browse files
authored
Merge pull request #28 from scalableminds/multiplekeys-report-versions
in getMultipleKeys reply, also return actualVersions
2 parents 8c50a96 + 8ae66db commit 509e49c

File tree

4 files changed

+10
-4
lines changed

4 files changed

+10
-4
lines changed

src/main/protobuf/fossildbapi.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ message GetMultipleKeysReply {
7272
optional string errorMessage = 2;
7373
repeated string keys = 3;
7474
repeated bytes values = 4;
75+
repeated uint64 actualVersions = 5;
7576
}
7677

7778
message DeleteMultipleVersionsRequest {

src/main/scala/com/scalableminds/fossildb/FossilDBGrpcImpl.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ class FossilDBGrpcImpl(storeManager: StoreManager)
5555

5656
override def getMultipleKeys(req: GetMultipleKeysRequest) = withExceptionHandler(req) {
5757
val store = storeManager.getStore(req.collection)
58-
val (keys, values) = store.getMultipleKeys(req.key, req.prefix, req.version, req.limit)
59-
GetMultipleKeysReply(true, None, keys, values.map(ByteString.copyFrom(_)))
58+
val (keys, values, versions) = store.getMultipleKeys(req.key, req.prefix, req.version, req.limit)
59+
GetMultipleKeysReply(true, None, keys, values.map(ByteString.copyFrom(_)), versions)
6060
} {errorMsg => GetMultipleKeysReply(false, errorMsg)}
6161

6262
override def deleteMultipleVersions(req: DeleteMultipleVersionsRequest) = withExceptionHandler(req) {

src/main/scala/com/scalableminds/fossildb/db/VersionedKeyValueStore.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,15 @@ class VersionedKeyValueStore(underlying: RocksDBStore) {
112112
}
113113
}
114114

115-
def getMultipleKeys(key: String, prefix: Option[String] = None, version: Option[Long] = None, limit: Option[Int]): (Seq[String], Seq[Array[Byte]]) = {
115+
def getMultipleKeys(key: String, prefix: Option[String] = None, version: Option[Long] = None, limit: Option[Int]): (Seq[String], Seq[Array[Byte]], Seq[Long]) = {
116116
requireValidKey(key)
117117
prefix.map{p => requireValidKey(p)}
118118
val iterator: Iterator[VersionedKeyValuePair[Array[Byte]]] = scanKeys(key, prefix, version)
119119
val asSequence = iterator.take(limit.getOrElse(Int.MaxValue)).toSeq
120120
val keys = asSequence.map(_.key)
121121
val values = asSequence.map(_.value)
122-
(keys, values)
122+
val versions = asSequence.map(_.version)
123+
(keys, values, versions)
123124
}
124125

125126
private def scanKeys(key: String, prefix: Option[String] = None, version: Option[Long] = None): Iterator[VersionedKeyValuePair[Array[Byte]]] =

src/test/scala/com/scalableminds/fossildb/FossilDBSuite.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,8 @@ class FossilDBSuite extends FlatSpec with BeforeAndAfterEach with TestHelpers {
206206
assert(reply.values.length == 2)
207207
assert(reply.values.contains(testData2))
208208
assert(reply.values.contains(testData3))
209+
assert(reply.actualVersions.length == 2)
210+
assert(reply.actualVersions.contains(0))
209211
}
210212

211213
it should "return keys of matching version (sorted alphabetically)" in {
@@ -236,6 +238,7 @@ class FossilDBSuite extends FlatSpec with BeforeAndAfterEach with TestHelpers {
236238
val reply = client.getMultipleKeys(GetMultipleKeysRequest(collectionA, aKey, Some("aK"), Some(1)))
237239
assert(reply.keys.length == 1)
238240
assert(reply.values.contains(testData2))
241+
assert(reply.actualVersions.contains(1))
239242
}
240243

241244
it should "with limit return only the first n keys of matching version " in {
@@ -251,6 +254,7 @@ class FossilDBSuite extends FlatSpec with BeforeAndAfterEach with TestHelpers {
251254
val reply = client.getMultipleKeys(GetMultipleKeysRequest(collectionA, aKey, None, Some(1), Some(2)))
252255
assert(reply.keys.length == 2)
253256
assert(reply.values.contains(testData2))
257+
assert(reply.actualVersions.contains(1))
254258
}
255259

256260
"Backup" should "create non-empty backup directory" in {

0 commit comments

Comments
 (0)