)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1000966,"name":"Dave Rigby","email":"daver@couchbase.com","username":"drigby","avatars":[{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"73231fd0f31fef5e68158cb926ed20214817f516","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Jim Walker \u003cjim@couchbase.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-10-01 17:12:19 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"MB-16357: Interlock compaction expiry and vbucket state changes."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Expiry can only happen on active vbuckets, if the state changes"},{"line_number":10,"context_line":"expiry is cancelled by changing the ctx.curr_time to 0."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1dd07d0e_6a5bcb3a","line":7,"updated":"2015-10-01 17:41:03.000000000","message":"Minor nit: This is a title; doesn\u0027t need a full-stop at the end.","commit_id":"f01808c56d4417354cda12939ab26d2ab34ff2d8"}],"src/ep.cc":[{"author":{"_account_id":1000097,"name":"Chiyoung Seo","email":"chiyoung@northscale.com","username":"chiyoung","avatars":[{"url":"https://www.gravatar.com/avatar/ec517f4126dd292151b452ce4d1edf31.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ec517f4126dd292151b452ce4d1edf31.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ec517f4126dd292151b452ce4d1edf31.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ec517f4126dd292151b452ce4d1edf31.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d21b4e155703fe8d75c814be4e6e9ce55866ba34","unresolved":false,"context_lines":[{"line_number":1231,"context_line":"                if (epstore-\u003ecompactionCanExpireItems()) {"},{"line_number":1232,"context_line":"                    epstore-\u003edeleteExpiredItem(vbucket, it-\u003ekeyStr,"},{"line_number":1233,"context_line":"                                               ctx.curr_time,"},{"line_number":1234,"context_line":"                                               it-\u003erevSeqno);"},{"line_number":1235,"context_line":"                }"},{"line_number":1236,"context_line":"            }"},{"line_number":1237,"context_line":"        }"}],"source_content_type":"text/x-c","patch_set":2,"id":"1dd07d0e_447b60cf","side":"PARENT","line":1234,"updated":"2015-09-30 18:38:22.000000000","message":"As the item pager or expiry pager can delete expired items, we need to guard the deletion in a similar way for these tasks too.","commit_id":"330f185c0d0f95db83391138414b843fd0e91608"},{"author":{"_account_id":1000097,"name":"Chiyoung Seo","email":"chiyoung@northscale.com","username":"chiyoung","avatars":[{"url":"https://www.gravatar.com/avatar/ec517f4126dd292151b452ce4d1edf31.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ec517f4126dd292151b452ce4d1edf31.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ec517f4126dd292151b452ce4d1edf31.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ec517f4126dd292151b452ce4d1edf31.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"8ca48df7bab59eac255d415e9a04fcfdab54cad6","unresolved":false,"context_lines":[{"line_number":1225,"context_line":"            : epstore(store), vbucket(vbid) { }"},{"line_number":1226,"context_line":""},{"line_number":1227,"context_line":"        void callback(compaction_ctx \u0026ctx) {"},{"line_number":1228,"context_line":"            RCPtr\u003cVBucket\u003e vb \u003d epstore-\u003egetVBucket(vbucket);"},{"line_number":1229,"context_line":"            std::list\u003cexpiredItemCtx\u003e::iterator it;"},{"line_number":1230,"context_line":"            for (it  \u003d ctx.expiredItems.begin();"},{"line_number":1231,"context_line":"                 it !\u003d ctx.expiredItems.end(); it++) {"}],"source_content_type":"text/x-c","patch_set":2,"id":"1dd07d0e_a4934cf0","line":1228,"updated":"2015-09-30 18:01:51.000000000","message":"I think vb \u003d\u003d nullptr should be checked here.","commit_id":"9a5f6c7d434bc231247218e3ee41db9bd1350746"},{"author":{"_account_id":1000966,"name":"Dave Rigby","email":"daver@couchbase.com","username":"drigby","avatars":[{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"589c4a3525daa4ea334f84c637b71578d50dff90","unresolved":false,"context_lines":[{"line_number":1235,"context_line":"                                               ctx.curr_time,"},{"line_number":1236,"context_line":"                                               it-\u003erevSeqno);"},{"line_number":1237,"context_line":"                } else {"},{"line_number":1238,"context_line":"                    ctx.curr_time \u003d 0;"},{"line_number":1239,"context_line":"                    break;"},{"line_number":1240,"context_line":"                }"},{"line_number":1241,"context_line":""}],"source_content_type":"text/x-c","patch_set":2,"id":"1dd07d0e_e4ed54ed","line":1238,"updated":"2015-09-30 11:27:14.000000000","message":"Possibly worth a comment here noting the significance of setting curr_time to zero (i.e. that is prevents expiration)","commit_id":"9a5f6c7d434bc231247218e3ee41db9bd1350746"},{"author":{"_account_id":1000338,"name":"Abhi Dangeti","email":"abhinav@couchbase.com","username":"abhinavdangeti","avatars":[{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/9007099855b1bf7d96e9c1a10bc9542e.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6da464b2e474daa602685091b91b85f5c244d5ac","unresolved":false,"context_lines":[{"line_number":1235,"context_line":"                                               ctx.curr_time,"},{"line_number":1236,"context_line":"                                               it-\u003erevSeqno);"},{"line_number":1237,"context_line":"                } else {"},{"line_number":1238,"context_line":"                    ctx.curr_time \u003d 0;"},{"line_number":1239,"context_line":"                    break;"},{"line_number":1240,"context_line":"                }"},{"line_number":1241,"context_line":""}],"source_content_type":"text/x-c","patch_set":2,"id":"1dd07d0e_84264823","line":1238,"in_reply_to":"1dd07d0e_e4ed54ed","updated":"2015-09-30 16:08:23.000000000","message":"I\u0027m not sure I understand why setting curr_time is needed here. We set curr_time to zero, at the start of scheduling compaction based on the vbucket state. This is used in couchkvstore\u0027s callback: time_purge_hook to add all the expired items into the list you see above: ctx.expiredItems.\n\nI guess my point is, isn\u0027t the compactionCanExpireItems check enough in this context, as you\u0027re checking the vbucket\u0027s state in there already, so once the vbucket state changes, deleteExpiredItem wouldn\u0027t even be called.","commit_id":"9a5f6c7d434bc231247218e3ee41db9bd1350746"}],"src/ep.h":[{"author":{"_account_id":1000097,"name":"Chiyoung Seo","email":"chiyoung@northscale.com","username":"chiyoung","avatars":[{"url":"https://www.gravatar.com/avatar/ec517f4126dd292151b452ce4d1edf31.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/ec517f4126dd292151b452ce4d1edf31.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/ec517f4126dd292151b452ce4d1edf31.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/ec517f4126dd292151b452ce4d1edf31.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"8ca48df7bab59eac255d415e9a04fcfdab54cad6","unresolved":false,"context_lines":[{"line_number":720,"context_line":"        compactionExpMemThreshold \u003d static_cast\u003cdouble\u003e(to) / 100.0;"},{"line_number":721,"context_line":"    }"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"    bool compactionCanExpireItems(RCPtr\u003cVBucket\u003e vb) {"},{"line_number":724,"context_line":"        // Process expired items only if memory usage is lesser than"},{"line_number":725,"context_line":"        // compaction_exp_mem_threshold and disk queue is small"},{"line_number":726,"context_line":"        // enough (marked by tap_throttle_queue_cap)"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"1dd07d0e_84af281f","line":723,"updated":"2015-09-30 18:01:51.000000000","message":"const RCPtr\u003cVBucket\u003e \u0026vb","commit_id":"9a5f6c7d434bc231247218e3ee41db9bd1350746"}],"src/locks.h":[{"author":{"_account_id":1000966,"name":"Dave Rigby","email":"daver@couchbase.com","username":"drigby","avatars":[{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"73231fd0f31fef5e68158cb926ed20214817f516","unresolved":false,"context_lines":[{"line_number":160,"context_line":"};"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"// RAII Reader lock"},{"line_number":163,"context_line":"class ReaderLockHolder {"},{"line_number":164,"context_line":"public:"},{"line_number":165,"context_line":"    ReaderLockHolder(RWLock\u0026 lock)"},{"line_number":166,"context_line":"      :  rwLock(lock) {"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"1dd07d0e_ca513719","line":163,"updated":"2015-10-01 17:41:03.000000000","message":"Smilar over here; you probably want to disable copying of the lock holder.","commit_id":"f01808c56d4417354cda12939ab26d2ab34ff2d8"},{"author":{"_account_id":1000966,"name":"Dave Rigby","email":"daver@couchbase.com","username":"drigby","avatars":[{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"73231fd0f31fef5e68158cb926ed20214817f516","unresolved":false,"context_lines":[{"line_number":184,"context_line":"};"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"// RAII Writer lock"},{"line_number":187,"context_line":"class WriterLockHolder {"},{"line_number":188,"context_line":"public:"},{"line_number":189,"context_line":"    WriterLockHolder(RWLock\u0026 lock)"},{"line_number":190,"context_line":"      :  rwLock(lock) {"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"1dd07d0e_ea4efb73","line":187,"updated":"2015-10-01 17:41:03.000000000","message":"Ditto","commit_id":"f01808c56d4417354cda12939ab26d2ab34ff2d8"}],"src/rwlock.h":[{"author":{"_account_id":1000966,"name":"Dave Rigby","email":"daver@couchbase.com","username":"drigby","avatars":[{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"73231fd0f31fef5e68158cb926ed20214817f516","unresolved":false,"context_lines":[{"line_number":21,"context_line":" *"},{"line_number":22,"context_line":" *   The lock allows many readers but mutual exclusion with a writer."},{"line_number":23,"context_line":" */"},{"line_number":24,"context_line":"class RWLock {"},{"line_number":25,"context_line":"public:"},{"line_number":26,"context_line":"    RWLock() {"},{"line_number":27,"context_line":"        cb_rw_lock_initialize(\u0026lock);"}],"source_content_type":"text/x-csrc","patch_set":4,"id":"1dd07d0e_aa54f309","line":24,"updated":"2015-10-01 17:41:03.000000000","message":"For general sanity/robustness you probably want to disable copying of this class","commit_id":"f01808c56d4417354cda12939ab26d2ab34ff2d8"}],"src/vbucket.h":[{"author":{"_account_id":1000966,"name":"Dave Rigby","email":"daver@couchbase.com","username":"drigby","avatars":[{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"589c4a3525daa4ea334f84c637b71578d50dff90","unresolved":false,"context_lines":[{"line_number":437,"context_line":""},{"line_number":438,"context_line":"    int                      id;"},{"line_number":439,"context_line":"    AtomicValue\u003cvbucket_state_t\u003e  state;"},{"line_number":440,"context_line":"    Mutex                    stateLock;"},{"line_number":441,"context_line":"    vbucket_state_t          initialState;"},{"line_number":442,"context_line":"    Mutex                    pendingOpLock;"},{"line_number":443,"context_line":"    std::vector\u003cconst void*\u003e pendingOps;"}],"source_content_type":"text/x-csrc","patch_set":2,"id":"1dd07d0e_04eb18d8","line":440,"updated":"2015-09-30 11:27:14.000000000","message":"Possibly worth a comment here also - as `state` is atomic it might not be obvious why we also need a mutex.","commit_id":"9a5f6c7d434bc231247218e3ee41db9bd1350746"}],"tests/ep_testsuite.cc":[{"author":{"_account_id":1000966,"name":"Dave Rigby","email":"daver@couchbase.com","username":"drigby","avatars":[{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/514e75a8d75cc1fcdb22433d445ae8f1.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"73231fd0f31fef5e68158cb926ed20214817f516","unresolved":false,"context_lines":[{"line_number":11375,"context_line":"                                     ENGINE_HANDLE_V1 *h1) {"},{"line_number":11376,"context_line":""},{"line_number":11377,"context_line":"    // Load up vb0 with n items, expire in 1 second"},{"line_number":11378,"context_line":"    int num_items \u003d 50000;"},{"line_number":11379,"context_line":""},{"line_number":11380,"context_line":"    for (int j \u003d 0; j \u003c num_items; ++j) {"},{"line_number":11381,"context_line":"        item *i \u003d NULL;"}],"source_content_type":"text/x-c","patch_set":4,"id":"1dd07d0e_0a4cff79","line":11378,"updated":"2015-10-01 17:41:03.000000000","message":"Can we get away with a lower number of items? (I\u0027m thinking about minimising the test execution time).","commit_id":"f01808c56d4417354cda12939ab26d2ab34ff2d8"}]}
