diff --git a/akka-persistence/akka-persistence-common/src/main/scala/KVStorageBackend.scala b/akka-persistence/akka-persistence-common/src/main/scala/KVStorageBackend.scala index 25e0f9ee81..4b26bfb27a 100644 --- a/akka-persistence/akka-persistence-common/src/main/scala/KVStorageBackend.scala +++ b/akka-persistence/akka-persistence-common/src/main/scala/KVStorageBackend.scala @@ -253,9 +253,6 @@ private[akka] trait KVStorageBackend extends MapStorageBackend[Array[Byte], Arra } } - - override def supportsRemoveVectorStorageEntry = true - def getVectorMetadata(name: String): VectorMetadata = { val keys = List(getKey(name, vectorHeadIndex), getKey(name, vectorTailIndex)) val vdata = vectorAccess.getAll(keys) diff --git a/akka-persistence/akka-persistence-common/src/main/scala/Storage.scala b/akka-persistence/akka-persistence-common/src/main/scala/Storage.scala index 76bacde546..3e3efe0fb9 100644 --- a/akka-persistence/akka-persistence-common/src/main/scala/Storage.scala +++ b/akka-persistence/akka-persistence-common/src/main/scala/Storage.scala @@ -516,14 +516,10 @@ trait PersistentVector[T] extends IndexedSeq[T] with Transactional with Committa * Removes the tail element of this vector. */ def pop: T = { - if(storage.supportsRemoveVectorStorageEntry){ register val curr = replay appendOnlyTxLog + LogEntry(None, None, POP) curr.last - } else { - throw new UnsupportedOperationException("Vector pop is not supported by the current backend") - } } def update(index: Int, newElem: T) = { diff --git a/akka-persistence/akka-persistence-common/src/main/scala/StorageBackend.scala b/akka-persistence/akka-persistence-common/src/main/scala/StorageBackend.scala index 0f1764774a..4843fcb36a 100644 --- a/akka-persistence/akka-persistence-common/src/main/scala/StorageBackend.scala +++ b/akka-persistence/akka-persistence-common/src/main/scala/StorageBackend.scala @@ -31,7 +31,6 @@ trait VectorStorageBackend[T] extends StorageBackend { //should remove the "tail" if supported throw new UnsupportedOperationException("VectorStorageBackend.removeVectorStorageEntry is not supported") } - def supportsRemoveVectorStorageEntry:Boolean = false //Allows the Vector frontend to fail on calls to pop, instead of at commit time } // for Ref diff --git a/akka-persistence/akka-persistence-common/src/test/scala/Ticket343Test.scala b/akka-persistence/akka-persistence-common/src/test/scala/Ticket343Test.scala index 5ccf4ef558..b782875749 100644 --- a/akka-persistence/akka-persistence-common/src/test/scala/Ticket343Test.scala +++ b/akka-persistence/akka-persistence-common/src/test/scala/Ticket343Test.scala @@ -42,7 +42,6 @@ case class VADD_WITH_SLICE(vsToAdd: List[String], start: Int, cnt: Int) object StorageObj { var getMap: String => PersistentMap[Array[Byte], Array[Byte]] = _ var getVector: String => PersistentVector[Array[Byte]] = _ - var supportsRemove:Boolean = false class SampleMapStorage extends Actor { self.lifeCycle = Permanent @@ -198,14 +197,11 @@ Spec with def getVector: String => PersistentVector[Array[Byte]] - def supportsVectorRemove: Boolean - def dropMapsAndVectors: Unit override def beforeEach { StorageObj.getMap = getMap StorageObj.getVector = getVector - StorageObj.supportsRemove = supportsVectorRemove dropMapsAndVectors println("** dropMapsAndVectors") } @@ -310,19 +306,13 @@ Spec with proc.start // add 4 elements in separate transactions //also test add + pop of a 5th element - if(StorageObj.supportsRemove){ - (proc !! VADD("ticktock")).getOrElse("VADD failed") should equal(1) - (proc !! VADD("debasish")).getOrElse("VADD failed") should equal(2) - (proc !! VADD("maulindu")).getOrElse("VADD failed") should equal(3) - (proc !! VADD("ramanendu")).getOrElse("VADD failed") should equal(4) - (proc !! VADD("nilanjan")).getOrElse("VADD failed") should equal(5) - (proc !! VPOP).getOrElse("VPOP failed") should equal("ticktock".getBytes) - } else { - (proc !! VADD("debasish")).getOrElse("VADD failed") should equal(1) - (proc !! VADD("maulindu")).getOrElse("VADD failed") should equal(2) - (proc !! VADD("ramanendu")).getOrElse("VADD failed") should equal(3) - (proc !! VADD("nilanjan")).getOrElse("VADD failed") should equal(4) - } + + (proc !! VADD("ticktock")).getOrElse("VADD failed") should equal(1) + (proc !! VADD("debasish")).getOrElse("VADD failed") should equal(2) + (proc !! VADD("maulindu")).getOrElse("VADD failed") should equal(3) + (proc !! VADD("ramanendu")).getOrElse("VADD failed") should equal(4) + (proc !! VADD("nilanjan")).getOrElse("VADD failed") should equal(5) + (proc !! VPOP).getOrElse("VPOP failed") should equal("ticktock".getBytes) new String((proc !! VGET(0)).get.asInstanceOf[Array[Byte]]) should equal("nilanjan") new String((proc !! VGET(1)).get.asInstanceOf[Array[Byte]]) should equal("ramanendu") diff --git a/akka-persistence/akka-persistence-common/src/test/scala/VectorStorageBackendTest.scala b/akka-persistence/akka-persistence-common/src/test/scala/VectorStorageBackendTest.scala index f31fc9a8f0..daa1297664 100644 --- a/akka-persistence/akka-persistence-common/src/test/scala/VectorStorageBackendTest.scala +++ b/akka-persistence/akka-persistence-common/src/test/scala/VectorStorageBackendTest.scala @@ -120,38 +120,34 @@ trait VectorStorageBackendTest extends Spec with ShouldMatchers with BeforeAndAf it("should support remove properly") { - if (storage.supportsRemoveVectorStorageEntry) { - val vector = "removeTest" - val rand = new Random(3).nextInt(100) - val values = (0 to rand).toList.map{ - i: Int => vector + "value" + i - } - storage.insertVectorStorageEntriesFor(vector, values.map{ - s: String => s.getBytes - }) - storage.getVectorStorageSizeFor(vector) should be(values.size) - (1 to rand).foreach{ - i: Int => { - storage.removeVectorStorageEntryFor(vector) - values.reverse.dropRight(i) should be(storage.getVectorStorageRangeFor(vector, None, None, rand + 1 - i).map{ - b: Array[Byte] => new String(b) - }) - } - - } - storage.removeVectorStorageEntryFor(vector) - storage.getVectorStorageSizeFor(vector) should be(0) - storage.insertVectorStorageEntriesFor(vector, values.map{ - s: String => s.getBytes - }) - storage.getVectorStorageSizeFor(vector) should be(values.size) - values.foreach{ - s => storage.removeVectorStorageEntryFor(vector) - } - storage.getVectorStorageSizeFor(vector) should be(0) - } else { - log.warn("The current backend being tested does not support removeVectorStorageEntryFor") + val vector = "removeTest" + val rand = new Random(3).nextInt(100) + val values = (0 to rand).toList.map{ + i: Int => vector + "value" + i } + storage.insertVectorStorageEntriesFor(vector, values.map{ + s: String => s.getBytes + }) + storage.getVectorStorageSizeFor(vector) should be(values.size) + (1 to rand).foreach{ + i: Int => { + storage.removeVectorStorageEntryFor(vector) + values.reverse.dropRight(i) should be(storage.getVectorStorageRangeFor(vector, None, None, rand + 1 - i).map{ + b: Array[Byte] => new String(b) + }) + } + + } + storage.removeVectorStorageEntryFor(vector) + storage.getVectorStorageSizeFor(vector) should be(0) + storage.insertVectorStorageEntriesFor(vector, values.map{ + s: String => s.getBytes + }) + storage.getVectorStorageSizeFor(vector) should be(values.size) + values.foreach{ + s => storage.removeVectorStorageEntryFor(vector) + } + storage.getVectorStorageSizeFor(vector) should be(0) } diff --git a/akka-persistence/akka-persistence-riak/src/test/scala/RiakTicket343TestIntegration.scala b/akka-persistence/akka-persistence-riak/src/test/scala/RiakTicket343TestIntegration.scala index a26510a511..bd20ec8742 100644 --- a/akka-persistence/akka-persistence-riak/src/test/scala/RiakTicket343TestIntegration.scala +++ b/akka-persistence/akka-persistence-riak/src/test/scala/RiakTicket343TestIntegration.scala @@ -20,5 +20,4 @@ class RiakTicket343TestIntegration extends Ticket343Test { def getMap: (String) => PersistentMap[Array[Byte], Array[Byte]] = RiakStorage.getMap - def supportsVectorRemove = true } \ No newline at end of file diff --git a/akka-persistence/akka-persistence-voldemort/src/test/scala/VoldemortTicket343Test.scala b/akka-persistence/akka-persistence-voldemort/src/test/scala/VoldemortTicket343Test.scala index 809b9b5866..9a156ea3dc 100644 --- a/akka-persistence/akka-persistence-voldemort/src/test/scala/VoldemortTicket343Test.scala +++ b/akka-persistence/akka-persistence-voldemort/src/test/scala/VoldemortTicket343Test.scala @@ -20,6 +20,4 @@ class VoldemortTicket343Test extends Ticket343Test with EmbeddedVoldemort { def getMap: (String) => PersistentMap[Array[Byte], Array[Byte]] = VoldemortStorage.getMap - def supportsVectorRemove = true - } \ No newline at end of file