)]}'
{"openstack/common/rpc/impl_zmq.py":[{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"86a28f282de78a4cc0dd9e0cc2694bb3754c080c","unresolved":false,"context_lines":[{"line_number":630,"context_line":"        self.reactor.wait()"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"    def consume_in_thread(self):"},{"line_number":633,"context_line":"        _get_matchmaker().start_heartbeat()"},{"line_number":634,"context_line":"        self.reactor.consume_in_thread()"},{"line_number":635,"context_line":""},{"line_number":636,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2Buj8%3D","line":633,"updated":"2013-02-20 16:45:40.000000000","message":"do we need a stop_heartbeat() somewhere?","commit_id":"eda05068786e04d414eac4aa8e22c0fe88831e0e"},{"author":{"_account_id":159,"name":"Eric Windisch","email":"ewindisch@docker.com","username":"ewindisch"},"change_message_id":"d7b2a101f92132c8314e943a66dd668c5733e46e","unresolved":false,"context_lines":[{"line_number":630,"context_line":"        self.reactor.wait()"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"    def consume_in_thread(self):"},{"line_number":633,"context_line":"        _get_matchmaker().start_heartbeat()"},{"line_number":634,"context_line":"        self.reactor.consume_in_thread()"},{"line_number":635,"context_line":""},{"line_number":636,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2BuiU%3D","line":633,"in_reply_to":"AAAAM3%2F%2Buj8%3D","updated":"2013-02-20 16:57:28.000000000","message":"Done","commit_id":"eda05068786e04d414eac4aa8e22c0fe88831e0e"}],"openstack/common/rpc/matchmaker.py":[{"author":{"_account_id":159,"name":"Eric Windisch","email":"ewindisch@docker.com","username":"ewindisch"},"change_message_id":"6e7ef5d8d418bd43e44b130e9e3186169fde38ef","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        raise NotImplementedError()"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"class MatchMakerBase(object):"},{"line_number":88,"context_line":"    \"\"\"Match Maker Base Class.\"\"\""},{"line_number":89,"context_line":"    def __init__(self):"},{"line_number":90,"context_line":"        # Array of tuples. Index [2] toggles negation, [3] is last-if-true"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FWZE%3D","line":87,"updated":"2013-01-26 05:17:52.000000000","message":"The other new methods should make it in here.","commit_id":"2fa5732edf4e66db5d9151419fc398a892b50982"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"5b9628326af48325acebe73a3355835c698c4b33","unresolved":false,"context_lines":[{"line_number":491,"context_line":""},{"line_number":492,"context_line":"    def stop_heartbeat(self):"},{"line_number":493,"context_line":"        if self._heart:"},{"line_number":494,"context_line":"            self._heart.kill()"},{"line_number":495,"context_line":""},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"class MatchMakerRing(MatchMakerBase):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAM3%2F%2FTsE%3D","line":494,"updated":"2013-01-29 16:24:51.000000000","message":"start_heatbeat() and stop_heartbeat() seem to duplicate the methods in the parent class","commit_id":"2035f499d4dc7bfcf8d0bccb81047ca1de7fff7c"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"ad90a8c7f7782a1fcd95bc4a5c275520c0ab90bb","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        raise NotImplementedError()"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"class MatchMakerBase(object):"},{"line_number":82,"context_line":"    \"\"\""},{"line_number":83,"context_line":"    Match Maker Base Class."},{"line_number":84,"context_line":"    Build off HeartbeatMatchMakerBase if building a"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B0bc%3D","line":81,"updated":"2013-02-18 16:54:04.000000000","message":"Why don\u0027t you use an abstract base class here, if this is an API definition?","commit_id":"9a4f39b98c26d376ec2cc03fab99ae43764ad541"},{"author":{"_account_id":159,"name":"Eric Windisch","email":"ewindisch@docker.com","username":"ewindisch"},"change_message_id":"e49a8ded4b4d4ef8a0214699f7d778be57b1c294","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        raise NotImplementedError()"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"class MatchMakerBase(object):"},{"line_number":82,"context_line":"    \"\"\""},{"line_number":83,"context_line":"    Match Maker Base Class."},{"line_number":84,"context_line":"    Build off HeartbeatMatchMakerBase if building a"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2BxBA%3D","line":81,"in_reply_to":"AAAAM3%2F%2B0bc%3D","updated":"2013-02-19 18:03:37.000000000","message":"Doug: perhaps that is a viable change to make, but this class is already named as it is in Folsom and I\u0027m not too keen to rename it right now on day-of-freeze.","commit_id":"9a4f39b98c26d376ec2cc03fab99ae43764ad541"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"936b2769a61c4af069554c4c7a03db2799a4549c","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        raise NotImplementedError()"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"class MatchMakerBase(object):"},{"line_number":82,"context_line":"    \"\"\""},{"line_number":83,"context_line":"    Match Maker Base Class."},{"line_number":84,"context_line":"    Build off HeartbeatMatchMakerBase if building a"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2BwcU%3D","line":81,"in_reply_to":"AAAAM3%2F%2BxBA%3D","updated":"2013-02-19 21:33:58.000000000","message":"You don\u0027t have to rename the class to add the metaclass from the abc module, but that can wait.","commit_id":"9a4f39b98c26d376ec2cc03fab99ae43764ad541"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"ad90a8c7f7782a1fcd95bc4a5c275520c0ab90bb","unresolved":false,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        super(HeartbeatMatchMakerBase, self).__init__()"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    \"\"\"Base for a heart-beat capable MatchMaker\"\"\""},{"line_number":186,"context_line":"    def send_heartbeats(self, topic, host):"},{"line_number":187,"context_line":"        for htp in self.host_topic:"},{"line_number":188,"context_line":"            key, host \u003d htp"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B0bI%3D","line":185,"updated":"2013-02-18 16:54:04.000000000","message":"Is this a comment or a misplaced docstring?","commit_id":"9a4f39b98c26d376ec2cc03fab99ae43764ad541"},{"author":{"_account_id":159,"name":"Eric Windisch","email":"ewindisch@docker.com","username":"ewindisch"},"change_message_id":"e49a8ded4b4d4ef8a0214699f7d778be57b1c294","unresolved":false,"context_lines":[{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        super(HeartbeatMatchMakerBase, self).__init__()"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    \"\"\"Base for a heart-beat capable MatchMaker\"\"\""},{"line_number":186,"context_line":"    def send_heartbeats(self, topic, host):"},{"line_number":187,"context_line":"        for htp in self.host_topic:"},{"line_number":188,"context_line":"            key, host \u003d htp"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2BxA4%3D","line":185,"in_reply_to":"AAAAM3%2F%2B0bI%3D","updated":"2013-02-19 18:03:37.000000000","message":"this should be removed.","commit_id":"9a4f39b98c26d376ec2cc03fab99ae43764ad541"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"3fe262b33db82ba1f2e78eb93b5243a62da107ea","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import contextlib"},{"line_number":22,"context_line":"import eventlet"},{"line_number":23,"context_line":"import itertools"},{"line_number":24,"context_line":"import json"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2Bpvc%3D","line":22,"updated":"2013-02-22 19:25:01.000000000","message":"eventlet should be down in the third-party imports, not in the stdlib imports.","commit_id":"3a5a3fe54170d4fa54739d9ec079763595c856f6"},{"author":{"_account_id":159,"name":"Eric Windisch","email":"ewindisch@docker.com","username":"ewindisch"},"change_message_id":"5e546c92d9388535c815016505373157e2a5c762","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import contextlib"},{"line_number":22,"context_line":"import eventlet"},{"line_number":23,"context_line":"import itertools"},{"line_number":24,"context_line":"import json"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2BpqU%3D","line":22,"in_reply_to":"AAAAM3%2F%2Bpvc%3D","updated":"2013-02-22 20:02:05.000000000","message":"Done","commit_id":"3a5a3fe54170d4fa54739d9ec079763595c856f6"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"3fe262b33db82ba1f2e78eb93b5243a62da107ea","unresolved":false,"context_lines":[{"line_number":174,"context_line":"    unregistering, and maintaining heartbeats."},{"line_number":175,"context_line":"    \"\"\""},{"line_number":176,"context_line":"    def __init__(self):"},{"line_number":177,"context_line":"        self.hosts \u003d set([])"},{"line_number":178,"context_line":"        self._heart \u003d None"},{"line_number":179,"context_line":"        self.host_topic \u003d {}"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2BpvE%3D","line":177,"updated":"2013-02-22 19:25:01.000000000","message":"set() is equivalent and prettier, not that it really matters.","commit_id":"3a5a3fe54170d4fa54739d9ec079763595c856f6"},{"author":{"_account_id":159,"name":"Eric Windisch","email":"ewindisch@docker.com","username":"ewindisch"},"change_message_id":"5e546c92d9388535c815016505373157e2a5c762","unresolved":false,"context_lines":[{"line_number":174,"context_line":"    unregistering, and maintaining heartbeats."},{"line_number":175,"context_line":"    \"\"\""},{"line_number":176,"context_line":"    def __init__(self):"},{"line_number":177,"context_line":"        self.hosts \u003d set([])"},{"line_number":178,"context_line":"        self._heart \u003d None"},{"line_number":179,"context_line":"        self.host_topic \u003d {}"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2Bpqk%3D","line":177,"in_reply_to":"AAAAM3%2F%2BpvE%3D","updated":"2013-02-22 20:02:05.000000000","message":"Done","commit_id":"3a5a3fe54170d4fa54739d9ec079763595c856f6"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"3fe262b33db82ba1f2e78eb93b5243a62da107ea","unresolved":false,"context_lines":[{"line_number":215,"context_line":"            del self.host_topic[(key, host)]"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        if host in self.hosts:"},{"line_number":218,"context_line":"            self.hosts.remove(host)"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        self.backend_unregister(key, \u0027.\u0027.join((key, host)))"},{"line_number":221,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2Bpu8%3D","line":218,"updated":"2013-02-22 19:25:01.000000000","message":"self.hosts.discard(host) is the canonical way to do this two-liner.","commit_id":"3a5a3fe54170d4fa54739d9ec079763595c856f6"},{"author":{"_account_id":159,"name":"Eric Windisch","email":"ewindisch@docker.com","username":"ewindisch"},"change_message_id":"5e546c92d9388535c815016505373157e2a5c762","unresolved":false,"context_lines":[{"line_number":215,"context_line":"            del self.host_topic[(key, host)]"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"        if host in self.hosts:"},{"line_number":218,"context_line":"            self.hosts.remove(host)"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        self.backend_unregister(key, \u0027.\u0027.join((key, host)))"},{"line_number":221,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2Bpqs%3D","line":218,"in_reply_to":"AAAAM3%2F%2Bpu8%3D","updated":"2013-02-22 20:02:05.000000000","message":"Done","commit_id":"3a5a3fe54170d4fa54739d9ec079763595c856f6"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"3fe262b33db82ba1f2e78eb93b5243a62da107ea","unresolved":false,"context_lines":[{"line_number":253,"context_line":"    def test(self, key):"},{"line_number":254,"context_line":"        if \u0027.\u0027 in key:"},{"line_number":255,"context_line":"            return True"},{"line_number":256,"context_line":"        return False"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"class TopicBinding(Binding):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2Bpuo%3D","line":256,"updated":"2013-02-22 19:25:01.000000000","message":"Should just be return (\u0027.\u0027 in key)","commit_id":"3a5a3fe54170d4fa54739d9ec079763595c856f6"},{"author":{"_account_id":159,"name":"Eric Windisch","email":"ewindisch@docker.com","username":"ewindisch"},"change_message_id":"5e546c92d9388535c815016505373157e2a5c762","unresolved":false,"context_lines":[{"line_number":253,"context_line":"    def test(self, key):"},{"line_number":254,"context_line":"        if \u0027.\u0027 in key:"},{"line_number":255,"context_line":"            return True"},{"line_number":256,"context_line":"        return False"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"class TopicBinding(Binding):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2Bpq4%3D","line":256,"in_reply_to":"AAAAM3%2F%2Bpuo%3D","updated":"2013-02-22 20:02:05.000000000","message":"Perhaps, but that would be a separate patch. That isn\u0027t related to this patch.","commit_id":"3a5a3fe54170d4fa54739d9ec079763595c856f6"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"ab6bd979e7fa4d45b23578fbb415beec3a1a5db8","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        \"\"\""},{"line_number":97,"context_line":"        LOG.warn(self.no_heartbeat_msg)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def ack_alive(self, key):"},{"line_number":100,"context_line":"        \"\"\""},{"line_number":101,"context_line":"        Acknowledge that a host.topic is alive."},{"line_number":102,"context_line":"        Used internally for updating heartbeats,"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAANH%2F%2F%2FKo%3D","line":99,"updated":"2013-02-28 14:42:01.000000000","message":"If private, add _?","commit_id":"f5e451906a49adec311db097facfc91007d604cb"},{"author":{"_account_id":159,"name":"Eric Windisch","email":"ewindisch@docker.com","username":"ewindisch"},"change_message_id":"10f01f854f34150e18624b3464997d258f86b5d3","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        \"\"\""},{"line_number":97,"context_line":"        LOG.warn(self.no_heartbeat_msg)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def ack_alive(self, key):"},{"line_number":100,"context_line":"        \"\"\""},{"line_number":101,"context_line":"        Acknowledge that a host.topic is alive."},{"line_number":102,"context_line":"        Used internally for updating heartbeats,"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAANH%2F%2F%2Bbc%3D","line":99,"in_reply_to":"AAAANH%2F%2F%2FKo%3D","updated":"2013-02-28 21:06:47.000000000","message":"Not intended to be private.","commit_id":"f5e451906a49adec311db097facfc91007d604cb"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"ab6bd979e7fa4d45b23578fbb415beec3a1a5db8","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        \"\"\""},{"line_number":117,"context_line":"        Explicitly expire a host\u0027s registration."},{"line_number":118,"context_line":"        \"\"\""},{"line_number":119,"context_line":"        LOG.warn(self.no_heartbeat_msg)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def send_heartbeats(self, topic, host):"},{"line_number":122,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAANH%2F%2F%2FKc%3D","line":119,"updated":"2013-02-28 14:42:01.000000000","message":"how about raise NotImplementedError instead of logging warnings in all of these methods?","commit_id":"f5e451906a49adec311db097facfc91007d604cb"},{"author":{"_account_id":159,"name":"Eric Windisch","email":"ewindisch@docker.com","username":"ewindisch"},"change_message_id":"10f01f854f34150e18624b3464997d258f86b5d3","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        \"\"\""},{"line_number":117,"context_line":"        Explicitly expire a host\u0027s registration."},{"line_number":118,"context_line":"        \"\"\""},{"line_number":119,"context_line":"        LOG.warn(self.no_heartbeat_msg)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def send_heartbeats(self, topic, host):"},{"line_number":122,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAANH%2F%2F%2BbM%3D","line":119,"in_reply_to":"AAAANH%2F%2F%2FKc%3D","updated":"2013-02-28 21:06:47.000000000","message":"MatchMakers do not need to implement these methods, but raising NotImplementedError could be fatal if not caught.\n\nMatchMakers that actually *do* implement a heartbeat would subclass HeartbeatMatchMakerBase which does raise NotImplementedError on vital methods.","commit_id":"f5e451906a49adec311db097facfc91007d604cb"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"ab6bd979e7fa4d45b23578fbb415beec3a1a5db8","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        \"\"\""},{"line_number":143,"context_line":"        Destroys the heartbeat greenthread."},{"line_number":144,"context_line":"        \"\"\""},{"line_number":145,"context_line":"        LOG.warn(self.no_heartbeat_msg)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def add_binding(self, binding, rule, last\u003dTrue):"},{"line_number":148,"context_line":"        self.bindings.append((binding, rule, False, last))"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAANH%2F%2F%2FK0%3D","line":145,"updated":"2013-02-28 14:42:01.000000000","message":"This new stuff seems to have significant overlap with the servicegroup API in nova.  The servicegroup API is very much nova specific right now though.  It\u0027d be nice to see some effort to improve the overlap at some point, though.","commit_id":"f5e451906a49adec311db097facfc91007d604cb"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"da7ea7d49059579dc0a96b03185c084a5d0acf12","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        Register a host on a backend."},{"line_number":95,"context_line":"        Heartbeats, if applicable, may keepalive registration."},{"line_number":96,"context_line":"        \"\"\""},{"line_number":97,"context_line":"        LOG.warn(self.no_heartbeat_msg)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def ack_alive(self, key):"},{"line_number":100,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAANH%2F%2F9ws%3D","line":97,"updated":"2013-03-01 08:33:30.000000000","message":"Agree on the warnings thing\n\nIf the author of a subclass decides not to implement these methods - and we know that makes sense - why are we spamming users with warnings about it? Remove them","commit_id":"0560db2b5318bc82cfa2290650532b7cee19bfa0"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"da7ea7d49059579dc0a96b03185c084a5d0acf12","unresolved":false,"context_lines":[{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        super(HeartbeatMatchMakerBase, self).__init__()"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def send_heartbeats(self, topic, host):"},{"line_number":184,"context_line":"        for htp in self.host_topic:"},{"line_number":185,"context_line":"            key, host \u003d htp"},{"line_number":186,"context_line":"            success \u003d self.ack_alive(key + \u0027.\u0027 + host)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAANH%2F%2F9wk%3D","line":183,"updated":"2013-03-01 08:33:30.000000000","message":"Does this code even work? Two required arguments here, yet the caller in do_heartbeat() passes no args?","commit_id":"0560db2b5318bc82cfa2290650532b7cee19bfa0"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"da7ea7d49059579dc0a96b03185c084a5d0acf12","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        super(HeartbeatMatchMakerBase, self).__init__()"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def send_heartbeats(self, topic, host):"},{"line_number":184,"context_line":"        for htp in self.host_topic:"},{"line_number":185,"context_line":"            key, host \u003d htp"},{"line_number":186,"context_line":"            success \u003d self.ack_alive(key + \u0027.\u0027 + host)"},{"line_number":187,"context_line":"            if not success:"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAANH%2F%2F9wo%3D","line":184,"updated":"2013-03-01 08:33:30.000000000","message":"this could be just\n\n  for key, host in self.host_topic:","commit_id":"0560db2b5318bc82cfa2290650532b7cee19bfa0"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"da7ea7d49059579dc0a96b03185c084a5d0acf12","unresolved":false,"context_lines":[{"line_number":185,"context_line":"            key, host \u003d htp"},{"line_number":186,"context_line":"            success \u003d self.ack_alive(key + \u0027.\u0027 + host)"},{"line_number":187,"context_line":"            if not success:"},{"line_number":188,"context_line":"                self.register(self.host_topic[host], host)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def backend_register(self, key, host):"},{"line_number":191,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAANH%2F%2F9wY%3D","line":188,"updated":"2013-03-01 08:33:30.000000000","message":"This line looks pretty bogus. What\u0027s the idea here?","commit_id":"0560db2b5318bc82cfa2290650532b7cee19bfa0"}],"openstack/common/rpc/matchmaker_redis.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"ad90a8c7f7782a1fcd95bc4a5c275520c0ab90bb","unresolved":false,"context_lines":[{"line_number":26,"context_line":"redis \u003d importutils.try_import(\u0027redis\u0027)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"matchmaker_redis_opts \u003d ["},{"line_number":30,"context_line":"    # Matchmaker ring file"},{"line_number":31,"context_line":"    cfg.StrOpt(\u0027matchmaker_redis_host\u0027,"},{"line_number":32,"context_line":"               default\u003d\u0027127.0.0.1\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B0aU%3D","line":29,"updated":"2013-02-18 16:54:04.000000000","message":"Do these belong in a different config group? I don\u0027t know the \"policy\" for adding groups, but it seems like you could make a \"matchmaker_redis\" group and shorten the option names to \"host\" and \"port\".","commit_id":"9a4f39b98c26d376ec2cc03fab99ae43764ad541"},{"author":{"_account_id":159,"name":"Eric Windisch","email":"ewindisch@docker.com","username":"ewindisch"},"change_message_id":"e49a8ded4b4d4ef8a0214699f7d778be57b1c294","unresolved":false,"context_lines":[{"line_number":26,"context_line":"redis \u003d importutils.try_import(\u0027redis\u0027)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"matchmaker_redis_opts \u003d ["},{"line_number":30,"context_line":"    # Matchmaker ring file"},{"line_number":31,"context_line":"    cfg.StrOpt(\u0027matchmaker_redis_host\u0027,"},{"line_number":32,"context_line":"               default\u003d\u0027127.0.0.1\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2BxA0%3D","line":29,"in_reply_to":"AAAAM3%2F%2B0aU%3D","updated":"2013-02-19 18:03:37.000000000","message":"I suppose. All the RPC stuff is from nova and from prior to config-groups, so I was continuing the pattern the other RPC code is using.","commit_id":"9a4f39b98c26d376ec2cc03fab99ae43764ad541"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"936b2769a61c4af069554c4c7a03db2799a4549c","unresolved":false,"context_lines":[{"line_number":26,"context_line":"redis \u003d importutils.try_import(\u0027redis\u0027)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"matchmaker_redis_opts \u003d ["},{"line_number":30,"context_line":"    # Matchmaker ring file"},{"line_number":31,"context_line":"    cfg.StrOpt(\u0027matchmaker_redis_host\u0027,"},{"line_number":32,"context_line":"               default\u003d\u0027127.0.0.1\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2BwcI%3D","line":29,"in_reply_to":"AAAAM3%2F%2BxA0%3D","updated":"2013-02-19 21:33:58.000000000","message":"OK. Maybe we can use the fancy new deprecation group stuff Mark added to move them for H.","commit_id":"9a4f39b98c26d376ec2cc03fab99ae43764ad541"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"3fe262b33db82ba1f2e78eb93b5243a62da107ea","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            lambda host: self.matchmaker.is_alive(topic, host), hosts))"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        addresses \u003d map(lambda x: x.split(\u0027.\u0027, 1)[1], good_hosts)"},{"line_number":86,"context_line":"        return zip(hosts, addresses)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class MatchMakerRedis(mm_common.HeartbeatMatchMakerBase):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2BptE%3D","line":86,"updated":"2013-02-22 19:25:01.000000000","message":"I don\u0027t see how this works.  Seems that when you put good_hosts in a set you scramble the order, so the zip no longer makes sense.","commit_id":"3a5a3fe54170d4fa54739d9ec079763595c856f6"},{"author":{"_account_id":159,"name":"Eric Windisch","email":"ewindisch@docker.com","username":"ewindisch"},"change_message_id":"5e546c92d9388535c815016505373157e2a5c762","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            lambda host: self.matchmaker.is_alive(topic, host), hosts))"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        addresses \u003d map(lambda x: x.split(\u0027.\u0027, 1)[1], good_hosts)"},{"line_number":86,"context_line":"        return zip(hosts, addresses)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"class MatchMakerRedis(mm_common.HeartbeatMatchMakerBase):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2Bpoc%3D","line":86,"in_reply_to":"AAAAM3%2F%2BptE%3D","updated":"2013-02-22 20:02:05.000000000","message":"Bleh. This does look bad.\n\nMaking this:\n    def run(self, topic):\n        topic \u003d topic.split(\u0027~\u0027, 1)[1]\n        hosts \u003d self.redis.smembers(topic)\n        good_hosts \u003d filter(\n            lambda host: self.matchmaker.is_alive(topic, host), hosts)\n\n        return map(lambda x: (x, x.split(\u0027.\u0027, 1)[1]), good_hosts)","commit_id":"3a5a3fe54170d4fa54739d9ec079763595c856f6"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"bd32a223a3e3cee99440855b3f77e302d571d9db","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"The MatchMaker classes should except a Topic or Fanout exchange key and"},{"line_number":18,"context_line":"return keys for direct exchanges, per (approximate) AMQP parlance."},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAM3%2F%2Bolw%3D","line":17,"updated":"2013-02-24 19:02:06.000000000","message":"s/except/accept/","commit_id":"06d464a83b291a56733c894033e17bcfbb63c879"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"bd32a223a3e3cee99440855b3f77e302d571d9db","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    cfg.IntOpt(\u0027matchmaker_redis_port\u0027,"},{"line_number":36,"context_line":"               default\u003d6379,"},{"line_number":37,"context_line":"               help\u003d\u0027Use this port to connect to redis host.\u0027),"},{"line_number":38,"context_line":"]"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"CONF \u003d cfg.CONF"},{"line_number":41,"context_line":"CONF.register_opts(matchmaker_redis_opts)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAAM3%2F%2Bols%3D","line":38,"updated":"2013-02-24 19:02:06.000000000","message":"Perhaps the options specific to this new driver should go into their own option group.\n\n    [matchmaker_redis]\n    redis_host\u003dfoo\n    redist_port\u003dbar","commit_id":"06d464a83b291a56733c894033e17bcfbb63c879"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"ab6bd979e7fa4d45b23578fbb415beec3a1a5db8","unresolved":false,"context_lines":[{"line_number":79,"context_line":"class RedisFanoutExchange(RedisExchange):"},{"line_number":80,"context_line":"    \"\"\""},{"line_number":81,"context_line":"    Exchange where all topic keys are split, sending to second half."},{"line_number":82,"context_line":"    i.e. \"compute.host\" sends a message to \"compute\" running on \"host\""},{"line_number":83,"context_line":"    \"\"\""},{"line_number":84,"context_line":"    def run(self, topic):"},{"line_number":85,"context_line":"        topic \u003d topic.split(\u0027~\u0027, 1)[1]"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAANH%2F%2F%2FKE%3D","line":82,"updated":"2013-02-28 14:42:01.000000000","message":"This docstring is the same as the RedisTopicExchange docstring","commit_id":"f5e451906a49adec311db097facfc91007d604cb"},{"author":{"_account_id":1561,"name":"Russell Bryant","email":"rbryant@redhat.com","username":"russellb"},"change_message_id":"ab6bd979e7fa4d45b23578fbb415beec3a1a5db8","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"class MatchMakerRedis(mm_common.HeartbeatMatchMakerBase):"},{"line_number":94,"context_line":"    \"\"\""},{"line_number":95,"context_line":"    Match Maker where hosts are loaded from a static hashmap."},{"line_number":96,"context_line":"    \"\"\""},{"line_number":97,"context_line":"    def __init__(self):"},{"line_number":98,"context_line":"        super(MatchMakerRedis, self).__init__()"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAANH%2F%2F%2FKA%3D","line":95,"updated":"2013-02-28 14:42:01.000000000","message":"out of date docstring","commit_id":"f5e451906a49adec311db097facfc91007d604cb"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"da7ea7d49059579dc0a96b03185c084a5d0acf12","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        good_hosts \u003d filter("},{"line_number":87,"context_line":"            lambda host: self.matchmaker.is_alive(topic, host), hosts)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        return map(lambda x: (x, x.split(\u0027.\u0027, 1)[1]), good_hosts)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class MatchMakerRedis(mm_common.HeartbeatMatchMakerBase):"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAANH%2F%2F9wQ%3D","line":89,"updated":"2013-03-01 08:33:30.000000000","message":"List comprehension is clearer:\n\n  [(x, x.split(\u0027.\u0027, 1)[1]) for x in good_hosts]","commit_id":"0560db2b5318bc82cfa2290650532b7cee19bfa0"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"da7ea7d49059579dc0a96b03185c084a5d0acf12","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    def __init__(self):"},{"line_number":97,"context_line":"        super(MatchMakerRedis, self).__init__()"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        self.redis \u003d redis.StrictRedis("},{"line_number":100,"context_line":"            host\u003dCONF.matchmaker_redis.host,"},{"line_number":101,"context_line":"            port\u003dCONF.matchmaker_redis.port,"},{"line_number":102,"context_line":"            password\u003dCONF.matchmaker_redis.password)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAANH%2F%2F9v0%3D","line":99,"updated":"2013-03-01 08:33:30.000000000","message":"You used try_import() so redis may be None. Need to handle that with a useful error message for the user","commit_id":"0560db2b5318bc82cfa2290650532b7cee19bfa0"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"da7ea7d49059579dc0a96b03185c084a5d0acf12","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            pipe.srem(topic, host)"},{"line_number":122,"context_line":"            pipe.execute()"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def send_heartbeats(self):"},{"line_number":125,"context_line":"        for htp in self.host_topic:"},{"line_number":126,"context_line":"            key, host \u003d htp"},{"line_number":127,"context_line":"            success \u003d self.ack_alive(key + \u0027.\u0027 + host)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAANH%2F%2F9wM%3D","line":124,"updated":"2013-03-01 08:33:30.000000000","message":"So the base class send_hearbeats() method is unused?","commit_id":"0560db2b5318bc82cfa2290650532b7cee19bfa0"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"da7ea7d49059579dc0a96b03185c084a5d0acf12","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            key, host \u003d htp"},{"line_number":127,"context_line":"            success \u003d self.ack_alive(key + \u0027.\u0027 + host)"},{"line_number":128,"context_line":"            if not success:"},{"line_number":129,"context_line":"                self.register(self.host_topic[host], host)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def backend_register(self, key, key_host):"},{"line_number":132,"context_line":"        with self.redis.pipeline() as pipe:"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAANH%2F%2F9wE%3D","line":129,"updated":"2013-03-01 08:33:30.000000000","message":"Again, don\u0027t follow that the idea of this is","commit_id":"0560db2b5318bc82cfa2290650532b7cee19bfa0"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"da7ea7d49059579dc0a96b03185c084a5d0acf12","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            pipe.multi()"},{"line_number":146,"context_line":"            pipe.srem(key, key_host)"},{"line_number":147,"context_line":"            pipe.delete(key_host)"},{"line_number":148,"context_line":"            pipe.execute()"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAANH%2F%2F9wA%3D","line":148,"updated":"2013-03-01 08:33:30.000000000","message":"Seems like you can reuse expire() here","commit_id":"0560db2b5318bc82cfa2290650532b7cee19bfa0"}],"tests/unit/rpc/test_matchmaker.py":[{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"3fe262b33db82ba1f2e78eb93b5243a62da107ea","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import logging"},{"line_number":18,"context_line":"from tests import utils"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from openstack.common.rpc import matchmaker"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2Bps8%3D","line":17,"updated":"2013-02-22 19:25:01.000000000","message":"This import goes down iwith the other tests import","commit_id":"3a5a3fe54170d4fa54739d9ec079763595c856f6"},{"author":{"_account_id":159,"name":"Eric Windisch","email":"ewindisch@docker.com","username":"ewindisch"},"change_message_id":"5e546c92d9388535c815016505373157e2a5c762","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import logging"},{"line_number":18,"context_line":"from tests import utils"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from openstack.common.rpc import matchmaker"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2BpoQ%3D","line":17,"in_reply_to":"AAAAM3%2F%2Bps8%3D","updated":"2013-02-22 20:02:05.000000000","message":"Done","commit_id":"3a5a3fe54170d4fa54739d9ec079763595c856f6"}],"tests/unit/rpc/test_matchmaker_redis.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"ad90a8c7f7782a1fcd95bc4a5c275520c0ab90bb","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            # Just test the connection"},{"line_number":45,"context_line":"            self.driver.redis.ping()"},{"line_number":46,"context_line":"        except:"},{"line_number":47,"context_line":"            raise self.skipTest(\"Redis server not available.\")"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        # Wipe all entries..."},{"line_number":50,"context_line":"        for host in self.hosts:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2B0Zs%3D","line":47,"updated":"2013-02-18 16:54:04.000000000","message":"Instead of depending on a redis server, I would rather see these tests mock out the redis library so we can always test the driver on the CI server.","commit_id":"9a4f39b98c26d376ec2cc03fab99ae43764ad541"},{"author":{"_account_id":159,"name":"Eric Windisch","email":"ewindisch@docker.com","username":"ewindisch"},"change_message_id":"e49a8ded4b4d4ef8a0214699f7d778be57b1c294","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            # Just test the connection"},{"line_number":45,"context_line":"            self.driver.redis.ping()"},{"line_number":46,"context_line":"        except:"},{"line_number":47,"context_line":"            raise self.skipTest(\"Redis server not available.\")"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        # Wipe all entries..."},{"line_number":50,"context_line":"        for host in self.hosts:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2BxAg%3D","line":47,"in_reply_to":"AAAAM3%2F%2B0Zs%3D","updated":"2013-02-19 18:03:37.000000000","message":"I agree this would be good. I looked at doing it, but it seemed to be a lot more work than can be done before the G3 window.\n\nIf yourself and other reviews deem it worthy, I can file a bug against this and improve these tests through mock outs.","commit_id":"9a4f39b98c26d376ec2cc03fab99ae43764ad541"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"936b2769a61c4af069554c4c7a03db2799a4549c","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            # Just test the connection"},{"line_number":45,"context_line":"            self.driver.redis.ping()"},{"line_number":46,"context_line":"        except:"},{"line_number":47,"context_line":"            raise self.skipTest(\"Redis server not available.\")"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        # Wipe all entries..."},{"line_number":50,"context_line":"        for host in self.hosts:"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAM3%2F%2BwcE%3D","line":47,"in_reply_to":"AAAAM3%2F%2BxAg%3D","updated":"2013-02-19 21:33:58.000000000","message":"A bug to improve them later is fine.","commit_id":"9a4f39b98c26d376ec2cc03fab99ae43764ad541"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"3fe262b33db82ba1f2e78eb93b5243a62da107ea","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import eventlet"},{"line_number":18,"context_line":"import logging"},{"line_number":19,"context_line":"from tests import utils"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from openstack.common import importutils"},{"line_number":22,"context_line":"from openstack.common.rpc import matchmaker_redis as matchmaker"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2Bps4%3D","line":19,"updated":"2013-02-22 19:25:01.000000000","message":"This import goes down with the other tests import.","commit_id":"3a5a3fe54170d4fa54739d9ec079763595c856f6"},{"author":{"_account_id":159,"name":"Eric Windisch","email":"ewindisch@docker.com","username":"ewindisch"},"change_message_id":"5e546c92d9388535c815016505373157e2a5c762","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import eventlet"},{"line_number":18,"context_line":"import logging"},{"line_number":19,"context_line":"from tests import utils"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from openstack.common import importutils"},{"line_number":22,"context_line":"from openstack.common.rpc import matchmaker_redis as matchmaker"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2BpmQ%3D","line":19,"in_reply_to":"AAAAM3%2F%2Bps4%3D","updated":"2013-02-22 20:02:05.000000000","message":"Done","commit_id":"3a5a3fe54170d4fa54739d9ec079763595c856f6"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"3fe262b33db82ba1f2e78eb93b5243a62da107ea","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            self.driver \u003d matchmaker.MatchMakerRedis()"},{"line_number":44,"context_line":"            # Just test the connection"},{"line_number":45,"context_line":"            self.driver.redis.ping()"},{"line_number":46,"context_line":"        except:"},{"line_number":47,"context_line":"            raise self.skipTest(\"Redis server not available.\")"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        # Wipe all entries..."}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2Bpsw%3D","line":46,"updated":"2013-02-22 19:25:01.000000000","message":"You don\u0027t want a bare except here, which will catch things like OutOfMemoryError and control-C","commit_id":"3a5a3fe54170d4fa54739d9ec079763595c856f6"},{"author":{"_account_id":159,"name":"Eric Windisch","email":"ewindisch@docker.com","username":"ewindisch"},"change_message_id":"5e546c92d9388535c815016505373157e2a5c762","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            self.driver \u003d matchmaker.MatchMakerRedis()"},{"line_number":44,"context_line":"            # Just test the connection"},{"line_number":45,"context_line":"            self.driver.redis.ping()"},{"line_number":46,"context_line":"        except:"},{"line_number":47,"context_line":"            raise self.skipTest(\"Redis server not available.\")"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        # Wipe all entries..."}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAM3%2F%2BpmU%3D","line":46,"in_reply_to":"AAAAM3%2F%2Bpsw%3D","updated":"2013-02-22 20:02:05.000000000","message":"Done","commit_id":"3a5a3fe54170d4fa54739d9ec079763595c856f6"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"c81e59336e774d5b8a311faaa9f2021d75fa4016","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import eventlet"},{"line_number":18,"context_line":"import logging"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from openstack.common import importutils"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2BphE%3D","line":17,"updated":"2013-02-22 21:18:41.000000000","message":"misplaced import","commit_id":"0b753080f5f1a15020caa560f86ac21b5eb11475"},{"author":{"_account_id":159,"name":"Eric Windisch","email":"ewindisch@docker.com","username":"ewindisch"},"change_message_id":"21c341deec95088de5472bff6884efcdeaa452e3","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import eventlet"},{"line_number":18,"context_line":"import logging"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from openstack.common import importutils"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2BpgM%3D","line":17,"in_reply_to":"AAAAM3%2F%2BphE%3D","updated":"2013-02-22 21:22:24.000000000","message":"Done","commit_id":"0b753080f5f1a15020caa560f86ac21b5eb11475"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"c81e59336e774d5b8a311faaa9f2021d75fa4016","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            self.driver \u003d matchmaker.MatchMakerRedis()"},{"line_number":82,"context_line":"            # Just test the connection"},{"line_number":83,"context_line":"            self.driver.redis.ping()"},{"line_number":84,"context_line":"        except:"},{"line_number":85,"context_line":"            raise self.skipTest(\"Redis server not available.\")"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        # Wipe all entries..."}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2Bpgk%3D","line":84,"updated":"2013-02-22 21:18:41.000000000","message":"This shouldn\u0027t be a bare except","commit_id":"0b753080f5f1a15020caa560f86ac21b5eb11475"},{"author":{"_account_id":159,"name":"Eric Windisch","email":"ewindisch@docker.com","username":"ewindisch"},"change_message_id":"21c341deec95088de5472bff6884efcdeaa452e3","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            self.driver \u003d matchmaker.MatchMakerRedis()"},{"line_number":82,"context_line":"            # Just test the connection"},{"line_number":83,"context_line":"            self.driver.redis.ping()"},{"line_number":84,"context_line":"        except:"},{"line_number":85,"context_line":"            raise self.skipTest(\"Redis server not available.\")"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        # Wipe all entries..."}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2BpgI%3D","line":84,"in_reply_to":"AAAAM3%2F%2Bpgk%3D","updated":"2013-02-22 21:22:24.000000000","message":"Done","commit_id":"0b753080f5f1a15020caa560f86ac21b5eb11475"},{"author":{"_account_id":5652,"name":"David Ripton","email":"dripton@redhat.com","username":"dripton"},"change_message_id":"53b19ab2ccf061bb8fb028a82ff2d5e0c0d2df80","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        \"\"\""},{"line_number":137,"context_line":"        matchmaker.redis \u003d None"},{"line_number":138,"context_line":"        self.assertRaises(ImportError, matchmaker.MatchMakerRedis)"},{"line_number":139,"context_line":"        reload(matchmaker)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAANH%2F%2F9V0%3D","line":139,"updated":"2013-03-01 15:41:55.000000000","message":"Do we trust reload() to work reliably enough to use it here?","commit_id":"9a825b7473f074b42b415bb43c7882bda89b7c71"},{"author":{"_account_id":159,"name":"Eric Windisch","email":"ewindisch@docker.com","username":"ewindisch"},"change_message_id":"c1a8e183138a4fbdb9e98e2259b4bc96539c3f1c","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        \"\"\""},{"line_number":137,"context_line":"        matchmaker.redis \u003d None"},{"line_number":138,"context_line":"        self.assertRaises(ImportError, matchmaker.MatchMakerRedis)"},{"line_number":139,"context_line":"        reload(matchmaker)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAANH%2F%2F9TI%3D","line":139,"in_reply_to":"AAAANH%2F%2F9V0%3D","updated":"2013-03-01 15:50:28.000000000","message":"This test gets run after all the other tests. However, I\u0027ve tested running this test before the others by changing the class name so it is alphanumerically higher than the others. When I did so, the reload caused no ill effect.","commit_id":"9a825b7473f074b42b415bb43c7882bda89b7c71"}]}
