From ca3538df8efc2d4bbb5cf516236ba2865a0d43a1 Mon Sep 17 00:00:00 2001 From: David Greco Date: Mon, 20 Sep 2010 10:27:42 +0200 Subject: [PATCH] Implemented the start and finish semantic in the getMapStorageRangeFor method --- .../src/main/scala/HbaseStorageBackend.scala | 10 ++++++++-- .../src/test/scala/HbaseStorageSpec.scala | 8 ++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/akka-persistence/akka-persistence-hbase/src/main/scala/HbaseStorageBackend.scala b/akka-persistence/akka-persistence-hbase/src/main/scala/HbaseStorageBackend.scala index e61ff24537..24a15eceaf 100644 --- a/akka-persistence/akka-persistence-hbase/src/main/scala/HbaseStorageBackend.scala +++ b/akka-persistence/akka-persistence-hbase/src/main/scala/HbaseStorageBackend.scala @@ -233,9 +233,15 @@ private[akka] object HbaseStorageBackend extends MapStorageBackend[Array[Byte], def getMapStorageRangeFor(name: String, start: Option[Array[Byte]], finish: Option[Array[Byte]], count: Int): List[Tuple2[Array[Byte], Array[Byte]]] = { val row = new Get(Bytes.toBytes(name)) val result = MAP_TABLE.get(row) - val iterator = result.getFamilyMap(Bytes.toBytes(MAP_ELEMENT_COLUMN_FAMILY_NAME)).entrySet.iterator + val map = result.getFamilyMap(Bytes.toBytes(MAP_ELEMENT_COLUMN_FAMILY_NAME)) + + val startBytes = if (start.isDefined) start.get else map.firstEntry.getKey + val finishBytes = if (finish.isDefined) finish.get else map.lastEntry.getKey + val submap = map.subMap(startBytes, true, finishBytes, true) + + val iterator = submap.entrySet.iterator val listBuffer = new ListBuffer[Tuple2[Array[Byte], Array[Byte]]] - val size = result.size + val size = submap.size val cnt = if(count > size) size else count var i: Int = 0 diff --git a/akka-persistence/akka-persistence-hbase/src/test/scala/HbaseStorageSpec.scala b/akka-persistence/akka-persistence-hbase/src/test/scala/HbaseStorageSpec.scala index c7613e1b5f..2b9d017444 100644 --- a/akka-persistence/akka-persistence-hbase/src/test/scala/HbaseStorageSpec.scala +++ b/akka-persistence/akka-persistence-hbase/src/test/scala/HbaseStorageSpec.scala @@ -81,9 +81,17 @@ BeforeAndAfterEach { ("larry wall", "perl"), ("guido van rossum", "python"), ("james strachan", "groovy")) + val rl = List( + ("james gosling", "java"), + ("james strachan", "groovy"), + ("larry wall", "perl"), + ("martin odersky", "scala"), + ("ola bini", "ioke"), ("rich hickey", "clojure"), + ("slava pestov", "factor")) insertMapStorageEntriesFor("t1", l.map { case (k, v) => (k.getBytes, v.getBytes) }) getMapStorageSizeFor("t1") should equal(l.size) getMapStorageRangeFor("t1", None, None, 100).map { case (k, v) => (new String(k), new String(v)) } should equal(l.sortWith(_._1 < _._1)) + getMapStorageRangeFor("t1", Option("james gosling".getBytes), Option("slava pestov".getBytes), 100).map { case (k, v) => (new String(k), new String(v)) } should equal(rl.sortWith(_._1 < _._1)) getMapStorageRangeFor("t1", None, None, 5).map { case (k, v) => (new String(k), new String(v)) }.size should equal(5) }