> On May 12, 2015, 6:10 p.m., Mohamed Mahmoud (El-Geish) wrote: > > samza-kv-rocksdb/src/main/scala/org/apache/samza/storage/kv/RocksDbKeyValueStore.scala, > > line 77 > > <https://reviews.apache.org/r/33735/diff/2/?file=951495#file951495line77> > > > > This kind of polymorphism should be accomplished via virtual methods; > > extend and override. The factory should inspect the config, and determine > > whether to return a RocksDbKeyValueStore or a RocksDbKeyValueStoreWithTtl > > Naveen Somasundaram wrote: > I am not entirely sure I understand what is there to override here, what > they share in common is the keyvalue interface, which is already abstracted > out. If you are talking about abstracting out OpenDB itself and delegate it > to a factory, the logic is too trivial to add a factory, at that point the > factory will only do as much as just an if check. > > Mohamed Mahmoud (El-Geish) wrote: > What I meant is RocksDbKeyValueStorageEngineFactory::getKVStore should > return a RocksDbKeyValueStore or a RocksDbKeyValueStoreWithTtl instance based > on the config; where the latter overrides OpenDB(). Today, the logic is a > single if condition, but it opens the door for multiple cases in the future. > I belive this is a really good use case of OOP here (especially the > Open/Closed Principle); plus that's what factories are essentially for. > RocksDbKeyValueStore doesn't have to worry about TTL-specific logic, and > RocksDbKeyValueStoreWithTtl only cares about TTL (Single Responsibility > Principle).
I see what you are saying, but, "Today, the logic is a single if condition, but it opens the door for multiple cases in the future." When the logic gets that complicated, we'll introduce a factory :). Coding for the future, will only affect readability till we get there. Plus, if you look at it, it's not really a part of the RockDBKeyValueFactory itself, but rather a static method (mapping scala to java parlance). For now, I would like to stick to this. > On May 12, 2015, 6:10 p.m., Mohamed Mahmoud (El-Geish) wrote: > > samza-kv-rocksdb/src/test/scala/org/apache/samza/storage/kv/TestRocksDbKeyValueStore.scala, > > line 59 > > <https://reviews.apache.org/r/33735/diff/2/?file=951496#file951496line59> > > > > Why are we re-testing RocksDB's TTL here? Is there a way to query > > RocksDB to check whether or not the desired options were used when the DB > > was opened? > > Naveen Somasundaram wrote: > We are test to avoid regression, basically making sure we answer "what if > the future release TTL doesn't work from Java ?, does "rocksdb.ttl.ms" config > always work if any other change happens is the creation logic" we do the > release, it's entirely possible that we upgrade the RocksDB version in our > dependency and it breaks TTL. The latter is not supported AFAIK, lmk > otherwise, I can integrate. > > Mohamed Mahmoud (El-Geish) wrote: > I can see the blackbox methodology; I'm more of a graybox adovcate. I > guess my concern here is the sleep, and the probablity of test failure if > compaction wasn't triggered. If there's a way to trigger TTL immediately, > that would be great. we do trigger compaction, which should be deterministic, the reason for the using the loop is, it's cleaner than doing a thread.sleep, which is less error prone as the compaction might not exactly align with the sleep. - Naveen ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/33735/#review83438 ----------------------------------------------------------- On May 13, 2015, 11:10 p.m., Naveen Somasundaram wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/33735/ > ----------------------------------------------------------- > > (Updated May 13, 2015, 11:10 p.m.) > > > Review request for samza. > > > Repository: samza > > > Description > ------- > > RocksDB TTL support > https://issues.apache.org/jira/browse/SAMZA-537 > https://issues.apache.org/jira/browse/SAMZA-442 > > Please ignore the maven link added to build.gradle, I'll remove it once I > validate the release is good. > > > Diffs > ----- > > build.gradle ac80a8664180e556ec83e229e04e3d8c56b70506 > docs/learn/documentation/versioned/jobs/configuration-table.html > 728197d01d1e3f551ea53e2a14e97df44e29ee19 > gradle/dependency-versions.gradle ee6dfc411b7ab90b187df79f109884127953862e > > samza-kv-rocksdb/src/main/scala/org/apache/samza/storage/kv/RocksDbKeyValueStorageEngineFactory.scala > 5ab68590a4ed2686d730344665e25776cade6add > > samza-kv-rocksdb/src/main/scala/org/apache/samza/storage/kv/RocksDbKeyValueStore.scala > dd20f171491da4b4d900551932b2a06d58526d73 > > samza-kv-rocksdb/src/test/scala/org/apache/samza/storage/kv/TestRocksDbKeyValueStore.scala > PRE-CREATION > > samza-test/src/test/scala/org/apache/samza/storage/kv/TestKeyValueStores.scala > 9dee7be9a58c491dbd1a6b9cf73d5c111c570da2 > > Diff: https://reviews.apache.org/r/33735/diff/ > > > Testing > ------- > > Added Unit test > > > Thanks, > > Naveen Somasundaram > >