)]}'
{"ceilometer/notification.py":[{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"f9894db6a1ad029ab7b865b7a23e5f360d3de1db","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        self.pipeline_manager \u003d pipeline.setup_pipeline()"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        if cfg.CONF.notification.store_events:"},{"line_number":140,"context_line":"            self.event_pipeline_manager \u003d pipeline.setup_event_pipeline()"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        self.transport \u003d messaging.get_transport()"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_0dc3788a","line":139,"updated":"2015-08-11 16:06:15.000000000","message":"It is not clear why do you move setup_event_pipeline() from _get_event_pipeline_manager here? \n\nIt seems to be redundant, or I\u0027ve missed something.","commit_id":"0e0bbff2649fe1d38dd11d098bdbb1dd8a717d16"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"0bff641036b25410b985bcc3635c9f71d6ba1b47","unresolved":false,"context_lines":[{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        self.pipeline_manager \u003d pipeline.setup_pipeline()"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        if cfg.CONF.notification.store_events:"},{"line_number":140,"context_line":"            self.event_pipeline_manager \u003d pipeline.setup_event_pipeline()"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        self.transport \u003d messaging.get_transport()"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a4dcd0f_71a76e0b","line":139,"in_reply_to":"1a4dcd0f_0dc3788a","updated":"2015-08-11 18:50:28.000000000","message":"Since setting up the pipeline is also handled in service_base:refresh_pipeline on detecting a event pipeline change similar to sample pipeline, it allows separation of concern with reload_pipeline method only dealing with getting the manager and restarting listeners.","commit_id":"0e0bbff2649fe1d38dd11d098bdbb1dd8a717d16"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"73052184958739948a10125ca950ba6bc18f64df","unresolved":false,"context_lines":[{"line_number":264,"context_line":"    def reload_pipeline(self):"},{"line_number":265,"context_line":"        LOG.info(_LI(\"Reloading notification agent and listeners.\"))"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        if cfg.CONF.refresh_pipeline_cfg:"},{"line_number":268,"context_line":"            self.pipe_manager \u003d self._get_pipe_manager("},{"line_number":269,"context_line":"                self.transport, self.pipeline_manager)"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_280589c1","line":267,"updated":"2015-08-17 15:51:57.000000000","message":"i\u0027m pretty sure this breaks workload partitioning. if we have workload_partitioning we need to call _get_pipe_manager because part of process is to build a list of notifiers (to handle different agents). if we don\u0027t call this, the notifiers will point to stale queues.","commit_id":"8d16939330759c1ee6356fec1344954854bda04c"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"b672adaaff372a34513ee1abf74e12a71bd02fd1","unresolved":false,"context_lines":[{"line_number":264,"context_line":"    def reload_pipeline(self):"},{"line_number":265,"context_line":"        LOG.info(_LI(\"Reloading notification agent and listeners.\"))"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        if cfg.CONF.refresh_pipeline_cfg:"},{"line_number":268,"context_line":"            self.pipe_manager \u003d self._get_pipe_manager("},{"line_number":269,"context_line":"                self.transport, self.pipeline_manager)"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_39206f9b","line":267,"in_reply_to":"fa1b9901_2387df10","updated":"2015-08-17 22:40:23.000000000","message":"gordc: Not sure, but refresh_event_pipeline_cfg is for enabling dynamic event pipeline (line 271) and _get_event_pipeline_manager should load the notifiers if workload_partitioning is enabled(line 120). Am i missing something?","commit_id":"8d16939330759c1ee6356fec1344954854bda04c"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"316dd4f7f18ac6cf67c062e2b2fee8d9ea4e908f","unresolved":false,"context_lines":[{"line_number":264,"context_line":"    def reload_pipeline(self):"},{"line_number":265,"context_line":"        LOG.info(_LI(\"Reloading notification agent and listeners.\"))"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        if cfg.CONF.refresh_pipeline_cfg:"},{"line_number":268,"context_line":"            self.pipe_manager \u003d self._get_pipe_manager("},{"line_number":269,"context_line":"                self.transport, self.pipeline_manager)"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_b7ac94ee","line":267,"in_reply_to":"fa1b9901_280589c1","updated":"2015-08-17 17:37:15.000000000","message":"gordc: In https://github.com/openstack/ceilometer/blob/master/ceilometer/notification.py#L109, the notifiers are built if workload_partitioning is enabled in _get_pipe_manager. Do you mean the notifiers should be re-built even when event_pipeline is refreshed?","commit_id":"8d16939330759c1ee6356fec1344954854bda04c"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e7950bdda48c780149b3bc04b43fcf9886e6f28b","unresolved":false,"context_lines":[{"line_number":264,"context_line":"    def reload_pipeline(self):"},{"line_number":265,"context_line":"        LOG.info(_LI(\"Reloading notification agent and listeners.\"))"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"        if cfg.CONF.refresh_pipeline_cfg:"},{"line_number":268,"context_line":"            self.pipe_manager \u003d self._get_pipe_manager("},{"line_number":269,"context_line":"                self.transport, self.pipeline_manager)"},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_2387df10","line":267,"in_reply_to":"fa1b9901_b7ac94ee","updated":"2015-08-17 20:40:51.000000000","message":"so the way workload partitioning works is that we have a queue per pipeline per agent. so if we have 2 agents, 3 pipelines, we actually have 6 queues to listen to. in addition to that, each agent needs to be able to send messages to all 6 queues. when we add/drop an agent, the number of queues (and notifiers) needs to be recalculated.\n\nin this code, if you have workload partitioning enabled but refresh_* disabled, it will never recalculate the notifiers.","commit_id":"8d16939330759c1ee6356fec1344954854bda04c"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"44258fe2acb664dac5b65f9f20d1c30f953e74ca","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        utils.kill_listeners(self.listeners + self.pipeline_listeners)"},{"line_number":272,"context_line":"        super(NotificationService, self).stop()"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    def reload_pipeline(self, agent_refresh\u003dFalse):"},{"line_number":275,"context_line":"        LOG.info(_LI(\"Reloading notification agent and listeners.\"))"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"        if self.pipeline_validated or agent_refresh:"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba15a1d1_a4b7fdf3","line":274,"updated":"2015-09-16 19:17:35.000000000","message":"so you\u0027re going to hate me but i mislead you on this issue.  i have this patch where i stopped using this method so the agent_refresh param isn\u0027t really needed. https://review.openstack.org/#/c/224158/","commit_id":"1f62ca8e2df6aeb3f9c70366de2059cf5caa6277"}],"ceilometer/service_base.py":[{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"fba375ba5083961c90e8ebadd1a05fc4b755255e","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                                                                  EVENT_TYPE)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"            self.tg.add_timer(cfg.CONF.pipeline_polling_interval,"},{"line_number":48,"context_line":"                              self.refresh_event_pipeline)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @abc.abstractmethod"},{"line_number":51,"context_line":"    def reload_pipeline(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_8282f350","line":48,"updated":"2015-08-03 04:24:18.000000000","message":"I prefer we use one timer to do refreshing pipeline works.\n\nalso this change will add a config option.","commit_id":"e3502382a68875ace4aeb664338ffb6e63be0288"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"8a74e1ae88c8bcf4207daa0cd6b4ee504580a834","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                                                                  EVENT_TYPE)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"            self.tg.add_timer(cfg.CONF.pipeline_polling_interval,"},{"line_number":48,"context_line":"                              self.refresh_event_pipeline)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @abc.abstractmethod"},{"line_number":51,"context_line":"    def reload_pipeline(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_90bb980e","line":48,"in_reply_to":"3a50d1a3_8282f350","updated":"2015-08-03 18:47:12.000000000","message":"Yes, will make the change to use a single timer.\n\nThe configuration to enable event pipeline (refresh_event_pipeline_cfg) is defined in pipeline.py","commit_id":"e3502382a68875ace4aeb664338ffb6e63be0288"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"fba375ba5083961c90e8ebadd1a05fc4b755255e","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"            if _hash !\u003d self.event_pipeline_hash:"},{"line_number":96,"context_line":"                LOG.info(_LI(\"Detected change in event pipeline \""},{"line_number":97,"context_line":"                             \"configuration.\"))"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"                try:"},{"line_number":100,"context_line":"                    # Pipeline in the notification agent."}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_62cb27a5","line":97,"updated":"2015-08-03 04:24:18.000000000","message":"most of this is very similar to above method, it would be better to  merged this two.","commit_id":"e3502382a68875ace4aeb664338ffb6e63be0288"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"8a74e1ae88c8bcf4207daa0cd6b4ee504580a834","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"            if _hash !\u003d self.event_pipeline_hash:"},{"line_number":96,"context_line":"                LOG.info(_LI(\"Detected change in event pipeline \""},{"line_number":97,"context_line":"                             \"configuration.\"))"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"                try:"},{"line_number":100,"context_line":"                    # Pipeline in the notification agent."}],"source_content_type":"text/x-python","patch_set":1,"id":"1a4dcd0f_503c3093","line":97,"in_reply_to":"3a50d1a3_62cb27a5","updated":"2015-08-03 18:47:12.000000000","message":"sure, will do","commit_id":"e3502382a68875ace4aeb664338ffb6e63be0288"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"b82c63ba927080fe370f9e9b58033f0b6f4a412e","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            self.tg.add_timer(cfg.CONF.pipeline_polling_interval,"},{"line_number":49,"context_line":"                              self.refresh_pipeline)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def get_pipeline_mtime(self, p_type\u003dpipeline.SAMPLE_TYPE):"},{"line_number":52,"context_line":"        return (self.event_pipeline_mtime if p_type \u003d\u003d pipeline.EVENT_TYPE else"},{"line_number":53,"context_line":"                self.pipeline_mtime)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_1f952887","line":51,"updated":"2015-08-14 17:44:09.000000000","message":"tbh, i\u0027m not sure what these methods are for... i\u0027m having a little trouble following the flow","commit_id":"8d16939330759c1ee6356fec1344954854bda04c"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"ac2c095bb0497ac03c8bc7af483616d2f01dc1c5","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            self.tg.add_timer(cfg.CONF.pipeline_polling_interval,"},{"line_number":49,"context_line":"                              self.refresh_pipeline)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def get_pipeline_mtime(self, p_type\u003dpipeline.SAMPLE_TYPE):"},{"line_number":52,"context_line":"        return (self.event_pipeline_mtime if p_type \u003d\u003d pipeline.EVENT_TYPE else"},{"line_number":53,"context_line":"                self.pipeline_mtime)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_9ca7fca6","line":51,"in_reply_to":"1a4dcd0f_1f952887","updated":"2015-08-14 21:49:38.000000000","message":"gordc: This gets the mtime of the pipeline based on the p_type. There is a set method for this and also get/set for the pipeline_hash based on p_type. This hides the detail of sample and event pipeline mtime, hash and is used by pipeline_changed and refresh_pipeline methods to refresh sample or event pipeline or both.","commit_id":"8d16939330759c1ee6356fec1344954854bda04c"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"73052184958739948a10125ca950ba6bc18f64df","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            self.tg.add_timer(cfg.CONF.pipeline_polling_interval,"},{"line_number":49,"context_line":"                              self.refresh_pipeline)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def get_pipeline_mtime(self, p_type\u003dpipeline.SAMPLE_TYPE):"},{"line_number":52,"context_line":"        return (self.event_pipeline_mtime if p_type \u003d\u003d pipeline.EVENT_TYPE else"},{"line_number":53,"context_line":"                self.pipeline_mtime)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_0b18c283","line":51,"in_reply_to":"1a4dcd0f_9ca7fca6","updated":"2015-08-17 15:51:57.000000000","message":"ah i see. it\u0027s reused for pipeline_changed...","commit_id":"8d16939330759c1ee6356fec1344954854bda04c"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"73052184958739948a10125ca950ba6bc18f64df","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return (self.event_pipeline_hash if p_type \u003d\u003d pipeline.EVENT_TYPE else"},{"line_number":63,"context_line":"                self.pipeline_hash)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def set_pipeline_hash(self, _hash, p_type\u003dpipeline.SAMPLE_TYPE):"},{"line_number":66,"context_line":"        if p_type \u003d\u003d pipeline.EVENT_TYPE:"},{"line_number":67,"context_line":"            self.event_pipeline_hash \u003d _hash"},{"line_number":68,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_c86acd1a","line":65,"updated":"2015-08-17 15:51:57.000000000","message":"i\u0027m not sure how useful this one is.","commit_id":"8d16939330759c1ee6356fec1344954854bda04c"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"b672adaaff372a34513ee1abf74e12a71bd02fd1","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return (self.event_pipeline_hash if p_type \u003d\u003d pipeline.EVENT_TYPE else"},{"line_number":63,"context_line":"                self.pipeline_hash)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def set_pipeline_hash(self, _hash, p_type\u003dpipeline.SAMPLE_TYPE):"},{"line_number":66,"context_line":"        if p_type \u003d\u003d pipeline.EVENT_TYPE:"},{"line_number":67,"context_line":"            self.event_pipeline_hash \u003d _hash"},{"line_number":68,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_99873b61","line":65,"in_reply_to":"fa1b9901_a3aa0f6f","updated":"2015-08-17 22:40:23.000000000","message":"Yes, its used twice in init and refresh. The get_pipeline_hash is used in pipeline_changed as well..I just wanted to have the get/set methods together since they fit the same pattern(based on p_type), i can remove it if it makes it easier.","commit_id":"8d16939330759c1ee6356fec1344954854bda04c"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"316dd4f7f18ac6cf67c062e2b2fee8d9ea4e908f","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return (self.event_pipeline_hash if p_type \u003d\u003d pipeline.EVENT_TYPE else"},{"line_number":63,"context_line":"                self.pipeline_hash)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def set_pipeline_hash(self, _hash, p_type\u003dpipeline.SAMPLE_TYPE):"},{"line_number":66,"context_line":"        if p_type \u003d\u003d pipeline.EVENT_TYPE:"},{"line_number":67,"context_line":"            self.event_pipeline_hash \u003d _hash"},{"line_number":68,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_d740280a","line":65,"in_reply_to":"fa1b9901_c86acd1a","updated":"2015-08-17 17:37:15.000000000","message":"gordc: Yes, this is also similar to the set_pipeline_mtime; its used to set the hash of the pipeline based on p_type, its re-used in pipeline_changed.","commit_id":"8d16939330759c1ee6356fec1344954854bda04c"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e7950bdda48c780149b3bc04b43fcf9886e6f28b","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        return (self.event_pipeline_hash if p_type \u003d\u003d pipeline.EVENT_TYPE else"},{"line_number":63,"context_line":"                self.pipeline_hash)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def set_pipeline_hash(self, _hash, p_type\u003dpipeline.SAMPLE_TYPE):"},{"line_number":66,"context_line":"        if p_type \u003d\u003d pipeline.EVENT_TYPE:"},{"line_number":67,"context_line":"            self.event_pipeline_hash \u003d _hash"},{"line_number":68,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_a3aa0f6f","line":65,"in_reply_to":"fa1b9901_d740280a","updated":"2015-08-17 20:40:51.000000000","message":"it seems like it\u0027s only used in init and refresh... both those cases seems like we can easily just target the variable directly rather than via this method","commit_id":"8d16939330759c1ee6356fec1344954854bda04c"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"a07edef8cab4fd6581074f248b21ea717c40fc33","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                    LOG.exception(_LE(\u0027Unable to load changed event pipeline:\u0027"},{"line_number":136,"context_line":"                                      \u0027 %s\u0027) % err)"},{"line_number":137,"context_line":"        if self.pipeline_validated:"},{"line_number":138,"context_line":"            self.reload_pipeline()"},{"line_number":139,"context_line":"            self.pipeline_validated \u003d False"}],"source_content_type":"text/x-python","patch_set":17,"id":"da20952f_62703141","line":138,"updated":"2015-09-10 06:45:37.000000000","message":"Since we\u0027re now reload_pipeline() either event/sample pipeline file changed, what if sample pipeline changed and event pipeline parsing resulted an exception?\n\nMaybe we should keep the original pipeline untouched if only one pipeline is crushed?","commit_id":"2cec9bcb904bc55674eed769910952bc745bf982"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"cb9eb2bf86ee78b5c4f9a29a4b67de761733a071","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                    LOG.debug(\"Event Pipeline has been refreshed. \""},{"line_number":131,"context_line":"                              \"old hash: %(old)s, new hash: %(new)s\","},{"line_number":132,"context_line":"                              {\u0027old\u0027: self.event_pipeline_hash,"},{"line_number":133,"context_line":"                               \u0027new\u0027: ev_pipeline_hash})"},{"line_number":134,"context_line":"                    self.set_pipeline_hash(ev_pipeline_hash,"},{"line_number":135,"context_line":"                                           pipeline.EVENT_TYPE)"},{"line_number":136,"context_line":"                    self.event_pipeline_validated \u003d True"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba15a1d1_0077183b","line":133,"updated":"2015-09-14 21:29:17.000000000","message":"it is actually useful to know what the hash is?","commit_id":"5c571a1bbc4c0b622b2683c21949f7c4454aef13"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"adfe72d5bee9ea41bea6817b073ca33c3775899d","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                    LOG.debug(\"Event Pipeline has been refreshed. \""},{"line_number":131,"context_line":"                              \"old hash: %(old)s, new hash: %(new)s\","},{"line_number":132,"context_line":"                              {\u0027old\u0027: self.event_pipeline_hash,"},{"line_number":133,"context_line":"                               \u0027new\u0027: ev_pipeline_hash})"},{"line_number":134,"context_line":"                    self.set_pipeline_hash(ev_pipeline_hash,"},{"line_number":135,"context_line":"                                           pipeline.EVENT_TYPE)"},{"line_number":136,"context_line":"                    self.event_pipeline_validated \u003d True"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba15a1d1_b2a6b7bf","line":133,"in_reply_to":"ba15a1d1_0077183b","updated":"2015-09-15 04:18:31.000000000","message":"gordc: This was introduced when we implemented the dynamic sample pipeline. https://review.openstack.org/#/c/190842/20/ceilometer/service_base.py","commit_id":"5c571a1bbc4c0b622b2683c21949f7c4454aef13"}],"ceilometer/tests/functional/test_notification.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"d81d090e9c6e7eae0e4e04efcfe5717aaeda5825","unresolved":false,"context_lines":[{"line_number":383,"context_line":""},{"line_number":384,"context_line":"        start \u003d timeutils.utcnow()"},{"line_number":385,"context_line":"        while timeutils.delta_seconds(start, timeutils.utcnow()) \u003c 600:"},{"line_number":386,"context_line":"            if (len(self.publisher.samples) \u003e\u003d self.expected_samples and"},{"line_number":387,"context_line":"                    len(self.publisher.events) \u003e\u003d self.expected_events):"},{"line_number":388,"context_line":"                break"},{"line_number":389,"context_line":"            eventlet.sleep(0)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_38127e0a","line":386,"updated":"2015-08-24 15:54:47.000000000","message":"do we need this check if we never reset it from previous run?","commit_id":"bb82b8e175a12579095911f9eb33282d400f8b57"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"12aeab750584b8c6e2aa6e43ca541c969786ae42","unresolved":false,"context_lines":[{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        start \u003d timeutils.utcnow()"},{"line_number":358,"context_line":"        while timeutils.delta_seconds(start, timeutils.utcnow()) \u003c 600:"},{"line_number":359,"context_line":"            if len(self.publisher.events) \u003e\u003d self.expected_events:"},{"line_number":360,"context_line":"                break"},{"line_number":361,"context_line":"            eventlet.sleep(0)"},{"line_number":362,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"fa1b9901_04086cd8","line":359,"updated":"2015-08-24 18:07:05.000000000","message":"i think the samples check here is still needed... or else it\u0027ll just pass right away as publisher.events will be len \u003d\u003d 0 to start... or we need something else to check on.","commit_id":"324971fb952a7014ade5babf31f45024a8f44676"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"cb9eb2bf86ee78b5c4f9a29a4b67de761733a071","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                      TEST_NOTICE_PAYLOAD)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        start \u003d timeutils.utcnow()"},{"line_number":360,"context_line":"        while timeutils.delta_seconds(start, timeutils.utcnow()) \u003c 600:"},{"line_number":361,"context_line":"            if len(self.publisher.events) \u003e\u003d self.expected_events:"},{"line_number":362,"context_line":"                break"},{"line_number":363,"context_line":"            eventlet.sleep(0)"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba15a1d1_60ccd489","line":360,"updated":"2015-09-14 21:29:17.000000000","message":"maybe lower to 60... it\u0027s probably broken if it doesn\u0027t finish in a minute","commit_id":"5c571a1bbc4c0b622b2683c21949f7c4454aef13"},{"author":{"_account_id":13560,"name":"Rohit Jaiswal","email":"rohit.jaiswal@gmail.com","username":"rjaiswal"},"change_message_id":"adfe72d5bee9ea41bea6817b073ca33c3775899d","unresolved":false,"context_lines":[{"line_number":357,"context_line":"                      TEST_NOTICE_PAYLOAD)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        start \u003d timeutils.utcnow()"},{"line_number":360,"context_line":"        while timeutils.delta_seconds(start, timeutils.utcnow()) \u003c 600:"},{"line_number":361,"context_line":"            if len(self.publisher.events) \u003e\u003d self.expected_events:"},{"line_number":362,"context_line":"                break"},{"line_number":363,"context_line":"            eventlet.sleep(0)"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba15a1d1_127d231c","line":360,"in_reply_to":"ba15a1d1_60ccd489","updated":"2015-09-15 04:18:31.000000000","message":"gordc: The timeout of 600 is used for other test cases as well","commit_id":"5c571a1bbc4c0b622b2683c21949f7c4454aef13"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"cb9eb2bf86ee78b5c4f9a29a4b67de761733a071","unresolved":false,"context_lines":[{"line_number":383,"context_line":"                      TEST_NOTICE_PAYLOAD)"},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"        start \u003d timeutils.utcnow()"},{"line_number":386,"context_line":"        while timeutils.delta_seconds(start, timeutils.utcnow()) \u003c 600:"},{"line_number":387,"context_line":"            if len(self.publisher.events) \u003e\u003d self.expected_events:"},{"line_number":388,"context_line":"                break"},{"line_number":389,"context_line":"            eventlet.sleep(0)"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba15a1d1_e0bf84ce","line":386,"updated":"2015-09-14 21:29:17.000000000","message":"same","commit_id":"5c571a1bbc4c0b622b2683c21949f7c4454aef13"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"cb9eb2bf86ee78b5c4f9a29a4b67de761733a071","unresolved":false,"context_lines":[{"line_number":390,"context_line":""},{"line_number":391,"context_line":"        self.assertEqual(self.expected_events, len(self.publisher.events))"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        (self.assertIn(event.name, [\u0027compute.instance.create.end\u0027])"},{"line_number":394,"context_line":"         for event in self.publisher.events)"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"ba15a1d1_60e5b407","line":393,"updated":"2015-09-14 21:29:17.000000000","message":"probably don\u0027t need for since it\u0027s a single event.","commit_id":"5c571a1bbc4c0b622b2683c21949f7c4454aef13"}]}
