-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/62869/#review188148
-----------------------------------------------------------



Overall LGTM as well! I believe the logic for upgrading and maintaining 
forwards/backwards compatibility is sound. Ensuring my understanding, the 
upgrade path is:

1. A new version with the memory stores is released.
2. People upgrading to the new version would load their previous DB snapshot, 
it gets converted into their Thrift store equivalents, and then applied.
3. The next snapshot that occurs with the new version will use only the Thrift 
stores in the Snapshot object.

This new Snapshot object is forwards and backwards compatibile since it only 
uses the Thrift stores which both the previous and upgrade versions can apply.


src/main/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStore.java
Lines 43-52 (patched)
<https://reviews.apache.org/r/62869/#comment265192>

    `sychronized` would definitely solve this issue, but I would recommend 
keeping the method not `synchronized` and using the `merge` function in 
`ConcurrentMap` as opposed to a `put` with a function within the arguments. 
This should maintain thread safety while increasing throughput.



src/main/java/org/apache/aurora/scheduler/storage/mem/MemLockStore.java
Lines 39-50 (patched)
<https://reviews.apache.org/r/62869/#comment265197>

    This method probably has to be `sychronized`, since you need the state of 
the whole map before you do anything.



src/main/java/org/apache/aurora/scheduler/storage/mem/MemStorage.java
Lines 40-46 (patched)
<https://reviews.apache.org/r/62869/#comment265200>

    Mostly for my knowledge, but what is the use of this?



src/main/java/org/apache/aurora/scheduler/storage/mem/MemStorageModule.java
Lines 72-73 (patched)
<https://reviews.apache.org/r/62869/#comment265199>

    Should this be configurable?


- Jordan Ly


On Oct. 10, 2017, 7:35 p.m., Bill Farner wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/62869/
> -----------------------------------------------------------
> 
> (Updated Oct. 10, 2017, 7:35 p.m.)
> 
> 
> Review request for Aurora, Jordan Ly and Stephan Erb.
> 
> 
> Repository: aurora
> 
> 
> Description
> -------
> 
> This patch introduces map-based volatile stores, most of which were revived 
> from git history with minimal changes.  The DB storage system is now only 
> used in a temporary storage when replaying a snapshot containing the 
> `dbScript` field.
> 
> Please take special care to double-check my work in `SnapshotStoreImpl`, as 
> it must function for backwards compatibility with `Snapshot`s in the wild.  
> Another area of interest is the implementation of `MemJobUpdateStore`, which 
> must have nuanced behavior for compatibility with `DbJobUpdateStore`.  Most 
> of this stems from behind-the-scenes interaction with `LockStore` and use of 
> cascading deletes.
> 
> Note that this change removes the transactional nature of in-memory storage 
> operations as well as the `READ COMMITTED` transaction isolation previously 
> available to some stores (proven in necessary changes to 
> `StorageTransactionTest`).  This means some stores will permit dirty reads 
> when they previously did not.  `TaskStore` has always had this 
> non-transactional behavior by default, as the DB task store was never deemed 
> suitable for production.  Nonetheless, this non-transactional behavior should 
> be considered safe as the scheduler fails over on a storage operation 
> failure, and relies on the persistent log storage for transaction atomicity.
> 
> See the [mailing list 
> discussion](https://lists.apache.org/thread.html/0bb74c78da7fa12954e2438e8011b3bff73fe3bfdafeaaa2ff00a98e@%3Cdev.aurora.apache.org%3E)
>  for context.
> 
> 
> Diffs
> -----
> 
>   RELEASE-NOTES.md c58e68080beb1740d92639601ef7cc29c63be37e 
>   api/src/main/thrift/org/apache/aurora/gen/storage.thrift 
> 9ee9eff6c3d657decd93458dc3e6792a30614a60 
>   docs/reference/scheduler-configuration.md 
> 4e3f90713c307e3b9e9f84c29343af7f014f0165 
>   examples/vagrant/upstart/aurora-scheduler-kerberos.conf 
> 04e3d311c6845689cd3bd813aa8dcf9df55f1199 
>   examples/vagrant/upstart/aurora-scheduler.conf 
> 63fcc87be653835cb3c3f25dae4164f1d7c8d4da 
>   src/jmh/java/org/apache/aurora/benchmark/SchedulingBenchmarks.java 
> 7d3766829161457b1b3ba50bce128047d10b2c58 
>   src/jmh/java/org/apache/aurora/benchmark/SnapshotBenchmarks.java 
> ae59f3def75d0e1d3866c8d2f85063456643e9a6 
>   src/jmh/java/org/apache/aurora/benchmark/StateManagerBenchmarks.java 
> c293a9fd7c435e17dfc09f9ccc180154be8c7b2d 
>   src/jmh/java/org/apache/aurora/benchmark/StatusUpdateBenchmark.java 
> 45c2ab96d8fa65ab12ba710954128da987f0544b 
>   src/jmh/java/org/apache/aurora/benchmark/TaskStoreBenchmarks.java 
> f5e44dfd6d2c81e90859eaf24cf904a9662c1c72 
>   src/jmh/java/org/apache/aurora/benchmark/ThriftApiBenchmarks.java 
> 7b4050637433ab656fc09958bac1a050fec02bed 
>   src/jmh/java/org/apache/aurora/benchmark/UpdateStoreBenchmarks.java 
> cac02a55d26b2934099a2b03457c703600296292 
>   src/main/java/org/apache/aurora/scheduler/app/SchedulerMain.java 
> dd0e480c628f6bb44de0ce758c8af2bb54db1bc6 
>   src/main/java/org/apache/aurora/scheduler/config/CliOptions.java 
> 64733e5b38f238e64424127a53591e6546a3e9a8 
>   src/main/java/org/apache/aurora/scheduler/http/JettyServerModule.java 
> 93cd20adc28ed700719e472bb2331137a93d1d9d 
>   src/main/java/org/apache/aurora/scheduler/storage/JobUpdateStore.java 
> 52c3c6618a3cf1009435ca8a9cece36365913e55 
>   src/main/java/org/apache/aurora/scheduler/storage/Storage.java 
> 6c676693e531541ef9aec7f7a130c119ebf35df3 
>   src/main/java/org/apache/aurora/scheduler/storage/Util.java PRE-CREATION 
>   
> src/main/java/org/apache/aurora/scheduler/storage/backup/TemporaryStorage.java
>  bad05f5bf1976bb590e8dd7af9b43d5d30e892a9 
>   src/main/java/org/apache/aurora/scheduler/storage/db/DbJobUpdateStore.java 
> cbe5a0deff1ebc38a9618e7d89ab073dfaf78d36 
>   src/main/java/org/apache/aurora/scheduler/storage/db/DbModule.java 
> fb3dadb4b4c7036112e423b2bc1b2540d793b4d6 
>   src/main/java/org/apache/aurora/scheduler/storage/db/DbStorage.java 
> 7904e3880d214aac1013ce18265fed924ef7897e 
>   src/main/java/org/apache/aurora/scheduler/storage/db/DbUtil.java 
> 942d180fe1a8b7a583e812f9106ee0e8db1bea55 
>   src/main/java/org/apache/aurora/scheduler/storage/log/LogStorageModule.java 
> 6fdf31d6ed430f3dc0a0117442fc8b532aa40230 
>   
> src/main/java/org/apache/aurora/scheduler/storage/log/SnapshotStoreImpl.java 
> fdf9c33f80be3eff03f50732b8c4735cb9ff3b91 
>   
> src/main/java/org/apache/aurora/scheduler/storage/log/WriteAheadStorage.java 
> d145259653dd4df90e3877fc3e744e24c7a15d13 
>   
> src/main/java/org/apache/aurora/scheduler/storage/mem/InMemStoresModule.java 
> 24296b6c61e62a09c30f01dfb84448f73a5f1e44 
>   
> src/main/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStore.java 
> PRE-CREATION 
>   
> src/main/java/org/apache/aurora/scheduler/storage/mem/MemJobUpdateStore.java 
> PRE-CREATION 
>   src/main/java/org/apache/aurora/scheduler/storage/mem/MemLockStore.java 
> PRE-CREATION 
>   src/main/java/org/apache/aurora/scheduler/storage/mem/MemQuotaStore.java 
> PRE-CREATION 
>   
> src/main/java/org/apache/aurora/scheduler/storage/mem/MemSchedulerStore.java 
> PRE-CREATION 
>   src/main/java/org/apache/aurora/scheduler/storage/mem/MemStorage.java 
> PRE-CREATION 
>   src/main/java/org/apache/aurora/scheduler/storage/mem/MemStorageModule.java 
> PRE-CREATION 
>   src/main/java/org/apache/aurora/scheduler/storage/mem/Util.java 
> c28fb65010af5e3db925487929d4e0e12b4101a4 
>   
> src/main/java/org/apache/aurora/scheduler/updater/JobUpdateControllerImpl.java
>  54202359382bfe39e7cbaec0bf4c7d65d10ca13b 
>   src/test/java/org/apache/aurora/scheduler/app/SchedulerIT.java 
> a363e70176881518653d0774e9d0c4be0f7f6d78 
>   src/test/java/org/apache/aurora/scheduler/app/local/LocalSchedulerMain.java 
> 3dee55a38752faea52c0c6ace90db8352ef9b2ea 
>   src/test/java/org/apache/aurora/scheduler/config/CommandLineTest.java 
> 9b4f2ad15ab5b61d4cccfad38ba48f17e7853425 
>   
> src/test/java/org/apache/aurora/scheduler/cron/quartz/AuroraCronJobTest.java 
> 2b817076d6beb09586d4711bc10bceb31f3b74e1 
>   src/test/java/org/apache/aurora/scheduler/cron/quartz/CronIT.java 
> 459d6bebcd7d6341dac2aead7e3dd8ce87bc9ed6 
>   
> src/test/java/org/apache/aurora/scheduler/cron/quartz/CronJobManagerImplTest.java
>  81440f5689f9538a4c7a9e6700bf03ca89c4ba85 
>   src/test/java/org/apache/aurora/scheduler/http/MaintenanceTest.java 
> f94b58b77b7c6ce824914af7e1147e73ad5a7eed 
>   
> src/test/java/org/apache/aurora/scheduler/scheduling/TaskSchedulerImplTest.java
>  09f443bca90f154b547d28ca5fd5be08177fdf99 
>   src/test/java/org/apache/aurora/scheduler/state/LockManagerImplTest.java 
> 19f9de312596395eff81bbfd073a5f617d2ef84c 
>   src/test/java/org/apache/aurora/scheduler/state/StateManagerImplTest.java 
> 24176fe089703386e8246f6add1965c111c136ed 
>   src/test/java/org/apache/aurora/scheduler/stats/ResourceCounterTest.java 
> d73656dc8fb8764c7a66eed3ea789554ce0ecc52 
>   src/test/java/org/apache/aurora/scheduler/storage/backup/RecoveryTest.java 
> 04ec7715ba9a9d47c99d4ccb92939f3e561e1a60 
>   
> src/test/java/org/apache/aurora/scheduler/storage/db/AttributeStoreTest.java 
> PRE-CREATION 
>   
> src/test/java/org/apache/aurora/scheduler/storage/db/DbAttributeStoreTest.java
>  f47f4a8a492fb43bacd909dc520256ed028531dd 
>   
> src/test/java/org/apache/aurora/scheduler/storage/db/DbCronJobStoreTest.java 
> b68298ab50a3621da8596947619f2d1c34d2d194 
>   
> src/test/java/org/apache/aurora/scheduler/storage/db/DbJobUpdateStoreTest.java
>  8fca54becde34a0d10d60e05d3809fc1c41233bf 
>   src/test/java/org/apache/aurora/scheduler/storage/db/DbLockStoreTest.java 
> 8ed58e01eea09ab9f1aa4d269a5e59ce9c9c2191 
>   src/test/java/org/apache/aurora/scheduler/storage/db/DbQuotaStoreTest.java 
> 275d0fd93819169550ce39c8ddfa6c4fa0e4d920 
>   
> src/test/java/org/apache/aurora/scheduler/storage/db/DbSchedulerStoreTest.java
>  a6320bf687aa41c698bdc6a2c0b5208624cff4a3 
>   src/test/java/org/apache/aurora/scheduler/storage/db/DbTaskStoreTest.java 
> bcf5be43ab69ef565bb68f9235b4c43d385898aa 
>   
> src/test/java/org/apache/aurora/scheduler/storage/db/JobUpdateStoreTest.java 
> PRE-CREATION 
>   src/test/java/org/apache/aurora/scheduler/storage/db/LockStoreTest.java 
> PRE-CREATION 
>   src/test/java/org/apache/aurora/scheduler/storage/db/QuotaStoreTest.java 
> PRE-CREATION 
>   
> src/test/java/org/apache/aurora/scheduler/storage/db/SchedulerStoreTest.java 
> PRE-CREATION 
>   
> src/test/java/org/apache/aurora/scheduler/storage/log/SnapshotStoreImplIT.java
>  b2c333eabbd3e3ae8f119170266ce6054b53fcae 
>   
> src/test/java/org/apache/aurora/scheduler/storage/mem/InMemTaskStoreTest.java 
> 84fa3ff48a0957760f2002ed026e72b882171109 
>   
> src/test/java/org/apache/aurora/scheduler/storage/mem/MemAttributeStoreTest.java
>  PRE-CREATION 
>   
> src/test/java/org/apache/aurora/scheduler/storage/mem/MemCronJobStoreTest.java
>  91e591f3c84489386a7c20d33278ba691b3ae7ba 
>   
> src/test/java/org/apache/aurora/scheduler/storage/mem/MemJobUpdateStoreTest.java
>  PRE-CREATION 
>   src/test/java/org/apache/aurora/scheduler/storage/mem/MemLockStoreTest.java 
> PRE-CREATION 
>   
> src/test/java/org/apache/aurora/scheduler/storage/mem/MemQuotaStoreTest.java 
> PRE-CREATION 
>   src/test/java/org/apache/aurora/scheduler/storage/mem/MemStorageTest.java 
> PRE-CREATION 
>   
> src/test/java/org/apache/aurora/scheduler/storage/mem/StorageTransactionTest.java
>  25f34e2bc26c6d4754c1591fad7f2165dd465d32 
>   src/test/java/org/apache/aurora/scheduler/thrift/ThriftIT.java 
> 2cd19d572d2945e28630b9bce5ba58eb9753630a 
>   src/test/java/org/apache/aurora/scheduler/updater/JobUpdaterIT.java 
> 453366ef4e4b6db45643b1927887771dbd795bf9 
> 
> 
> Diff: https://reviews.apache.org/r/62869/diff/4/
> 
> 
> Testing
> -------
> 
> Still need to complete (but should not block review):
> 
> * Run `./src/test/sh/org/apache/aurora/e2e/test_end_to_end.sh` from scratch 
> at this patch.
> * Run `./src/test/sh/org/apache/aurora/e2e/test_end_to_end.sh` on master, 
> then this patch, then on master.  This verifies some level of replay 
> compatibility between versions.
> 
> *Most relevant benchmark*
> 
> On master:
> ```
> Benchmark                                             (instanceOverrides)  
> (instances)  (metadata)   Mode  Cnt    Score    Error  Units
> UpdateStoreBenchmarks.JobDetailsBenchmark.run                         N/A     
>     1000         N/A  thrpt    5  696.186 ± 67.296  ops/s
> UpdateStoreBenchmarks.JobDetailsBenchmark.run                         N/A     
>     5000         N/A  thrpt    5  160.567 ± 22.365  ops/s
> UpdateStoreBenchmarks.JobDetailsBenchmark.run                         N/A     
>    10000         N/A  thrpt    5   82.897 ±  5.384  ops/s
> UpdateStoreBenchmarks.JobInstructionsBenchmark.run                      1     
>      N/A         N/A  thrpt    5  166.567 ± 20.929  ops/s
> UpdateStoreBenchmarks.JobInstructionsBenchmark.run                     10     
>      N/A         N/A  thrpt    5  161.149 ±  6.016  ops/s
> UpdateStoreBenchmarks.JobInstructionsBenchmark.run                    100     
>      N/A         N/A  thrpt    5  141.993 ±  7.119  ops/s
> UpdateStoreBenchmarks.JobInstructionsBenchmark.run                   1000     
>      N/A         N/A  thrpt    5   65.481 ±  0.861  ops/s
> UpdateStoreBenchmarks.JobUpdateMetadataBenchmark.run                  N/A     
>      N/A          10  thrpt    5  167.387 ± 10.009  ops/s
> UpdateStoreBenchmarks.JobUpdateMetadataBenchmark.run                  N/A     
>      N/A         100  thrpt    5  153.032 ± 19.067  ops/s
> UpdateStoreBenchmarks.JobUpdateMetadataBenchmark.run                  N/A     
>      N/A        1000  thrpt    5  140.656 ± 16.893  ops/s
> UpdateStoreBenchmarks.JobUpdateMetadataBenchmark.run                  N/A     
>      N/A       10000  thrpt    5   45.039 ±  4.840  ops/s
> ```
> 
> With this patch:
> ```
> Benchmark                                             (instanceOverrides)  
> (instances)  (metadata)   Mode  Cnt         Score          Error  Units
> UpdateStoreBenchmarks.JobDetailsBenchmark.run                         N/A     
>     1000         N/A  thrpt    5  43700548.771 ±  4491654.631  ops/s
> UpdateStoreBenchmarks.JobDetailsBenchmark.run                         N/A     
>     5000         N/A  thrpt    5  44234835.787 ±  6078260.236  ops/s
> UpdateStoreBenchmarks.JobDetailsBenchmark.run                         N/A     
>    10000         N/A  thrpt    5  43362266.895 ±  7546660.236  ops/s
> UpdateStoreBenchmarks.JobInstructionsBenchmark.run                      1     
>      N/A         N/A  thrpt    5  45796640.959 ±  3698698.216  ops/s
> UpdateStoreBenchmarks.JobInstructionsBenchmark.run                     10     
>      N/A         N/A  thrpt    5  46402021.197 ±  4800377.641  ops/s
> UpdateStoreBenchmarks.JobInstructionsBenchmark.run                    100     
>      N/A         N/A  thrpt    5  44416822.563 ±  9591398.027  ops/s
> UpdateStoreBenchmarks.JobInstructionsBenchmark.run                   1000     
>      N/A         N/A  thrpt    5  44004609.998 ± 20332063.977  ops/s
> UpdateStoreBenchmarks.JobUpdateMetadataBenchmark.run                  N/A     
>      N/A          10  thrpt    5  47403264.761 ±  4787575.678  ops/s
> UpdateStoreBenchmarks.JobUpdateMetadataBenchmark.run                  N/A     
>      N/A         100  thrpt    5  45629630.921 ±  7654875.770  ops/s
> UpdateStoreBenchmarks.JobUpdateMetadataBenchmark.run                  N/A     
>      N/A        1000  thrpt    5  44150253.103 ±  9376206.202  ops/s
> UpdateStoreBenchmarks.JobUpdateMetadataBenchmark.run                  N/A     
>      N/A       10000  thrpt    5  44215602.085 ±  8326237.269  ops/s
> ```
> 
> 
> Thanks,
> 
> Bill Farner
> 
>

Reply via email to