> On April 14, 2015, 9:14 p.m., Chris Riccomini wrote: > > I'm concerned that there might be an issue with this approach. In > > BaseKeyValueStorageEngineFactory, we compose stores by nesting them. If > > this is the case, I think that the top-most store will implement the > > batching key value store, and will use the default implementation of > > getAll/deleteAll. As such, I'm not sure that the RocksDB implementation > > ever actually gets called. > > Yi Pan (Data Infrastructure) wrote: > I agree. In addition, it seems that each implementation class of KV store > has its own specific logic. For example, CachedStore.getAll() could mean that > only batch get from the db for the keys *not* currently in cache, while > NullSafeKeyValueStore needs to validate each key is not null before it > further calls store.getAll() to trigger the nested KV-store's getAll() > method. It seems that we should just keep the same interface class > KeyValueStore<K,V> w/ additional methods: getAll() and deleteAll(). And each > KV-store implementation needs to call the nested store's getAll() and > deleteAll() w/ its own logic.
Chris and Yi, thanks for the comments, I addressed them. > On April 14, 2015, 9:14 p.m., Chris Riccomini wrote: > > samza-kv/src/main/java/org/apache/samza/storage/kv/BatchingKeyValueStore.java, > > line 34 > > <https://reviews.apache.org/r/33146/diff/1/?file=926486#file926486line34> > > > > Nit: indentation should be 2 spaces. Sounds familiar :) I changed the default editor settings in IntelliJ, thanks! > On April 14, 2015, 9:14 p.m., Chris Riccomini wrote: > > samza-kv/src/main/scala/org/apache/samza/storage/kv/KeyValueStoreMetrics.scala, > > line 29 > > <https://reviews.apache.org/r/33146/diff/1/?file=926488#file926488line29> > > > > Do we need a deleteAlls metric as well? Thought about that, then I saw putAll is piggybacking on the puts metric because it's a simple loop over put; deleteAll is analogous in that sense. Had it been the case that there's support for deleteAll in the underlying store, the new metric would have been necessary. That said, I added it for potential use externally by consumers of this class. - Mohamed ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/33146/#review80036 ----------------------------------------------------------- On April 16, 2015, 10:43 a.m., Mohamed Mahmoud (El-Geish) wrote: > > ----------------------------------------------------------- > 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. > > > Bugs: SAMZA-647 > https://issues.apache.org/jira/browse/SAMZA-647 > > > Repository: samza > > > Description > ------- > > * 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 > ----- > > > 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) > >