)]}'
{"/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":"da0c1836db23c6cdf9645937eba90c4f890b9a3d","unresolved":false,"context_lines":[{"line_number":61,"context_line":"30:     #24 main /home/owend/master/memcached/programs/engine_testapp/engine_testapp.cc:1359 (engine_testapp+0x000000482ab1)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"The patch renames the vals_mutex to be get_stats_mutex which protects"},{"line_number":64,"context_line":"against parallel calls to get_stats.  In addition a new vals_mutex is"},{"line_number":65,"context_line":"created which protects at a fine level of granuality the vals map and"},{"line_number":66,"context_line":"the strings requested_stat_name and actual_stat_value from parallel"},{"line_number":67,"context_line":"accesses."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Change-Id: I7bdc847c0913244409fa044e312d53b484dc2dab"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3d32a1d3_102ccc98","line":67,"range":{"start_line":64,"start_character":38,"end_line":67,"end_character":9},"updated":"2016-10-19 16:57:01.000000000","message":"This is slightly incorrect given the last set of changes - could you update it please?","commit_id":"997aba8f47fe0211a32c4c79350e6669d0f8d9b1"},{"author":{"_account_id":1001547,"name":"Dan Owen","email":"owend@couchbase.com","username":"owend","avatars":[{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d770c18c342bbfac61ed92ca760ef4766441a849","unresolved":false,"context_lines":[{"line_number":61,"context_line":"30:     #24 main /home/owend/master/memcached/programs/engine_testapp/engine_testapp.cc:1359 (engine_testapp+0x000000482ab1)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"The patch renames the vals_mutex to be get_stats_mutex which protects"},{"line_number":64,"context_line":"against parallel calls to get_stats.  In addition a new vals_mutex is"},{"line_number":65,"context_line":"created which protects at a fine level of granuality the vals map and"},{"line_number":66,"context_line":"the strings requested_stat_name and actual_stat_value from parallel"},{"line_number":67,"context_line":"accesses."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"Change-Id: I7bdc847c0913244409fa044e312d53b484dc2dab"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"3d32a1d3_10368cbd","line":67,"range":{"start_line":64,"start_character":38,"end_line":67,"end_character":9},"in_reply_to":"3d32a1d3_102ccc98","updated":"2016-10-19 17:34:31.000000000","message":"Done","commit_id":"997aba8f47fe0211a32c4c79350e6669d0f8d9b1"}],"tests/ep_test_apis.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":"0526d9cbdc298dba63f7d421c1baba210c29f61c","unresolved":false,"context_lines":[{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"    // Try up to three times to verify the bucket is missing.  Bucket"},{"line_number":1059,"context_line":"    // state changes are async."},{"line_number":1060,"context_line":"    std::lock_guard\u003cstd::mutex\u003e lh(get_stats_mutex);"},{"line_number":1061,"context_line":"    {"},{"line_number":1062,"context_line":"        // Clearing vals requires vals_mutex"},{"line_number":1063,"context_line":"        std::lock_guard\u003cstd::mutex\u003e lh(vals_mutex);"},{"line_number":1064,"context_line":"        vals.clear();"}],"source_content_type":"text/x-c","patch_set":11,"id":"3d32a1d3_edada18f","line":1061,"range":{"start_line":1060,"start_character":4,"end_line":1061,"end_character":5},"updated":"2016-10-19 13:10:55.000000000","message":"I don\u0027t understand the reason for this double-mutex. I would have thought that as long as vals_mutex is used correctly we should be ok?","commit_id":"16fddcd1e6e6a26fe42cbace76284a0f7894d808"},{"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":"73e62f2c1b5dddf4a68a1d3d54b00065dfcb4ef3","unresolved":false,"context_lines":[{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"    // Try up to three times to verify the bucket is missing.  Bucket"},{"line_number":1059,"context_line":"    // state changes are async."},{"line_number":1060,"context_line":"    std::lock_guard\u003cstd::mutex\u003e lh(get_stats_mutex);"},{"line_number":1061,"context_line":"    {"},{"line_number":1062,"context_line":"        // Clearing vals requires vals_mutex"},{"line_number":1063,"context_line":"        std::lock_guard\u003cstd::mutex\u003e lh(vals_mutex);"},{"line_number":1064,"context_line":"        vals.clear();"}],"source_content_type":"text/x-c","patch_set":11,"id":"3d32a1d3_edf68185","line":1061,"range":{"start_line":1060,"start_character":4,"end_line":1061,"end_character":5},"in_reply_to":"3d32a1d3_0dae7572","updated":"2016-10-19 13:45:36.000000000","message":"Well if that\u0027s the case you could just remove the vals_mutex and serialise everything on a single mutex.\n\nPoint being, we shouldn\u0027t need two (particularly when sometimes one is used and sometimes two). \n\n(also: the lock_guard should be within the scope, otherwise it won\u0027t unlock when you think it should).","commit_id":"16fddcd1e6e6a26fe42cbace76284a0f7894d808"},{"author":{"_account_id":1001547,"name":"Dan Owen","email":"owend@couchbase.com","username":"owend","avatars":[{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d1b10a3faf4e72d5bf1847d83ce02af1d3c48d09","unresolved":false,"context_lines":[{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"    // Try up to three times to verify the bucket is missing.  Bucket"},{"line_number":1059,"context_line":"    // state changes are async."},{"line_number":1060,"context_line":"    std::lock_guard\u003cstd::mutex\u003e lh(get_stats_mutex);"},{"line_number":1061,"context_line":"    {"},{"line_number":1062,"context_line":"        // Clearing vals requires vals_mutex"},{"line_number":1063,"context_line":"        std::lock_guard\u003cstd::mutex\u003e lh(vals_mutex);"},{"line_number":1064,"context_line":"        vals.clear();"}],"source_content_type":"text/x-c","patch_set":11,"id":"3d32a1d3_0dae7572","line":1061,"range":{"start_line":1060,"start_character":4,"end_line":1061,"end_character":5},"in_reply_to":"3d32a1d3_edada18f","updated":"2016-10-19 13:32:21.000000000","message":"That what I originally thought but that is not the case.\nQuite a few tests cases failed without the get_stats_mutex.\n\nThe reason I believe is if multiple calls are on going although the changes to vals etc. are safe we could end up with the wrong values due to interleaving of functions.","commit_id":"16fddcd1e6e6a26fe42cbace76284a0f7894d808"},{"author":{"_account_id":1001547,"name":"Dan Owen","email":"owend@couchbase.com","username":"owend","avatars":[{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"bab2cbe108a6b22761a6e32952339bb1ac7a7810","unresolved":false,"context_lines":[{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"    // Try up to three times to verify the bucket is missing.  Bucket"},{"line_number":1059,"context_line":"    // state changes are async."},{"line_number":1060,"context_line":"    std::lock_guard\u003cstd::mutex\u003e lh(get_stats_mutex);"},{"line_number":1061,"context_line":"    {"},{"line_number":1062,"context_line":"        // Clearing vals requires vals_mutex"},{"line_number":1063,"context_line":"        std::lock_guard\u003cstd::mutex\u003e lh(vals_mutex);"},{"line_number":1064,"context_line":"        vals.clear();"}],"source_content_type":"text/x-c","patch_set":11,"id":"3d32a1d3_cd0a9d9c","line":1061,"range":{"start_line":1060,"start_character":4,"end_line":1061,"end_character":5},"in_reply_to":"3d32a1d3_edf68185","updated":"2016-10-19 13:55:23.000000000","message":"The issue trying to be addressed was putting a lock around  vals[k] \u003d v; in add_stats as it is called from ep_engine and so was getting a data race.  So the solution was to put the get_stats_mutex there.  However that was not good because entered a potential circular deadlock.\n\nSo then the solution was to do away with get_stats_mutex and just have the fine grained vals_mutex. However that is not sufficient for the reason we discussed.\n\nRegarding the lock_guard:  my new fine_grain vals_mutex is in the scope for the vals.clear().  The one at line 1060 is just the original (renamed) which was added in http://review.couchbase.org/#/c/56389/","commit_id":"16fddcd1e6e6a26fe42cbace76284a0f7894d808"},{"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":"eff2721dd6b0da8700819a22daf6fb344986b0b9","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"#include \"mock/mock_dcp.h\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"// Due to the limitations of the add_stats callback (essentially we cannot pass"},{"line_number":37,"context_line":"// a context into it) we instead have a single, global `vals` map. The"},{"line_number":38,"context_line":"// vals_mutex is to ensure serialised modifications to this data structure."},{"line_number":39,"context_line":"// There is also an optimized add_stats callback (add_individual_stat) which"},{"line_number":40,"context_line":"// checks for one stat (and hence doesn\u0027t have to keep a map of all of them)."},{"line_number":41,"context_line":"// the vals_mutex is also used for serializing access to it\u0027s data"},{"line_number":42,"context_line":"// (requested_stat_name and actual_stat_value)."},{"line_number":43,"context_line":"std::mutex vals_mutex;"},{"line_number":44,"context_line":"statistic_map vals;"},{"line_number":45,"context_line":"std::string requested_stat_name;"},{"line_number":46,"context_line":"std::string actual_stat_value;"},{"line_number":47,"context_line":"// The get_stats_mutex is used to serialise modifications to it to allow"},{"line_number":48,"context_line":"// multiple threads to request stats."},{"line_number":49,"context_line":"std::mutex get_stats_mutex;"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"bool dump_stats \u003d false;"},{"line_number":52,"context_line":"std::atomic\u003cprotocol_binary_response_status\u003e last_status("}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_8d8b45da","line":49,"range":{"start_line":36,"start_character":0,"end_line":49,"end_character":27},"updated":"2016-10-19 15:10:52.000000000","message":"To aid in understanding, can I suggest a slight structural change to this, and expand the description a bit more - there\u0027s actually 2 things which need locking (I think):\n\n1) \"get_stat and get_histo_stat can only be called once at a time as we use two global variables (requested_stat_name \u0026 actual_stat_value) to hold the context of the search. Therefore the two functions need to acquire a lock and keep for the whole function duration.\"\n\nFor this I suggest we put the elements in a simple struct, to highlight what the locking scope is:\n\n struct {\n     std::mutex mutex;\n     std::string requested_stat_name;\n     std::string actual_stat_value;\n }  get_stat_context;\n    \n2) \"`vals` map - this is used when asking for all stats (or when other callbacks such as StatCheckpointTask try to add stats).\" Ideally we\u0027d also create a struct for this, but the `vars` symbol is extern\u0027d and a bunch of other people write to it; so it\u0027s probably simpler to leave as-is (with a separate `vals_mutex` parallel variable).","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"author":{"_account_id":1001547,"name":"Dan Owen","email":"owend@couchbase.com","username":"owend","avatars":[{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"8dc8b80a1b199a95594ad910d3ca41df1d384ad7","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"#include \"mock/mock_dcp.h\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"// Due to the limitations of the add_stats callback (essentially we cannot pass"},{"line_number":37,"context_line":"// a context into it) we instead have a single, global `vals` map. The"},{"line_number":38,"context_line":"// vals_mutex is to ensure serialised modifications to this data structure."},{"line_number":39,"context_line":"// There is also an optimized add_stats callback (add_individual_stat) which"},{"line_number":40,"context_line":"// checks for one stat (and hence doesn\u0027t have to keep a map of all of them)."},{"line_number":41,"context_line":"// the vals_mutex is also used for serializing access to it\u0027s data"},{"line_number":42,"context_line":"// (requested_stat_name and actual_stat_value)."},{"line_number":43,"context_line":"std::mutex vals_mutex;"},{"line_number":44,"context_line":"statistic_map vals;"},{"line_number":45,"context_line":"std::string requested_stat_name;"},{"line_number":46,"context_line":"std::string actual_stat_value;"},{"line_number":47,"context_line":"// The get_stats_mutex is used to serialise modifications to it to allow"},{"line_number":48,"context_line":"// multiple threads to request stats."},{"line_number":49,"context_line":"std::mutex get_stats_mutex;"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"bool dump_stats \u003d false;"},{"line_number":52,"context_line":"std::atomic\u003cprotocol_binary_response_status\u003e last_status("}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_7005081f","line":49,"range":{"start_line":36,"start_character":0,"end_line":49,"end_character":27},"in_reply_to":"3d32a1d3_8d8b45da","updated":"2016-10-19 16:48:29.000000000","message":"Done","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"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":"eff2721dd6b0da8700819a22daf6fb344986b0b9","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        std::cout \u003c\u003c \"stat[\" \u003c\u003c k \u003c\u003c \"] \u003d \" \u003c\u003c v \u003c\u003c std::endl;"},{"line_number":236,"context_line":"    }"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    // Changing vals requires vals_mutex"},{"line_number":239,"context_line":"    std::lock_guard\u003cstd::mutex\u003e lh(vals_mutex);"},{"line_number":240,"context_line":"    vals[k] \u003d v;"},{"line_number":241,"context_line":"}"}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_ad900909","line":238,"range":{"start_line":238,"start_character":0,"end_line":238,"end_character":40},"updated":"2016-10-19 15:10:52.000000000","message":"I think the comment is a little redundant for every use, as long as we explain things well in the comment where it\u0027s declared.","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"author":{"_account_id":1001547,"name":"Dan Owen","email":"owend@couchbase.com","username":"owend","avatars":[{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"8dc8b80a1b199a95594ad910d3ca41df1d384ad7","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        std::cout \u003c\u003c \"stat[\" \u003c\u003c k \u003c\u003c \"] \u003d \" \u003c\u003c v \u003c\u003c std::endl;"},{"line_number":236,"context_line":"    }"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    // Changing vals requires vals_mutex"},{"line_number":239,"context_line":"    std::lock_guard\u003cstd::mutex\u003e lh(vals_mutex);"},{"line_number":240,"context_line":"    vals[k] \u003d v;"},{"line_number":241,"context_line":"}"}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_4df06d57","line":238,"range":{"start_line":238,"start_character":0,"end_line":238,"end_character":40},"in_reply_to":"3d32a1d3_ad900909","updated":"2016-10-19 16:48:29.000000000","message":"Done","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"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":"eff2721dd6b0da8700819a22daf6fb344986b0b9","unresolved":false,"context_lines":[{"line_number":246,"context_line":" */"},{"line_number":247,"context_line":"void add_individual_stat(const char *key, const uint16_t klen, const char *val,"},{"line_number":248,"context_line":"               const uint32_t vlen, const void *cookie) {"},{"line_number":249,"context_line":"    // Accessing actual_stat_value and requested_stat_name requires vals_mutex"},{"line_number":250,"context_line":"    std::lock_guard\u003cstd::mutex\u003e lh(vals_mutex);"},{"line_number":251,"context_line":"    if (actual_stat_value.empty() \u0026\u0026"},{"line_number":252,"context_line":"        requested_stat_name.compare(0, requested_stat_name.size(),"},{"line_number":253,"context_line":"                                    key, klen) \u003d\u003d 0) {"}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_ed9a0125","line":250,"range":{"start_line":249,"start_character":0,"end_line":250,"end_character":47},"updated":"2016-10-19 15:10:52.000000000","message":"We can remove this, as any call of `add_individual_stat` should be done with `get_stat.mutex`","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"author":{"_account_id":1001547,"name":"Dan Owen","email":"owend@couchbase.com","username":"owend","avatars":[{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"8dc8b80a1b199a95594ad910d3ca41df1d384ad7","unresolved":false,"context_lines":[{"line_number":246,"context_line":" */"},{"line_number":247,"context_line":"void add_individual_stat(const char *key, const uint16_t klen, const char *val,"},{"line_number":248,"context_line":"               const uint32_t vlen, const void *cookie) {"},{"line_number":249,"context_line":"    // Accessing actual_stat_value and requested_stat_name requires vals_mutex"},{"line_number":250,"context_line":"    std::lock_guard\u003cstd::mutex\u003e lh(vals_mutex);"},{"line_number":251,"context_line":"    if (actual_stat_value.empty() \u0026\u0026"},{"line_number":252,"context_line":"        requested_stat_name.compare(0, requested_stat_name.size(),"},{"line_number":253,"context_line":"                                    key, klen) \u003d\u003d 0) {"}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_6ded317a","line":250,"range":{"start_line":249,"start_character":0,"end_line":250,"end_character":47},"in_reply_to":"3d32a1d3_ed9a0125","updated":"2016-10-19 16:48:29.000000000","message":"Done","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"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":"eff2721dd6b0da8700819a22daf6fb344986b0b9","unresolved":false,"context_lines":[{"line_number":258,"context_line":"void add_individual_histo_stat(const char *key, const uint16_t klen,"},{"line_number":259,"context_line":"                               const char *val, const uint32_t vlen,"},{"line_number":260,"context_line":"                               const void *cookie) {"},{"line_number":261,"context_line":"    // Accessing requested_stat_length and actual_stat_value requires vals_mutex"},{"line_number":262,"context_line":"    std::lock_guard\u003cstd::mutex\u003e lh(vals_mutex);"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    /* Convert key to string */"},{"line_number":265,"context_line":"    std::string key_str(key, klen);"}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_0d8035b2","line":262,"range":{"start_line":261,"start_character":0,"end_line":262,"end_character":47},"updated":"2016-10-19 15:10:52.000000000","message":"Ditto","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"author":{"_account_id":1001547,"name":"Dan Owen","email":"owend@couchbase.com","username":"owend","avatars":[{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"8dc8b80a1b199a95594ad910d3ca41df1d384ad7","unresolved":false,"context_lines":[{"line_number":258,"context_line":"void add_individual_histo_stat(const char *key, const uint16_t klen,"},{"line_number":259,"context_line":"                               const char *val, const uint32_t vlen,"},{"line_number":260,"context_line":"                               const void *cookie) {"},{"line_number":261,"context_line":"    // Accessing requested_stat_length and actual_stat_value requires vals_mutex"},{"line_number":262,"context_line":"    std::lock_guard\u003cstd::mutex\u003e lh(vals_mutex);"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    /* Convert key to string */"},{"line_number":265,"context_line":"    std::string key_str(key, klen);"}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_8dfa6533","line":262,"range":{"start_line":261,"start_character":0,"end_line":262,"end_character":47},"in_reply_to":"3d32a1d3_0d8035b2","updated":"2016-10-19 16:48:29.000000000","message":"Done","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"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":"eff2721dd6b0da8700819a22daf6fb344986b0b9","unresolved":false,"context_lines":[{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"    // Try up to three times to verify the bucket is missing.  Bucket"},{"line_number":1059,"context_line":"    // state changes are async."},{"line_number":1060,"context_line":"    std::lock_guard\u003cstd::mutex\u003e lh(get_stats_mutex);"},{"line_number":1061,"context_line":"    {"},{"line_number":1062,"context_line":"        // Clearing vals requires vals_mutex"},{"line_number":1063,"context_line":"        std::lock_guard\u003cstd::mutex\u003e lh(vals_mutex);"}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_2d7df9ee","line":1060,"range":{"start_line":1060,"start_character":4,"end_line":1060,"end_character":52},"updated":"2016-10-19 15:10:52.000000000","message":"I don\u0027t believe we need this (as this will call the \"low-level\" get stats API and hence will just end up calling the add_stat method which updates `vals` map.","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"author":{"_account_id":1001547,"name":"Dan Owen","email":"owend@couchbase.com","username":"owend","avatars":[{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"8dc8b80a1b199a95594ad910d3ca41df1d384ad7","unresolved":false,"context_lines":[{"line_number":1057,"context_line":""},{"line_number":1058,"context_line":"    // Try up to three times to verify the bucket is missing.  Bucket"},{"line_number":1059,"context_line":"    // state changes are async."},{"line_number":1060,"context_line":"    std::lock_guard\u003cstd::mutex\u003e lh(get_stats_mutex);"},{"line_number":1061,"context_line":"    {"},{"line_number":1062,"context_line":"        // Clearing vals requires vals_mutex"},{"line_number":1063,"context_line":"        std::lock_guard\u003cstd::mutex\u003e lh(vals_mutex);"}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_2de33994","line":1060,"range":{"start_line":1060,"start_character":4,"end_line":1060,"end_character":52},"in_reply_to":"3d32a1d3_2d7df9ee","updated":"2016-10-19 16:48:29.000000000","message":"Done","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"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":"eff2721dd6b0da8700819a22daf6fb344986b0b9","unresolved":false,"context_lines":[{"line_number":1163,"context_line":"    std::lock_guard\u003cstd::mutex\u003e lh(get_stats_mutex);"},{"line_number":1164,"context_line":""},{"line_number":1165,"context_line":"    {"},{"line_number":1166,"context_line":"        // changing requested_stat_name and actual_stat_value requires"},{"line_number":1167,"context_line":"        // vals_mutex"},{"line_number":1168,"context_line":"        std::lock_guard\u003cstd::mutex\u003e lh2(vals_mutex);"},{"line_number":1169,"context_line":"        requested_stat_name \u003d statname;"},{"line_number":1170,"context_line":"        actual_stat_value.clear();"},{"line_number":1171,"context_line":"    }"},{"line_number":1172,"context_line":""},{"line_number":1173,"context_line":"    ENGINE_ERROR_CODE err \u003d h1-\u003eget_stats(h, NULL, statkey,"}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_4d8a2dd2","line":1170,"range":{"start_line":1166,"start_character":0,"end_line":1170,"end_character":34},"updated":"2016-10-19 15:10:52.000000000","message":"Similar here, remove the lock here (as get_stat.mutex should be used to guard these two fields), but ensure that get_stats.mutex is held for the complete duration of this function call.","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"author":{"_account_id":1001547,"name":"Dan Owen","email":"owend@couchbase.com","username":"owend","avatars":[{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"8dc8b80a1b199a95594ad910d3ca41df1d384ad7","unresolved":false,"context_lines":[{"line_number":1163,"context_line":"    std::lock_guard\u003cstd::mutex\u003e lh(get_stats_mutex);"},{"line_number":1164,"context_line":""},{"line_number":1165,"context_line":"    {"},{"line_number":1166,"context_line":"        // changing requested_stat_name and actual_stat_value requires"},{"line_number":1167,"context_line":"        // vals_mutex"},{"line_number":1168,"context_line":"        std::lock_guard\u003cstd::mutex\u003e lh2(vals_mutex);"},{"line_number":1169,"context_line":"        requested_stat_name \u003d statname;"},{"line_number":1170,"context_line":"        actual_stat_value.clear();"},{"line_number":1171,"context_line":"    }"},{"line_number":1172,"context_line":""},{"line_number":1173,"context_line":"    ENGINE_ERROR_CODE err \u003d h1-\u003eget_stats(h, NULL, statkey,"}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_ede0418a","line":1170,"range":{"start_line":1166,"start_character":0,"end_line":1170,"end_character":34},"in_reply_to":"3d32a1d3_4d8a2dd2","updated":"2016-10-19 16:48:29.000000000","message":"Done","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"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":"eff2721dd6b0da8700819a22daf6fb344986b0b9","unresolved":false,"context_lines":[{"line_number":1179,"context_line":"    }"},{"line_number":1180,"context_line":""},{"line_number":1181,"context_line":"    {"},{"line_number":1182,"context_line":"        // accessing actual_stat_value requires vals_mutex"},{"line_number":1183,"context_line":"        std::lock_guard\u003cstd::mutex\u003e lh2(vals_mutex);"},{"line_number":1184,"context_line":"        if (actual_stat_value.empty()) {"},{"line_number":1185,"context_line":"            throw std::out_of_range(std::string(\"Failed to find requested \""},{"line_number":1186,"context_line":"                    \"statname \u0027\") + statname + \"\u0027\");"}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_6d87f1c8","line":1183,"range":{"start_line":1182,"start_character":7,"end_line":1183,"end_character":52},"updated":"2016-10-19 15:10:52.000000000","message":"Again here, don\u0027t need vals_mutex for actual_stat_value.","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"author":{"_account_id":1001547,"name":"Dan Owen","email":"owend@couchbase.com","username":"owend","avatars":[{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"8dc8b80a1b199a95594ad910d3ca41df1d384ad7","unresolved":false,"context_lines":[{"line_number":1179,"context_line":"    }"},{"line_number":1180,"context_line":""},{"line_number":1181,"context_line":"    {"},{"line_number":1182,"context_line":"        // accessing actual_stat_value requires vals_mutex"},{"line_number":1183,"context_line":"        std::lock_guard\u003cstd::mutex\u003e lh2(vals_mutex);"},{"line_number":1184,"context_line":"        if (actual_stat_value.empty()) {"},{"line_number":1185,"context_line":"            throw std::out_of_range(std::string(\"Failed to find requested \""},{"line_number":1186,"context_line":"                    \"statname \u0027\") + statname + \"\u0027\");"}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_cddb7de1","line":1183,"range":{"start_line":1182,"start_character":7,"end_line":1183,"end_character":52},"in_reply_to":"3d32a1d3_6d87f1c8","updated":"2016-10-19 16:48:29.000000000","message":"Done","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"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":"eff2721dd6b0da8700819a22daf6fb344986b0b9","unresolved":false,"context_lines":[{"line_number":1250,"context_line":"                        const char *statname, const char *statkey,"},{"line_number":1251,"context_line":"                        const Histo_stat_info histo_info)"},{"line_number":1252,"context_line":"{"},{"line_number":1253,"context_line":"    std::lock_guard\u003cstd::mutex\u003e lh(get_stats_mutex);"},{"line_number":1254,"context_line":""},{"line_number":1255,"context_line":"    histogram_stat_int_value \u003d new HistogramStats\u003cint\u003e();"},{"line_number":1256,"context_line":"    get_histo_stat(h, h1, statname, statkey);"}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_8d74250a","line":1253,"range":{"start_line":1253,"start_character":0,"end_line":1253,"end_character":52},"updated":"2016-10-19 15:10:52.000000000","message":"Remove this from here, and instead move to line 1277.","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"author":{"_account_id":1001547,"name":"Dan Owen","email":"owend@couchbase.com","username":"owend","avatars":[{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"8dc8b80a1b199a95594ad910d3ca41df1d384ad7","unresolved":false,"context_lines":[{"line_number":1250,"context_line":"                        const char *statname, const char *statkey,"},{"line_number":1251,"context_line":"                        const Histo_stat_info histo_info)"},{"line_number":1252,"context_line":"{"},{"line_number":1253,"context_line":"    std::lock_guard\u003cstd::mutex\u003e lh(get_stats_mutex);"},{"line_number":1254,"context_line":""},{"line_number":1255,"context_line":"    histogram_stat_int_value \u003d new HistogramStats\u003cint\u003e();"},{"line_number":1256,"context_line":"    get_histo_stat(h, h1, statname, statkey);"}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_6d60d13c","line":1253,"range":{"start_line":1253,"start_character":0,"end_line":1253,"end_character":52},"in_reply_to":"3d32a1d3_8d74250a","updated":"2016-10-19 16:48:29.000000000","message":"Done","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"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":"eff2721dd6b0da8700819a22daf6fb344986b0b9","unresolved":false,"context_lines":[{"line_number":1275,"context_line":"                                  const char *statname, const char *statkey)"},{"line_number":1276,"context_line":"{"},{"line_number":1277,"context_line":"    {"},{"line_number":1278,"context_line":"        // Changing requested_stat_name requires vals_mutex"},{"line_number":1279,"context_line":"        std::lock_guard\u003cstd::mutex\u003e lh(vals_mutex);"},{"line_number":1280,"context_line":"        requested_stat_name \u003d statname;"},{"line_number":1281,"context_line":"        /* Histo stats for tasks are append as task_name_START,END."},{"line_number":1282,"context_line":"           Hence append _ */"}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_ad79e900","line":1279,"range":{"start_line":1278,"start_character":8,"end_line":1279,"end_character":51},"updated":"2016-10-19 15:10:52.000000000","message":"Remove this, use get_stat.mutex instead.","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"author":{"_account_id":1001547,"name":"Dan Owen","email":"owend@couchbase.com","username":"owend","avatars":[{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"8dc8b80a1b199a95594ad910d3ca41df1d384ad7","unresolved":false,"context_lines":[{"line_number":1275,"context_line":"                                  const char *statname, const char *statkey)"},{"line_number":1276,"context_line":"{"},{"line_number":1277,"context_line":"    {"},{"line_number":1278,"context_line":"        // Changing requested_stat_name requires vals_mutex"},{"line_number":1279,"context_line":"        std::lock_guard\u003cstd::mutex\u003e lh(vals_mutex);"},{"line_number":1280,"context_line":"        requested_stat_name \u003d statname;"},{"line_number":1281,"context_line":"        /* Histo stats for tasks are append as task_name_START,END."},{"line_number":1282,"context_line":"           Hence append _ */"}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_8dd185c7","line":1279,"range":{"start_line":1278,"start_character":8,"end_line":1279,"end_character":51},"in_reply_to":"3d32a1d3_ad79e900","updated":"2016-10-19 16:48:29.000000000","message":"Done","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"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":"eff2721dd6b0da8700819a22daf6fb344986b0b9","unresolved":false,"context_lines":[{"line_number":1296,"context_line":""},{"line_number":1297,"context_line":"statistic_map get_all_stats(ENGINE_HANDLE *h,ENGINE_HANDLE_V1 *h1,"},{"line_number":1298,"context_line":"                            const char *statset) {"},{"line_number":1299,"context_line":"    std::lock_guard\u003cstd::mutex\u003e lh(get_stats_mutex);"},{"line_number":1300,"context_line":"    {"},{"line_number":1301,"context_line":"        // Clearing vals requires vals_mutex"},{"line_number":1302,"context_line":"        std::lock_guard\u003cstd::mutex\u003e lh2(vals_mutex);"}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_cd6e1d34","line":1299,"range":{"start_line":1299,"start_character":0,"end_line":1299,"end_character":52},"updated":"2016-10-19 15:10:52.000000000","message":"Remove this, the global get (all) stats should be guarded by vals_mutex.","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"author":{"_account_id":1001547,"name":"Dan Owen","email":"owend@couchbase.com","username":"owend","avatars":[{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"8dc8b80a1b199a95594ad910d3ca41df1d384ad7","unresolved":false,"context_lines":[{"line_number":1296,"context_line":""},{"line_number":1297,"context_line":"statistic_map get_all_stats(ENGINE_HANDLE *h,ENGINE_HANDLE_V1 *h1,"},{"line_number":1298,"context_line":"                            const char *statset) {"},{"line_number":1299,"context_line":"    std::lock_guard\u003cstd::mutex\u003e lh(get_stats_mutex);"},{"line_number":1300,"context_line":"    {"},{"line_number":1301,"context_line":"        // Clearing vals requires vals_mutex"},{"line_number":1302,"context_line":"        std::lock_guard\u003cstd::mutex\u003e lh2(vals_mutex);"}],"source_content_type":"text/x-c","patch_set":12,"id":"3d32a1d3_add649ba","line":1299,"range":{"start_line":1299,"start_character":0,"end_line":1299,"end_character":52},"in_reply_to":"3d32a1d3_cd6e1d34","updated":"2016-10-19 16:48:29.000000000","message":"Done","commit_id":"5c3da5b221b75f57a6de77fcbe57701fae48dd3d"},{"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":"da0c1836db23c6cdf9645937eba90c4f890b9a3d","unresolved":false,"context_lines":[{"line_number":1237,"context_line":"                        const char *statname, const char *statkey,"},{"line_number":1238,"context_line":"                        const Histo_stat_info histo_info)"},{"line_number":1239,"context_line":"{"},{"line_number":1240,"context_line":"    histogram_stat_int_value \u003d new HistogramStats\u003cint\u003e();"},{"line_number":1241,"context_line":"    get_histo_stat(h, h1, statname, statkey);"},{"line_number":1242,"context_line":""},{"line_number":1243,"context_line":"    /* Get the necessary info from the histogram */"}],"source_content_type":"text/x-c","patch_set":13,"id":"3d32a1d3_503644ec","line":1240,"range":{"start_line":1240,"start_character":4,"end_line":1240,"end_character":28},"updated":"2016-10-19 16:57:01.000000000","message":"I think this variable is also part of the `get_stat` context - could you check, and if so we need to guard it with the same mutex (and move the lock_guard for the mutex from the get_histo_stat() func below (line 1262) to here (so we don\u0027t try to assign to this variable multiple times concurrently).","commit_id":"997aba8f47fe0211a32c4c79350e6669d0f8d9b1"},{"author":{"_account_id":1001547,"name":"Dan Owen","email":"owend@couchbase.com","username":"owend","avatars":[{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/0761a726bc37606caee7ec6bf566deca.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d770c18c342bbfac61ed92ca760ef4766441a849","unresolved":false,"context_lines":[{"line_number":1237,"context_line":"                        const char *statname, const char *statkey,"},{"line_number":1238,"context_line":"                        const Histo_stat_info histo_info)"},{"line_number":1239,"context_line":"{"},{"line_number":1240,"context_line":"    histogram_stat_int_value \u003d new HistogramStats\u003cint\u003e();"},{"line_number":1241,"context_line":"    get_histo_stat(h, h1, statname, statkey);"},{"line_number":1242,"context_line":""},{"line_number":1243,"context_line":"    /* Get the necessary info from the histogram */"}],"source_content_type":"text/x-c","patch_set":13,"id":"3d32a1d3_b04f8044","line":1240,"range":{"start_line":1240,"start_character":4,"end_line":1240,"end_character":28},"in_reply_to":"3d32a1d3_503644ec","updated":"2016-10-19 17:34:31.000000000","message":"Agreed - so made the change.  The histogram_stat_int_value was marked as a static variable.  (which I think means to limit its scope).\nAs the other variable were not marked static, I removed the static from this variable also.","commit_id":"997aba8f47fe0211a32c4c79350e6669d0f8d9b1"},{"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":"5392853d23c94600565359beffa8a3e3af560149","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    uint64_t total_count;"},{"line_number":92,"context_line":"};"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"// Due to the limitations of the add_stats callback (essentially we cannot pass"},{"line_number":95,"context_line":"// a context into it) we instead have a single, global `vals` map. The"},{"line_number":96,"context_line":"// vals_mutex is to ensure serialised modifications to this data structure."},{"line_number":97,"context_line":"std::mutex vals_mutex;"}],"source_content_type":"text/x-c","patch_set":14,"id":"3d32a1d3_5059e40c","line":94,"updated":"2016-10-19 17:39:45.000000000","message":"Please move this back to the original place - by moving it down here you\u0027e making it harder to track changes.\n\nFor the HistogramStats\u003c\u003e, just forward-declare it - I think this should work:\n\n template\u003ctypename T\u003e\n class HistogramStats;","commit_id":"5559df386f480fffaa2165cd525a7750bebba4a9"}]}
