)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"8568588ba9e4cd723bbbb1e3a3e5f9eb850d69fc","unresolved":false,"context_lines":[{"line_number":15,"context_line":"ceilometer compute agents will call nova client in a very short time"},{"line_number":16,"context_line":"period which may lead large number of requests to nova client in"},{"line_number":17,"context_line":"short time. As a result, the nova client can not handle so many"},{"line_number":18,"context_line":"requests in short time, and ceilometer ompute agent can\u0027t fetch"},{"line_number":19,"context_line":"metrics."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"So we here shuffle agents to start polling task in order to fluff up"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"1a930d6b_37c1262f","line":18,"updated":"2015-01-21 11:53:18.000000000","message":"Missing c in compute","commit_id":"e704d143075589a6c287f1346281b6d98d69eb18"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"c1a56f6815a70d0421a29f9fc0091965b6013cbb","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Shuffle agents to send request"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"For each polling inetervals, Ceilometer compute agent will trigger"},{"line_number":10,"context_line":"nova client directly to acquire the list of VMs."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"However, there\u0027s a potential risk that the workload for nova client"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"1a930d6b_23b54231","line":9,"updated":"2015-01-22 11:23:49.000000000","message":"s/inetervals/interval/","commit_id":"0fae206ae8b72c81d1bfd1c204270333738dc6dc"},{"author":{"_account_id":14118,"name":"mizeng","email":"mizeng@ebaysf.com","username":"mizeng"},"change_message_id":"ae11218bbb4d3c99673091d48b5c60e3a928609e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Shuffle agents to send request"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"For each polling inetervals, Ceilometer compute agent will trigger"},{"line_number":10,"context_line":"nova client directly to acquire the list of VMs."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"However, there\u0027s a potential risk that the workload for nova client"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"1a930d6b_88a3544e","line":9,"in_reply_to":"1a930d6b_23b54231","updated":"2015-01-23 01:20:37.000000000","message":"good catch :) thanks","commit_id":"0fae206ae8b72c81d1bfd1c204270333738dc6dc"}],"ceilometer/agent/base.py":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"f7e34c26489db2e3f019353e8ed2b6da176a36b9","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"OPTS \u003d ["},{"line_number":42,"context_line":"    cfg.IntOpt(\u0027shuffle_time_before_polling_task\u0027,"},{"line_number":43,"context_line":"               default\u003d0,"},{"line_number":44,"context_line":"               help\u003d\u0027To reduce large requests at same time to Nova or other \u0027"},{"line_number":45,"context_line":"                    \u0027components from different compute agents, shuffle \u0027"},{"line_number":46,"context_line":"                    \u0027start time of polling task.\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_234655c0","line":43,"updated":"2015-01-21 06:49:58.000000000","message":"nit: if you set min\u003d0 in this place, then L252-L255 can be simplified to random.randint(0, cfg.CONF.shuffle_time_before_polling_task). But current is ok too\n\nsee: https://github.com/openstack/oslo.config/blob/master/oslo_config/types.py#L132","commit_id":"6e098330851fb7c756ca6b14e2fc421196624df4"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"f7e34c26489db2e3f019353e8ed2b6da176a36b9","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                    \u0027start time of polling task.\u0027),"},{"line_number":47,"context_line":"]"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"cfg.CONF.register_opts(OPTS)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class PollsterListForbidden(Exception):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a930d6b_c325910b","line":49,"updated":"2015-01-21 06:49:58.000000000","message":"-1: you need to register these opts in ceilometer/opts.py","commit_id":"6e098330851fb7c756ca6b14e2fc421196624df4"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"8568588ba9e4cd723bbbb1e3a3e5f9eb850d69fc","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            self.tg.add_timer(interval,"},{"line_number":242,"context_line":"                              self.interval_task,"},{"line_number":243,"context_line":"                              initial_delay\u003dinterval if delay_start else None,"},{"line_number":244,"context_line":"                              task\u003dtask)"},{"line_number":245,"context_line":"        self.tg.add_timer(cfg.CONF.coordination.heartbeat,"},{"line_number":246,"context_line":"                          self.partition_coordinator.heartbeat)"},{"line_number":247,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_d73e2229","side":"PARENT","line":244,"updated":"2015-01-21 11:53:18.000000000","message":"Now that the conditional here has gone somewhat long I would prefer to see it prior to the call to add_timer, assigning to a variable that is used in add_timer. It will read a bit easier.","commit_id":"d407213722e6b1c9432850a746f7d5b836d4eb3c"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"1f8be9c5f5747a83c34ac4da94644f9c1588f110","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                    \u0027start time of polling task.\u0027),"},{"line_number":47,"context_line":"]"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"cfg.CONF.register_opts(OPTS)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class PollsterListForbidden(Exception):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_5402073f","line":49,"updated":"2015-01-22 10:45:51.000000000","message":"let\u0027s move this option to the \u0027polling\u0027 group, not the DEFAULT one - like used here https://github.com/openstack/ceilometer/blob/master/ceilometer/agent/manager.py#L35","commit_id":"689c841b60db70a7795f113d592a2b96077cc808"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"bafdbd19e13b940039c2a6f2a97931c2adee7682","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                    \u0027start time of polling task.\u0027),"},{"line_number":47,"context_line":"]"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"cfg.CONF.register_opts(OPTS, group\u003d\"polling\")"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class PollsterListForbidden(Exception):"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_a1b089f5","line":49,"updated":"2015-01-31 07:14:50.000000000","message":"it seems here the cfg is registered in the group \u0027polling\u0027, but in the opts.py, it is generated in the default group.\n\nI don\u0027t think we need the polling group here, at least not now.","commit_id":"0fae206ae8b72c81d1bfd1c204270333738dc6dc"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"5b91d8c858439267fbfed143be61a668d9ab2368","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            0, cfg.CONF.polling.shuffle_time_before_polling_task)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        for interval, task in six.iteritems(self.setup_polling_tasks()):"},{"line_number":256,"context_line":"            delay_time \u003d interval + ("},{"line_number":257,"context_line":"                delay_polling_time if delay_start else delay_polling_time)"},{"line_number":258,"context_line":"            self.tg.add_timer(interval,"},{"line_number":259,"context_line":"                              self.interval_task,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a930d6b_061e9463","line":256,"updated":"2015-01-22 12:05:58.000000000","message":"so delay_polling_time at any case :)? The following \u0027if\u0027 looks wrong. Did you mean \ndelay_time \u003d (interval + delay_polling_time) if delay_start else delay_polling_time\n?","commit_id":"0fae206ae8b72c81d1bfd1c204270333738dc6dc"},{"author":{"_account_id":14118,"name":"mizeng","email":"mizeng@ebaysf.com","username":"mizeng"},"change_message_id":"ae11218bbb4d3c99673091d48b5c60e3a928609e","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            0, cfg.CONF.polling.shuffle_time_before_polling_task)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        for interval, task in six.iteritems(self.setup_polling_tasks()):"},{"line_number":256,"context_line":"            delay_time \u003d interval + ("},{"line_number":257,"context_line":"                delay_polling_time if delay_start else delay_polling_time)"},{"line_number":258,"context_line":"            self.tg.add_timer(interval,"},{"line_number":259,"context_line":"                              self.interval_task,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a930d6b_a8dbb0eb","line":256,"in_reply_to":"1a930d6b_061e9463","updated":"2015-01-23 01:20:37.000000000","message":"yeah. However, delay_polling_time will be \"0\" when cfg.CONF.polling.shuffle_time_before_polling_task is 0.","commit_id":"0fae206ae8b72c81d1bfd1c204270333738dc6dc"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"bafdbd19e13b940039c2a6f2a97931c2adee7682","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            0, cfg.CONF.polling.shuffle_time_before_polling_task)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        for interval, task in six.iteritems(self.setup_polling_tasks()):"},{"line_number":256,"context_line":"            delay_time \u003d interval + ("},{"line_number":257,"context_line":"                delay_polling_time if delay_start else delay_polling_time)"},{"line_number":258,"context_line":"            self.tg.add_timer(interval,"},{"line_number":259,"context_line":"                              self.interval_task,"}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_61a691c3","line":256,"in_reply_to":"1a930d6b_1b33ec63","updated":"2015-01-31 07:14:50.000000000","message":"I think it would be better to have the shuttle time added into the interval if delay_start, to keep all things unified.\n\nipmi should be fine, because I don\u0027t think ipmi agent would use either tooz or set this shuffle config otpions.","commit_id":"0fae206ae8b72c81d1bfd1c204270333738dc6dc"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"16a5b6232d2ab36b7d564b8e65490c2e85a328f3","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            0, cfg.CONF.polling.shuffle_time_before_polling_task)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        for interval, task in six.iteritems(self.setup_polling_tasks()):"},{"line_number":256,"context_line":"            delay_time \u003d interval + ("},{"line_number":257,"context_line":"                delay_polling_time if delay_start else delay_polling_time)"},{"line_number":258,"context_line":"            self.tg.add_timer(interval,"},{"line_number":259,"context_line":"                              self.interval_task,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a930d6b_1b33ec63","line":256,"in_reply_to":"1a930d6b_a8dbb0eb","updated":"2015-01-26 08:44:27.000000000","message":"I think what you mean here may be:\n\n    delay_time \u003d (interval + delay_polling_time \n        if delay_start else delay_polling_time)\n\nnit: considering the central coordinate will not create request peak, and compute will not use coordinate (ipmi is same IIUC), so maybe\n\n    delay_time \u003d interval if delay_start else delay_polling_time\n\nis better. I\u0027m not sure if delay time will cause some issues for ipmi pollsters (I think not), @Lianhao Lu","commit_id":"0fae206ae8b72c81d1bfd1c204270333738dc6dc"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"db2b79b8ab66be528747e601d3d9f79fc83da617","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            0, cfg.CONF.shuffle_time_before_polling_task)"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        for interval, task in six.iteritems(self.setup_polling_tasks()):"},{"line_number":256,"context_line":"            delay_time \u003d interval + delay_polling_time if delay_start else \\"},{"line_number":257,"context_line":"                delay_polling_time"},{"line_number":258,"context_line":"            self.tg.add_timer(interval,"},{"line_number":259,"context_line":"                              self.interval_task,"}],"source_content_type":"text/x-python","patch_set":11,"id":"da86d52c_6a181885","line":256,"updated":"2015-02-02 02:44:20.000000000","message":"I think the \\ will trigger pep8 failure, if not, use () is better","commit_id":"3e7cba8c0f95308d9b172130a7b18451216dcb6c"}],"ceilometer/compute/discovery.py":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"57ffae51daaa5cd5ce841c30d60162ee53fb7c57","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    cfg.IntOpt(\u0027random_sleep_time_upper_limit\u0027,"},{"line_number":31,"context_line":"               default\u003d0,"},{"line_number":32,"context_line":"               help\u003d\u0027To reduce large requests at same time to Nova from \u0027"},{"line_number":33,"context_line":"                    \u0027different compute agents, sleep random time and then\u0027"},{"line_number":34,"context_line":"                    \u0027then call nova client\u0027),"},{"line_number":35,"context_line":"]"},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_74d9e327","line":33,"updated":"2015-01-20 03:17:37.000000000","message":"s/then then/then/","commit_id":"a1f511ed57826d7bfa521f36482edb1dc9f55d19"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"57ffae51daaa5cd5ce841c30d60162ee53fb7c57","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                    \u0027then call nova client\u0027),"},{"line_number":35,"context_line":"]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"COMPUTE_OPTS \u003d ["},{"line_number":38,"context_line":"    cfg.BoolOpt(\u0027workload_partitioning\u0027,"},{"line_number":39,"context_line":"                default\u003dFalse,"},{"line_number":40,"context_line":"                help\u003d\u0027Enable work-load partitioning, allowing multiple \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_34ee7bb6","line":37,"updated":"2015-01-20 03:17:37.000000000","message":"you need to add this in ceilometer/opts.py","commit_id":"a1f511ed57826d7bfa521f36482edb1dc9f55d19"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"57ffae51daaa5cd5ce841c30d60162ee53fb7c57","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        if cfg.CONF.random_sleep_time_upper_limit \u003e 0:"},{"line_number":56,"context_line":"            sleep_time \u003d random.randint(0,"},{"line_number":57,"context_line":"                                        cfg.CONF.random_sleep_time_upper_limit)"},{"line_number":58,"context_line":"            time.sleep(sleep_time)"},{"line_number":59,"context_line":"            LOG.debug(\"After %s random sleep, start to call nova client to \""},{"line_number":60,"context_line":"                      \"discover instances.\", sleep_time)"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_f49eb354","line":58,"updated":"2015-01-20 03:17:37.000000000","message":"we don\u0027t monkey patch the time module, this is not safe IIUC. I suggest to use eventlet.sleep instead","commit_id":"a1f511ed57826d7bfa521f36482edb1dc9f55d19"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"49894d0484373b59310eb7fdea681cef7a388fd7","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from ceilometer import nova_client"},{"line_number":23,"context_line":"from ceilometer.openstack.common import log"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"import random"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_6f9d906c","line":25,"updated":"2015-01-20 04:36:46.000000000","message":"-1: mv this to first group:\n\nimport random\n\nimport eventlet\nfrom oslo_config import cfg","commit_id":"e0b389024b82f1bee85b54766883193fafdfd405"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"49894d0484373b59310eb7fdea681cef7a388fd7","unresolved":false,"context_lines":[{"line_number":28,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"OPTS \u003d ["},{"line_number":31,"context_line":"    cfg.IntOpt(\u0027random_sleep_time_upper_limit\u0027,"},{"line_number":32,"context_line":"               default\u003d0,"},{"line_number":33,"context_line":"               help\u003d\u0027To reduce large requests at same time to Nova from \u0027"},{"line_number":34,"context_line":"                    \u0027different compute agents, sleep random time and then\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_afacd889","line":31,"updated":"2015-01-20 04:36:46.000000000","message":"this option name is not so clear for end user, let\u0027s find another one if you agree with the comment at L56","commit_id":"e0b389024b82f1bee85b54766883193fafdfd405"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"49894d0484373b59310eb7fdea681cef7a388fd7","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def discover(self, manager, param\u003dNone):"},{"line_number":55,"context_line":"        \"\"\"Discover resources to monitor.\"\"\""},{"line_number":56,"context_line":"        if cfg.CONF.random_sleep_time_upper_limit \u003e 0:"},{"line_number":57,"context_line":"            sleep_time \u003d random.randint(0,"},{"line_number":58,"context_line":"                                        cfg.CONF.random_sleep_time_upper_limit)"},{"line_number":59,"context_line":"            eventlet.sleep(sleep_time)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_afcdb832","line":56,"updated":"2015-01-20 04:36:46.000000000","message":"-1: after a second thought, I think this behavior will change the constant interval to a random value in each polling task\n\nwhat you want is to avoid request peak for each interval, not change the interval itself, I think we should consider delay some random time when interval task begin, which means initial delay, see https://github.com/openstack/ceilometer/blob/master/ceilometer/agent/base.py#L243   so let\u0027s change the sleep(True/False) to a truely integer value in some proper way","commit_id":"e0b389024b82f1bee85b54766883193fafdfd405"}],"doc/source/architecture.rst":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"57ffae51daaa5cd5ce841c30d60162ee53fb7c57","unresolved":false,"context_lines":[{"line_number":384,"context_line":""},{"line_number":385,"context_line":"Please notice that there\u0027s an optional config called"},{"line_number":386,"context_line":"``random_sleep_time_upper_limit`` in ceilometer.conf. Enable this by setting"},{"line_number":387,"context_line":"a integer greater than zero to shuffle agents to send requests to nova or"},{"line_number":388,"context_line":"other components to avoid large number of requests in short time."},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"The frequency of polling is controlled via the pipeline configuration."}],"source_content_type":"text/x-rst","patch_set":2,"id":"3a961159_f4f3139e","line":387,"updated":"2015-01-20 03:17:37.000000000","message":"an","commit_id":"a1f511ed57826d7bfa521f36482edb1dc9f55d19"}]}
