----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/33146/ -----------------------------------------------------------
(Updated April 16, 2015, 10:43 a.m.) Review request for samza. Changes ------- Please see the new description for details about this iteration. Summary (updated) ----------------- New KeyValueStore Features Bugs: SAMZA-647 https://issues.apache.org/jira/browse/SAMZA-647 Repository: samza Description (updated) ------- * Adding new KeyValueStore methods: Map<K, V> getAll(List<K>), and void deleteAll(List<K>). **Please note: "Backwards incompatible API changes, config changes, or library upgrades should only happen between major revision changes, or when the major revision is 0." -- since the latter is true, I found that adding the new methods to the already-existing interface to be a better solution, even though it breaks backward compatability (please see the first iteration for context).** Alternatively, to maintain backward compat., I would have added a new contract and a new class for each class that implements KeyValueStore (to implement the new contract and pass calls throught to the underlying store, whose type needs to change in the constructor to the new contract). * Improved the javadoc of KeyValueStore to have the same voice, to add API notes, and to follow the javadoc standards. * Making the KeyValueStore extend AutoClosable and Flushable (since we can use Java 1.7 now). * Removing stress tests from TestKeyValueStores.scala because: * * Unit tests are not meant to be stress-testing the system, * * The test load looked arbitrary, * * It wasn't measuring anything (just testing it doesn't crash), * * Stress testing requires extended periods of testing, and * * My machine, a MacBook Air, is not beefy enough to survive stress tests; they should be run on a typical production machine and not a dev one -- a flaky test is not a good test. * * There's a test class dedicated for KV stores' performance testing: TestKeyValuePerformance * Last, but definitely not least, the main motiviation behind this change: Allowing RocksDbKeyValueStore to implement getAll(List<K>) to call multiGet(List<K>); Preliminary tests showed that multiGet is at least 1.25x faster per key than get (see https://reviews.facebook.net/rROCKSDB4985a9f73b9fb8a0323fbbb06222ae1f758a6b1d). Diffs (updated) ----- samza-kv-inmemory/src/main/scala/org/apache/samza/storage/kv/inmemory/InMemoryKeyValueStore.scala 217333c84c696c0cc1bc3eeabf1c4066a6e89795 samza-kv-rocksdb/src/main/scala/org/apache/samza/storage/kv/RocksDbKeyValueStore.scala 66c2a0dc2e38e21f951727a30f0987776ac52fe2 samza-kv/src/main/java/org/apache/samza/storage/kv/KeyValueStore.java b708341abed15aaad34df5934f5f310bc1feb87a samza-kv/src/main/scala/org/apache/samza/storage/kv/CachedStore.scala 61bb3f6acb080b653f8b11176538549738255acc samza-kv/src/main/scala/org/apache/samza/storage/kv/KeyValueStorageEngine.scala 3a23daf053f0b8dec3a7ec83a51c9c5527078a3b samza-kv/src/main/scala/org/apache/samza/storage/kv/KeyValueStoreMetrics.scala 79092b91c9498e55f1c4e28661b7280c6c19cef7 samza-kv/src/main/scala/org/apache/samza/storage/kv/LoggedStore.scala 26f4cd9cfef305546c85ef9330f3e8b8be5336f7 samza-kv/src/main/scala/org/apache/samza/storage/kv/NullSafeKeyValueStore.scala 4f48cf490d6c1012591a602c0d29dcc71473090f samza-kv/src/main/scala/org/apache/samza/storage/kv/SerializedKeyValueStore.scala 531e8bef2069a77fa9ceab36fa738bbaa162fe8c samza-test/src/main/config/perf/kv-perf.properties 33fcd8d1aea14ecea47bbadb24936f737feedb39 samza-test/src/test/scala/org/apache/samza/storage/kv/TestKeyValueStores.scala 50dfc10bb053d74dba70fdbce0ef87609ba447ea Diff: https://reviews.apache.org/r/33146/diff/ Testing ------- Unit-tested. Thanks, Mohamed Mahmoud (El-Geish)