)]}'
{"cinder/api/contrib/services.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"dabad8aa7986cb5f0442dbe84fda6e4788bf4fc9","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        host \u003d req.GET.get(\u0027host\u0027)"},{"line_number":95,"context_line":"        service \u003d req.GET.get(\u0027service\u0027)"},{"line_number":96,"context_line":"        if \u0027service\u0027 in req.GET:"},{"line_number":97,"context_line":"            versionutils.report_deprecated_feature(LOG, _("},{"line_number":98,"context_line":"                \"Query by service parameter is deprecated. \""},{"line_number":99,"context_line":"                \"Please use binary parameter instead.\"))"}],"source_content_type":"text/x-python","patch_set":16,"id":"1af94dfe_cf5c7b1b","line":96,"updated":"2016-03-18 18:06:16.000000000","message":"nit: you can change to:\nif service:","commit_id":"68cc5df111ebcaca58afd1e68e4d116ef27423f1"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a297e52524c9794963df865a7b071f9730380250","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        host \u003d req.GET.get(\u0027host\u0027)"},{"line_number":95,"context_line":"        service \u003d req.GET.get(\u0027service\u0027)"},{"line_number":96,"context_line":"        if \u0027service\u0027 in req.GET:"},{"line_number":97,"context_line":"            versionutils.report_deprecated_feature(LOG, _("},{"line_number":98,"context_line":"                \"Query by service parameter is deprecated. \""},{"line_number":99,"context_line":"                \"Please use binary parameter instead.\"))"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa0719c6_b72034f9","line":96,"in_reply_to":"1af94dfe_cf5c7b1b","updated":"2016-03-21 10:40:54.000000000","message":"I considered it, but they could be passing service with an empty string/value and you would not detect the presence of \u0027service\u0027 key in that case since empty string would also evaluate to false.","commit_id":"68cc5df111ebcaca58afd1e68e4d116ef27423f1"}],"cinder/backup/api.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"53cf923094839845c2112467739525299c5601c9","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        services \u003d list(self._list_backup_services(is_up\u003dTrue))"},{"line_number":182,"context_line":"        random.shuffle(services)"},{"line_number":183,"context_line":"        # Get the next running service with matching availability zone."},{"line_number":184,"context_line":"        for srv in services:"},{"line_number":185,"context_line":"            if self._az_matched(srv, availability_zone):"},{"line_number":186,"context_line":"                return srv.host"},{"line_number":187,"context_line":"        return None"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa0719c6_36057f10","line":185,"range":{"start_line":184,"start_character":1,"end_line":185,"end_character":56},"updated":"2016-03-24 14:05:32.000000000","message":"Nice refactoring! ;)","commit_id":"98c05ab60ce4e776b0b40efc85bdd3dc244a074c"}],"cinder/common/config.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"53cf923094839845c2112467739525299c5601c9","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                    \u0027It is not necessarily a host name, FQDN, or IP address. \u0027"},{"line_number":146,"context_line":"                    \u0027But it must be unique among the nodes that share the \u0027"},{"line_number":147,"context_line":"                    \u0027same host value.  When used in conjunction with host \u0027"},{"line_number":148,"context_line":"                    \u0027will allow HA Active-Active configurations.\u0027),"},{"line_number":149,"context_line":"    # NOTE(vish): default to nova for compatibility with nova installs"},{"line_number":150,"context_line":"    cfg.StrOpt(\u0027storage_availability_zone\u0027,"},{"line_number":151,"context_line":"               default\u003d\u0027nova\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa0719c6_27f1cfcd","line":148,"updated":"2016-03-24 14:05:32.000000000","message":"It\u0027s worth noting that we\u0027re using it just for cinder-volume service.","commit_id":"98c05ab60ce4e776b0b40efc85bdd3dc244a074c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"1a8b54851b0dfc05dc4dd6dc9a3170fc841e46bd","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                    \u0027It is not necessarily a host name, FQDN, or IP address. \u0027"},{"line_number":146,"context_line":"                    \u0027But it must be unique among the nodes that share the \u0027"},{"line_number":147,"context_line":"                    \u0027same host value.  When used in conjunction with host \u0027"},{"line_number":148,"context_line":"                    \u0027will allow HA Active-Active configurations.\u0027),"},{"line_number":149,"context_line":"    # NOTE(vish): default to nova for compatibility with nova installs"},{"line_number":150,"context_line":"    cfg.StrOpt(\u0027storage_availability_zone\u0027,"},{"line_number":151,"context_line":"               default\u003d\u0027nova\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba0121b8_a7ab3b74","line":148,"in_reply_to":"ba0121b8_d783cf02","updated":"2016-03-31 15:54:26.000000000","message":"The constraint has been removed, that\u0027s why I said \"we are supporting having a backup service only backup volumes\".\n\nKey words here \"we are supporting\", that means that you could set your cloud to only allow backups if the backup service is in the same node or allow them to do backup anywhere.\n\nSo lets say you have \"cheap\" storage that has no backups and is only A/P and have \"great\" storage that has backups and A/A, then you set your \"great\" storage nodes to have c-vol and c-bak and configure your system to only allow backups on the same node, and you will have A/A backups at the same time you have set desired restriction.","commit_id":"98c05ab60ce4e776b0b40efc85bdd3dc244a074c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"7622c6cfc7f260cf35944bdae20e30bc581c51ff","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                    \u0027It is not necessarily a host name, FQDN, or IP address. \u0027"},{"line_number":146,"context_line":"                    \u0027But it must be unique among the nodes that share the \u0027"},{"line_number":147,"context_line":"                    \u0027same host value.  When used in conjunction with host \u0027"},{"line_number":148,"context_line":"                    \u0027will allow HA Active-Active configurations.\u0027),"},{"line_number":149,"context_line":"    # NOTE(vish): default to nova for compatibility with nova installs"},{"line_number":150,"context_line":"    cfg.StrOpt(\u0027storage_availability_zone\u0027,"},{"line_number":151,"context_line":"               default\u003d\u0027nova\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba0121b8_d783cf02","line":148,"in_reply_to":"da0c15f0_b2d1125a","updated":"2016-03-30 11:56:58.000000000","message":"I think this constraint was removed with scalable backups efforts. Now a backup service attaches a volume and reads everything on it remotely.","commit_id":"98c05ab60ce4e776b0b40efc85bdd3dc244a074c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a8840bf1c2f3fde2380f0bd1592bf6b63d215acb","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                    \u0027It is not necessarily a host name, FQDN, or IP address. \u0027"},{"line_number":146,"context_line":"                    \u0027But it must be unique among the nodes that share the \u0027"},{"line_number":147,"context_line":"                    \u0027same host value.  When used in conjunction with host \u0027"},{"line_number":148,"context_line":"                    \u0027will allow HA Active-Active configurations.\u0027),"},{"line_number":149,"context_line":"    # NOTE(vish): default to nova for compatibility with nova installs"},{"line_number":150,"context_line":"    cfg.StrOpt(\u0027storage_availability_zone\u0027,"},{"line_number":151,"context_line":"               default\u003d\u0027nova\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"da0c15f0_b2d1125a","line":148,"in_reply_to":"fa0719c6_27f1cfcd","updated":"2016-03-28 11:20:42.000000000","message":"It will also work for backups.\n\nSince we are supporting having a backup service only backup volumes from the same host, we need backup to also support Active/Active configurations.","commit_id":"98c05ab60ce4e776b0b40efc85bdd3dc244a074c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"ad9e1576bb407fac1c367708d6c61a58b4490ace","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                    \u0027available).  This can be an opaque identifier. \u0027"},{"line_number":134,"context_line":"                    \u0027It is not necessarily a host name, FQDN, or IP address.\u0027),"},{"line_number":135,"context_line":"    cfg.StrOpt(\u0027node_name\u0027,"},{"line_number":136,"context_line":"               default\u003dsocket.gethostname(),"},{"line_number":137,"context_line":"               help\u003d\u0027Name of this node.  This can be an opaque identifier. \u0027"},{"line_number":138,"context_line":"                    \u0027It is not necessarily a host name, FQDN, or IP address. \u0027"},{"line_number":139,"context_line":"                    \u0027But it must be unique among the nodes that share the \u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba0121b8_d7458f70","line":136,"range":{"start_line":136,"start_character":23,"end_line":136,"end_character":43},"updated":"2016-03-30 11:59:55.000000000","message":"I think this should be \u0027$host\u0027 instead. That way it will mimic host value unless explicitly told otherwise.","commit_id":"5abfc4fa9ce810db1e393d41a6f6baed009fdde5"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"df87e5d17bc7c6dc8eac031a348a23c01419bbd2","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                    \u0027available).  This can be an opaque identifier. \u0027"},{"line_number":134,"context_line":"                    \u0027It is not necessarily a host name, FQDN, or IP address.\u0027),"},{"line_number":135,"context_line":"    cfg.StrOpt(\u0027node_name\u0027,"},{"line_number":136,"context_line":"               default\u003dsocket.gethostname(),"},{"line_number":137,"context_line":"               help\u003d\u0027Name of this node.  This can be an opaque identifier. \u0027"},{"line_number":138,"context_line":"                    \u0027It is not necessarily a host name, FQDN, or IP address. \u0027"},{"line_number":139,"context_line":"                    \u0027But it must be unique among the nodes that share the \u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba0121b8_12114e5d","line":136,"range":{"start_line":136,"start_character":23,"end_line":136,"end_character":43},"in_reply_to":"ba0121b8_4724dfc3","updated":"2016-04-01 15:02:51.000000000","message":"It still doesn\u0027t look neat to me, but the existing A/A clouds argument convinces me. We don\u0027t want to break them.","commit_id":"5abfc4fa9ce810db1e393d41a6f6baed009fdde5"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"22728bd4f025d4316e08f3c837cbb1dda69687a1","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                    \u0027available).  This can be an opaque identifier. \u0027"},{"line_number":134,"context_line":"                    \u0027It is not necessarily a host name, FQDN, or IP address.\u0027),"},{"line_number":135,"context_line":"    cfg.StrOpt(\u0027node_name\u0027,"},{"line_number":136,"context_line":"               default\u003dsocket.gethostname(),"},{"line_number":137,"context_line":"               help\u003d\u0027Name of this node.  This can be an opaque identifier. \u0027"},{"line_number":138,"context_line":"                    \u0027It is not necessarily a host name, FQDN, or IP address. \u0027"},{"line_number":139,"context_line":"                    \u0027But it must be unique among the nodes that share the \u0027"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba0121b8_4724dfc3","line":136,"range":{"start_line":136,"start_character":23,"end_line":136,"end_character":43},"in_reply_to":"ba0121b8_d7458f70","updated":"2016-03-31 15:59:43.000000000","message":"This is done on purpose for several reasons - I thought I mentioned it in the specs, but I probably forgot :-) - the most important one is that this will allow current clouds that use host to deploy in A/A configurations to keep working after upgrading with the new A/A mechanism, otherwise they would break.\n\nAnother reason is that I really want node_name to refer to a specific node, so if they have different hostnames, they are not the same node, unless you configure your A/P failover mechanism to set node_name to reflect that this node is replacing another.","commit_id":"5abfc4fa9ce810db1e393d41a6f6baed009fdde5"}],"cinder/service.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"dabad8aa7986cb5f0442dbe84fda6e4788bf4fc9","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                self.service.refresh()"},{"line_number":177,"context_line":"            except exception.NotFound:"},{"line_number":178,"context_line":"                # Service ID has dissapeared from the DB"},{"line_number":179,"context_line":"                LOG.debug(\u0027The service database object disappeared, \u0027"},{"line_number":180,"context_line":"                          \u0027recreating it.\u0027)"},{"line_number":181,"context_line":"                self.service \u003d None"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"1af94dfe_cf70fb42","line":179,"updated":"2016-03-18 18:06:16.000000000","message":"Please, add at least service ID  to the log message. It will be helpful for troubleshooting.","commit_id":"68cc5df111ebcaca58afd1e68e4d116ef27423f1"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a297e52524c9794963df865a7b071f9730380250","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                self.service.refresh()"},{"line_number":177,"context_line":"            except exception.NotFound:"},{"line_number":178,"context_line":"                # Service ID has dissapeared from the DB"},{"line_number":179,"context_line":"                LOG.debug(\u0027The service database object disappeared, \u0027"},{"line_number":180,"context_line":"                          \u0027recreating it.\u0027)"},{"line_number":181,"context_line":"                self.service \u003d None"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"fa0719c6_f7174c52","line":179,"in_reply_to":"1af94dfe_cf70fb42","updated":"2016-03-21 10:40:54.000000000","message":"I basically copied it from our current code (see L318), but it\u0027s a valid point, so I\u0027ll fix it.","commit_id":"68cc5df111ebcaca58afd1e68e4d116ef27423f1"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"dabad8aa7986cb5f0442dbe84fda6e4788bf4fc9","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                self.service \u003d None"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        # If we don\u0027t have a service yet try to get it from the DB"},{"line_number":184,"context_line":"        if not self.service:"},{"line_number":185,"context_line":"            try:"},{"line_number":186,"context_line":"                self.service \u003d objects.Service.get_by_args("},{"line_number":187,"context_line":"                    ctxt, self.host, self.binary)"}],"source_content_type":"text/x-python","patch_set":16,"id":"1af94dfe_0fbca3b9","line":184,"updated":"2016-03-18 18:06:16.000000000","message":"Should we remove this if statement and move under the \u0027except\u0027 block above?","commit_id":"68cc5df111ebcaca58afd1e68e4d116ef27423f1"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a297e52524c9794963df865a7b071f9730380250","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                self.service \u003d None"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        # If we don\u0027t have a service yet try to get it from the DB"},{"line_number":184,"context_line":"        if not self.service:"},{"line_number":185,"context_line":"            try:"},{"line_number":186,"context_line":"                self.service \u003d objects.Service.get_by_args("},{"line_number":187,"context_line":"                    ctxt, self.host, self.binary)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa0719c6_62da587a","line":184,"in_reply_to":"1af94dfe_0fbca3b9","updated":"2016-03-21 10:40:54.000000000","message":"No, this is here on purpose, because above code covers refresh (with potential disappearing problem) and this one cover not only that, but also when we start the service.\n\nThere are multiple steps:\n\n1- If we are already running we\u0027ll have a value in self.service, so we confirm that it still exists and if we cannot refresh it mark it as if we don\u0027t have a link to an entry in the DB.\n\n2- If we don\u0027t have a link to the DB we have to see if there is something we can link (this happens when refresh fails and when we start the service).\n\n3- If we don\u0027t have a link to the DB after trying to retrieve it from the DB, then we have to create an entry (L189).","commit_id":"68cc5df111ebcaca58afd1e68e4d116ef27423f1"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"dabad8aa7986cb5f0442dbe84fda6e4788bf4fc9","unresolved":false,"context_lines":[{"line_number":193,"context_line":"            try:"},{"line_number":194,"context_line":"                self.service_node.refresh()"},{"line_number":195,"context_line":"            except exception.NotFound:"},{"line_number":196,"context_line":"                LOG.debug(\u0027The service node database object disappeared, \u0027"},{"line_number":197,"context_line":"                          \u0027recreating it.\u0027)"},{"line_number":198,"context_line":"                self.service_node \u003d None"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"1af94dfe_0fe303da","line":196,"range":{"start_line":196,"start_character":28,"end_line":196,"end_character":29},"updated":"2016-03-18 18:06:16.000000000","message":"The same as above","commit_id":"68cc5df111ebcaca58afd1e68e4d116ef27423f1"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a297e52524c9794963df865a7b071f9730380250","unresolved":false,"context_lines":[{"line_number":193,"context_line":"            try:"},{"line_number":194,"context_line":"                self.service_node.refresh()"},{"line_number":195,"context_line":"            except exception.NotFound:"},{"line_number":196,"context_line":"                LOG.debug(\u0027The service node database object disappeared, \u0027"},{"line_number":197,"context_line":"                          \u0027recreating it.\u0027)"},{"line_number":198,"context_line":"                self.service_node \u003d None"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"fa0719c6_82c4cc92","line":196,"range":{"start_line":196,"start_character":28,"end_line":196,"end_character":29},"in_reply_to":"1af94dfe_0fe303da","updated":"2016-03-21 10:40:54.000000000","message":"Will do.","commit_id":"68cc5df111ebcaca58afd1e68e4d116ef27423f1"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"dabad8aa7986cb5f0442dbe84fda6e4788bf4fc9","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            \u0027topic\u0027: self.topic,"},{"line_number":274,"context_line":"            \u0027report_count\u0027: 0,"},{"line_number":275,"context_line":"            \u0027availability_zone\u0027: zone,"},{"line_number":276,"context_line":"            # TODO(beguileo): In N - remove these 2 lines.  For now we will be"},{"line_number":277,"context_line":"            #                 writting to both the service and the service_node"},{"line_number":278,"context_line":"            #                 tables."},{"line_number":279,"context_line":"            \u0027rpc_current_version\u0027: self.manager.RPC_API_VERSION,"}],"source_content_type":"text/x-python","patch_set":16,"id":"1af94dfe_0f0ae389","line":276,"range":{"start_line":276,"start_character":31,"end_line":276,"end_character":32},"updated":"2016-03-18 18:06:16.000000000","message":"It\u0027s already Newton :)","commit_id":"68cc5df111ebcaca58afd1e68e4d116ef27423f1"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a297e52524c9794963df865a7b071f9730380250","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            \u0027topic\u0027: self.topic,"},{"line_number":274,"context_line":"            \u0027report_count\u0027: 0,"},{"line_number":275,"context_line":"            \u0027availability_zone\u0027: zone,"},{"line_number":276,"context_line":"            # TODO(beguileo): In N - remove these 2 lines.  For now we will be"},{"line_number":277,"context_line":"            #                 writting to both the service and the service_node"},{"line_number":278,"context_line":"            #                 tables."},{"line_number":279,"context_line":"            \u0027rpc_current_version\u0027: self.manager.RPC_API_VERSION,"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa0719c6_827ccc21","line":276,"range":{"start_line":276,"start_character":31,"end_line":276,"end_character":32},"in_reply_to":"1af94dfe_0f0ae389","updated":"2016-03-21 10:40:54.000000000","message":"Time flies!  ;-)","commit_id":"68cc5df111ebcaca58afd1e68e4d116ef27423f1"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"dabad8aa7986cb5f0442dbe84fda6e4788bf4fc9","unresolved":false,"context_lines":[{"line_number":390,"context_line":"            try:"},{"line_number":391,"context_line":"                self.service_node.heartbeat()"},{"line_number":392,"context_line":"            except exception.NotFound:"},{"line_number":393,"context_line":"                LOG.debug(\u0027The service node database object disappeared, \u0027"},{"line_number":394,"context_line":"                          \u0027recreating it.\u0027)"},{"line_number":395,"context_line":"                self._ensure_service_db_entries_exist(ctxt)"},{"line_number":396,"context_line":"                self.service_node.heartbeat()"}],"source_content_type":"text/x-python","patch_set":16,"id":"1af94dfe_2f2ebffa","line":393,"range":{"start_line":393,"start_character":35,"end_line":393,"end_character":36},"updated":"2016-03-18 18:06:16.000000000","message":"The same","commit_id":"68cc5df111ebcaca58afd1e68e4d116ef27423f1"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a297e52524c9794963df865a7b071f9730380250","unresolved":false,"context_lines":[{"line_number":390,"context_line":"            try:"},{"line_number":391,"context_line":"                self.service_node.heartbeat()"},{"line_number":392,"context_line":"            except exception.NotFound:"},{"line_number":393,"context_line":"                LOG.debug(\u0027The service node database object disappeared, \u0027"},{"line_number":394,"context_line":"                          \u0027recreating it.\u0027)"},{"line_number":395,"context_line":"                self._ensure_service_db_entries_exist(ctxt)"},{"line_number":396,"context_line":"                self.service_node.heartbeat()"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa0719c6_a2d8f01e","line":393,"range":{"start_line":393,"start_character":35,"end_line":393,"end_character":36},"in_reply_to":"1af94dfe_2f2ebffa","updated":"2016-03-21 10:40:54.000000000","message":"Done","commit_id":"68cc5df111ebcaca58afd1e68e4d116ef27423f1"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"53cf923094839845c2112467739525299c5601c9","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                self.service.refresh()"},{"line_number":177,"context_line":"            except exception.NotFound:"},{"line_number":178,"context_line":"                # Service ID has dissapeared from the DB"},{"line_number":179,"context_line":"                LOG.debug(\u0027The service database object wiht id %s disappeared,\u0027"},{"line_number":180,"context_line":"                          \u0027 recreating it.\u0027, self.service.id)"},{"line_number":181,"context_line":"                self.service \u003d None"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa0719c6_00a59145","line":179,"range":{"start_line":179,"start_character":55,"end_line":179,"end_character":59},"updated":"2016-03-24 14:05:32.000000000","message":"s/wiht/with","commit_id":"98c05ab60ce4e776b0b40efc85bdd3dc244a074c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a8840bf1c2f3fde2380f0bd1592bf6b63d215acb","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                self.service.refresh()"},{"line_number":177,"context_line":"            except exception.NotFound:"},{"line_number":178,"context_line":"                # Service ID has dissapeared from the DB"},{"line_number":179,"context_line":"                LOG.debug(\u0027The service database object wiht id %s disappeared,\u0027"},{"line_number":180,"context_line":"                          \u0027 recreating it.\u0027, self.service.id)"},{"line_number":181,"context_line":"                self.service \u003d None"},{"line_number":182,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"da0c15f0_52bb560e","line":179,"range":{"start_line":179,"start_character":55,"end_line":179,"end_character":59},"in_reply_to":"fa0719c6_00a59145","updated":"2016-03-28 11:20:42.000000000","message":"Done","commit_id":"98c05ab60ce4e776b0b40efc85bdd3dc244a074c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"53cf923094839845c2112467739525299c5601c9","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        \"\"\""},{"line_number":318,"context_line":"        if not host:"},{"line_number":319,"context_line":"            host \u003d CONF.host"},{"line_number":320,"context_line":"        node \u003d node or CONF.node_name"},{"line_number":321,"context_line":"        if not binary:"},{"line_number":322,"context_line":"            binary \u003d os.path.basename(inspect.stack()[-1][1])"},{"line_number":323,"context_line":"        if not topic:"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa0719c6_fb177242","line":320,"range":{"start_line":320,"start_character":8,"end_line":320,"end_character":37},"updated":"2016-03-24 14:05:32.000000000","message":"Do we want to write node_name also for c-sch and c-bak?","commit_id":"98c05ab60ce4e776b0b40efc85bdd3dc244a074c"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"7622c6cfc7f260cf35944bdae20e30bc581c51ff","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        \"\"\""},{"line_number":318,"context_line":"        if not host:"},{"line_number":319,"context_line":"            host \u003d CONF.host"},{"line_number":320,"context_line":"        node \u003d node or CONF.node_name"},{"line_number":321,"context_line":"        if not binary:"},{"line_number":322,"context_line":"            binary \u003d os.path.basename(inspect.stack()[-1][1])"},{"line_number":323,"context_line":"        if not topic:"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba0121b8_574b3fc9","line":320,"range":{"start_line":320,"start_character":8,"end_line":320,"end_character":37},"in_reply_to":"da0c15f0_92304ea0","updated":"2016-03-30 11:56:58.000000000","message":"Makes sense.","commit_id":"98c05ab60ce4e776b0b40efc85bdd3dc244a074c"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"a8840bf1c2f3fde2380f0bd1592bf6b63d215acb","unresolved":false,"context_lines":[{"line_number":317,"context_line":"        \"\"\""},{"line_number":318,"context_line":"        if not host:"},{"line_number":319,"context_line":"            host \u003d CONF.host"},{"line_number":320,"context_line":"        node \u003d node or CONF.node_name"},{"line_number":321,"context_line":"        if not binary:"},{"line_number":322,"context_line":"            binary \u003d os.path.basename(inspect.stack()[-1][1])"},{"line_number":323,"context_line":"        if not topic:"}],"source_content_type":"text/x-python","patch_set":17,"id":"da0c15f0_92304ea0","line":320,"range":{"start_line":320,"start_character":8,"end_line":320,"end_character":37},"in_reply_to":"fa0719c6_fb177242","updated":"2016-03-28 11:20:42.000000000","message":"c-bak will also support Active-Active as I mention in a previous comment.\n\nAnd not having node entries for sch would mean that we would need to keep forever a hibrid with version fields and heartbeats both in Service and in ServiceNodes, which I believe is less desirable.\n\nAnd if we have a node entry, since node_name is not nullable, we require a name.","commit_id":"98c05ab60ce4e776b0b40efc85bdd3dc244a074c"}],"cinder/tests/unit/api/contrib/test_admin_actions.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"dabad8aa7986cb5f0442dbe84fda6e4788bf4fc9","unresolved":false,"context_lines":[{"line_number":641,"context_line":"                         _get_backup_attrib(id, \u0027status\u0027))"},{"line_number":642,"context_line":"        _mock_service_get_all.assert_called_once_with("},{"line_number":643,"context_line":"            mock.ANY,"},{"line_number":644,"context_line":"            False,  # node_summary"},{"line_number":645,"context_line":"            False,  # get_nodes"},{"line_number":646,"context_line":"            disabled\u003dFalse,"},{"line_number":647,"context_line":"            topic\u003d\u0027cinder-backup\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"1af94dfe_ef4857ce","line":644,"range":{"start_line":644,"start_character":24,"end_line":644,"end_character":25},"updated":"2016-03-18 18:06:16.000000000","message":"Thanks for the comment here","commit_id":"68cc5df111ebcaca58afd1e68e4d116ef27423f1"}]}
