)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"bcac2fad5f9c475cf936fdb77ee884ef0e9a1ca1","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Check if agent can reach neutron server"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The ovs agent will install some basic drop flows first for the"},{"line_number":10,"context_line":"physic bridge mappings during the init procedure. If message"},{"line_number":11,"context_line":"queue is not connected, or neutron-servers are all down, real"},{"line_number":12,"context_line":"traffic flows will not be refreshed anymore. This will cause"},{"line_number":13,"context_line":"the data plane down if tenant network and provider network are"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f79a3b5_f141f80a","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":6},"updated":"2018-12-03 22:26:19.000000000","message":"physical","commit_id":"3b279d00ea5ec27bfa7d83f0caba5f00b9bdd57b"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"0ff3fba3d8396700f8e750ffb4c84d2fdfaf2b14","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Check if agent can reach neutron server"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The ovs agent will install some basic drop flows first for the"},{"line_number":10,"context_line":"physic bridge mappings during the init procedure. If message"},{"line_number":11,"context_line":"queue is not connected, or neutron-servers are all down, real"},{"line_number":12,"context_line":"traffic flows will not be refreshed anymore. This will cause"},{"line_number":13,"context_line":"the data plane down if tenant network and provider network are"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3f79a3b5_43ed7e21","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":6},"in_reply_to":"3f79a3b5_f141f80a","updated":"2018-12-04 04:25:53.000000000","message":"Done","commit_id":"3b279d00ea5ec27bfa7d83f0caba5f00b9bdd57b"}],"neutron/db/agents_db.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f7e53fa97d4548cd6a2b2dc52b255a8ccae900d3","unresolved":false,"context_lines":[{"line_number":504,"context_line":"        agent_status, agent_state \u003d self.plugin.create_or_update_agent("},{"line_number":505,"context_line":"            context, agent_state)"},{"line_number":506,"context_line":"        self._update_local_agent_resource_versions(context, agent_state)"},{"line_number":507,"context_line":"        return agent_status"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"    def _update_local_agent_resource_versions(self, context, agent_state):"},{"line_number":510,"context_line":"        resource_versions_dict \u003d agent_state.get(\u0027resource_versions\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_804862b4","line":507,"updated":"2018-11-19 21:40:16.000000000","message":"This returns a status, so technically the agent could send a report with little info and verify a response was received.  Would mean no update to the rpc version.","commit_id":"b0d01f3b56f17abb7068a974d404997f0d019200"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"21f1c74ae49f2cbd9ae64284a4447b9af1ff6482","unresolved":false,"context_lines":[{"line_number":504,"context_line":"        agent_status, agent_state \u003d self.plugin.create_or_update_agent("},{"line_number":505,"context_line":"            context, agent_state)"},{"line_number":506,"context_line":"        self._update_local_agent_resource_versions(context, agent_state)"},{"line_number":507,"context_line":"        return agent_status"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"    def _update_local_agent_resource_versions(self, context, agent_state):"},{"line_number":510,"context_line":"        resource_versions_dict \u003d agent_state.get(\u0027resource_versions\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_b4e7dcd7","line":507,"in_reply_to":"3f79a3b5_804862b4","updated":"2018-11-20 01:24:37.000000000","message":"Hmm, seems feasible. But if true, we need more work for it:\n1. this method `report_state` will be called at the agent init function, people may say, it is not initiated done, why report state? This function name needs to change.\n2. kwargs[\u0027agent_state\u0027] is needed, that current ``AGENT_NEW, AGENT_REVIVED, AGENT_ALIVE`` are not fit this scenario. add a new status ``AGENT_INIT``?\n3. refactor this fuction to a more generic version? It still has some DB call.","commit_id":"b0d01f3b56f17abb7068a974d404997f0d019200"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"63741904bb8deb0820571251ec5ebeafa4a52f12","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        # Initialize RPC api directed to other neutron-servers"},{"line_number":479,"context_line":"        self.server_versions_rpc \u003d resources_rpc.ResourcesPushToServersRpcApi()"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    def has_alive_neutron_server(self, context, **kwargs):"},{"line_number":482,"context_line":"        return True"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    @db_api.retry_if_session_inactive()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_9170c4a8","line":481,"range":{"start_line":481,"start_character":8,"end_line":481,"end_character":32},"updated":"2018-12-03 22:12:20.000000000","message":"nit: maybe is_neutron_server_alive ?","commit_id":"3b279d00ea5ec27bfa7d83f0caba5f00b9bdd57b"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"897dc7c798413acfbd104f560ea7bd49aaeef7f2","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        # Initialize RPC api directed to other neutron-servers"},{"line_number":479,"context_line":"        self.server_versions_rpc \u003d resources_rpc.ResourcesPushToServersRpcApi()"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    def has_alive_neutron_server(self, context, **kwargs):"},{"line_number":482,"context_line":"        return True"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"    @db_api.retry_if_session_inactive()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_a888f16b","line":481,"range":{"start_line":481,"start_character":8,"end_line":481,"end_character":32},"in_reply_to":"3f79a3b5_9170c4a8","updated":"2018-12-04 03:30:29.000000000","message":"`is` looks like to check one neutron server. Using `has` is because \n one cloud deployment may have multiple neutron-server workers.","commit_id":"3b279d00ea5ec27bfa7d83f0caba5f00b9bdd57b"}],"neutron/plugins/ml2/drivers/openvswitch/agent/ovs_neutron_agent.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"5198d94050bac808b7c4207bcbeba46cc286978b","unresolved":false,"context_lines":[{"line_number":1223,"context_line":"            self.int_ofports[physical_network] \u003d int_ofport"},{"line_number":1224,"context_line":"            self.phys_ofports[physical_network] \u003d phys_ofport"},{"line_number":1225,"context_line":""},{"line_number":1226,"context_line":"            # block all untranslated traffic between bridges"},{"line_number":1227,"context_line":"            self.int_br.drop_port(in_port\u003dint_ofport)"},{"line_number":1228,"context_line":"            br.drop_port(in_port\u003dphys_ofport)"},{"line_number":1229,"context_line":""},{"line_number":1230,"context_line":"            if self.use_veth_interconnection:"},{"line_number":1231,"context_line":"                # enable veth to pass traffic"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_6226786d","line":1228,"range":{"start_line":1226,"start_character":0,"end_line":1228,"end_character":45},"updated":"2018-11-19 10:10:57.000000000","message":"These two drop flows are the root cause for the bug. But IMO we can not do much work on this. Because the bridge mapping can be varied. Provider network (externel) network can be implicitly set on any physical bridge due to the basic NORMAL flow. So the current change is a general way to confirm that ovs-agent can initiate further. Any ideas?","commit_id":"b0d01f3b56f17abb7068a974d404997f0d019200"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"15e3d1bdd57878ec2908c74bf909b2d36d244efa","unresolved":false,"context_lines":[{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        # RPC network init"},{"line_number":401,"context_line":"        self.context \u003d context.get_admin_context_without_session()"},{"line_number":402,"context_line":"        self.state_rpc.has_alive_neutron_server(self.context)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        # Define the listening consumers for the agent"},{"line_number":405,"context_line":"        consumers \u003d [[constants.TUNNEL, topics.UPDATE],"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_5a797c2f","line":402,"updated":"2018-11-26 09:47:53.000000000","message":"what about places like \"_reconfigure_physical_bridges\" or \"_handle_ovs_restart\" where this \"setup_physical_bridges\" is also called? Should we also check rpc communication cleaning rules?","commit_id":"8d3bf052e0e8d24026987e9d85fb411770017d82"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"696ffa4c4066f812f1d376a643f342f6197f849f","unresolved":false,"context_lines":[{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        # RPC network init"},{"line_number":401,"context_line":"        self.context \u003d context.get_admin_context_without_session()"},{"line_number":402,"context_line":"        self.state_rpc.has_alive_neutron_server(self.context)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        # Define the listening consumers for the agent"},{"line_number":405,"context_line":"        consumers \u003d [[constants.TUNNEL, topics.UPDATE],"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_e65f91db","line":402,"in_reply_to":"3f79a3b5_5a797c2f","updated":"2018-11-26 13:49:33.000000000","message":"Hmm, seems no rpc method is start with a underline.\nMy thoughts is to block the ovs-agent as early as possible, the best result is no flows are changed/added/removed if no neutron server  alive. And I do not want to mix this check to any other init procedure. To make things simple, if no neutron server is alive, then stay the original state. Why I put this function here, is because the PluginReportStateAPI is init done, and a context is created here, then fire that check.","commit_id":"8d3bf052e0e8d24026987e9d85fb411770017d82"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"15e3d1bdd57878ec2908c74bf909b2d36d244efa","unresolved":false,"context_lines":[{"line_number":1229,"context_line":"            # set on any physical bridge due to the basic NORMAL flow."},{"line_number":1230,"context_line":"            # Different vlan range networks can also have many bridge map"},{"line_number":1231,"context_line":"            # settings, these tenant network traffic can also be blocked by"},{"line_number":1232,"context_line":"            # the following drop flows."},{"line_number":1233,"context_line":"            # block all untranslated traffic between bridges"},{"line_number":1234,"context_line":"            self.int_br.drop_port(in_port\u003dint_ofport)"},{"line_number":1235,"context_line":"            br.drop_port(in_port\u003dphys_ofport)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_9a595401","line":1232,"updated":"2018-11-26 09:47:53.000000000","message":"I\u0027m not sure if this comment is useful here. It might be confusing in the future for readers as this bug will be marked as solved already.","commit_id":"8d3bf052e0e8d24026987e9d85fb411770017d82"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"59cb4ee4d15cab99a69baa11abc0291e66cef636","unresolved":false,"context_lines":[{"line_number":1229,"context_line":"            # set on any physical bridge due to the basic NORMAL flow."},{"line_number":1230,"context_line":"            # Different vlan range networks can also have many bridge map"},{"line_number":1231,"context_line":"            # settings, these tenant network traffic can also be blocked by"},{"line_number":1232,"context_line":"            # the following drop flows."},{"line_number":1233,"context_line":"            # block all untranslated traffic between bridges"},{"line_number":1234,"context_line":"            self.int_br.drop_port(in_port\u003dint_ofport)"},{"line_number":1235,"context_line":"            br.drop_port(in_port\u003dphys_ofport)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_c08a761c","line":1232,"in_reply_to":"3f79a3b5_26bca905","updated":"2018-11-26 16:50:11.000000000","message":"So it should be at least rephrased IMHO to something like: \"these two lines were reason of bug XXX but it\u0027s now not an issue because of check has_alive_neutron_server in init() method\" or something similar","commit_id":"8d3bf052e0e8d24026987e9d85fb411770017d82"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"696ffa4c4066f812f1d376a643f342f6197f849f","unresolved":false,"context_lines":[{"line_number":1229,"context_line":"            # set on any physical bridge due to the basic NORMAL flow."},{"line_number":1230,"context_line":"            # Different vlan range networks can also have many bridge map"},{"line_number":1231,"context_line":"            # settings, these tenant network traffic can also be blocked by"},{"line_number":1232,"context_line":"            # the following drop flows."},{"line_number":1233,"context_line":"            # block all untranslated traffic between bridges"},{"line_number":1234,"context_line":"            self.int_br.drop_port(in_port\u003dint_ofport)"},{"line_number":1235,"context_line":"            br.drop_port(in_port\u003dphys_ofport)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_26bca905","line":1232,"in_reply_to":"3f79a3b5_9a595401","updated":"2018-11-26 13:49:33.000000000","message":"For reviewers and developers, this is a reminder.","commit_id":"8d3bf052e0e8d24026987e9d85fb411770017d82"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"7229d417353dee3036390996646e18fc714dabd3","unresolved":false,"context_lines":[{"line_number":1229,"context_line":"            # set on any physical bridge due to the basic NORMAL flow."},{"line_number":1230,"context_line":"            # Different vlan range networks can also have many bridge map"},{"line_number":1231,"context_line":"            # settings, these tenant network traffic can also be blocked by"},{"line_number":1232,"context_line":"            # the following drop flows."},{"line_number":1233,"context_line":"            # block all untranslated traffic between bridges"},{"line_number":1234,"context_line":"            self.int_br.drop_port(in_port\u003dint_ofport)"},{"line_number":1235,"context_line":"            br.drop_port(in_port\u003dphys_ofport)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_c7927e49","line":1232,"in_reply_to":"3f79a3b5_c08a761c","updated":"2018-11-27 09:01:46.000000000","message":"Done","commit_id":"8d3bf052e0e8d24026987e9d85fb411770017d82"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"63741904bb8deb0820571251ec5ebeafa4a52f12","unresolved":false,"context_lines":[{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        # RPC network init"},{"line_number":401,"context_line":"        self.context \u003d context.get_admin_context_without_session()"},{"line_number":402,"context_line":"        self.state_rpc.has_alive_neutron_server(self.context)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        # Define the listening consumers for the agent"},{"line_number":405,"context_line":"        consumers \u003d [[constants.TUNNEL, topics.UPDATE],"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_f137b8db","line":402,"updated":"2018-12-03 22:12:20.000000000","message":"So will this just block until it gets a response?  If so should we add some debug before/after so users don\u0027t think the agent is hung?","commit_id":"3b279d00ea5ec27bfa7d83f0caba5f00b9bdd57b"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"0ff3fba3d8396700f8e750ffb4c84d2fdfaf2b14","unresolved":false,"context_lines":[{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        # RPC network init"},{"line_number":401,"context_line":"        self.context \u003d context.get_admin_context_without_session()"},{"line_number":402,"context_line":"        self.state_rpc.has_alive_neutron_server(self.context)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        # Define the listening consumers for the agent"},{"line_number":405,"context_line":"        consumers \u003d [[constants.TUNNEL, topics.UPDATE],"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_437ede1a","line":402,"in_reply_to":"3f79a3b5_5d5a3d5d","updated":"2018-12-04 04:25:53.000000000","message":"Changed to retry and log the timeout.","commit_id":"3b279d00ea5ec27bfa7d83f0caba5f00b9bdd57b"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"897dc7c798413acfbd104f560ea7bd49aaeef7f2","unresolved":false,"context_lines":[{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        # RPC network init"},{"line_number":401,"context_line":"        self.context \u003d context.get_admin_context_without_session()"},{"line_number":402,"context_line":"        self.state_rpc.has_alive_neutron_server(self.context)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        # Define the listening consumers for the agent"},{"line_number":405,"context_line":"        consumers \u003d [[constants.TUNNEL, topics.UPDATE],"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_5d5a3d5d","line":402,"in_reply_to":"3f79a3b5_f137b8db","updated":"2018-12-04 03:30:29.000000000","message":"Agent will failed to start, a MessagingTimeout will be raised here. I will catch and reraise it will an exception LOG. Thanks for advise.","commit_id":"3b279d00ea5ec27bfa7d83f0caba5f00b9bdd57b"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"bcac2fad5f9c475cf936fdb77ee884ef0e9a1ca1","unresolved":false,"context_lines":[{"line_number":1229,"context_line":"            # servers are down, these flows will not be installed anymore."},{"line_number":1230,"context_line":"            # Bug #1803919 was fixed in that way."},{"line_number":1231,"context_line":"            # And as a reminder, we can not do much work on this. Because"},{"line_number":1232,"context_line":"            # the bridge mappings can be varied. Provider (externel) network"},{"line_number":1233,"context_line":"            # can be implicitly set on any physical bridge due to the basic"},{"line_number":1234,"context_line":"            # NORMAL flow. Different vlan range networks can also have many"},{"line_number":1235,"context_line":"            # bridge map settings, these tenant network traffic can also be"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_5109ccd8","line":1232,"range":{"start_line":1232,"start_character":59,"end_line":1232,"end_character":67},"updated":"2018-12-03 22:26:19.000000000","message":"external","commit_id":"3b279d00ea5ec27bfa7d83f0caba5f00b9bdd57b"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"0ff3fba3d8396700f8e750ffb4c84d2fdfaf2b14","unresolved":false,"context_lines":[{"line_number":1229,"context_line":"            # servers are down, these flows will not be installed anymore."},{"line_number":1230,"context_line":"            # Bug #1803919 was fixed in that way."},{"line_number":1231,"context_line":"            # And as a reminder, we can not do much work on this. Because"},{"line_number":1232,"context_line":"            # the bridge mappings can be varied. Provider (externel) network"},{"line_number":1233,"context_line":"            # can be implicitly set on any physical bridge due to the basic"},{"line_number":1234,"context_line":"            # NORMAL flow. Different vlan range networks can also have many"},{"line_number":1235,"context_line":"            # bridge map settings, these tenant network traffic can also be"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f79a3b5_0370e641","line":1232,"range":{"start_line":1232,"start_character":59,"end_line":1232,"end_character":67},"in_reply_to":"3f79a3b5_5109ccd8","updated":"2018-12-04 04:25:53.000000000","message":"Done","commit_id":"3b279d00ea5ec27bfa7d83f0caba5f00b9bdd57b"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"0ff3fba3d8396700f8e750ffb4c84d2fdfaf2b14","unresolved":false,"context_lines":[{"line_number":403,"context_line":"        while True:"},{"line_number":404,"context_line":"            try:"},{"line_number":405,"context_line":"                self.state_rpc.has_alive_neutron_server(self.context)"},{"line_number":406,"context_line":"            except oslo_messaging.MessagingTimeout as e:"},{"line_number":407,"context_line":"                LOG.warning(\u0027l2-agent cannot contact neutron server. \u0027"},{"line_number":408,"context_line":"                            \u0027Check connectivity to neutron server. \u0027"},{"line_number":409,"context_line":"                            \u0027Retrying... \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_63819afd","line":406,"range":{"start_line":406,"start_character":11,"end_line":406,"end_character":56},"updated":"2018-12-04 04:25:53.000000000","message":"Instead of raising exception and directly exit, I changed the code to such style, inspired by L3 agent:\nhttps://github.com/openstack/neutron/blob/master/neutron/agent/l3/agent.py#L234-L245","commit_id":"0385868848f8c18c8a37fd4c661d1b1a5078e044"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"a993d12c51b4fd40b48e869e93ccbb04413127c6","unresolved":false,"context_lines":[{"line_number":403,"context_line":"        while True:"},{"line_number":404,"context_line":"            try:"},{"line_number":405,"context_line":"                self.state_rpc.has_alive_neutron_server(self.context)"},{"line_number":406,"context_line":"            except oslo_messaging.MessagingTimeout as e:"},{"line_number":407,"context_line":"                LOG.warning(\u0027l2-agent cannot contact neutron server. \u0027"},{"line_number":408,"context_line":"                            \u0027Check connectivity to neutron server. \u0027"},{"line_number":409,"context_line":"                            \u0027Retrying... \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3f79a3b5_140c9042","line":406,"range":{"start_line":406,"start_character":11,"end_line":406,"end_character":56},"in_reply_to":"3f79a3b5_63819afd","updated":"2018-12-04 14:01:45.000000000","message":"Thanks, this is a nice touch","commit_id":"0385868848f8c18c8a37fd4c661d1b1a5078e044"}]}
