)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Yair Fried \u003cyfried@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-11-28 08:36:27 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds test external/internal network connectivity"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add test cases for external connectivity against external ip,"},{"line_number":10,"context_line":"and url, thus testing external connection and DNS configuration respectively"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"AAAATn%2F9qfY%3D","line":7,"updated":"2013-12-09 04:21:50.000000000","message":"(Suggestion only) Adds test -\u003e Add tests for\n\nor\n\nIncrease testing of network connectivity","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"32b7ba1e898c5aef402e8039a56ba8f7a7f35a9d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Yair Fried \u003cyfried@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-11-28 08:36:27 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds test external/internal network connectivity"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add test cases for external connectivity against external ip,"},{"line_number":10,"context_line":"and url, thus testing external connection and DNS configuration respectively"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"AAAATn%2F9KJ4%3D","line":7,"in_reply_to":"AAAATn%2F9qfY%3D","updated":"2013-12-16 07:08:21.000000000","message":"Done","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Adds ping against VM\u0027s internal network elemets:"},{"line_number":15,"context_line":"need all of them because agents might be located on different hosts"},{"line_number":16,"context_line":"\t1. router port"},{"line_number":17,"context_line":"\t2. dhcp port"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"external destination (ip, url) and dns server are taken from conf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"AAAATn%2F9qfU%3D","line":16,"updated":"2013-12-09 04:21:50.000000000","message":"(Suggestion only) I think the rule is \u0027no tabs\u0027?","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"32b7ba1e898c5aef402e8039a56ba8f7a7f35a9d","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Adds ping against VM\u0027s internal network elemets:"},{"line_number":15,"context_line":"need all of them because agents might be located on different hosts"},{"line_number":16,"context_line":"\t1. router port"},{"line_number":17,"context_line":"\t2. dhcp port"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"external destination (ip, url) and dns server are taken from conf"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"AAAATn%2F9KJ0%3D","line":16,"in_reply_to":"AAAATn%2F9qfU%3D","updated":"2013-12-16 07:08:21.000000000","message":"Done","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"external destination (ip, url) and dns server are taken from conf"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"helper changes:"},{"line_number":22,"context_line":"remote_client:"},{"line_number":23,"context_line":"       ping_host() ping an address from the ssh server"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"AAAATn%2F9qe4%3D","line":21,"updated":"2013-12-09 04:21:50.000000000","message":"(Suggestion only) Avoid documenting the mechanics of code changes - that\u0027s what diff is for.  The commit message would ideally focus on documenting intent.","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"931b9a5e562687712b0179a8607611e4977a618d","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"external destination (ip, url) and dns server are taken from conf"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"helper changes:"},{"line_number":22,"context_line":"remote_client:"},{"line_number":23,"context_line":"       ping_host() ping an address from the ssh server"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"AAAATn%2F9KJg%3D","line":21,"in_reply_to":"AAAATn%2F9qe4%3D","updated":"2013-12-16 07:08:36.000000000","message":"Done","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"}],"etc/tempest.conf.sample":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":366,"context_line":""},{"line_number":367,"context_line":"# A public url that can be resolved by DNS_server (string"},{"line_number":368,"context_line":"# value)"},{"line_number":369,"context_line":"#url_to_reslove\u003dwww.google.com"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"# Id of the public network that provides external connectivity"},{"line_number":372,"context_line":"# (string value)"}],"source_content_type":"application/octet-stream","patch_set":18,"id":"AAAATn%2F9qgo%3D","line":369,"updated":"2013-12-09 04:21:50.000000000","message":"reslove -\u003e resolve","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0f3ada7dc86d2a0dada654a3fe358215dc1750a","unresolved":false,"context_lines":[{"line_number":366,"context_line":""},{"line_number":367,"context_line":"# A public url that can be resolved by DNS_server (string"},{"line_number":368,"context_line":"# value)"},{"line_number":369,"context_line":"#url_to_reslove\u003dwww.google.com"},{"line_number":370,"context_line":""},{"line_number":371,"context_line":"# Id of the public network that provides external connectivity"},{"line_number":372,"context_line":"# (string value)"}],"source_content_type":"application/octet-stream","patch_set":18,"id":"AAAATn%2F9KMM%3D","line":369,"in_reply_to":"AAAATn%2F9qgo%3D","updated":"2013-12-16 06:58:44.000000000","message":"Done","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"}],"tempest/common/utils/linux/remote_client.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"8ba245b80b44da6657782146a1773fcb7b9a1037","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        cmd \u003d \"nslookup %s | awk \u0027/Server/ {print $2}\u0027\" % url"},{"line_number":95,"context_line":"        return self.ssh_client.exec_command(cmd)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def resolve_dns(self):"},{"line_number":98,"context_line":"        cmd \u003d \"cat /etc/resolv.conf | awk  \u0027!/^($|#)/\u0027 | awk \" \\"},{"line_number":99,"context_line":"              \"\u0027/nameserver/ {print $2}\u0027\""},{"line_number":100,"context_line":"        return self.ssh_client.exec_command(cmd)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F84cs%3D","line":97,"updated":"2013-12-19 08:17:13.000000000","message":"(Suggestion only) The name of this method doesn\u0027t really correspond to what it does.  I\u0027d suggest get_dns_nameservers() instead.","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"f7df1750455e7a2c656b9ddfd0de7b70731231d6","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        cmd \u003d \"nslookup %s | awk \u0027/Server/ {print $2}\u0027\" % url"},{"line_number":95,"context_line":"        return self.ssh_client.exec_command(cmd)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def resolve_dns(self):"},{"line_number":98,"context_line":"        cmd \u003d \"cat /etc/resolv.conf | awk  \u0027!/^($|#)/\u0027 | awk \" \\"},{"line_number":99,"context_line":"              \"\u0027/nameserver/ {print $2}\u0027\""},{"line_number":100,"context_line":"        return self.ssh_client.exec_command(cmd)"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F8tSg%3D","line":97,"in_reply_to":"AAAATn%2F84cs%3D","updated":"2013-12-22 09:25:33.000000000","message":"Done","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"8ba245b80b44da6657782146a1773fcb7b9a1037","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        return self.ssh_client.exec_command(cmd)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def resolve_dns(self):"},{"line_number":98,"context_line":"        cmd \u003d \"cat /etc/resolv.conf | awk  \u0027!/^($|#)/\u0027 | awk \" \\"},{"line_number":99,"context_line":"              \"\u0027/nameserver/ {print $2}\u0027\""},{"line_number":100,"context_line":"        return self.ssh_client.exec_command(cmd)"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F84b8%3D","line":98,"updated":"2013-12-19 08:17:13.000000000","message":"There\u0027s no reason to cat the file.  Just pass it as an argument to the first awk statement.","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"f7df1750455e7a2c656b9ddfd0de7b70731231d6","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        return self.ssh_client.exec_command(cmd)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def resolve_dns(self):"},{"line_number":98,"context_line":"        cmd \u003d \"cat /etc/resolv.conf | awk  \u0027!/^($|#)/\u0027 | awk \" \\"},{"line_number":99,"context_line":"              \"\u0027/nameserver/ {print $2}\u0027\""},{"line_number":100,"context_line":"        return self.ssh_client.exec_command(cmd)"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F8tSY%3D","line":98,"in_reply_to":"AAAATn%2F84b8%3D","updated":"2013-12-22 09:25:33.000000000","message":"Done","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"1db937f12a97c0eb018b5c60cf1a1c0334cb3328","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        return self.ssh_client.exec_command(cmd)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def get_dns_nameservers(self):"},{"line_number":98,"context_line":"        cmd \u003d \"awk  \u0027!/^($|#)/\u0027 /etc/resolv.conf | awk \" \\"},{"line_number":99,"context_line":"              \"\u0027/nameserver/ {print $2}\u0027\""},{"line_number":100,"context_line":"        return self.ssh_client.exec_command(cmd)"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAT3%2F%2FrpQ%3D","line":98,"updated":"2014-01-03 15:54:31.000000000","message":"nit - two spaces after first call to awk\nnit - first call to awk could be grep -P or calls to awk could be probably merged","commit_id":"a6a4045593952a53aadac7f1f8e1a196bda9bd12"}],"tempest/config.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":317,"context_line":"                     \"evaluated directly\"),"},{"line_number":318,"context_line":"    cfg.BoolOpt(\u0027external_networks_reachable\u0027,"},{"line_number":319,"context_line":"                default\u003dFalse,"},{"line_number":320,"context_line":"                help\u003d\"Whether external networks are reachable from the \""},{"line_number":321,"context_line":"                     \"public network\"),"},{"line_number":322,"context_line":"    cfg.StrOpt(\u0027DNS_server\u0027,"},{"line_number":323,"context_line":"               default\u003d\"8.8.4.4\","}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9qkE%3D","line":320,"updated":"2013-12-09 04:21:50.000000000","message":"(Suggestion only) from -\u003e via","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0f3ada7dc86d2a0dada654a3fe358215dc1750a","unresolved":false,"context_lines":[{"line_number":317,"context_line":"                     \"evaluated directly\"),"},{"line_number":318,"context_line":"    cfg.BoolOpt(\u0027external_networks_reachable\u0027,"},{"line_number":319,"context_line":"                default\u003dFalse,"},{"line_number":320,"context_line":"                help\u003d\"Whether external networks are reachable from the \""},{"line_number":321,"context_line":"                     \"public network\"),"},{"line_number":322,"context_line":"    cfg.StrOpt(\u0027DNS_server\u0027,"},{"line_number":323,"context_line":"               default\u003d\"8.8.4.4\","}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9KRk%3D","line":320,"in_reply_to":"AAAATn%2F9qkE%3D","updated":"2013-12-16 06:58:44.000000000","message":"Done","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":325,"context_line":"    cfg.StrOpt(\u0027alt_DNS_server\u0027,"},{"line_number":326,"context_line":"               default\u003d\"8.8.8.8\","},{"line_number":327,"context_line":"               help\u003d\"Alternate DNS server to use for external connectivity\"),"},{"line_number":328,"context_line":"    cfg.StrOpt(\u0027url_to_reslove\u0027,"},{"line_number":329,"context_line":"               default\u003d\"www.google.com\","},{"line_number":330,"context_line":"               help\u003d\"A public url that can be resolved by DNS_server\"),"},{"line_number":331,"context_line":"    cfg.StrOpt(\u0027public_network_id\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9qkU%3D","line":328,"updated":"2013-12-09 04:21:50.000000000","message":"reslove -\u003e resolve","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0f3ada7dc86d2a0dada654a3fe358215dc1750a","unresolved":false,"context_lines":[{"line_number":325,"context_line":"    cfg.StrOpt(\u0027alt_DNS_server\u0027,"},{"line_number":326,"context_line":"               default\u003d\"8.8.8.8\","},{"line_number":327,"context_line":"               help\u003d\"Alternate DNS server to use for external connectivity\"),"},{"line_number":328,"context_line":"    cfg.StrOpt(\u0027url_to_reslove\u0027,"},{"line_number":329,"context_line":"               default\u003d\"www.google.com\","},{"line_number":330,"context_line":"               help\u003d\"A public url that can be resolved by DNS_server\"),"},{"line_number":331,"context_line":"    cfg.StrOpt(\u0027public_network_id\u0027,"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9KRc%3D","line":328,"in_reply_to":"AAAATn%2F9qkU%3D","updated":"2013-12-16 06:58:44.000000000","message":"Done","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"1db937f12a97c0eb018b5c60cf1a1c0334cb3328","unresolved":false,"context_lines":[{"line_number":312,"context_line":"    cfg.StrOpt(\u0027DNS_server\u0027,"},{"line_number":313,"context_line":"               default\u003d\"8.8.4.4\","},{"line_number":314,"context_line":"               help\u003d\"DNS server to use for external connectivity\"),"},{"line_number":315,"context_line":"    cfg.StrOpt(\u0027alt_DNS_server\u0027,"},{"line_number":316,"context_line":"               default\u003d\"8.8.8.8\","},{"line_number":317,"context_line":"               help\u003d\"Alternate DNS server to use for external connectivity\"),"},{"line_number":318,"context_line":"    cfg.IntOpt(\u0027dns_update_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAT3%2F%2FrpA%3D","line":315,"updated":"2014-01-03 15:54:31.000000000","message":"nit - for some reason I\u0027d fine DNS_server_alt a more convenient name (thinking about keeping similar options close in alphabetical order).\n\nBut this is a super minor, horribly pedant, point.\n\nOr consider making DNS_server a list opt","commit_id":"a6a4045593952a53aadac7f1f8e1a196bda9bd12"}],"tempest/scenario/manager.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":710,"context_line":"        return network, subnet, router"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"    def _ssh_to_server(self, server_ip, private_key, ssh_login\u003dNone):"},{"line_number":713,"context_line":"        \u0027\u0027\u0027"},{"line_number":714,"context_line":"        login to server (ip)"},{"line_number":715,"context_line":"        \u0027\u0027\u0027"},{"line_number":716,"context_line":"        if ssh_login is None:"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9qjQ%3D","line":713,"updated":"2013-12-09 04:21:50.000000000","message":"(Suggestion only) Regardless of whether tempest enforces  the type of triple-quote characters used, consider following the convention of \"\"\" used by the majority of the code.","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0f3ada7dc86d2a0dada654a3fe358215dc1750a","unresolved":false,"context_lines":[{"line_number":710,"context_line":"        return network, subnet, router"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"    def _ssh_to_server(self, server_ip, private_key, ssh_login\u003dNone):"},{"line_number":713,"context_line":"        \u0027\u0027\u0027"},{"line_number":714,"context_line":"        login to server (ip)"},{"line_number":715,"context_line":"        \u0027\u0027\u0027"},{"line_number":716,"context_line":"        if ssh_login is None:"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9KRE%3D","line":713,"in_reply_to":"AAAATn%2F9qjQ%3D","updated":"2013-12-16 06:58:44.000000000","message":"Done","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":723,"context_line":"        check ping server via source ssh"},{"line_number":724,"context_line":"        source must be remote_client"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"        :returns: True if ping returns"},{"line_number":727,"context_line":"                  False if ping fails (after timeout)"},{"line_number":728,"context_line":"        \u0027\u0027\u0027"},{"line_number":729,"context_line":"        def ping_remote():"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9qgc%3D","line":726,"updated":"2013-12-09 04:21:50.000000000","message":"(Suggestion only) -\u003e whether pinging the remote host succeeds","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0f3ada7dc86d2a0dada654a3fe358215dc1750a","unresolved":false,"context_lines":[{"line_number":723,"context_line":"        check ping server via source ssh"},{"line_number":724,"context_line":"        source must be remote_client"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"        :returns: True if ping returns"},{"line_number":727,"context_line":"                  False if ping fails (after timeout)"},{"line_number":728,"context_line":"        \u0027\u0027\u0027"},{"line_number":729,"context_line":"        def ping_remote():"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9KQ8%3D","line":726,"in_reply_to":"AAAATn%2F9qgc%3D","updated":"2013-12-16 06:58:44.000000000","message":"Done","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":729,"context_line":"        def ping_remote():"},{"line_number":730,"context_line":"            try:"},{"line_number":731,"context_line":"                source.ping_host(dest)"},{"line_number":732,"context_line":"            except exceptions.SSHExecCommandFailed as ex:"},{"line_number":733,"context_line":"                LOG.debug(ex)"},{"line_number":734,"context_line":"                return False"},{"line_number":735,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9qg0%3D","line":732,"updated":"2013-12-09 04:21:50.000000000","message":"-\u003e except exceptions.SSHExecCommandFailed:\n\n(the ex won\u0027t be used as per the next comment)","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0f3ada7dc86d2a0dada654a3fe358215dc1750a","unresolved":false,"context_lines":[{"line_number":729,"context_line":"        def ping_remote():"},{"line_number":730,"context_line":"            try:"},{"line_number":731,"context_line":"                source.ping_host(dest)"},{"line_number":732,"context_line":"            except exceptions.SSHExecCommandFailed as ex:"},{"line_number":733,"context_line":"                LOG.debug(ex)"},{"line_number":734,"context_line":"                return False"},{"line_number":735,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9KQo%3D","line":732,"in_reply_to":"AAAATn%2F9qg0%3D","updated":"2013-12-16 06:58:44.000000000","message":"Done","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":730,"context_line":"            try:"},{"line_number":731,"context_line":"                source.ping_host(dest)"},{"line_number":732,"context_line":"            except exceptions.SSHExecCommandFailed as ex:"},{"line_number":733,"context_line":"                LOG.debug(ex)"},{"line_number":734,"context_line":"                return False"},{"line_number":735,"context_line":"            return True"},{"line_number":736,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9qgw%3D","line":733,"updated":"2013-12-09 04:21:50.000000000","message":"-\u003e LOG.debug(\u0027SSH error in invoking command\u0027, exc_info\u003d1)\n\n(There is another comment in this review that explains why)","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0f3ada7dc86d2a0dada654a3fe358215dc1750a","unresolved":false,"context_lines":[{"line_number":730,"context_line":"            try:"},{"line_number":731,"context_line":"                source.ping_host(dest)"},{"line_number":732,"context_line":"            except exceptions.SSHExecCommandFailed as ex:"},{"line_number":733,"context_line":"                LOG.debug(ex)"},{"line_number":734,"context_line":"                return False"},{"line_number":735,"context_line":"            return True"},{"line_number":736,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9KQk%3D","line":733,"in_reply_to":"AAAATn%2F9qgw%3D","updated":"2013-12-16 06:58:44.000000000","message":"Done","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"8aef5ce36339144be91faf1d12e5876e196f6451","unresolved":false,"context_lines":[{"line_number":976,"context_line":""},{"line_number":977,"context_line":"    def _check_remote_connectivity(self, source, dest):"},{"line_number":978,"context_line":"        \"\"\"Check ping server via source ssh"},{"line_number":979,"context_line":"        source must be remote_client"},{"line_number":980,"context_line":""},{"line_number":981,"context_line":"        :returns: whether pinging the remote host succeeds"},{"line_number":982,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAUH%2F%2BZSM%3D","line":979,"updated":"2014-01-27 12:27:00.000000000","message":"pedantry: docstrings should start with a single line sentence ended with a period.\n\nimho, it is not necessary to address unless pep8 complains","commit_id":"f1f3a166ec33b2a68ec3f8e71d16a26d687eef80"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"8aef5ce36339144be91faf1d12e5876e196f6451","unresolved":false,"context_lines":[{"line_number":984,"context_line":"            try:"},{"line_number":985,"context_line":"                source.ping_host(dest)"},{"line_number":986,"context_line":"            except exceptions.SSHExecCommandFailed:"},{"line_number":987,"context_line":"                LOG.debug(\u0027SSH error in invoking command\u0027, exc_info\u003d1)"},{"line_number":988,"context_line":"                return False"},{"line_number":989,"context_line":"            return True"},{"line_number":990,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAUH%2F%2BZOs%3D","line":987,"updated":"2014-01-27 12:27:00.000000000","message":"minor point: this will cause the traceback to be printed, which might become a little noisy as we expect this to fail for a number of times before it succeeds.\n\nI don\u0027t know if just printing the exception message will be enough in this case.\n\nexcept exception.SSHExecCommandFailed as exc:\n\n    LOG.debug(\u0027SSH error in invoking command:%s\u0027, str(exc))","commit_id":"f1f3a166ec33b2a68ec3f8e71d16a26d687eef80"}],"tempest/scenario/test_network_basic_ops.py":[{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"5e9a0396c7a19ab07595718aab12fc17cbfad388","unresolved":false,"context_lines":[{"line_number":269,"context_line":""},{"line_number":270,"context_line":"            except Exception as exc:"},{"line_number":271,"context_line":"                LOG.exception(exc)"},{"line_number":272,"context_line":"                #debug.log_ip_ns()"},{"line_number":273,"context_line":"                raise exc"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def _check_dns_nameserver(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F%2BacY%3D","line":272,"updated":"2013-11-26 11:42:03.000000000","message":"It should not be commented out.","commit_id":"c101e1aa292204785d3b414342c5c3407ad13e2f"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"7c77ed99a005bb6d262aa7d0df487177871355a9","unresolved":false,"context_lines":[{"line_number":269,"context_line":""},{"line_number":270,"context_line":"            except Exception as exc:"},{"line_number":271,"context_line":"                LOG.exception(exc)"},{"line_number":272,"context_line":"                #debug.log_ip_ns()"},{"line_number":273,"context_line":"                raise exc"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def _check_dns_nameserver(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F%2BY8w%3D","line":272,"in_reply_to":"AAAATn%2F%2BacY%3D","updated":"2013-11-26 16:03:39.000000000","message":"my bad. this bothers me one I\u0027m debugging my test, I forgot to uncomment it","commit_id":"c101e1aa292204785d3b414342c5c3407ad13e2f"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":49,"context_line":"       - the Tempest host can ssh into the VM via the IP address and"},{"line_number":50,"context_line":"         successfully execute the following:"},{"line_number":51,"context_line":"          - ping an internal IP address, implying connectivity to another"},{"line_number":52,"context_line":"           VM on the same network. and to all other network components"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"         - ping an external IP address, implying external connectivity."},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9qjI%3D","line":52,"updated":"2013-12-09 04:21:50.000000000","message":"Maybe it\u0027s just the punctuation, but \u0027and to all other network components\u0027 seems ambiguous.  What are you trying to say?","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0f3ada7dc86d2a0dada654a3fe358215dc1750a","unresolved":false,"context_lines":[{"line_number":49,"context_line":"       - the Tempest host can ssh into the VM via the IP address and"},{"line_number":50,"context_line":"         successfully execute the following:"},{"line_number":51,"context_line":"          - ping an internal IP address, implying connectivity to another"},{"line_number":52,"context_line":"           VM on the same network. and to all other network components"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"         - ping an external IP address, implying external connectivity."},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9KQE%3D","line":52,"in_reply_to":"AAAATn%2F9qjI%3D","updated":"2013-12-16 06:58:44.000000000","message":"Done","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            debug.log_ip_ns()"},{"line_number":210,"context_line":"            raise exc"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    def _check_remote_connectivity(self, ssh_source, dest_ip):"},{"line_number":213,"context_line":"        self.assertTrue(self._test_remote_connectivity(ssh_source, dest_ip),"},{"line_number":214,"context_line":"                        \"Timed out waiting for %s to become \""},{"line_number":215,"context_line":"                        \"reachable\" % dest_ip)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9qhg%3D","line":212,"updated":"2013-12-09 04:21:50.000000000","message":"(Suggestion only) Why is a separate function necessary for a single line?","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0f3ada7dc86d2a0dada654a3fe358215dc1750a","unresolved":false,"context_lines":[{"line_number":209,"context_line":"            debug.log_ip_ns()"},{"line_number":210,"context_line":"            raise exc"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    def _check_remote_connectivity(self, ssh_source, dest_ip):"},{"line_number":213,"context_line":"        self.assertTrue(self._test_remote_connectivity(ssh_source, dest_ip),"},{"line_number":214,"context_line":"                        \"Timed out waiting for %s to become \""},{"line_number":215,"context_line":"                        \"reachable\" % dest_ip)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9KP8%3D","line":212,"in_reply_to":"AAAATn%2F9qhg%3D","updated":"2013-12-16 06:58:44.000000000","message":"Done","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        for server, floating_ips in self.floating_ips.iteritems():"},{"line_number":225,"context_line":"            # get internal ports\u0027 ips:"},{"line_number":226,"context_line":"            server_nets \u003d [net.id for net in self.networks"},{"line_number":227,"context_line":"                           if net.name in server.networks.keys()]"},{"line_number":228,"context_line":"            # get all network ports in the servers\u0027s network"},{"line_number":229,"context_line":"            internal_ports \u003d [p[\u0027fixed_ips\u0027] for p in"},{"line_number":230,"context_line":"                              self.network_client.list_ports("}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9qi0%3D","line":227,"updated":"2013-12-09 04:21:50.000000000","message":"(Suggestion only) keys() is the default collection of a dictionary, so \u0027in server.networks\u0027 is equivalent","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0f3ada7dc86d2a0dada654a3fe358215dc1750a","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        for server, floating_ips in self.floating_ips.iteritems():"},{"line_number":225,"context_line":"            # get internal ports\u0027 ips:"},{"line_number":226,"context_line":"            server_nets \u003d [net.id for net in self.networks"},{"line_number":227,"context_line":"                           if net.name in server.networks.keys()]"},{"line_number":228,"context_line":"            # get all network ports in the servers\u0027s network"},{"line_number":229,"context_line":"            internal_ports \u003d [p[\u0027fixed_ips\u0027] for p in"},{"line_number":230,"context_line":"                              self.network_client.list_ports("}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9KPY%3D","line":227,"in_reply_to":"AAAATn%2F9qi0%3D","updated":"2013-12-16 06:58:44.000000000","message":"IDK - seems nicer to me. Easier to understand. is this a real issue?","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":232,"context_line":"                              if p[\u0027network_id\u0027] in server_nets and"},{"line_number":233,"context_line":"                              p[\u0027device_owner\u0027].startswith(\u0027network\u0027)]"},{"line_number":234,"context_line":"            # flatten list of lists"},{"line_number":235,"context_line":"            internal_ports \u003d [item for sublist in internal_ports for item in"},{"line_number":236,"context_line":"                              sublist]"},{"line_number":237,"context_line":"            # extarct ips from list of dict"},{"line_number":238,"context_line":"            internal_ips \u003d [ip[\u0027ip_address\u0027] for ip in internal_ports]"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9qiE%3D","line":235,"updated":"2013-12-09 04:21:50.000000000","message":"(Suggestion only) Nested comprehensions aren\u0027t commonly used or understood by most people, so consider using the faster (2x) and better documented itertools alternative, e.g.:\n\ninternal_ports \u003d list(itertools.chain.from_iterable(internal_ports))","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0f3ada7dc86d2a0dada654a3fe358215dc1750a","unresolved":false,"context_lines":[{"line_number":232,"context_line":"                              if p[\u0027network_id\u0027] in server_nets and"},{"line_number":233,"context_line":"                              p[\u0027device_owner\u0027].startswith(\u0027network\u0027)]"},{"line_number":234,"context_line":"            # flatten list of lists"},{"line_number":235,"context_line":"            internal_ports \u003d [item for sublist in internal_ports for item in"},{"line_number":236,"context_line":"                              sublist]"},{"line_number":237,"context_line":"            # extarct ips from list of dict"},{"line_number":238,"context_line":"            internal_ips \u003d [ip[\u0027ip_address\u0027] for ip in internal_ports]"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9KOg%3D","line":235,"in_reply_to":"AAAATn%2F9qiE%3D","updated":"2013-12-16 06:58:44.000000000","message":"Done","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            # flatten list of lists"},{"line_number":235,"context_line":"            internal_ports \u003d [item for sublist in internal_ports for item in"},{"line_number":236,"context_line":"                              sublist]"},{"line_number":237,"context_line":"            # extarct ips from list of dict"},{"line_number":238,"context_line":"            internal_ips \u003d [ip[\u0027ip_address\u0027] for ip in internal_ports]"},{"line_number":239,"context_line":"            for floating_ip in floating_ips:"},{"line_number":240,"context_line":"                self._check_network_connectivity(floating_ip, internal_ips)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9qis%3D","line":237,"updated":"2013-12-09 04:21:50.000000000","message":"extarct -\u003e extract","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0f3ada7dc86d2a0dada654a3fe358215dc1750a","unresolved":false,"context_lines":[{"line_number":234,"context_line":"            # flatten list of lists"},{"line_number":235,"context_line":"            internal_ports \u003d [item for sublist in internal_ports for item in"},{"line_number":236,"context_line":"                              sublist]"},{"line_number":237,"context_line":"            # extarct ips from list of dict"},{"line_number":238,"context_line":"            internal_ips \u003d [ip[\u0027ip_address\u0027] for ip in internal_ports]"},{"line_number":239,"context_line":"            for floating_ip in floating_ips:"},{"line_number":240,"context_line":"                self._check_network_connectivity(floating_ip, internal_ips)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9KOc%3D","line":237,"in_reply_to":"AAAATn%2F9qis%3D","updated":"2013-12-16 06:58:44.000000000","message":"Done","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            return"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        external_ips \u003d [self.config.network.DNS_server,"},{"line_number":254,"context_line":"                        self.config.network.url_to_reslove]"},{"line_number":255,"context_line":"        for server, floating_ips in self.floating_ips.iteritems():"},{"line_number":256,"context_line":"            for floating_ip in floating_ips:"},{"line_number":257,"context_line":"                self._check_network_connectivity(floating_ip, external_ips)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9qgE%3D","line":254,"updated":"2013-12-09 04:21:50.000000000","message":"reslove -\u003e resolve","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0f3ada7dc86d2a0dada654a3fe358215dc1750a","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            return"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        external_ips \u003d [self.config.network.DNS_server,"},{"line_number":254,"context_line":"                        self.config.network.url_to_reslove]"},{"line_number":255,"context_line":"        for server, floating_ips in self.floating_ips.iteritems():"},{"line_number":256,"context_line":"            for floating_ip in floating_ips:"},{"line_number":257,"context_line":"                self._check_network_connectivity(floating_ip, external_ips)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9KOY%3D","line":254,"in_reply_to":"AAAATn%2F9qgE%3D","updated":"2013-12-16 06:58:44.000000000","message":"Done","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":256,"context_line":"            for floating_ip in floating_ips:"},{"line_number":257,"context_line":"                self._check_network_connectivity(floating_ip, external_ips)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def _check_network_connectivity(self, floating_ip, address_list):"},{"line_number":260,"context_line":"        ip_address \u003d floating_ip.floating_ip_address"},{"line_number":261,"context_line":"        private_key \u003d self.keypairs[self.tenant_id].private_key"},{"line_number":262,"context_line":"        ssh_source \u003d self._ssh_to_server(ip_address, private_key)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9qfM%3D","line":259,"updated":"2013-12-09 04:21:50.000000000","message":"(Suggestion only) Might \u0027check_vm_connectivity\u0027 make more sense?  The connectivity check is from the VM being shelled into, after all.","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0f3ada7dc86d2a0dada654a3fe358215dc1750a","unresolved":false,"context_lines":[{"line_number":256,"context_line":"            for floating_ip in floating_ips:"},{"line_number":257,"context_line":"                self._check_network_connectivity(floating_ip, external_ips)"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"    def _check_network_connectivity(self, floating_ip, address_list):"},{"line_number":260,"context_line":"        ip_address \u003d floating_ip.floating_ip_address"},{"line_number":261,"context_line":"        private_key \u003d self.keypairs[self.tenant_id].private_key"},{"line_number":262,"context_line":"        ssh_source \u003d self._ssh_to_server(ip_address, private_key)"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9KOQ%3D","line":259,"in_reply_to":"AAAATn%2F9qfM%3D","updated":"2013-12-16 06:58:44.000000000","message":"Done","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                                                str(remote_ip))"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"            except Exception as exc:"},{"line_number":270,"context_line":"                LOG.exception(exc)"},{"line_number":271,"context_line":"                debug.log_ip_ns()"},{"line_number":272,"context_line":"                raise exc"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9qhM%3D","line":270,"updated":"2013-12-09 04:21:50.000000000","message":"LOG.exception is no different that any other log method - the argument it accepts is the log message (e.g.  LOG.exception(msg)).  The difference is that LOG.exception passes exc_info\u003d1 by default, which ensures that the exception is looked up via sys.exc_info and logged.\n\nShort version: Use something like LOG.exception(\u0027Error checking remote connectivity:\u0027) \n\nReference: http://docs.python.org/2/library/logging.html#logging.exception (see the reference for debug() for details on how exc_info is used)","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"2ca0eaf3b1a9f3bf9543074f4afc8ee9bba81c9f","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                                                str(remote_ip))"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"            except Exception as exc:"},{"line_number":270,"context_line":"                LOG.exception(exc)"},{"line_number":271,"context_line":"                debug.log_ip_ns()"},{"line_number":272,"context_line":"                raise exc"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9ASI%3D","line":270,"in_reply_to":"AAAATn%2F9Anw%3D","updated":"2013-12-17 19:55:00.000000000","message":"I will change it if I have to resubmit this patch. Otherwise, I will do a different patch changing it everywhere","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"7ad3c3e291a0381d6e0f26e1d60e0f3cde210e85","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                                                str(remote_ip))"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"            except Exception as exc:"},{"line_number":270,"context_line":"                LOG.exception(exc)"},{"line_number":271,"context_line":"                debug.log_ip_ns()"},{"line_number":272,"context_line":"                raise exc"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9Anw%3D","line":270,"in_reply_to":"AAAATn%2F9KLw%3D","updated":"2013-12-17 18:41:50.000000000","message":"Yes, it should be changed everywhere, but there is no need to do things wrong for the sake of consistency.","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0f3ada7dc86d2a0dada654a3fe358215dc1750a","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                                                str(remote_ip))"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"            except Exception as exc:"},{"line_number":270,"context_line":"                LOG.exception(exc)"},{"line_number":271,"context_line":"                debug.log_ip_ns()"},{"line_number":272,"context_line":"                raise exc"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9KLw%3D","line":270,"in_reply_to":"AAAATn%2F9qhM%3D","updated":"2013-12-16 06:58:44.000000000","message":"this is the way it was used before. Shouldn\u0027t it be consistent? if a change is needed - shouldn\u0027t it change everything?","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":283,"context_line":"            LOG.info(msg)"},{"line_number":284,"context_line":"            return"},{"line_number":285,"context_line":"        elif (not (self.config.network.DNS_server"},{"line_number":286,"context_line":"                   and self.config.network.url_to_reslove)):"},{"line_number":287,"context_line":"            msg \u003d \u0027DNS Server or url not configured.\u0027"},{"line_number":288,"context_line":"            LOG.info(msg)"},{"line_number":289,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9qgM%3D","line":286,"updated":"2013-12-09 04:21:50.000000000","message":"reslove -\u003e resolve","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0f3ada7dc86d2a0dada654a3fe358215dc1750a","unresolved":false,"context_lines":[{"line_number":283,"context_line":"            LOG.info(msg)"},{"line_number":284,"context_line":"            return"},{"line_number":285,"context_line":"        elif (not (self.config.network.DNS_server"},{"line_number":286,"context_line":"                   and self.config.network.url_to_reslove)):"},{"line_number":287,"context_line":"            msg \u003d \u0027DNS Server or url not configured.\u0027"},{"line_number":288,"context_line":"            LOG.info(msg)"},{"line_number":289,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9KNg%3D","line":286,"in_reply_to":"AAAATn%2F9qgM%3D","updated":"2013-12-16 06:58:44.000000000","message":"Done","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":292,"context_line":"            for floating_ip in floating_ips:"},{"line_number":293,"context_line":"                ip_address \u003d floating_ip.floating_ip_address"},{"line_number":294,"context_line":"                private_key \u003d self.keypairs[self.tenant_id].private_key"},{"line_number":295,"context_line":"                self._check_network_connectivity("},{"line_number":296,"context_line":"                    floating_ip,"},{"line_number":297,"context_line":"                    [self.config.network.url_to_reslove]"},{"line_number":298,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9qfw%3D","line":295,"updated":"2013-12-09 04:21:50.000000000","message":"Is this check necessary?  It seems to replicate what is already being done in _check_network_external_connectivity()","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0f3ada7dc86d2a0dada654a3fe358215dc1750a","unresolved":false,"context_lines":[{"line_number":292,"context_line":"            for floating_ip in floating_ips:"},{"line_number":293,"context_line":"                ip_address \u003d floating_ip.floating_ip_address"},{"line_number":294,"context_line":"                private_key \u003d self.keypairs[self.tenant_id].private_key"},{"line_number":295,"context_line":"                self._check_network_connectivity("},{"line_number":296,"context_line":"                    floating_ip,"},{"line_number":297,"context_line":"                    [self.config.network.url_to_reslove]"},{"line_number":298,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9KMo%3D","line":295,"in_reply_to":"AAAATn%2F9qfw%3D","updated":"2013-12-16 06:58:44.000000000","message":"Done","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":294,"context_line":"                private_key \u003d self.keypairs[self.tenant_id].private_key"},{"line_number":295,"context_line":"                self._check_network_connectivity("},{"line_number":296,"context_line":"                    floating_ip,"},{"line_number":297,"context_line":"                    [self.config.network.url_to_reslove]"},{"line_number":298,"context_line":"                )"},{"line_number":299,"context_line":"                ssh_source \u003d self._ssh_to_server(ip_address, private_key)"},{"line_number":300,"context_line":"                dns_server \u003d ssh_source.resolve_dns()"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9qgI%3D","line":297,"updated":"2013-12-09 04:21:50.000000000","message":"reslove -\u003e resolve","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0f3ada7dc86d2a0dada654a3fe358215dc1750a","unresolved":false,"context_lines":[{"line_number":294,"context_line":"                private_key \u003d self.keypairs[self.tenant_id].private_key"},{"line_number":295,"context_line":"                self._check_network_connectivity("},{"line_number":296,"context_line":"                    floating_ip,"},{"line_number":297,"context_line":"                    [self.config.network.url_to_reslove]"},{"line_number":298,"context_line":"                )"},{"line_number":299,"context_line":"                ssh_source \u003d self._ssh_to_server(ip_address, private_key)"},{"line_number":300,"context_line":"                dns_server \u003d ssh_source.resolve_dns()"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9KMk%3D","line":297,"in_reply_to":"AAAATn%2F9qgI%3D","updated":"2013-12-16 06:58:44.000000000","message":"Done","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"35b4e5d789905d53207a6f893366f67aa4c5fdfe","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                self.assertTrue("},{"line_number":322,"context_line":"                    tempest.test.call_until_true("},{"line_number":323,"context_line":"                        change_dns,"},{"line_number":324,"context_line":"                        self.config.compute.ping_timeout,"},{"line_number":325,"context_line":"                        1"},{"line_number":326,"context_line":"                    )"},{"line_number":327,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9qfk%3D","line":324,"updated":"2013-12-09 04:21:50.000000000","message":"Is it wise to reuse the ping timeout value here?  The time required to update the subnet is a component of updating the db, propagating the change to the dhcp server, and having the VM receive the updated information via dhcp.  I\u0027m not sure there is or should be any relation to the time to wait for ping success.","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"2ca0eaf3b1a9f3bf9543074f4afc8ee9bba81c9f","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                self.assertTrue("},{"line_number":322,"context_line":"                    tempest.test.call_until_true("},{"line_number":323,"context_line":"                        change_dns,"},{"line_number":324,"context_line":"                        self.config.compute.ping_timeout,"},{"line_number":325,"context_line":"                        1"},{"line_number":326,"context_line":"                    )"},{"line_number":327,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9AR0%3D","line":324,"in_reply_to":"AAAATn%2F9AnQ%3D","updated":"2013-12-17 19:55:00.000000000","message":"Do you have a value in mind?","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"7ad3c3e291a0381d6e0f26e1d60e0f3cde210e85","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                self.assertTrue("},{"line_number":322,"context_line":"                    tempest.test.call_until_true("},{"line_number":323,"context_line":"                        change_dns,"},{"line_number":324,"context_line":"                        self.config.compute.ping_timeout,"},{"line_number":325,"context_line":"                        1"},{"line_number":326,"context_line":"                    )"},{"line_number":327,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9AnQ%3D","line":324,"in_reply_to":"AAAATn%2F9KMY%3D","updated":"2013-12-17 18:41:50.000000000","message":"I would recommend creating a new one, yes, or just hard-coding a value if you don\u0027t think it needs to be configurable.","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"b0f3ada7dc86d2a0dada654a3fe358215dc1750a","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                self.assertTrue("},{"line_number":322,"context_line":"                    tempest.test.call_until_true("},{"line_number":323,"context_line":"                        change_dns,"},{"line_number":324,"context_line":"                        self.config.compute.ping_timeout,"},{"line_number":325,"context_line":"                        1"},{"line_number":326,"context_line":"                    )"},{"line_number":327,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F9KMY%3D","line":324,"in_reply_to":"AAAATn%2F9qfk%3D","updated":"2013-12-16 06:58:44.000000000","message":"just used an arbitrary timeout that already exists instead of creating a new one in the conf. Do you think I should create a new one?","commit_id":"2d7746f96e0391c67ef4cd856583aa05d83fea19"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"2449a2028cc02ed1cb2454e224639f7f71bb0b74","unresolved":false,"context_lines":[{"line_number":283,"context_line":"            # get internal ports\u0027 ips:"},{"line_number":284,"context_line":"            server_nets \u003d [net.id for net in self.networks"},{"line_number":285,"context_line":"                           if net.name in server.networks.keys()]"},{"line_number":286,"context_line":"            # get all network ports in the servers\u0027s network"},{"line_number":287,"context_line":"            internal_ports \u003d [p[\u0027fixed_ips\u0027] for p in"},{"line_number":288,"context_line":"                              self.network_client.list_ports("},{"line_number":289,"context_line":"                                  tenant_id\u003dserver.tenant_id)[\u0027ports\u0027]"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F8%2FZ0%3D","line":286,"updated":"2013-12-17 23:54:04.000000000","message":"(F)servers\u0027s -\u003e (T)servers\u0027 ?","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"f7df1750455e7a2c656b9ddfd0de7b70731231d6","unresolved":false,"context_lines":[{"line_number":283,"context_line":"            # get internal ports\u0027 ips:"},{"line_number":284,"context_line":"            server_nets \u003d [net.id for net in self.networks"},{"line_number":285,"context_line":"                           if net.name in server.networks.keys()]"},{"line_number":286,"context_line":"            # get all network ports in the servers\u0027s network"},{"line_number":287,"context_line":"            internal_ports \u003d [p[\u0027fixed_ips\u0027] for p in"},{"line_number":288,"context_line":"                              self.network_client.list_ports("},{"line_number":289,"context_line":"                                  tenant_id\u003dserver.tenant_id)[\u0027ports\u0027]"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F8tSU%3D","line":286,"in_reply_to":"AAAATn%2F8%2FZ0%3D","updated":"2013-12-22 09:25:33.000000000","message":"Done","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"8ba245b80b44da6657782146a1773fcb7b9a1037","unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        for remote_ip in address_list:"},{"line_number":321,"context_line":"            try:"},{"line_number":322,"context_line":"                self.assertTrue(self._check_remote_connectivity("},{"line_number":323,"context_line":"                    ssh_source,"},{"line_number":324,"context_line":"                    str(remote_ip)),"},{"line_number":325,"context_line":"                    \"Timed out waiting for %s to become \""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F84kw%3D","line":322,"updated":"2013-12-19 08:17:13.000000000","message":"The AssertionError raised by this statement will be caught by the exception handler and not fail the test.  My suggestion would be to use an else clause as follows:\n\ntry:\n  result \u003d check_connectivity()\nexcept:\n  log()\nelse:\n  self.assertTrue(result)\n\nJust an FYI, pretty much all exceptions extend Exception, so consider that all exceptions will hit a generic statement like the one appearing on line 327.","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"f7df1750455e7a2c656b9ddfd0de7b70731231d6","unresolved":false,"context_lines":[{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        for remote_ip in address_list:"},{"line_number":321,"context_line":"            try:"},{"line_number":322,"context_line":"                self.assertTrue(self._check_remote_connectivity("},{"line_number":323,"context_line":"                    ssh_source,"},{"line_number":324,"context_line":"                    str(remote_ip)),"},{"line_number":325,"context_line":"                    \"Timed out waiting for %s to become \""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F8tOY%3D","line":322,"in_reply_to":"AAAATn%2F84kw%3D","updated":"2013-12-22 09:25:33.000000000","message":"since the except re-throws the exception I don\u0027t understand the problem here. Could you please elaborate?","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"8ba245b80b44da6657782146a1773fcb7b9a1037","unresolved":false,"context_lines":[{"line_number":321,"context_line":"            try:"},{"line_number":322,"context_line":"                self.assertTrue(self._check_remote_connectivity("},{"line_number":323,"context_line":"                    ssh_source,"},{"line_number":324,"context_line":"                    str(remote_ip)),"},{"line_number":325,"context_line":"                    \"Timed out waiting for %s to become \""},{"line_number":326,"context_line":"                    \"reachable\" % remote_ip)"},{"line_number":327,"context_line":"            except Exception as exc:"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F84fA%3D","line":324,"updated":"2013-12-19 08:17:13.000000000","message":"I\u0027m confused - what format is remote_ip in that it would need to be explicitly converted to a string?","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"f7df1750455e7a2c656b9ddfd0de7b70731231d6","unresolved":false,"context_lines":[{"line_number":321,"context_line":"            try:"},{"line_number":322,"context_line":"                self.assertTrue(self._check_remote_connectivity("},{"line_number":323,"context_line":"                    ssh_source,"},{"line_number":324,"context_line":"                    str(remote_ip)),"},{"line_number":325,"context_line":"                    \"Timed out waiting for %s to become \""},{"line_number":326,"context_line":"                    \"reachable\" % remote_ip)"},{"line_number":327,"context_line":"            except Exception as exc:"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F8tLA%3D","line":324,"in_reply_to":"AAAATn%2F84fA%3D","updated":"2013-12-22 09:25:33.000000000","message":"Done","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"8ba245b80b44da6657782146a1773fcb7b9a1037","unresolved":false,"context_lines":[{"line_number":325,"context_line":"                    \"Timed out waiting for %s to become \""},{"line_number":326,"context_line":"                    \"reachable\" % remote_ip)"},{"line_number":327,"context_line":"            except Exception as exc:"},{"line_number":328,"context_line":"                LOG.exception(exc)"},{"line_number":329,"context_line":"                debug.log_ip_ns()"},{"line_number":330,"context_line":"                raise exc"},{"line_number":331,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F84kc%3D","line":328,"updated":"2013-12-19 08:17:13.000000000","message":"Please provide a message rather than passing the exception (which will automatically be logged by LOG.exception()).   This is not a style argument - the invocation here is simply incorrect - so consistency is no excuse.","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"f7df1750455e7a2c656b9ddfd0de7b70731231d6","unresolved":false,"context_lines":[{"line_number":325,"context_line":"                    \"Timed out waiting for %s to become \""},{"line_number":326,"context_line":"                    \"reachable\" % remote_ip)"},{"line_number":327,"context_line":"            except Exception as exc:"},{"line_number":328,"context_line":"                LOG.exception(exc)"},{"line_number":329,"context_line":"                debug.log_ip_ns()"},{"line_number":330,"context_line":"                raise exc"},{"line_number":331,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F8tN4%3D","line":328,"in_reply_to":"AAAATn%2F84kc%3D","updated":"2013-12-22 09:25:33.000000000","message":"Done","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"8ba245b80b44da6657782146a1773fcb7b9a1037","unresolved":false,"context_lines":[{"line_number":332,"context_line":"    def _check_dns_nameserver(self):"},{"line_number":333,"context_line":"        \"\"\""},{"line_number":334,"context_line":"        check that"},{"line_number":335,"context_line":"        - url is resolveable"},{"line_number":336,"context_line":"        - DNS server is used"},{"line_number":337,"context_line":"        - DNS server is updated"},{"line_number":338,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F84eQ%3D","line":335,"updated":"2013-12-19 08:17:13.000000000","message":"This is no longer being done in this method.","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"f7df1750455e7a2c656b9ddfd0de7b70731231d6","unresolved":false,"context_lines":[{"line_number":332,"context_line":"    def _check_dns_nameserver(self):"},{"line_number":333,"context_line":"        \"\"\""},{"line_number":334,"context_line":"        check that"},{"line_number":335,"context_line":"        - url is resolveable"},{"line_number":336,"context_line":"        - DNS server is used"},{"line_number":337,"context_line":"        - DNS server is updated"},{"line_number":338,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F8tPg%3D","line":335,"in_reply_to":"AAAATn%2F84eQ%3D","updated":"2013-12-22 09:25:33.000000000","message":"Done","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"8ba245b80b44da6657782146a1773fcb7b9a1037","unresolved":false,"context_lines":[{"line_number":341,"context_line":"            LOG.info(msg)"},{"line_number":342,"context_line":"            return"},{"line_number":343,"context_line":"        elif (not (self.config.network.DNS_server"},{"line_number":344,"context_line":"                   and self.config.network.url_to_resolve)):"},{"line_number":345,"context_line":"            msg \u003d \u0027DNS Server or url not configured.\u0027"},{"line_number":346,"context_line":"            LOG.info(msg)"},{"line_number":347,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F84e0%3D","line":344,"updated":"2013-12-19 08:17:13.000000000","message":"The check for the url being present should be moved to _check_network_external_connectivity(), where the url is actually used.","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"f7df1750455e7a2c656b9ddfd0de7b70731231d6","unresolved":false,"context_lines":[{"line_number":341,"context_line":"            LOG.info(msg)"},{"line_number":342,"context_line":"            return"},{"line_number":343,"context_line":"        elif (not (self.config.network.DNS_server"},{"line_number":344,"context_line":"                   and self.config.network.url_to_resolve)):"},{"line_number":345,"context_line":"            msg \u003d \u0027DNS Server or url not configured.\u0027"},{"line_number":346,"context_line":"            LOG.info(msg)"},{"line_number":347,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F8tPc%3D","line":344,"in_reply_to":"AAAATn%2F84e0%3D","updated":"2013-12-22 09:25:33.000000000","message":"Done","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"8ba245b80b44da6657782146a1773fcb7b9a1037","unresolved":false,"context_lines":[{"line_number":357,"context_line":"            if not self.config.network.alt_DNS_server:"},{"line_number":358,"context_line":"                msg \u003d \u0027Alternate DNS Server not configured.\u0027"},{"line_number":359,"context_line":"                LOG.info(msg)"},{"line_number":360,"context_line":"                return"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"            self.subnets[0].update(dns_nameservers\u003d"},{"line_number":363,"context_line":"                                   [self.config.network.alt_DNS_server])"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F84kM%3D","line":360,"updated":"2013-12-19 08:17:13.000000000","message":"Is self.floating_ips expected to have more than one key/value pair, and if so, is this return statement intentional?  If more than floating ip is to be tested, consider using \u0027continue\u0027 instead.  If only one floating ip and server are to be tested, then it would be better to extract them from the dictionary directly rather than iterating in a for loop.","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"f7df1750455e7a2c656b9ddfd0de7b70731231d6","unresolved":false,"context_lines":[{"line_number":357,"context_line":"            if not self.config.network.alt_DNS_server:"},{"line_number":358,"context_line":"                msg \u003d \u0027Alternate DNS Server not configured.\u0027"},{"line_number":359,"context_line":"                LOG.info(msg)"},{"line_number":360,"context_line":"                return"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"            self.subnets[0].update(dns_nameservers\u003d"},{"line_number":363,"context_line":"                                   [self.config.network.alt_DNS_server])"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F8tM8%3D","line":360,"in_reply_to":"AAAATn%2F84kM%3D","updated":"2013-12-22 09:25:33.000000000","message":"Done","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"8ba245b80b44da6657782146a1773fcb7b9a1037","unresolved":false,"context_lines":[{"line_number":362,"context_line":"            self.subnets[0].update(dns_nameservers\u003d"},{"line_number":363,"context_line":"                                   [self.config.network.alt_DNS_server])"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"            def change_dns():"},{"line_number":366,"context_line":"                \"\"\""},{"line_number":367,"context_line":"                Check that dns nameserver was updated on VM."},{"line_number":368,"context_line":"                \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F84jU%3D","line":365,"updated":"2013-12-19 08:17:13.000000000","message":"(Suggestion only) I\u0027d recommend against defining a function in a loop.  I can imagine that the reason you\u0027re doing so is to ensure that the function can be parameter-less, but a nicer alternative is to use functools.partial:\n\ndef is_dns_updated(ssh_connection):\n    pass\n\nfor ip_address in ip_addresses:\n    ssh_connection \u003d self._open_ssh_connection(ip_address)\n    call_until_true(functools.partial(is_dns_updated, ssh_connection))\n\nReference: http://stackoverflow.com/questions/15331726/how-does-the-functools-partial-work-in-python","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"f7df1750455e7a2c656b9ddfd0de7b70731231d6","unresolved":false,"context_lines":[{"line_number":362,"context_line":"            self.subnets[0].update(dns_nameservers\u003d"},{"line_number":363,"context_line":"                                   [self.config.network.alt_DNS_server])"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"            def change_dns():"},{"line_number":366,"context_line":"                \"\"\""},{"line_number":367,"context_line":"                Check that dns nameserver was updated on VM."},{"line_number":368,"context_line":"                \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F8tQY%3D","line":365,"in_reply_to":"AAAATn%2F84jU%3D","updated":"2013-12-22 09:25:33.000000000","message":"Done","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"8ba245b80b44da6657782146a1773fcb7b9a1037","unresolved":false,"context_lines":[{"line_number":364,"context_line":""},{"line_number":365,"context_line":"            def change_dns():"},{"line_number":366,"context_line":"                \"\"\""},{"line_number":367,"context_line":"                Check that dns nameserver was updated on VM."},{"line_number":368,"context_line":"                \"\"\""},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"                dns_server \u003d ssh_source.resolve_dns()"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F84hY%3D","line":367,"updated":"2013-12-19 08:17:13.000000000","message":"The function name and docstring contradict each other.  I\u0027d suggest removing the docstring and changing the function name to be self-documenting (e.g. is_dns_updated()).","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"f7df1750455e7a2c656b9ddfd0de7b70731231d6","unresolved":false,"context_lines":[{"line_number":364,"context_line":""},{"line_number":365,"context_line":"            def change_dns():"},{"line_number":366,"context_line":"                \"\"\""},{"line_number":367,"context_line":"                Check that dns nameserver was updated on VM."},{"line_number":368,"context_line":"                \"\"\""},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"                dns_server \u003d ssh_source.resolve_dns()"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F8tQg%3D","line":367,"in_reply_to":"AAAATn%2F84hY%3D","updated":"2013-12-22 09:25:33.000000000","message":"Done","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"8ba245b80b44da6657782146a1773fcb7b9a1037","unresolved":false,"context_lines":[{"line_number":374,"context_line":"            self.assertTrue("},{"line_number":375,"context_line":"                tempest.test.call_until_true("},{"line_number":376,"context_line":"                    change_dns,"},{"line_number":377,"context_line":"                    self.config.compute.ping_timeout,"},{"line_number":378,"context_line":"                    1"},{"line_number":379,"context_line":"                )"},{"line_number":380,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F84aY%3D","line":377,"updated":"2013-12-19 08:17:13.000000000","message":"Well, hard-code it to the existing value of ping_timeout if you want.  The point of not using ping_timeout is that if someone decides to change it, that change should probably not affect the value chosen to wait for a nameserver change.","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"f7df1750455e7a2c656b9ddfd0de7b70731231d6","unresolved":false,"context_lines":[{"line_number":374,"context_line":"            self.assertTrue("},{"line_number":375,"context_line":"                tempest.test.call_until_true("},{"line_number":376,"context_line":"                    change_dns,"},{"line_number":377,"context_line":"                    self.config.compute.ping_timeout,"},{"line_number":378,"context_line":"                    1"},{"line_number":379,"context_line":"                )"},{"line_number":380,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F8tLE%3D","line":377,"in_reply_to":"AAAATn%2F84aY%3D","updated":"2013-12-22 09:25:33.000000000","message":"Done","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"8ba245b80b44da6657782146a1773fcb7b9a1037","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        self._wait_for_floating_ip_association()"},{"line_number":392,"context_line":"        self._check_tenant_network_connectivity()"},{"line_number":393,"context_line":"        self._check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":394,"context_line":"        self._check_network_internal_connectivity()"},{"line_number":395,"context_line":"        self._check_network_external_connectivity()"},{"line_number":396,"context_line":"        self._check_dns_nameserver()"},{"line_number":397,"context_line":"        self._disassociate_floating_ips()"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F84fY%3D","line":394,"updated":"2013-12-19 08:17:13.000000000","message":"Unrelated, but I\u0027m starting to get nervous at just how much is being done in this single test.  It started out innocently enough, but care needs to be taken to ensure that a failure in one test doesn\u0027t prevent orthogonal tests from running.  Now might be a good time to start investigating using the fixtures library to factor out test dependencies for reuse and break this method into pieces that can be run separately (and maybe in parallel).","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"f7df1750455e7a2c656b9ddfd0de7b70731231d6","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        self._wait_for_floating_ip_association()"},{"line_number":392,"context_line":"        self._check_tenant_network_connectivity()"},{"line_number":393,"context_line":"        self._check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":394,"context_line":"        self._check_network_internal_connectivity()"},{"line_number":395,"context_line":"        self._check_network_external_connectivity()"},{"line_number":396,"context_line":"        self._check_dns_nameserver()"},{"line_number":397,"context_line":"        self._disassociate_floating_ips()"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F8tQA%3D","line":394,"in_reply_to":"AAAATn%2F84fY%3D","updated":"2013-12-22 09:25:33.000000000","message":"I agree.\nI used this test because ti does the setup for what I intended to do and I didn\u0027t want 2 new ones that repeat the basic test plus more testcases. but this really got out of hand.\nOnce this patch is merged I\u0027m gonna post this discussion in the mailing list and see how it goes.\nFor now I would like to focus on having this functionality (since it was in your todo comments already) before discussing breaking this test apart completely.","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"f3a5321341950271a86bddf07fdf5033ced4751e","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        self._wait_for_floating_ip_association()"},{"line_number":392,"context_line":"        self._check_tenant_network_connectivity()"},{"line_number":393,"context_line":"        self._check_public_network_connectivity(should_connect\u003dTrue)"},{"line_number":394,"context_line":"        self._check_network_internal_connectivity()"},{"line_number":395,"context_line":"        self._check_network_external_connectivity()"},{"line_number":396,"context_line":"        self._check_dns_nameserver()"},{"line_number":397,"context_line":"        self._disassociate_floating_ips()"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAATn%2F8o9o%3D","line":394,"in_reply_to":"AAAATn%2F8tQA%3D","updated":"2013-12-23 21:45:32.000000000","message":"Fair enough, but it is important to note that my todo comments were written back when each of these methods was a separate, sequenced test function, such that failure in one did not prevent subsequent tests from executing as is now the case.","commit_id":"d642303b9d37038654817e496cf69791f877729e"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"1db937f12a97c0eb018b5c60cf1a1c0334cb3328","unresolved":false,"context_lines":[{"line_number":371,"context_line":"                continue"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"            self.subnets[0].update(dns_nameservers\u003d"},{"line_number":374,"context_line":"                                   [self.config.network.alt_DNS_server])"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"            self.assertTrue("},{"line_number":377,"context_line":"                tempest.test.call_until_true("}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAT3%2F%2Frl8%3D","line":374,"updated":"2014-01-03 15:54:31.000000000","message":"The update can\u0027t be immediately propagated to the VM since the name server will be updated at the subsequent DHCP lease renewal (120sec currently I think)\n\nI see 2 options:\n- wait for 120 secs at least\n- send a command to the VM to force DHCP lease renewal (please wait still for ensuring the update has propagated to the DHCP agent - unfortunately neutron has no feedback for it currently)","commit_id":"a6a4045593952a53aadac7f1f8e1a196bda9bd12"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"8aef5ce36339144be91faf1d12e5876e196f6451","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            # get all network ports in the server\u0027s network"},{"line_number":242,"context_line":"            internal_ports \u003d [p[\u0027fixed_ips\u0027] for p in"},{"line_number":243,"context_line":"                              self.network_client.list_ports("},{"line_number":244,"context_line":"                                  tenant_id\u003dserver.tenant_id)[\u0027ports\u0027]"},{"line_number":245,"context_line":"                              if p[\u0027network_id\u0027] in server_nets and"},{"line_number":246,"context_line":"                              p[\u0027device_owner\u0027].startswith(\u0027network\u0027)]"},{"line_number":247,"context_line":"            # flatten list of lists"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAUH%2F%2BZNw%3D","line":244,"updated":"2014-01-27 12:27:00.000000000","message":"I would pass network_id in the filters to list_ports; this will make filter on tenant_id unnecessary and will avoid some code-level filtering in this function.","commit_id":"f1f3a166ec33b2a68ec3f8e71d16a26d687eef80"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"8aef5ce36339144be91faf1d12e5876e196f6451","unresolved":false,"context_lines":[{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        subnet \u003d self.network_client.list_subnets("},{"line_number":265,"context_line":"            network_id\u003dCONF.network.public_network_id)[\u0027subnets\u0027]"},{"line_number":266,"context_line":"        self.assertEqual(1, len(subnet), \"Found %d subnets\" % len(subnet))"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        external_ips \u003d [subnet[0][\u0027gateway_ip\u0027]]"},{"line_number":269,"context_line":"        for floating_ip in self.floating_ips.keys():"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAUH%2F%2BZKY%3D","line":266,"updated":"2014-01-27 12:27:00.000000000","message":"usually you would need an admin client to this aim.\nHas self.network_client admin creds?","commit_id":"f1f3a166ec33b2a68ec3f8e71d16a26d687eef80"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c584f7d318b07b027ec668aef5e1982a348ede42","unresolved":false,"context_lines":[{"line_number":263,"context_line":""},{"line_number":264,"context_line":"        subnet \u003d self.network_client.list_subnets("},{"line_number":265,"context_line":"            network_id\u003dCONF.network.public_network_id)[\u0027subnets\u0027]"},{"line_number":266,"context_line":"        self.assertEqual(1, len(subnet), \"Found %d subnets\" % len(subnet))"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        external_ips \u003d [subnet[0][\u0027gateway_ip\u0027]]"},{"line_number":269,"context_line":"        for floating_ip in self.floating_ips.keys():"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAUH%2F%2BYj4%3D","line":266,"in_reply_to":"AAAAUH%2F%2BZKY%3D","updated":"2014-01-27 14:17:04.000000000","message":"network_client has admin credential and there is no problem.\nhttps://github.com/openstack/tempest/blob/master/tempest/scenario/manager.py#L196","commit_id":"f1f3a166ec33b2a68ec3f8e71d16a26d687eef80"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"8aef5ce36339144be91faf1d12e5876e196f6451","unresolved":false,"context_lines":[{"line_number":283,"context_line":"            except Exception as exc:"},{"line_number":284,"context_line":"                msg \u003d \"Unable to access {dest} \" \\"},{"line_number":285,"context_line":"                      \"via ssh to floating-ip {src}\".format(dest\u003dremote_ip,"},{"line_number":286,"context_line":"                                                            src\u003dfloating_ip)"},{"line_number":287,"context_line":"                LOG.exception(msg)"},{"line_number":288,"context_line":"                debug.log_ip_ns()"},{"line_number":289,"context_line":"                raise exc"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAUH%2F%2BZLk%3D","line":286,"updated":"2014-01-27 12:27:00.000000000","message":"This is not the way in which strings are usually formatted; I guess it\u0027s a matter of style; also HACKING.rst does not mandate a specific style versus another so I guess it\u0027s ok.\n\nand this applies to the backslash as well.","commit_id":"f1f3a166ec33b2a68ec3f8e71d16a26d687eef80"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"8aef5ce36339144be91faf1d12e5876e196f6451","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                      \"via ssh to floating-ip {src}\".format(dest\u003dremote_ip,"},{"line_number":286,"context_line":"                                                            src\u003dfloating_ip)"},{"line_number":287,"context_line":"                LOG.exception(msg)"},{"line_number":288,"context_line":"                debug.log_ip_ns()"},{"line_number":289,"context_line":"                raise exc"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"}],"source_content_type":"text/x-python","patch_set":30,"id":"AAAAUH%2F%2BZMo%3D","line":288,"updated":"2014-01-27 12:27:00.000000000","message":"I think the tempest team is consider removing log_ip_ns, so I don\u0027t know if it\u0027s worth adding it here.","commit_id":"f1f3a166ec33b2a68ec3f8e71d16a26d687eef80"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"d6684dffd6fa60eac76742f6a6f36c776da2556c","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        \"\"\""},{"line_number":236,"context_line":"        for floating_ip, server in self.floating_ips.iteritems():"},{"line_number":237,"context_line":"            # get internal ports\u0027 ips:"},{"line_number":238,"context_line":"            [server_nets] \u003d [net.id for net in self.networks"},{"line_number":239,"context_line":"                             if net.name in server.networks.keys()]"},{"line_number":240,"context_line":"            # get all network ports in the server\u0027s network"},{"line_number":241,"context_line":"            internal_ips \u003d (p[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027] for p in"}],"source_content_type":"text/x-python","patch_set":31,"id":"AAAAUH%2F%2BYmk%3D","line":238,"updated":"2014-01-27 14:25:58.000000000","message":"I wonder why [] is needed around server_nets. I think server_nets should be an array.","commit_id":"9b7a0919d0848d0b2b175c8d8385af69cc439de8"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"a4615df4ee41ff9dd98f4699e03f5175e757804d","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        ping public network default gateway to imply external connectivity"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        \"\"\""},{"line_number":300,"context_line":"        if not CONF.network.public_network_id:"},{"line_number":301,"context_line":"            msg \u003d \u0027public network not defined.\u0027"},{"line_number":302,"context_line":"            LOG.info(msg)"},{"line_number":303,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":39,"id":"AAAAVn%2F%2FZbE%3D","line":300,"updated":"2014-03-06 11:05:56.000000000","message":"Please use the skip_because decorator, or skip the test by another skip exception raising way.","commit_id":"9cc8800d570961c3be67a3bfa3ebba0c7228febe"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3d03930e7372bd61882e928973ef4725e655a8da","unresolved":false,"context_lines":[{"line_number":302,"context_line":"            LOG.info(msg)"},{"line_number":303,"context_line":"            return"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        subnet \u003d self.network_client.list_subnets("},{"line_number":306,"context_line":"            network_id\u003dCONF.network.public_network_id)[\u0027subnets\u0027]"},{"line_number":307,"context_line":"        self.assertEqual(1, len(subnet), \"Found %d subnets\" % len(subnet))"},{"line_number":308,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"AAAAVn%2F%2FQOs%3D","line":305,"updated":"2014-03-07 08:43:19.000000000","message":"Nit: It is better to use \"subnets\" instead of \"subnet\" because it is a list.\nsubnet[0] seems confusing to me.","commit_id":"2ed38b514ba9ab226162cd673a77cac7b4c30999"}]}
