)]}'
{"oslo_messaging/_drivers/zmq_driver/matchmaker/zmq_matchmaker_redis.py":[{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"2fa9d873075fb662b0e759cdbb45a7115d01b9f1","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"matchmaker_redis_opts \u003d ["},{"line_number":32,"context_line":"    cfg.ListOpt(\u0027hosts\u0027,"},{"line_number":33,"context_line":"                default\u003d[\u0027127.0.0.1:6379\u0027],"},{"line_number":34,"context_line":"                deprecated_for_removal\u003dTrue,"},{"line_number":35,"context_line":"                deprecated_reason\u003d\"Replaced by [DEFAULT]/transport_url\","}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_bae72ae3","line":32,"updated":"2016-10-05 14:34:08.000000000","message":"Does it make any sense to add option which is deprecated from the beginning? Lets make this feature available over transport url only. That also will make transition to transport urls more attractive :)","commit_id":"b1f63ba9d655dab36162f70f176cd6be0238ebee"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"3eceb27b5b71234832f051ba6d044c2d60d3e755","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"matchmaker_redis_opts \u003d ["},{"line_number":32,"context_line":"    cfg.ListOpt(\u0027hosts\u0027,"},{"line_number":33,"context_line":"                default\u003d[\u0027127.0.0.1:6379\u0027],"},{"line_number":34,"context_line":"                deprecated_for_removal\u003dTrue,"},{"line_number":35,"context_line":"                deprecated_reason\u003d\"Replaced by [DEFAULT]/transport_url\","}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_96a05945","line":32,"in_reply_to":"1a95cdbc_bae72ae3","updated":"2016-10-06 14:23:42.000000000","message":"Done","commit_id":"b1f63ba9d655dab36162f70f176cd6be0238ebee"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"2fa9d873075fb662b0e759cdbb45a7115d01b9f1","unresolved":false,"context_lines":[{"line_number":78,"context_line":"def redis_connection_warn_all(func):"},{"line_number":79,"context_line":"    @functools.wraps(func)"},{"line_number":80,"context_line":"    def func_wrapper(self, *args, **kwargs):"},{"line_number":81,"context_line":"        success \u003d False"},{"line_number":82,"context_line":"        random.shuffle(self.redis_instances)"},{"line_number":83,"context_line":"        for redis_instance in self.redis_instances:"},{"line_number":84,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_1d5c984a","line":81,"updated":"2016-10-05 14:34:08.000000000","message":"I propose to make a warning message for each unsuccessful operation and mention the name (address etc.) of the unavailable redis instance in the warning message.","commit_id":"b1f63ba9d655dab36162f70f176cd6be0238ebee"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"3eceb27b5b71234832f051ba6d044c2d60d3e755","unresolved":false,"context_lines":[{"line_number":78,"context_line":"def redis_connection_warn_all(func):"},{"line_number":79,"context_line":"    @functools.wraps(func)"},{"line_number":80,"context_line":"    def func_wrapper(self, *args, **kwargs):"},{"line_number":81,"context_line":"        success \u003d False"},{"line_number":82,"context_line":"        random.shuffle(self.redis_instances)"},{"line_number":83,"context_line":"        for redis_instance in self.redis_instances:"},{"line_number":84,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_940931e0","line":81,"in_reply_to":"1a95cdbc_1d5c984a","updated":"2016-10-06 14:23:42.000000000","message":"Done","commit_id":"b1f63ba9d655dab36162f70f176cd6be0238ebee"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"2fa9d873075fb662b0e759cdbb45a7115d01b9f1","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    @functools.wraps(func)"},{"line_number":80,"context_line":"    def func_wrapper(self, *args, **kwargs):"},{"line_number":81,"context_line":"        success \u003d False"},{"line_number":82,"context_line":"        random.shuffle(self.redis_instances)"},{"line_number":83,"context_line":"        for redis_instance in self.redis_instances:"},{"line_number":84,"context_line":"            try:"},{"line_number":85,"context_line":"                func(self, redis_instance, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_70ff8301","line":82,"range":{"start_line":82,"start_character":8,"end_line":82,"end_character":14},"updated":"2016-10-05 14:34:08.000000000","message":"If we are intended to go over all instances shuffle doesn\u0027t make sense IMO.","commit_id":"b1f63ba9d655dab36162f70f176cd6be0238ebee"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"abcc5236c884c48e127a8ae87026efc0ae3fc153","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    @functools.wraps(func)"},{"line_number":80,"context_line":"    def func_wrapper(self, *args, **kwargs):"},{"line_number":81,"context_line":"        success \u003d False"},{"line_number":82,"context_line":"        random.shuffle(self.redis_instances)"},{"line_number":83,"context_line":"        for redis_instance in self.redis_instances:"},{"line_number":84,"context_line":"            try:"},{"line_number":85,"context_line":"                func(self, redis_instance, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_196e6301","line":82,"range":{"start_line":82,"start_character":8,"end_line":82,"end_character":14},"in_reply_to":"1a95cdbc_70ff8301","updated":"2016-10-05 16:27:58.000000000","message":"If several services try to register in redis at the same time, then shuffling can help to balance the load. For example, without shuffling some service-1 tries to register on host-1 first and then on host-2. Service-2 tries to do the same thing in the same order (although it would be better for service-2 to start registering from host-2, since it is not busy with registering service-1 now). \n\nBut I am not really sure :)","commit_id":"b1f63ba9d655dab36162f70f176cd6be0238ebee"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"2fa9d873075fb662b0e759cdbb45a7115d01b9f1","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                return func(self, redis_instance, *args, **kwargs)"},{"line_number":106,"context_line":"            except redis.ConnectionError:"},{"line_number":107,"context_line":"                pass"},{"line_number":108,"context_line":"        LOG.warning(_LW(\"Redis is currently not available. \""},{"line_number":109,"context_line":"                        \"Messages are being sent to known targets using \""},{"line_number":110,"context_line":"                        \"existing connections. But new nodes \""},{"line_number":111,"context_line":"                        \"can not be discovered until Redis is up \""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_3dba3424","line":108,"updated":"2016-10-05 14:34:08.000000000","message":"Should we do this inside of the exception handler?","commit_id":"b1f63ba9d655dab36162f70f176cd6be0238ebee"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"abcc5236c884c48e127a8ae87026efc0ae3fc153","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                return func(self, redis_instance, *args, **kwargs)"},{"line_number":106,"context_line":"            except redis.ConnectionError:"},{"line_number":107,"context_line":"                pass"},{"line_number":108,"context_line":"        LOG.warning(_LW(\"Redis is currently not available. \""},{"line_number":109,"context_line":"                        \"Messages are being sent to known targets using \""},{"line_number":110,"context_line":"                        \"existing connections. But new nodes \""},{"line_number":111,"context_line":"                        \"can not be discovered until Redis is up \""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_990433c1","line":108,"in_reply_to":"1a95cdbc_3dba3424","updated":"2016-10-05 16:27:58.000000000","message":"I am not sure. It depends on how many times we want to emit warnings (for each host or just for final result).","commit_id":"b1f63ba9d655dab36162f70f176cd6be0238ebee"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"2fa9d873075fb662b0e759cdbb45a7115d01b9f1","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                        \"existing connections. But new nodes \""},{"line_number":111,"context_line":"                        \"can not be discovered until Redis is up \""},{"line_number":112,"context_line":"                        \"and running.\"))"},{"line_number":113,"context_line":"        raise zmq_matchmaker_base.MatchmakerUnavailable()"},{"line_number":114,"context_line":"    return func_wrapper"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_5047e7ba","line":113,"updated":"2016-10-05 14:34:08.000000000","message":"Currently we will get this exception all the time.","commit_id":"b1f63ba9d655dab36162f70f176cd6be0238ebee"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"abcc5236c884c48e127a8ae87026efc0ae3fc153","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                        \"existing connections. But new nodes \""},{"line_number":111,"context_line":"                        \"can not be discovered until Redis is up \""},{"line_number":112,"context_line":"                        \"and running.\"))"},{"line_number":113,"context_line":"        raise zmq_matchmaker_base.MatchmakerUnavailable()"},{"line_number":114,"context_line":"    return func_wrapper"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_79abe7d6","line":113,"in_reply_to":"1a95cdbc_5047e7ba","updated":"2016-10-05 16:27:58.000000000","message":"Why? We get the exception only if neither of instances is available now.","commit_id":"b1f63ba9d655dab36162f70f176cd6be0238ebee"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"2fa9d873075fb662b0e759cdbb45a7115d01b9f1","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        sentinel_hosts \u003d self._extract_sentinel_hosts()"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        if not sentinel_hosts:"},{"line_number":155,"context_line":"            self._redis_hosts \u003d self._extract_redis_hosts()"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"            self.redis_instances \u003d ["}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_7d4d9c71","line":154,"updated":"2016-10-05 14:34:08.000000000","message":"Can we separate sentinel implementation out of redis implementation so things will look much more clearly? Btw with sentinel we have a bunch of exceptions to handle such as MasterNotFound exception and so on.","commit_id":"b1f63ba9d655dab36162f70f176cd6be0238ebee"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"3eceb27b5b71234832f051ba6d044c2d60d3e755","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        sentinel_hosts \u003d self._extract_sentinel_hosts()"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        if not sentinel_hosts:"},{"line_number":155,"context_line":"            self._redis_hosts \u003d self._extract_redis_hosts()"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"            self.redis_instances \u003d ["}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_362ce5aa","line":154,"in_reply_to":"1a95cdbc_7d4d9c71","updated":"2016-10-06 14:23:42.000000000","message":"Done","commit_id":"b1f63ba9d655dab36162f70f176cd6be0238ebee"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"033395c28463522786e6b745d7f9b9ce7de8cf84","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    @functools.wraps(func)"},{"line_number":78,"context_line":"    def func_wrapper(self, *args, **kwargs):"},{"line_number":79,"context_line":"        success \u003d False"},{"line_number":80,"context_line":"        random.shuffle(self._redis_instances)"},{"line_number":81,"context_line":"        for redis_instance in self._redis_instances:"},{"line_number":82,"context_line":"            try:"},{"line_number":83,"context_line":"                func(self, redis_instance, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a95cdbc_8c3cc5e3","line":80,"updated":"2016-10-06 14:46:37.000000000","message":"Lets move the shuffle to matchmaker constructor to perform it once at the beginning.","commit_id":"56a7e18fb97d20ecd47bd419a7c6ff8e3ce18fec"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"b1f68f4e96488f9f8ba02cd9c7fa20769322907e","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    @functools.wraps(func)"},{"line_number":78,"context_line":"    def func_wrapper(self, *args, **kwargs):"},{"line_number":79,"context_line":"        success \u003d False"},{"line_number":80,"context_line":"        random.shuffle(self._redis_instances)"},{"line_number":81,"context_line":"        for redis_instance in self._redis_instances:"},{"line_number":82,"context_line":"            try:"},{"line_number":83,"context_line":"                func(self, redis_instance, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a95cdbc_b28ab3bd","line":80,"in_reply_to":"1a95cdbc_8c3cc5e3","updated":"2016-10-06 17:28:36.000000000","message":"Done","commit_id":"56a7e18fb97d20ecd47bd419a7c6ff8e3ce18fec"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"033395c28463522786e6b745d7f9b9ce7de8cf84","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                LOG.warning(_LW(\"Redis host %s is not available now.\"),"},{"line_number":87,"context_line":"                            redis_instance._address)"},{"line_number":88,"context_line":"        if not success:"},{"line_number":89,"context_line":"            LOG.warning(_LW(\"Redis is currently not available. \""},{"line_number":90,"context_line":"                            \"Messages are being sent to known targets using \""},{"line_number":91,"context_line":"                            \"existing connections. But new nodes \""},{"line_number":92,"context_line":"                            \"can not be discovered until Redis is up \""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a95cdbc_cc032d41","line":89,"updated":"2016-10-06 14:46:37.000000000","message":"Lets remove this message.","commit_id":"56a7e18fb97d20ecd47bd419a7c6ff8e3ce18fec"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"b1f68f4e96488f9f8ba02cd9c7fa20769322907e","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                LOG.warning(_LW(\"Redis host %s is not available now.\"),"},{"line_number":87,"context_line":"                            redis_instance._address)"},{"line_number":88,"context_line":"        if not success:"},{"line_number":89,"context_line":"            LOG.warning(_LW(\"Redis is currently not available. \""},{"line_number":90,"context_line":"                            \"Messages are being sent to known targets using \""},{"line_number":91,"context_line":"                            \"existing connections. But new nodes \""},{"line_number":92,"context_line":"                            \"can not be discovered until Redis is up \""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a95cdbc_d2857fad","line":89,"in_reply_to":"1a95cdbc_cc032d41","updated":"2016-10-06 17:28:36.000000000","message":"Done","commit_id":"56a7e18fb97d20ecd47bd419a7c6ff8e3ce18fec"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"033395c28463522786e6b745d7f9b9ce7de8cf84","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            except redis.ConnectionError:"},{"line_number":106,"context_line":"                LOG.warning(_LW(\"Redis host %s is not available now.\"),"},{"line_number":107,"context_line":"                            redis_instance._address)"},{"line_number":108,"context_line":"        LOG.warning(_LW(\"Redis is currently not available. \""},{"line_number":109,"context_line":"                        \"Messages are being sent to known targets using \""},{"line_number":110,"context_line":"                        \"existing connections. But new nodes \""},{"line_number":111,"context_line":"                        \"can not be discovered until Redis is up \""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a95cdbc_8c84c5d4","line":108,"updated":"2016-10-06 14:46:37.000000000","message":"Lets have only one warning message, i prefer to keep the one in exception handler.","commit_id":"56a7e18fb97d20ecd47bd419a7c6ff8e3ce18fec"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"b1f68f4e96488f9f8ba02cd9c7fa20769322907e","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            except redis.ConnectionError:"},{"line_number":106,"context_line":"                LOG.warning(_LW(\"Redis host %s is not available now.\"),"},{"line_number":107,"context_line":"                            redis_instance._address)"},{"line_number":108,"context_line":"        LOG.warning(_LW(\"Redis is currently not available. \""},{"line_number":109,"context_line":"                        \"Messages are being sent to known targets using \""},{"line_number":110,"context_line":"                        \"existing connections. But new nodes \""},{"line_number":111,"context_line":"                        \"can not be discovered until Redis is up \""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a95cdbc_f2943be3","line":108,"in_reply_to":"1a95cdbc_8c84c5d4","updated":"2016-10-06 17:28:36.000000000","message":"Done","commit_id":"56a7e18fb97d20ecd47bd419a7c6ff8e3ce18fec"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"4b267167dd50ffbfad1a7092528dba5682910cc0","unresolved":false,"context_lines":[{"line_number":278,"context_line":"                redis_instance._is_available \u003d False"},{"line_number":279,"context_line":"                redis_instance._ready_from \u003d float(\"inf\")"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        random.shuffle(self._redis_instances)"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        self._availability_updater \u003d \\"},{"line_number":284,"context_line":"            MatchmakerRedisAvailabilityUpdater(self.conf, self)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a95cdbc_e34debc4","line":281,"updated":"2016-10-10 10:56:40.000000000","message":"Please leave some note to comment the purpose of this shuffle (i.e load balance etc.)","commit_id":"f0adcc109cfff5c289db0ef1ea70a69abf0760f4"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"aa7af60dd0220fa1e5d96160c09e36a0addb4aef","unresolved":false,"context_lines":[{"line_number":278,"context_line":"                redis_instance._is_available \u003d False"},{"line_number":279,"context_line":"                redis_instance._ready_from \u003d float(\"inf\")"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        random.shuffle(self._redis_instances)"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        self._availability_updater \u003d \\"},{"line_number":284,"context_line":"            MatchmakerRedisAvailabilityUpdater(self.conf, self)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a95cdbc_103776ff","line":281,"in_reply_to":"1a95cdbc_e34debc4","updated":"2016-10-10 12:14:07.000000000","message":"Done","commit_id":"f0adcc109cfff5c289db0ef1ea70a69abf0760f4"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"4b267167dd50ffbfad1a7092528dba5682910cc0","unresolved":false,"context_lines":[{"line_number":290,"context_line":"                     \"password\": redis_host.password}"},{"line_number":291,"context_line":"                    for redis_host in self.url.hosts]"},{"line_number":292,"context_line":"        else:"},{"line_number":293,"context_line":"            return [{\"host\": self.conf.matchmaker_redis.host,"},{"line_number":294,"context_line":"                     \"port\": self.conf.matchmaker_redis.port,"},{"line_number":295,"context_line":"                     \"password\": self.conf.matchmaker_redis.password}]"},{"line_number":296,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a95cdbc_0372d710","line":293,"updated":"2016-10-10 10:56:40.000000000","message":"Please leave a note here like fixme or something, that we need to remove this code  along with deprecated options in next release.","commit_id":"f0adcc109cfff5c289db0ef1ea70a69abf0760f4"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"aa7af60dd0220fa1e5d96160c09e36a0addb4aef","unresolved":false,"context_lines":[{"line_number":290,"context_line":"                     \"password\": redis_host.password}"},{"line_number":291,"context_line":"                    for redis_host in self.url.hosts]"},{"line_number":292,"context_line":"        else:"},{"line_number":293,"context_line":"            return [{\"host\": self.conf.matchmaker_redis.host,"},{"line_number":294,"context_line":"                     \"port\": self.conf.matchmaker_redis.port,"},{"line_number":295,"context_line":"                     \"password\": self.conf.matchmaker_redis.password}]"},{"line_number":296,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a95cdbc_fbebcb10","line":293,"in_reply_to":"1a95cdbc_0372d710","updated":"2016-10-10 12:14:07.000000000","message":"Done","commit_id":"f0adcc109cfff5c289db0ef1ea70a69abf0760f4"},{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"4b267167dd50ffbfad1a7092528dba5682910cc0","unresolved":false,"context_lines":[{"line_number":355,"context_line":"                              self._MIN_SLEEP_FOR)"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"class MatchmakerRedisSentinel(MatchmakerRedisBase):"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    def __init__(self, conf, *args, **kwargs):"},{"line_number":361,"context_line":"        super(MatchmakerRedisSentinel, self).__init__(conf, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a95cdbc_47114a03","line":358,"updated":"2016-10-10 10:56:40.000000000","message":"Lets name it MatchmakerSentinel","commit_id":"f0adcc109cfff5c289db0ef1ea70a69abf0760f4"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"aa7af60dd0220fa1e5d96160c09e36a0addb4aef","unresolved":false,"context_lines":[{"line_number":355,"context_line":"                              self._MIN_SLEEP_FOR)"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"class MatchmakerRedisSentinel(MatchmakerRedisBase):"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    def __init__(self, conf, *args, **kwargs):"},{"line_number":361,"context_line":"        super(MatchmakerRedisSentinel, self).__init__(conf, *args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a95cdbc_d05c2e1b","line":358,"in_reply_to":"1a95cdbc_47114a03","updated":"2016-10-10 12:14:07.000000000","message":"Done","commit_id":"f0adcc109cfff5c289db0ef1ea70a69abf0760f4"}],"oslo_messaging/tests/drivers/zmq/test_zmq_transport_url.py":[{"author":{"_account_id":13290,"name":"Oleksii Zamiatin","email":"ozamiatin@mirantis.com","username":"ozamiatin"},"change_message_id":"2fa9d873075fb662b0e759cdbb45a7115d01b9f1","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self.assertEqual(\u0027zmq+redis\u0027, driver.matchmaker.url.transport)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def test_redis_sentinel_url(self):"},{"line_number":62,"context_line":"        driver, url \u003d self.setup_url(\"zmq+redis+sentinel:///\")"},{"line_number":63,"context_line":"        self.assertIs(zmq_matchmaker_redis.MatchmakerRedis,"},{"line_number":64,"context_line":"                      driver.matchmaker.__class__)"},{"line_number":65,"context_line":"        self.assertEqual(\u0027zmq+redis+sentinel\u0027, driver.matchmaker.url.transport)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_f002b33d","line":62,"updated":"2016-10-05 14:34:08.000000000","message":"I propose to mention zmq+sentinel zmq+redis - so we can one + in the url.","commit_id":"b1f63ba9d655dab36162f70f176cd6be0238ebee"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"3eceb27b5b71234832f051ba6d044c2d60d3e755","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self.assertEqual(\u0027zmq+redis\u0027, driver.matchmaker.url.transport)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def test_redis_sentinel_url(self):"},{"line_number":62,"context_line":"        driver, url \u003d self.setup_url(\"zmq+redis+sentinel:///\")"},{"line_number":63,"context_line":"        self.assertIs(zmq_matchmaker_redis.MatchmakerRedis,"},{"line_number":64,"context_line":"                      driver.matchmaker.__class__)"},{"line_number":65,"context_line":"        self.assertEqual(\u0027zmq+redis+sentinel\u0027, driver.matchmaker.url.transport)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_aa42460e","line":62,"in_reply_to":"1a95cdbc_3c806d46","updated":"2016-10-06 14:23:42.000000000","message":"Done","commit_id":"b1f63ba9d655dab36162f70f176cd6be0238ebee"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"abcc5236c884c48e127a8ae87026efc0ae3fc153","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self.assertEqual(\u0027zmq+redis\u0027, driver.matchmaker.url.transport)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def test_redis_sentinel_url(self):"},{"line_number":62,"context_line":"        driver, url \u003d self.setup_url(\"zmq+redis+sentinel:///\")"},{"line_number":63,"context_line":"        self.assertIs(zmq_matchmaker_redis.MatchmakerRedis,"},{"line_number":64,"context_line":"                      driver.matchmaker.__class__)"},{"line_number":65,"context_line":"        self.assertEqual(\u0027zmq+redis+sentinel\u0027, driver.matchmaker.url.transport)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_3c806d46","line":62,"in_reply_to":"1a95cdbc_f002b33d","updated":"2016-10-05 16:27:58.000000000","message":"We can\u0027t use zmq+sentinel since after the first plus has to be a matchmaker backend (dummy or redis). I am not sure whether it is a good idea to allow just zmq+sentinel, because sentinel only makes sense for redis backend.","commit_id":"b1f63ba9d655dab36162f70f176cd6be0238ebee"}]}
