)]}'
{"gnocchi/storage/__init__.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"67835da9e08fd3b1776e1b240669a7485941ab53","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    cfg.StrOpt(\u0027coordination_url\u0027,"},{"line_number":37,"context_line":"               help\u003d\u0027Coordination driver URL\u0027,"},{"line_number":38,"context_line":"               default\u003d\u0027ipc://\u0027),"},{"line_number":39,"context_line":"    cfg.IntOpt(\u0027aggregation_workers_number\u0027,"},{"line_number":40,"context_line":"               default\u003d5,"},{"line_number":41,"context_line":"               help\u003d\u0027Number of workers to run during adding new measures for \u0027"},{"line_number":42,"context_line":"                    \u0027pre-aggregation needs.\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_288069f6","line":39,"updated":"2014-12-19 13:11:55.000000000","message":"Since it\u0027s _carbonara related, just go ahead and declare it there rather than importing it on the other side.","commit_id":"7b474cf8b1a20094413179ca5e0192e078caf3f6"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"f16326c90ac6844de3598b861bdafd583c4c5ff2","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    cfg.StrOpt(\u0027coordination_url\u0027,"},{"line_number":37,"context_line":"               help\u003d\u0027Coordination driver URL\u0027,"},{"line_number":38,"context_line":"               default\u003d\u0027ipc://\u0027),"},{"line_number":39,"context_line":"    cfg.IntOpt(\u0027aggregation_workers_number\u0027,"},{"line_number":40,"context_line":"               default\u003d5,"},{"line_number":41,"context_line":"               help\u003d\u0027Number of workers to run during adding new measures for \u0027"},{"line_number":42,"context_line":"                    \u0027pre-aggregation needs.\u0027),"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_88c87d56","line":39,"in_reply_to":"3a961159_288069f6","updated":"2014-12-19 13:15:08.000000000","message":"We also use same parameter in opentsdb driver and I decided to run a little ahead.","commit_id":"7b474cf8b1a20094413179ca5e0192e078caf3f6"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"67835da9e08fd3b1776e1b240669a7485941ab53","unresolved":false,"context_lines":[{"line_number":37,"context_line":"               help\u003d\u0027Coordination driver URL\u0027,"},{"line_number":38,"context_line":"               default\u003d\u0027ipc://\u0027),"},{"line_number":39,"context_line":"    cfg.IntOpt(\u0027aggregation_workers_number\u0027,"},{"line_number":40,"context_line":"               default\u003d5,"},{"line_number":41,"context_line":"               help\u003d\u0027Number of workers to run during adding new measures for \u0027"},{"line_number":42,"context_line":"                    \u0027pre-aggregation needs.\u0027),"},{"line_number":43,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_2897893b","line":40,"updated":"2014-12-19 13:11:55.000000000","message":"Having a default close to the number of CPU would be better. \nThat\u0027s the case with futures AFAIK by default using multiprocessing.cpu_count() if the value is set to None.","commit_id":"7b474cf8b1a20094413179ca5e0192e078caf3f6"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"f16326c90ac6844de3598b861bdafd583c4c5ff2","unresolved":false,"context_lines":[{"line_number":37,"context_line":"               help\u003d\u0027Coordination driver URL\u0027,"},{"line_number":38,"context_line":"               default\u003d\u0027ipc://\u0027),"},{"line_number":39,"context_line":"    cfg.IntOpt(\u0027aggregation_workers_number\u0027,"},{"line_number":40,"context_line":"               default\u003d5,"},{"line_number":41,"context_line":"               help\u003d\u0027Number of workers to run during adding new measures for \u0027"},{"line_number":42,"context_line":"                    \u0027pre-aggregation needs.\u0027),"},{"line_number":43,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_c8be05ae","line":40,"in_reply_to":"3a961159_2897893b","updated":"2014-12-19 13:15:08.000000000","message":"Ok","commit_id":"7b474cf8b1a20094413179ca5e0192e078caf3f6"}],"gnocchi/storage/_carbonara.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"413c414c5ea873d6d73a5b207a34f73fdf936b7b","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"OPTS \u003d ["},{"line_number":31,"context_line":"    cfg.IntOpt(\u0027aggregation_workers_number\u0027,"},{"line_number":32,"context_line":"               default\u003dmultiprocessing.cpu_count(),"},{"line_number":33,"context_line":"               help\u003d\u0027Number of workers to run during adding new measures for \u0027"},{"line_number":34,"context_line":"                    \u0027pre-aggregation needs.\u0027),"},{"line_number":35,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_a3171aed","line":32,"updated":"2014-12-19 13:39:01.000000000","message":"Having None by default is better because…","commit_id":"3a0bc349bdf1efe154bcdbe5218104d3b37e7e78"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"dd00f546b37b403cb6df7df4e1de28f4a142ad7b","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"OPTS \u003d ["},{"line_number":31,"context_line":"    cfg.IntOpt(\u0027aggregation_workers_number\u0027,"},{"line_number":32,"context_line":"               default\u003dmultiprocessing.cpu_count(),"},{"line_number":33,"context_line":"               help\u003d\u0027Number of workers to run during adding new measures for \u0027"},{"line_number":34,"context_line":"                    \u0027pre-aggregation needs.\u0027),"},{"line_number":35,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_4338363d","line":32,"in_reply_to":"3a961159_a3171aed","updated":"2014-12-19 13:48:41.000000000","message":"Done","commit_id":"3a0bc349bdf1efe154bcdbe5218104d3b37e7e78"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"413c414c5ea873d6d73a5b207a34f73fdf936b7b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            str(uuid.uuid4()).encode(\u0027ascii\u0027))"},{"line_number":46,"context_line":"        self.coord.start()"},{"line_number":47,"context_line":"        self.executor \u003d futures.ThreadPoolExecutor("},{"line_number":48,"context_line":"            max_workers\u003dconf.aggregation_workers_number)"},{"line_number":49,"context_line":"        # NOTE(jd) So this is a (smart?) optimization: since we\u0027re going to"},{"line_number":50,"context_line":"        # lock for each of this aggregation type, if we are using running"},{"line_number":51,"context_line":"        # Gnocchi with multiple processses, let\u0027s randomize what we iter"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_03daae4b","line":48,"updated":"2014-12-19 13:39:01.000000000","message":"If you pass None here it relies on multiprocessing.cpu_count().","commit_id":"3a0bc349bdf1efe154bcdbe5218104d3b37e7e78"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"dd00f546b37b403cb6df7df4e1de28f4a142ad7b","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            str(uuid.uuid4()).encode(\u0027ascii\u0027))"},{"line_number":46,"context_line":"        self.coord.start()"},{"line_number":47,"context_line":"        self.executor \u003d futures.ThreadPoolExecutor("},{"line_number":48,"context_line":"            max_workers\u003dconf.aggregation_workers_number)"},{"line_number":49,"context_line":"        # NOTE(jd) So this is a (smart?) optimization: since we\u0027re going to"},{"line_number":50,"context_line":"        # lock for each of this aggregation type, if we are using running"},{"line_number":51,"context_line":"        # Gnocchi with multiple processses, let\u0027s randomize what we iter"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_6340d2a5","line":48,"in_reply_to":"3a961159_03daae4b","updated":"2014-12-19 13:48:41.000000000","message":"Done","commit_id":"3a0bc349bdf1efe154bcdbe5218104d3b37e7e78"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"2f1c0fc317b712278cbf7835a67c08980cd68a7d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            str(uuid.uuid4()).encode(\u0027ascii\u0027))"},{"line_number":45,"context_line":"        self.coord.start()"},{"line_number":46,"context_line":"        self.executor \u003d futures.ThreadPoolExecutor("},{"line_number":47,"context_line":"            max_workers\u003dconf.aggregation_workers_number)"},{"line_number":48,"context_line":"        # NOTE(jd) So this is a (smart?) optimization: since we\u0027re going to"},{"line_number":49,"context_line":"        # lock for each of this aggregation type, if we are using running"},{"line_number":50,"context_line":"        # Gnocchi with multiple processses, let\u0027s randomize what we iter"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_ce460ac0","line":47,"updated":"2014-12-19 15:46:07.000000000","message":"Haha, my bad. None is only valid for ProcessPoolExecutor, so your previous patch was correct. :(","commit_id":"bf77df73303e9fbe6b0987792f88df6f860419b5"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"d25658f6d2da165b4d31bd6c679c3ae222d8f3d1","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        self._map_in_tread(self._add_measures,"},{"line_number":108,"context_line":"                           list((aggregation, metric, measures)"},{"line_number":109,"context_line":"                                for aggregation in self.aggregation_types),"},{"line_number":110,"context_line":"                           workers\u003dlen(self.aggregation_types))"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def get_cross_metric_measures(self, metrics, from_timestamp\u003dNone,"},{"line_number":113,"context_line":"                                  to_timestamp\u003dNone, aggregation\u003d\u0027mean\u0027):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_06d0b9c7","side":"PARENT","line":110,"updated":"2014-12-23 13:54:34.000000000","message":"Ilya, could you please explain why don\u0027t we need workers param any more? Does it mean that now we always have max_number of workers, what about other number of workers as it is shown here len(self.aggregation_types) why it should not be configurable?","commit_id":"a03badaf4fa908bff1b687c7ed1a116756828c6d"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"2047df33e182ed6ade997da112cbe21dabd580f0","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"OPTS \u003d ["},{"line_number":31,"context_line":"    cfg.IntOpt(\u0027aggregation_workers_number\u0027,"},{"line_number":32,"context_line":"               default\u003dmultiprocessing.cpu_count(),"},{"line_number":33,"context_line":"               help\u003d\u0027Number of workers to run during adding new measures for \u0027"},{"line_number":34,"context_line":"                    \u0027pre-aggregation needs.\u0027),"},{"line_number":35,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_a6a605a9","line":32,"updated":"2014-12-23 13:45:20.000000000","message":"This is going to be a problem, because if someone generates the default configuration file, it\u0027ll have this value by default. I think it should be None by default, and replace None with multiprocessing.cpu_count() in the code in __init__.","commit_id":"ffaed7ad8ed68908d51a83938c1737acfcde36bb"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"f098d17d321fdf398e9f4d4045496a98031a610d","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"OPTS \u003d ["},{"line_number":31,"context_line":"    cfg.IntOpt(\u0027aggregation_workers_number\u0027,"},{"line_number":32,"context_line":"               default\u003dmultiprocessing.cpu_count(),"},{"line_number":33,"context_line":"               help\u003d\u0027Number of workers to run during adding new measures for \u0027"},{"line_number":34,"context_line":"                    \u0027pre-aggregation needs.\u0027),"},{"line_number":35,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_57ac29ed","line":32,"in_reply_to":"3a961159_a6a605a9","updated":"2014-12-23 15:32:20.000000000","message":"Ok","commit_id":"ffaed7ad8ed68908d51a83938c1737acfcde36bb"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"d25658f6d2da165b4d31bd6c679c3ae222d8f3d1","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            max_workers\u003dconf.aggregation_workers_number)"},{"line_number":49,"context_line":"        # NOTE(jd) So this is a (smart?) optimization: since we\u0027re going to"},{"line_number":50,"context_line":"        # lock for each of this aggregation type, if we are using running"},{"line_number":51,"context_line":"        # Gnocchi with multiple processses, let\u0027s randomize what we iter"},{"line_number":52,"context_line":"        # over so there are less chances we fight for the same lock!"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        random.shuffle(self.aggregation_types)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_e6a64dc0","line":51,"updated":"2014-12-23 13:54:34.000000000","message":"not reference to your patch but probably it could be also improved s/processses/processes/","commit_id":"ffaed7ad8ed68908d51a83938c1737acfcde36bb"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"f098d17d321fdf398e9f4d4045496a98031a610d","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            max_workers\u003dconf.aggregation_workers_number)"},{"line_number":49,"context_line":"        # NOTE(jd) So this is a (smart?) optimization: since we\u0027re going to"},{"line_number":50,"context_line":"        # lock for each of this aggregation type, if we are using running"},{"line_number":51,"context_line":"        # Gnocchi with multiple processses, let\u0027s randomize what we iter"},{"line_number":52,"context_line":"        # over so there are less chances we fight for the same lock!"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        random.shuffle(self.aggregation_types)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_77b7653a","line":51,"in_reply_to":"3a961159_e6a64dc0","updated":"2014-12-23 15:32:20.000000000","message":"Ok","commit_id":"ffaed7ad8ed68908d51a83938c1737acfcde36bb"}],"requirements.txt":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"67835da9e08fd3b1776e1b240669a7485941ab53","unresolved":false,"context_lines":[{"line_number":14,"context_line":"pytimeparse"},{"line_number":15,"context_line":"# pytimeparse misses this dep for now"},{"line_number":16,"context_line":"future"},{"line_number":17,"context_line":"futures\u003e\u003d2.1.6"},{"line_number":18,"context_line":"requests"},{"line_number":19,"context_line":"six"},{"line_number":20,"context_line":"sqlalchemy"}],"source_content_type":"text/plain","patch_set":1,"id":"3a961159_6896f14d","line":17,"updated":"2014-12-19 13:11:55.000000000","message":"We can do that in another commit.","commit_id":"7b474cf8b1a20094413179ca5e0192e078caf3f6"},{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"f16326c90ac6844de3598b861bdafd583c4c5ff2","unresolved":false,"context_lines":[{"line_number":14,"context_line":"pytimeparse"},{"line_number":15,"context_line":"# pytimeparse misses this dep for now"},{"line_number":16,"context_line":"future"},{"line_number":17,"context_line":"futures\u003e\u003d2.1.6"},{"line_number":18,"context_line":"requests"},{"line_number":19,"context_line":"six"},{"line_number":20,"context_line":"sqlalchemy"}],"source_content_type":"text/plain","patch_set":1,"id":"3a961159_c8a7e5a5","line":17,"in_reply_to":"3a961159_6896f14d","updated":"2014-12-19 13:15:08.000000000","message":"Ok","commit_id":"7b474cf8b1a20094413179ca5e0192e078caf3f6"}]}
