)]}'
{"bin/ceilometer-collector":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"5beb776321f1f85fe7f048b4b054509784a1a327","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    topic \u003d \u0027ceilometer.collector\u0027"},{"line_number":37,"context_line":"    launcher \u003d service.launch(coll_service.CollectorService(cfg.CONF.host,"},{"line_number":38,"context_line":"                                                            topic))"},{"line_number":39,"context_line":"    print coll_service.UDPCollectorService().start()"},{"line_number":40,"context_line":"    launcher.launch_service(coll_service.UDPCollectorService())"},{"line_number":41,"context_line":"    launcher.wait()"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAPH%2F%2Fts8%3D","line":39,"updated":"2013-05-24 17:39:50.000000000","message":"print?\n\nI\u0027m not sure why we\u0027re piggy-backing this service on the with the CollectionService. These should be separate. I\u0027d like to be able to restart one without affecting the other.","commit_id":"548602911950043cf4b43275562f66fbf9d3d052"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"f09504b3839093cd37046d203debe50b586023b1","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    topic \u003d \u0027ceilometer.collector\u0027"},{"line_number":37,"context_line":"    launcher \u003d service.launch(coll_service.CollectorService(cfg.CONF.host,"},{"line_number":38,"context_line":"                                                            topic))"},{"line_number":39,"context_line":"    print coll_service.UDPCollectorService().start()"},{"line_number":40,"context_line":"    launcher.launch_service(coll_service.UDPCollectorService())"},{"line_number":41,"context_line":"    launcher.wait()"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAPH%2F%2Frvs%3D","line":39,"in_reply_to":"AAAAPH%2F%2FsD0%3D","updated":"2013-05-27 09:43:10.000000000","message":"Yeah totally my mistake sorry. :)","commit_id":"548602911950043cf4b43275562f66fbf9d3d052"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"27719a55341a32b4e25c65647130002c9d0a2788","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    topic \u003d \u0027ceilometer.collector\u0027"},{"line_number":37,"context_line":"    launcher \u003d service.launch(coll_service.CollectorService(cfg.CONF.host,"},{"line_number":38,"context_line":"                                                            topic))"},{"line_number":39,"context_line":"    print coll_service.UDPCollectorService().start()"},{"line_number":40,"context_line":"    launcher.launch_service(coll_service.UDPCollectorService())"},{"line_number":41,"context_line":"    launcher.wait()"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAPH%2F%2FsD0%3D","line":39,"in_reply_to":"AAAAPH%2F%2Fts8%3D","updated":"2013-05-27 01:24:08.000000000","message":"again, will the UDPCollectorService.start() ever return to allow this script to continue to execute the following lines?","commit_id":"548602911950043cf4b43275562f66fbf9d3d052"}],"ceilometer/collector/service.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"7cd08a16f248c9b52c003267981ec6722f5940b6","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        udp.bind((cfg.CONF.collector.udp_address,"},{"line_number":110,"context_line":"                  cfg.CONF.collector.udp_port))"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        while getattr(self, \"listen_udp\", True):  # Handy for testing"},{"line_number":113,"context_line":"            data, source \u003d udp.recvfrom(4096)"},{"line_number":114,"context_line":"            try:"},{"line_number":115,"context_line":"                counter \u003d msgpack.loads(data)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2Fylc%3D","line":112,"updated":"2013-05-22 23:12:13.000000000","message":"Why not go ahead and set self.listen_udp \u003d True in __ini__ so you don\u0027t have to fake this? Better, is there some way to tie in to the thread-group created by the Service base class to avoid having to create a separate way to start and stop the UDP handler?","commit_id":"d420ccf52ea2495be18e5012a0d40258601e877b"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"08f4a129c4a43e0a79c6de9cdf9b2eba2a00ad66","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        udp.bind((cfg.CONF.collector.udp_address,"},{"line_number":110,"context_line":"                  cfg.CONF.collector.udp_port))"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        while getattr(self, \"listen_udp\", True):  # Handy for testing"},{"line_number":113,"context_line":"            data, source \u003d udp.recvfrom(4096)"},{"line_number":114,"context_line":"            try:"},{"line_number":115,"context_line":"                counter \u003d msgpack.loads(data)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2Fx3M%3D","line":112,"in_reply_to":"AAAAPH%2F%2Fylc%3D","updated":"2013-05-23 12:58:00.000000000","message":"Ah good idea. I\u0027ll find something.","commit_id":"d420ccf52ea2495be18e5012a0d40258601e877b"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"7cd08a16f248c9b52c003267981ec6722f5940b6","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            try:"},{"line_number":115,"context_line":"                counter \u003d msgpack.loads(data)"},{"line_number":116,"context_line":"            except:"},{"line_number":117,"context_line":"                LOG.warn(\"UDP: Cannot decode data sent by %s\" % str(source))"},{"line_number":118,"context_line":"            else:"},{"line_number":119,"context_line":"                try:"},{"line_number":120,"context_line":"                    counter[\u0027counter_name\u0027] \u003d counter[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FylY%3D","line":117,"updated":"2013-05-22 23:12:13.000000000","message":"Use a comma to separate the args to log.warn() instead of doing the string interpolation here.","commit_id":"d420ccf52ea2495be18e5012a0d40258601e877b"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"08f4a129c4a43e0a79c6de9cdf9b2eba2a00ad66","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            try:"},{"line_number":115,"context_line":"                counter \u003d msgpack.loads(data)"},{"line_number":116,"context_line":"            except:"},{"line_number":117,"context_line":"                LOG.warn(\"UDP: Cannot decode data sent by %s\" % str(source))"},{"line_number":118,"context_line":"            else:"},{"line_number":119,"context_line":"                try:"},{"line_number":120,"context_line":"                    counter[\u0027counter_name\u0027] \u003d counter[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2Fx40%3D","line":117,"in_reply_to":"AAAAPH%2F%2FylY%3D","updated":"2013-05-23 12:58:00.000000000","message":"Done","commit_id":"d420ccf52ea2495be18e5012a0d40258601e877b"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"7cd08a16f248c9b52c003267981ec6722f5940b6","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                try:"},{"line_number":120,"context_line":"                    counter[\u0027counter_name\u0027] \u003d counter[\u0027name\u0027]"},{"line_number":121,"context_line":"                    counter[\u0027counter_volume\u0027] \u003d counter[\u0027volume\u0027]"},{"line_number":122,"context_line":"                    LOG.debug(\"UDP: Storing %s\" % str(counter))"},{"line_number":123,"context_line":"                    self.storage_conn.record_metering_data(counter)"},{"line_number":124,"context_line":"                except Exception as err:"},{"line_number":125,"context_line":"                    LOG.debug(\"UDP: Unable to store meter\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2Fyl0%3D","line":122,"updated":"2013-05-22 23:12:13.000000000","message":"Same comment about using log.","commit_id":"d420ccf52ea2495be18e5012a0d40258601e877b"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"08f4a129c4a43e0a79c6de9cdf9b2eba2a00ad66","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                try:"},{"line_number":120,"context_line":"                    counter[\u0027counter_name\u0027] \u003d counter[\u0027name\u0027]"},{"line_number":121,"context_line":"                    counter[\u0027counter_volume\u0027] \u003d counter[\u0027volume\u0027]"},{"line_number":122,"context_line":"                    LOG.debug(\"UDP: Storing %s\" % str(counter))"},{"line_number":123,"context_line":"                    self.storage_conn.record_metering_data(counter)"},{"line_number":124,"context_line":"                except Exception as err:"},{"line_number":125,"context_line":"                    LOG.debug(\"UDP: Unable to store meter\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2Fx4w%3D","line":122,"in_reply_to":"AAAAPH%2F%2Fyl0%3D","updated":"2013-05-23 12:58:00.000000000","message":"Done","commit_id":"d420ccf52ea2495be18e5012a0d40258601e877b"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"4c6c974289ebafb8f72148644194e5253ad8ca76","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self._setup_udp()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _setup_udp(self):"},{"line_number":107,"context_line":"        \"\"\"Bind the UDP socket and handle incoming data.\"\"\""},{"line_number":108,"context_line":"        if not cfg.CONF.collector.udp_address:"},{"line_number":109,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FxTk%3D","line":106,"updated":"2013-05-23 13:33:01.000000000","message":"Would it make sense to split the UDP setup from the blocking recv loop? (or change this method name to something less suggestive of pure setup)","commit_id":"f7e7a21ebe13bef1a347df4a17fd403d6085128e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"369231c6b53877ce4627b5684f18ff7f7b3b2bbd","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self._setup_udp()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _setup_udp(self):"},{"line_number":107,"context_line":"        \"\"\"Bind the UDP socket and handle incoming data.\"\"\""},{"line_number":108,"context_line":"        if not cfg.CONF.collector.udp_address:"},{"line_number":109,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FxRU%3D","line":106,"in_reply_to":"AAAAPH%2F%2FxTk%3D","updated":"2013-05-23 13:49:57.000000000","message":"I wouldn\u0027t mind, but I don\u0027t see any other place where to put the recv loop anyway; it has to be called from start. But I\u0027ll rename.","commit_id":"f7e7a21ebe13bef1a347df4a17fd403d6085128e"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"4c6c974289ebafb8f72148644194e5253ad8ca76","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                  cfg.CONF.collector.udp_port))"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        while self.running:"},{"line_number":117,"context_line":"            data, source \u003d udp.recvfrom(4096)"},{"line_number":118,"context_line":"            try:"},{"line_number":119,"context_line":"                counter \u003d msgpack.loads(data)"},{"line_number":120,"context_line":"            except:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FxTY%3D","line":117,"updated":"2013-05-23 13:33:01.000000000","message":"We\u0027re 100% sure that the packet size will never grow above 4096? (even with the addition of some future bloated metadata)\n\nIf not, might be an idea to be a tad more generous with the buffer size.","commit_id":"f7e7a21ebe13bef1a347df4a17fd403d6085128e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"369231c6b53877ce4627b5684f18ff7f7b3b2bbd","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                  cfg.CONF.collector.udp_port))"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        while self.running:"},{"line_number":117,"context_line":"            data, source \u003d udp.recvfrom(4096)"},{"line_number":118,"context_line":"            try:"},{"line_number":119,"context_line":"                counter \u003d msgpack.loads(data)"},{"line_number":120,"context_line":"            except:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FxRM%3D","line":117,"in_reply_to":"AAAAPH%2F%2FxTY%3D","updated":"2013-05-23 13:49:57.000000000","message":"Hehe, that\u0027s always a problem. I don\u0027t know, what about 64K?\n\nThat ought to be enough for anybody.","commit_id":"f7e7a21ebe13bef1a347df4a17fd403d6085128e"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"5e523735583371c3dcf2d50ab8112f0a6985fcbc","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            \u0027ceilometer.collector.\u0027 + cfg.CONF.publisher_meter.metering_topic,"},{"line_number":102,"context_line":"        )"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self._start_udp()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _start_udp(self):"},{"line_number":107,"context_line":"        \"\"\"Bind the UDP socket and handle incoming data.\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2FvUQ%3D","line":104,"updated":"2013-05-24 02:04:04.000000000","message":"Since self._start_udp() is called in the initialize_service_hook(), having the main thread looping in the \"while self.running\" statement in _start_udp() would prevent the main thread from starting the thread to consume the rpc consumers in openstack.common.rpc.Service.start(), which would cause the collector service\u0027s rpc method record_metering_data() not functional.\n\nWe may start the udp and consume udp messages in another thread than the main thread.","commit_id":"cee89e946c9d0a446f6c58de6b61cb92b1f6f8f7"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"294218f60f2a448064d79747155bd3ed8ca63974","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            \u0027ceilometer.collector.\u0027 + cfg.CONF.publisher_meter.metering_topic,"},{"line_number":102,"context_line":"        )"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self._start_udp()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _start_udp(self):"},{"line_number":107,"context_line":"        \"\"\"Bind the UDP socket and handle incoming data.\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2FufY%3D","line":104,"in_reply_to":"AAAAPH%2F%2FvUQ%3D","updated":"2013-05-24 12:04:17.000000000","message":"Done","commit_id":"cee89e946c9d0a446f6c58de6b61cb92b1f6f8f7"},{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"5e523735583371c3dcf2d50ab8112f0a6985fcbc","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            else:"},{"line_number":125,"context_line":"                try:"},{"line_number":126,"context_line":"                    counter[\u0027counter_name\u0027] \u003d counter[\u0027name\u0027]"},{"line_number":127,"context_line":"                    counter[\u0027counter_volume\u0027] \u003d counter[\u0027volume\u0027]"},{"line_number":128,"context_line":"                    LOG.debug(\"UDP: Storing %s\", str(counter))"},{"line_number":129,"context_line":"                    self.storage_conn.record_metering_data(counter)"},{"line_number":130,"context_line":"                except Exception as err:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2FvTw%3D","line":127,"updated":"2013-05-24 02:04:04.000000000","message":"we should also mapping the \"counter_type\" and \"counter_unit\"","commit_id":"cee89e946c9d0a446f6c58de6b61cb92b1f6f8f7"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"294218f60f2a448064d79747155bd3ed8ca63974","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            else:"},{"line_number":125,"context_line":"                try:"},{"line_number":126,"context_line":"                    counter[\u0027counter_name\u0027] \u003d counter[\u0027name\u0027]"},{"line_number":127,"context_line":"                    counter[\u0027counter_volume\u0027] \u003d counter[\u0027volume\u0027]"},{"line_number":128,"context_line":"                    LOG.debug(\"UDP: Storing %s\", str(counter))"},{"line_number":129,"context_line":"                    self.storage_conn.record_metering_data(counter)"},{"line_number":130,"context_line":"                except Exception as err:"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2Fubg%3D","line":127,"in_reply_to":"AAAAPH%2F%2FvTw%3D","updated":"2013-05-24 12:04:17.000000000","message":"Done","commit_id":"cee89e946c9d0a446f6c58de6b61cb92b1f6f8f7"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"5beb776321f1f85fe7f048b4b054509784a1a327","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def start(self):"},{"line_number":75,"context_line":"        \"\"\"Bind the UDP socket and handle incoming data.\"\"\""},{"line_number":76,"context_line":"        if not cfg.CONF.collector.udp_address:"},{"line_number":77,"context_line":"            return"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        super(UDPCollectorService, self).start()"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FtqY%3D","line":76,"updated":"2013-05-24 17:39:50.000000000","message":"Should the service start and then die or never start in the first place? I vote the latter.","commit_id":"548602911950043cf4b43275562f66fbf9d3d052"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"f09504b3839093cd37046d203debe50b586023b1","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def start(self):"},{"line_number":75,"context_line":"        \"\"\"Bind the UDP socket and handle incoming data.\"\"\""},{"line_number":76,"context_line":"        if not cfg.CONF.collector.udp_address:"},{"line_number":77,"context_line":"            return"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        super(UDPCollectorService, self).start()"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FrvA%3D","line":76,"in_reply_to":"AAAAPH%2F%2FtqY%3D","updated":"2013-05-27 09:43:10.000000000","message":"Done","commit_id":"548602911950043cf4b43275562f66fbf9d3d052"}],"ceilometer/publisher/udp.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"7cd08a16f248c9b52c003267981ec6722f5940b6","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            msg \u003d counter._asdict()"},{"line_number":74,"context_line":"            msg[\u0027source\u0027] \u003d source"},{"line_number":75,"context_line":"            LOG.debug(_(\"Publishing counter %s over UDP to %s:%d\")"},{"line_number":76,"context_line":"                      % (msg,"},{"line_number":77,"context_line":"                         cfg.CONF.publisher_udp.host,"},{"line_number":78,"context_line":"                         cfg.CONF.publisher_udp.port))"},{"line_number":79,"context_line":"            self.socket.sendto(msgpack.dumps(msg),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FylA%3D","line":76,"updated":"2013-05-22 23:12:13.000000000","message":"Same comment on log messages.","commit_id":"d420ccf52ea2495be18e5012a0d40258601e877b"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"08f4a129c4a43e0a79c6de9cdf9b2eba2a00ad66","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            msg \u003d counter._asdict()"},{"line_number":74,"context_line":"            msg[\u0027source\u0027] \u003d source"},{"line_number":75,"context_line":"            LOG.debug(_(\"Publishing counter %s over UDP to %s:%d\")"},{"line_number":76,"context_line":"                      % (msg,"},{"line_number":77,"context_line":"                         cfg.CONF.publisher_udp.host,"},{"line_number":78,"context_line":"                         cfg.CONF.publisher_udp.port))"},{"line_number":79,"context_line":"            self.socket.sendto(msgpack.dumps(msg),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FxZI%3D","line":76,"in_reply_to":"AAAAPH%2F%2FylA%3D","updated":"2013-05-23 12:58:00.000000000","message":"Done","commit_id":"d420ccf52ea2495be18e5012a0d40258601e877b"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"7cd08a16f248c9b52c003267981ec6722f5940b6","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                      % (msg,"},{"line_number":77,"context_line":"                         cfg.CONF.publisher_udp.host,"},{"line_number":78,"context_line":"                         cfg.CONF.publisher_udp.port))"},{"line_number":79,"context_line":"            self.socket.sendto(msgpack.dumps(msg),"},{"line_number":80,"context_line":"                               (cfg.CONF.publisher_udp.host,"},{"line_number":81,"context_line":"                                cfg.CONF.publisher_udp.port))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2Fyk4%3D","line":79,"updated":"2013-05-22 23:12:13.000000000","message":"Should this have some error handling wrapped around it?","commit_id":"d420ccf52ea2495be18e5012a0d40258601e877b"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"08f4a129c4a43e0a79c6de9cdf9b2eba2a00ad66","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                      % (msg,"},{"line_number":77,"context_line":"                         cfg.CONF.publisher_udp.host,"},{"line_number":78,"context_line":"                         cfg.CONF.publisher_udp.port))"},{"line_number":79,"context_line":"            self.socket.sendto(msgpack.dumps(msg),"},{"line_number":80,"context_line":"                               (cfg.CONF.publisher_udp.host,"},{"line_number":81,"context_line":"                                cfg.CONF.publisher_udp.port))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2FxY0%3D","line":79,"in_reply_to":"AAAAPH%2F%2Fyk4%3D","updated":"2013-05-23 12:58:00.000000000","message":"Done","commit_id":"d420ccf52ea2495be18e5012a0d40258601e877b"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"4c6c974289ebafb8f72148644194e5253ad8ca76","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        for counter in counters:"},{"line_number":71,"context_line":"            msg \u003d counter._asdict()"},{"line_number":72,"context_line":"            msg[\u0027source\u0027] \u003d source"},{"line_number":73,"context_line":"            LOG.debug(_(\"Publishing counter %s over UDP to %s:%d\"),"},{"line_number":74,"context_line":"                      msg,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FxTs%3D","line":71,"updated":"2013-05-23 13:33:01.000000000","message":"Would using the vars builtin be cleaner here?\n  - msg \u003d counter._asdict()\n  + msg \u003d vars(counter)","commit_id":"f7e7a21ebe13bef1a347df4a17fd403d6085128e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"369231c6b53877ce4627b5684f18ff7f7b3b2bbd","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        \"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        for counter in counters:"},{"line_number":71,"context_line":"            msg \u003d counter._asdict()"},{"line_number":72,"context_line":"            msg[\u0027source\u0027] \u003d source"},{"line_number":73,"context_line":"            LOG.debug(_(\"Publishing counter %s over UDP to %s:%d\"),"},{"line_number":74,"context_line":"                      msg,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FxRI%3D","line":71,"in_reply_to":"AAAAPH%2F%2FxTs%3D","updated":"2013-05-23 13:49:57.000000000","message":"You taught me something.","commit_id":"f7e7a21ebe13bef1a347df4a17fd403d6085128e"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"5beb776321f1f85fe7f048b4b054509784a1a327","unresolved":false,"context_lines":[{"line_number":56,"context_line":"class UDPPublisher(publisher.PublisherBase):"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    def __init__(self):"},{"line_number":59,"context_line":"        self.socket \u003d socket.socket(socket.AF_INET,"},{"line_number":60,"context_line":"                                    socket.SOCK_DGRAM)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def publish_counters(self, context, counters, source):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2Ftq0%3D","line":59,"updated":"2013-05-24 17:39:50.000000000","message":"We may need to make this extensible down the road to support multicast UDP. Not critical for this patch though. Something to consider.","commit_id":"548602911950043cf4b43275562f66fbf9d3d052"}],"etc/ceilometer/ceilometer.conf.sample":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"4c6c974289ebafb8f72148644194e5253ad8ca76","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"# Add python stack traces to SQL as comment strings (boolean"},{"line_number":159,"context_line":"# value)"},{"line_number":160,"context_line":"#sql_connection_trace\u003dfalse"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"######## defined in ceilometer.openstack.common.eventlet_backdoor ########"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAPH%2F%2FxVY%3D","line":160,"updated":"2013-05-23 13:33:01.000000000","message":"Nitpick: there are a bunch of unrelated new config options brought in here, could split that out into a separate patch.","commit_id":"f7e7a21ebe13bef1a347df4a17fd403d6085128e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"369231c6b53877ce4627b5684f18ff7f7b3b2bbd","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"# Add python stack traces to SQL as comment strings (boolean"},{"line_number":159,"context_line":"# value)"},{"line_number":160,"context_line":"#sql_connection_trace\u003dfalse"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"######## defined in ceilometer.openstack.common.eventlet_backdoor ########"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAPH%2F%2FxQk%3D","line":160,"in_reply_to":"AAAAPH%2F%2FxVY%3D","updated":"2013-05-23 13:49:57.000000000","message":"Done","commit_id":"f7e7a21ebe13bef1a347df4a17fd403d6085128e"}],"tests/collector/test_manager.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"4c6c974289ebafb8f72148644194e5253ad8ca76","unresolved":false,"context_lines":[{"line_number":123,"context_line":"            resource_id\u003d\u0027cat\u0027,"},{"line_number":124,"context_line":"            timestamp\u003d\u0027NOW!\u0027,"},{"line_number":125,"context_line":"            resource_metadata\u003d{},"},{"line_number":126,"context_line":"        )._asdict())"},{"line_number":127,"context_line":"        self.counter_dict[\u0027source\u0027] \u003d \u0027mysource\u0027"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    @patch(\u0027ceilometer.pipeline.setup_pipeline\u0027, MagicMock())"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FxU8%3D","line":126,"updated":"2013-05-23 13:33:01.000000000","message":"Suggestion:\n  \n  s/..._asdict()/vars(...)/","commit_id":"f7e7a21ebe13bef1a347df4a17fd403d6085128e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"369231c6b53877ce4627b5684f18ff7f7b3b2bbd","unresolved":false,"context_lines":[{"line_number":123,"context_line":"            resource_id\u003d\u0027cat\u0027,"},{"line_number":124,"context_line":"            timestamp\u003d\u0027NOW!\u0027,"},{"line_number":125,"context_line":"            resource_metadata\u003d{},"},{"line_number":126,"context_line":"        )._asdict())"},{"line_number":127,"context_line":"        self.counter_dict[\u0027source\u0027] \u003d \u0027mysource\u0027"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    @patch(\u0027ceilometer.pipeline.setup_pipeline\u0027, MagicMock())"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FxRE%3D","line":126,"in_reply_to":"AAAAPH%2F%2FxU8%3D","updated":"2013-05-23 13:49:57.000000000","message":"Done","commit_id":"f7e7a21ebe13bef1a347df4a17fd403d6085128e"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"4c6c974289ebafb8f72148644194e5253ad8ca76","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        self.assertTrue("},{"line_number":237,"context_line":"            self.srv.pipeline_manager.publisher.called)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def test_udp_receival(self):"},{"line_number":240,"context_line":"        self.srv.storage_conn \u003d self.mox.CreateMock(base.Connection)"},{"line_number":241,"context_line":"        counter \u003d self.counter_dict"},{"line_number":242,"context_line":"        counter[\u0027counter_name\u0027] \u003d counter[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FxUE%3D","line":239,"updated":"2013-05-23 13:33:01.000000000","message":"Nitpick: \n\n  s/receival/receive/ or s/receival/consumption/","commit_id":"f7e7a21ebe13bef1a347df4a17fd403d6085128e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"369231c6b53877ce4627b5684f18ff7f7b3b2bbd","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        self.assertTrue("},{"line_number":237,"context_line":"            self.srv.pipeline_manager.publisher.called)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def test_udp_receival(self):"},{"line_number":240,"context_line":"        self.srv.storage_conn \u003d self.mox.CreateMock(base.Connection)"},{"line_number":241,"context_line":"        counter \u003d self.counter_dict"},{"line_number":242,"context_line":"        counter[\u0027counter_name\u0027] \u003d counter[\u0027name\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FxQ0%3D","line":239,"in_reply_to":"AAAAPH%2F%2FxUE%3D","updated":"2013-05-23 13:49:57.000000000","message":"Done","commit_id":"f7e7a21ebe13bef1a347df4a17fd403d6085128e"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"f93d937ad00c23c0d3bc9f3e603fd0794e943238","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            # Make the loop stop"},{"line_number":99,"context_line":"            self.srv.stop()"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        udp_socket.recvfrom(4096).WithSideEffects("},{"line_number":102,"context_line":"            stop_udp).AndReturn("},{"line_number":103,"context_line":"                (msgpack.dumps(self.counter_dict),"},{"line_number":104,"context_line":"                 (\u0027127.0.0.1\u0027, 12345)))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2FxNg%3D","line":101,"updated":"2013-05-23 14:07:34.000000000","message":"s/4096/64 * 1024/","commit_id":"d08acecf42dac7601ceafea269ee427d44336836"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"248560ba07fd7fa716bd436362a552dab812d690","unresolved":false,"context_lines":[{"line_number":98,"context_line":"            # Make the loop stop"},{"line_number":99,"context_line":"            self.srv.stop()"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        udp_socket.recvfrom(4096).WithSideEffects("},{"line_number":102,"context_line":"            stop_udp).AndReturn("},{"line_number":103,"context_line":"                (msgpack.dumps(self.counter_dict),"},{"line_number":104,"context_line":"                 (\u0027127.0.0.1\u0027, 12345)))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPH%2F%2FxKE%3D","line":101,"in_reply_to":"AAAAPH%2F%2FxNg%3D","updated":"2013-05-23 14:23:06.000000000","message":"Thanks. I\u0027m having a hard time running test locally since the tools changed, so I\u0027m doing things blindly sometimes.","commit_id":"d08acecf42dac7601ceafea269ee427d44336836"}],"tests/publisher/test_udp.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"4c6c974289ebafb8f72148644194e5253ad8ca76","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        # Check that counters are equal"},{"line_number":139,"context_line":"        self.assertEqual(sorted(sent_counters),"},{"line_number":140,"context_line":"                         sorted([dict(d._asdict()) for d in self.test_data]))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FxT4%3D","line":140,"updated":"2013-05-23 13:33:01.000000000","message":"_asdict() -\u003e vars() ?","commit_id":"f7e7a21ebe13bef1a347df4a17fd403d6085128e"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"369231c6b53877ce4627b5684f18ff7f7b3b2bbd","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        # Check that counters are equal"},{"line_number":139,"context_line":"        self.assertEqual(sorted(sent_counters),"},{"line_number":140,"context_line":"                         sorted([dict(d._asdict()) for d in self.test_data]))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FxQw%3D","line":140,"in_reply_to":"AAAAPH%2F%2FxT4%3D","updated":"2013-05-23 13:49:57.000000000","message":"Done","commit_id":"f7e7a21ebe13bef1a347df4a17fd403d6085128e"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"5beb776321f1f85fe7f048b4b054509784a1a327","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"            # Check destination"},{"line_number":129,"context_line":"            self.assertEqual(dest, (cfg.CONF.publisher_udp.host,"},{"line_number":130,"context_line":"                                    cfg.CONF.publisher_udp.port))"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        # Check that counters are equal"},{"line_number":133,"context_line":"        self.assertEqual(sorted(sent_counters),"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FtqA%3D","line":130,"updated":"2013-05-24 17:39:50.000000000","message":"Should be a test for the failed msgpack condition as well as the failed storage condition (the two try blocks in the method).","commit_id":"548602911950043cf4b43275562f66fbf9d3d052"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"f09504b3839093cd37046d203debe50b586023b1","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"            # Check destination"},{"line_number":129,"context_line":"            self.assertEqual(dest, (cfg.CONF.publisher_udp.host,"},{"line_number":130,"context_line":"                                    cfg.CONF.publisher_udp.port))"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        # Check that counters are equal"},{"line_number":133,"context_line":"        self.assertEqual(sorted(sent_counters),"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FrtU%3D","line":130,"in_reply_to":"AAAAPH%2F%2FtqA%3D","updated":"2013-05-27 09:43:10.000000000","message":"Done","commit_id":"548602911950043cf4b43275562f66fbf9d3d052"}]}
