> 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.
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). > 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. 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. > On May 12, 2015, 6:10 p.m., Mohamed Mahmoud (El-Geish) wrote: > > docs/learn/documentation/versioned/jobs/configuration-table.html, line 1009 > > <https://reviews.apache.org/r/33735/diff/2/?file=951492#file951492line1009> > > > > Please add the suffix ".ms": > > > > http://samza.apache.org/contribute/coding-guide.html#Configuration > > > > Configuration is the final third of our “UI”. > > All configuration names that define time must end with .ms (e.g. > > foo.bar.ms=1000). > > > > I understand that the current implementation of the RocksDB TTL doesn't > > support granularity higher than seconds, but: > > * we can convert, and round, to seconds (since TTL is not exact anyways) > > * in the future if MS are supported, no need to change the contract here > > Naveen Somasundaram wrote: > I'll convert it to ms, rounding it to 1000 at a minimum. Thanks! - Mohamed ----------------------------------------------------------- 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 > >