)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"c16e63332c0f7e1ed3bf0a59766811e75d687f84","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adding a basic test to check enforcement"},{"line_number":10,"context_line":"of QoS policy with bandwidth limit rule"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I1861d3e87a92a5367a7839e0b2d0d6a986e5d7b6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"ba15a1d1_0798ab69","line":11,"updated":"2015-09-21 06:07:30.000000000","message":"you may link it to qos bp","commit_id":"12b4dcf6289f2dda87831d87b49dc66a71863c12"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"981da2485083802b88094b8e63e95f1589240b67","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adding a basic test to check enforcement"},{"line_number":10,"context_line":"of QoS policy with bandwidth limit rule"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I1861d3e87a92a5367a7839e0b2d0d6a986e5d7b6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"ba15a1d1_6a1cce77","line":11,"in_reply_to":"ba15a1d1_0798ab69","updated":"2015-10-06 07:10:27.000000000","message":"Done","commit_id":"12b4dcf6289f2dda87831d87b49dc66a71863c12"}],"tempest/config.py":[{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"6bc2635244647c619cc383a59eb0ce82e3b89de8","unresolved":false,"context_lines":[{"line_number":540,"context_line":"                    \" Supported ports are:\""},{"line_number":541,"context_line":"                    \" [\u0027normal\u0027,\u0027direct\u0027,\u0027macvtap\u0027]\"),"},{"line_number":542,"context_line":"    cfg.IntOpt(\u0027qos_limit\u0027,"},{"line_number":543,"context_line":"               default\u003d8,"},{"line_number":544,"context_line":"               help\u003d\"limit in Kilobytes/Second\"),"},{"line_number":545,"context_line":"    cfg.IntOpt(\u0027socket_connect_timeout\u0027,"},{"line_number":546,"context_line":"               default\u003d60,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_590c6342","line":543,"updated":"2015-08-26 16:00:29.000000000","message":"That limit is a bit too low to work reliably within certain margins.\n\nTry something like 2Mbps or so. and allow for a ~10-20% of error in measurement..","commit_id":"c965be61668c5d0a83721e0616514b5b0408c537"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"0607620709e8357daf1a157a6c7a59491eccec6f","unresolved":false,"context_lines":[{"line_number":540,"context_line":"                    \" Supported ports are:\""},{"line_number":541,"context_line":"                    \" [\u0027normal\u0027,\u0027direct\u0027,\u0027macvtap\u0027]\"),"},{"line_number":542,"context_line":"    cfg.IntOpt(\u0027qos_limit\u0027,"},{"line_number":543,"context_line":"               default\u003d8,"},{"line_number":544,"context_line":"               help\u003d\"limit in Kilobytes/Second\"),"},{"line_number":545,"context_line":"    cfg.IntOpt(\u0027socket_connect_timeout\u0027,"},{"line_number":546,"context_line":"               default\u003d60,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_dcedc18f","line":543,"in_reply_to":"da20952f_590c6342","updated":"2015-08-26 16:14:40.000000000","message":"Also note that f.e. for sr-iov, the minimal unit of limitation is 1Mbps, so it rounds.","commit_id":"c965be61668c5d0a83721e0616514b5b0408c537"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"1ca29cae8eab820926e30c78fab9eff196095815","unresolved":false,"context_lines":[{"line_number":540,"context_line":"                    \" Supported ports are:\""},{"line_number":541,"context_line":"                    \" [\u0027normal\u0027,\u0027direct\u0027,\u0027macvtap\u0027]\"),"},{"line_number":542,"context_line":"    cfg.IntOpt(\u0027qos_limit\u0027,"},{"line_number":543,"context_line":"               default\u003d8,"},{"line_number":544,"context_line":"               help\u003d\"limit in Kilobytes/Second\"),"},{"line_number":545,"context_line":"    cfg.IntOpt(\u0027socket_connect_timeout\u0027,"},{"line_number":546,"context_line":"               default\u003d60,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_f82be831","line":543,"in_reply_to":"da20952f_dcedc18f","updated":"2015-08-26 18:58:07.000000000","message":"It can be problematic if the the test environment can\u0027t deliver this bw.","commit_id":"c965be61668c5d0a83721e0616514b5b0408c537"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"cd6aa97ee7e2a814768b54b212437bb7e78742a1","unresolved":false,"context_lines":[{"line_number":540,"context_line":"                    \" Supported ports are:\""},{"line_number":541,"context_line":"                    \" [\u0027normal\u0027,\u0027direct\u0027,\u0027macvtap\u0027]\"),"},{"line_number":542,"context_line":"    cfg.IntOpt(\u0027qos_limit\u0027,"},{"line_number":543,"context_line":"               default\u003d8,"},{"line_number":544,"context_line":"               help\u003d\"limit in Kilobytes/Second\"),"},{"line_number":545,"context_line":"    cfg.IntOpt(\u0027socket_connect_timeout\u0027,"},{"line_number":546,"context_line":"               default\u003d60,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_de9035ef","line":543,"in_reply_to":"da20952f_f82be831","updated":"2015-08-27 07:23:47.000000000","message":"Again, SR-IOV minimum is 1Mbps, so it makes sense.\n\nIf the test environment cannot deliver 1 megabit per second... we probably need weeks to pass a tempest test :), it\u0027s very little :)","commit_id":"c965be61668c5d0a83721e0616514b5b0408c537"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"798b2a1f8b42078a089b2fa017179614252c6f99","unresolved":false,"context_lines":[{"line_number":550,"context_line":"    cfg.IntOpt(\u0027qos_limit\u0027,"},{"line_number":551,"context_line":"               default\u003d1000,"},{"line_number":552,"context_line":"               help\u003d\"limit in Kilobits/Second\"),"},{"line_number":553,"context_line":"    cfg.IntOpt(\u0027socket_connect_timeout\u0027,"},{"line_number":554,"context_line":"               default\u003d60,"},{"line_number":555,"context_line":"               help\u003d\"Timeout in seconds to wait \""},{"line_number":556,"context_line":"                    \"for a connection to a socket\"),"}],"source_content_type":"text/x-python","patch_set":25,"id":"dab17558_be63a5db","line":553,"range":{"start_line":553,"start_character":16,"end_line":553,"end_character":38},"updated":"2016-05-08 09:14:52.000000000","message":"This option seem to be unrelated directly to this patch. It should probably be split into a different patch that is more general (and not specific to QoS).","commit_id":"d839eec33ee8d846798b9416ceb38ad7d56fe89d"}],"tempest/scenario/test_network_advanced_server_ops.py":[{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"cb94f7f405cfae18aaa91060eff45264ce5c7c48","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        \u0027\u0027\u0027"},{"line_number":180,"context_line":"        def try_connect(host_ip, port):"},{"line_number":181,"context_line":"            try:"},{"line_number":182,"context_line":"                server_socket \u003d socket.socket(socket.AF_INET,"},{"line_number":183,"context_line":"                                              socket.SOCK_STREAM)"},{"line_number":184,"context_line":"                server_socket.connect((host_ip, port))"},{"line_number":185,"context_line":"                server_socket.setblocking(0)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_f6e482e0","line":182,"updated":"2015-09-07 13:05:08.000000000","message":"In line 204, the returned value is referenced as \u0027client_socket\u0027, so why is it referenced as \u0027server_socket\u0027 here?","commit_id":"c965be61668c5d0a83721e0616514b5b0408c537"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"cb94f7f405cfae18aaa91060eff45264ce5c7c48","unresolved":false,"context_lines":[{"line_number":194,"context_line":"                msg \u003d \"Timeout connecting to %(host)s port %(port)s\" % {"},{"line_number":195,"context_line":"                    \u0027host\u0027: host, \u0027port\u0027: port}"},{"line_number":196,"context_line":"                raise exceptions.TimeoutException(msg)"},{"line_number":197,"context_line":"            if server_socket:"},{"line_number":198,"context_line":"                break"},{"line_number":199,"context_line":"        return server_socket"},{"line_number":200,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_b6560a5a","line":197,"updated":"2015-09-07 13:05:08.000000000","message":"There could be a case where try_connect returned a socket, but it took a bit longer than 60 seconds. In this case timeout was indeed reached, but connection was successful. Still, an exception will be raised. Do we want to switch this if with the above one?","commit_id":"c965be61668c5d0a83721e0616514b5b0408c537"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"cb94f7f405cfae18aaa91060eff45264ce5c7c48","unresolved":false,"context_lines":[{"line_number":195,"context_line":"                    \u0027host\u0027: host, \u0027port\u0027: port}"},{"line_number":196,"context_line":"                raise exceptions.TimeoutException(msg)"},{"line_number":197,"context_line":"            if server_socket:"},{"line_number":198,"context_line":"                break"},{"line_number":199,"context_line":"        return server_socket"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def _check_bw(self, host, port, limit, file_size):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_569a0e15","line":198,"updated":"2015-09-07 13:05:08.000000000","message":"\u0027break\u0027 can be replaced with \u0027return server_socket\u0027 (and line 199 be removed) since nothing happens after the loop anyway.","commit_id":"c965be61668c5d0a83721e0616514b5b0408c537"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"6bc2635244647c619cc383a59eb0ce82e3b89de8","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        return server_socket"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def _check_bw(self, host, port, limit, file_size):"},{"line_number":202,"context_line":"        buffer_size \u003d 100 * 1024"},{"line_number":203,"context_line":"        current_data_size \u003d 0"},{"line_number":204,"context_line":"        client_socket \u003d self._connect_socket(host, port)"},{"line_number":205,"context_line":"        data_size \u003d 0"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_5c3a11cf","line":202,"updated":"2015-08-26 16:00:29.000000000","message":"use a bigger buffer, for a more consistent measurement at higher speed.","commit_id":"c965be61668c5d0a83721e0616514b5b0408c537"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"cb94f7f405cfae18aaa91060eff45264ce5c7c48","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        current_data_size \u003d 0"},{"line_number":204,"context_line":"        client_socket \u003d self._connect_socket(host, port)"},{"line_number":205,"context_line":"        data_size \u003d 0"},{"line_number":206,"context_line":"        total_size \u003d 0"},{"line_number":207,"context_line":"        start \u003d time.time()"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        while True:"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_f60fa236","line":206,"updated":"2015-09-07 13:05:08.000000000","message":"\u0027data_size\u0027 and \u0027total_size\u0027 are incremented exactly the same and at the same time. This implies we can use only one of them (and delete the other one).","commit_id":"c965be61668c5d0a83721e0616514b5b0408c537"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"cb94f7f405cfae18aaa91060eff45264ce5c7c48","unresolved":false,"context_lines":[{"line_number":210,"context_line":"            try:"},{"line_number":211,"context_line":"                data \u003d client_socket.recv(buffer_size)"},{"line_number":212,"context_line":"            except socket.error, e:"},{"line_number":213,"context_line":"                err \u003d e.args[0]"},{"line_number":214,"context_line":"                if err \u003d\u003d errno.EAGAIN or err \u003d\u003d errno.EWOULDBLOCK:"},{"line_number":215,"context_line":"                    start \u003d time.time()"},{"line_number":216,"context_line":"                    if total_size \u003d\u003d file_size:"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_81329ef0","line":213,"updated":"2015-09-07 13:05:08.000000000","message":"Please rename \u0027err\u0027 to \u0027error\u0027.","commit_id":"c965be61668c5d0a83721e0616514b5b0408c537"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"cb94f7f405cfae18aaa91060eff45264ce5c7c48","unresolved":false,"context_lines":[{"line_number":212,"context_line":"            except socket.error, e:"},{"line_number":213,"context_line":"                err \u003d e.args[0]"},{"line_number":214,"context_line":"                if err \u003d\u003d errno.EAGAIN or err \u003d\u003d errno.EWOULDBLOCK:"},{"line_number":215,"context_line":"                    start \u003d time.time()"},{"line_number":216,"context_line":"                    if total_size \u003d\u003d file_size:"},{"line_number":217,"context_line":"                        break"},{"line_number":218,"context_line":"                    elif total_size \u003e file_size:"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_819dbe67","line":215,"updated":"2015-09-07 13:05:08.000000000","message":"I\u0027m not sure I understand the logic behind re-setting the start time here. If we hit an EAGAIN, we re-set the start time - this could eventually lead us to an infinite loop. The fact that we don\u0027t check for timeouts in this case leads be to think that the error handling could use a re-think.","commit_id":"c965be61668c5d0a83721e0616514b5b0408c537"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"cb94f7f405cfae18aaa91060eff45264ce5c7c48","unresolved":false,"context_lines":[{"line_number":231,"context_line":"            if (data_size / time_elapsed) \u003e (limit * 8 * 1024):"},{"line_number":232,"context_line":"                # Limit reached"},{"line_number":233,"context_line":"                return False"},{"line_number":234,"context_line":"            data_size \u003d 0"},{"line_number":235,"context_line":"            start \u003d time.time()"},{"line_number":236,"context_line":"        return True"},{"line_number":237,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_d6093e32","line":234,"updated":"2015-09-07 13:05:08.000000000","message":"these 2 lines are pointless since \u0027start\u0027 and \u0027data_size\u0027 are not referenced again after this \u0027if\u0027 block.","commit_id":"c965be61668c5d0a83721e0616514b5b0408c537"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"cb94f7f405cfae18aaa91060eff45264ce5c7c48","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        bs \u003d 1024"},{"line_number":244,"context_line":"        count \u003d 256"},{"line_number":245,"context_line":"        file_size \u003d bs * count"},{"line_number":246,"context_line":"        sg_id \u003d 0"},{"line_number":247,"context_line":"        self._setup_network_and_servers()"},{"line_number":248,"context_line":"        port, _ \u003d self._get_server_port_id_and_ip4(self.server)"},{"line_number":249,"context_line":"        ip \u003d self.floating_ip.floating_ip_address"}],"source_content_type":"text/x-python","patch_set":1,"id":"da20952f_3c33b915","line":246,"updated":"2015-09-07 13:05:08.000000000","message":"Please enter a space line here, to indicate end of constants and start of actual logic.","commit_id":"c965be61668c5d0a83721e0616514b5b0408c537"},{"author":{"_account_id":7428,"name":"Yaroslav Lobankov","email":"lobankovyv@gmail.com","username":"ylobankov"},"change_message_id":"691c1643cdb1ff0e2f97ef2696e6c2238196e039","unresolved":false,"context_lines":[{"line_number":262,"context_line":"               \"\u0026\u0026 (nc -ll -p %(port)s \u003c /tmp/img \u003e /dev/null \u0026)\" % {"},{"line_number":263,"context_line":"                   \u0027port\u0027: nc_port, \u0027bs\u0027: bs, \u0027count\u0027: count})"},{"line_number":264,"context_line":"        ssh_client.exec_command(cmd)"},{"line_number":265,"context_line":"#       admin_client \u003d self.admin_manager.network_client"},{"line_number":266,"context_line":"#       policy \u003d admin_client.create_qos_policy(name\u003d\u0027test-policy\u0027,"},{"line_number":267,"context_line":"#                                               shared\u003dTrue)"},{"line_number":268,"context_line":"#       policy_id \u003d policy[\u0027policy\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_fa193c23","line":265,"updated":"2015-09-10 12:56:37.000000000","message":"What is the purpose of this commented code?","commit_id":"5c60c4063fb3429d1c11dd6f118172522927667e"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"a3d800d716dcebfa235b6117f9479d31cf35178b","unresolved":false,"context_lines":[{"line_number":262,"context_line":"               \"\u0026\u0026 (nc -ll -p %(port)s \u003c /tmp/img \u003e /dev/null \u0026)\" % {"},{"line_number":263,"context_line":"                   \u0027port\u0027: nc_port, \u0027bs\u0027: bs, \u0027count\u0027: count})"},{"line_number":264,"context_line":"        ssh_client.exec_command(cmd)"},{"line_number":265,"context_line":"#       admin_client \u003d self.admin_manager.network_client"},{"line_number":266,"context_line":"#       policy \u003d admin_client.create_qos_policy(name\u003d\u0027test-policy\u0027,"},{"line_number":267,"context_line":"#                                               shared\u003dTrue)"},{"line_number":268,"context_line":"#       policy_id \u003d policy[\u0027policy\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_43007366","line":265,"in_reply_to":"da20952f_fa193c23","updated":"2015-09-10 20:07:54.000000000","message":"Please see the comments above regrading the concern regarding bw in the gate. I\u0027m going to remove it and address John\u0027s comments","commit_id":"5c60c4063fb3429d1c11dd6f118172522927667e"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"c16e63332c0f7e1ed3bf0a59766811e75d687f84","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        start \u003d time.time()"},{"line_number":191,"context_line":"        while True:"},{"line_number":192,"context_line":"            client_socket \u003d try_connect(host, port)"},{"line_number":193,"context_line":"            if time.time() - start \u003e timeout:"},{"line_number":194,"context_line":"                msg \u003d \"Timeout connecting to %(host)s port %(port)s\" % {"},{"line_number":195,"context_line":"                    \u0027host\u0027: host, \u0027port\u0027: port}"},{"line_number":196,"context_line":"                raise exceptions.TimeoutException(msg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba15a1d1_47b543ce","line":193,"updated":"2015-09-21 06:07:30.000000000","message":"why not change the order of this and next if? If try_connect returned with valid clietn_socket, why not continue test?","commit_id":"12b4dcf6289f2dda87831d87b49dc66a71863c12"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"981da2485083802b88094b8e63e95f1589240b67","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        start \u003d time.time()"},{"line_number":191,"context_line":"        while True:"},{"line_number":192,"context_line":"            client_socket \u003d try_connect(host, port)"},{"line_number":193,"context_line":"            if time.time() - start \u003e timeout:"},{"line_number":194,"context_line":"                msg \u003d \"Timeout connecting to %(host)s port %(port)s\" % {"},{"line_number":195,"context_line":"                    \u0027host\u0027: host, \u0027port\u0027: port}"},{"line_number":196,"context_line":"                raise exceptions.TimeoutException(msg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba15a1d1_250da737","line":193,"in_reply_to":"ba15a1d1_47b543ce","updated":"2015-10-06 07:10:27.000000000","message":"Done","commit_id":"12b4dcf6289f2dda87831d87b49dc66a71863c12"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"c16e63332c0f7e1ed3bf0a59766811e75d687f84","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            if (current_data_size / time_elapsed) \u003e (limit * 8 * 1024):"},{"line_number":229,"context_line":"                # Limit reached"},{"line_number":230,"context_line":"                return False"},{"line_number":231,"context_line":"        LOG.debug(\"total_time\u003d%s\", time.time() - test_start)"},{"line_number":232,"context_line":"        return True"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    @test.idempotent_id(\u002746fd0d45-5ac5-40b5-b613-01786bf36011\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba15a1d1_07af4b7e","line":231,"updated":"2015-09-21 06:07:30.000000000","message":"total time for what?","commit_id":"12b4dcf6289f2dda87831d87b49dc66a71863c12"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"981da2485083802b88094b8e63e95f1589240b67","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            if (current_data_size / time_elapsed) \u003e (limit * 8 * 1024):"},{"line_number":229,"context_line":"                # Limit reached"},{"line_number":230,"context_line":"                return False"},{"line_number":231,"context_line":"        LOG.debug(\"total_time\u003d%s\", time.time() - test_start)"},{"line_number":232,"context_line":"        return True"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    @test.idempotent_id(\u002746fd0d45-5ac5-40b5-b613-01786bf36011\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba15a1d1_a5b53732","line":231,"in_reply_to":"ba15a1d1_07af4b7e","updated":"2015-10-06 07:10:27.000000000","message":"Done","commit_id":"12b4dcf6289f2dda87831d87b49dc66a71863c12"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"c16e63332c0f7e1ed3bf0a59766811e75d687f84","unresolved":false,"context_lines":[{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    @test.idempotent_id(\u002746fd0d45-5ac5-40b5-b613-01786bf36011\u0027)"},{"line_number":235,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":236,"context_line":"    def test_qos(self):"},{"line_number":237,"context_line":"        nc_port \u003d 1234"},{"line_number":238,"context_line":"        limit \u003d CONF.network.qos_limit * 8"},{"line_number":239,"context_line":"        bs \u003d 1024"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba15a1d1_0782ebc8","line":236,"updated":"2015-09-21 06:07:30.000000000","message":"please add docstring explaining the test","commit_id":"12b4dcf6289f2dda87831d87b49dc66a71863c12"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"981da2485083802b88094b8e63e95f1589240b67","unresolved":false,"context_lines":[{"line_number":233,"context_line":""},{"line_number":234,"context_line":"    @test.idempotent_id(\u002746fd0d45-5ac5-40b5-b613-01786bf36011\u0027)"},{"line_number":235,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":236,"context_line":"    def test_qos(self):"},{"line_number":237,"context_line":"        nc_port \u003d 1234"},{"line_number":238,"context_line":"        limit \u003d CONF.network.qos_limit * 8"},{"line_number":239,"context_line":"        bs \u003d 1024"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba15a1d1_255cc7ec","line":236,"in_reply_to":"ba15a1d1_0782ebc8","updated":"2015-10-06 07:10:27.000000000","message":"Done","commit_id":"12b4dcf6289f2dda87831d87b49dc66a71863c12"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"c16e63332c0f7e1ed3bf0a59766811e75d687f84","unresolved":false,"context_lines":[{"line_number":235,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":236,"context_line":"    def test_qos(self):"},{"line_number":237,"context_line":"        nc_port \u003d 1234"},{"line_number":238,"context_line":"        limit \u003d CONF.network.qos_limit * 8"},{"line_number":239,"context_line":"        bs \u003d 1024"},{"line_number":240,"context_line":"        count \u003d 10240"},{"line_number":241,"context_line":"        file_size \u003d bs * count"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba15a1d1_87f11b98","line":238,"updated":"2015-09-21 06:07:30.000000000","message":"can you use constants where possible please?\n8\u003d\u003eNUM_OF_BITS?","commit_id":"12b4dcf6289f2dda87831d87b49dc66a71863c12"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"981da2485083802b88094b8e63e95f1589240b67","unresolved":false,"context_lines":[{"line_number":235,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":236,"context_line":"    def test_qos(self):"},{"line_number":237,"context_line":"        nc_port \u003d 1234"},{"line_number":238,"context_line":"        limit \u003d CONF.network.qos_limit * 8"},{"line_number":239,"context_line":"        bs \u003d 1024"},{"line_number":240,"context_line":"        count \u003d 10240"},{"line_number":241,"context_line":"        file_size \u003d bs * count"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba15a1d1_65863f67","line":238,"in_reply_to":"ba15a1d1_87f11b98","updated":"2015-10-06 07:10:27.000000000","message":"Done","commit_id":"12b4dcf6289f2dda87831d87b49dc66a71863c12"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"c16e63332c0f7e1ed3bf0a59766811e75d687f84","unresolved":false,"context_lines":[{"line_number":248,"context_line":"            server_or_ip\u003dip)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        sg_id \u003d self.security_group[\u0027id\u0027]"},{"line_number":251,"context_line":"        sg_client \u003d self.security_group_rules_client"},{"line_number":252,"context_line":"        sg_client.create_security_group_rule(parent_group_id\u003dsg_id,"},{"line_number":253,"context_line":"                                             ip_protocol\u003d\u0027tcp\u0027,"},{"line_number":254,"context_line":"                                             from_port\u003dnc_port,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba15a1d1_472a23e9","line":251,"updated":"2015-09-21 06:07:30.000000000","message":"why do you need this assignment?","commit_id":"12b4dcf6289f2dda87831d87b49dc66a71863c12"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"981da2485083802b88094b8e63e95f1589240b67","unresolved":false,"context_lines":[{"line_number":248,"context_line":"            server_or_ip\u003dip)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        sg_id \u003d self.security_group[\u0027id\u0027]"},{"line_number":251,"context_line":"        sg_client \u003d self.security_group_rules_client"},{"line_number":252,"context_line":"        sg_client.create_security_group_rule(parent_group_id\u003dsg_id,"},{"line_number":253,"context_line":"                                             ip_protocol\u003d\u0027tcp\u0027,"},{"line_number":254,"context_line":"                                             from_port\u003dnc_port,"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba15a1d1_c53e2b29","line":251,"in_reply_to":"ba15a1d1_472a23e9","updated":"2015-10-06 07:10:27.000000000","message":"Done","commit_id":"12b4dcf6289f2dda87831d87b49dc66a71863c12"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"16532f82fb8066b9ca5f0f64f6a5bade8ec347b1","unresolved":false,"context_lines":[{"line_number":224,"context_line":"            total_size +\u003d current_data_size"},{"line_number":225,"context_line":"            time_elapsed \u003d time.time() - start"},{"line_number":226,"context_line":"            LOG.debug(\"total_file_size\u003d%s, total_elapsed_time\u003d%s\","},{"line_number":227,"context_line":"                      total_size, time.time() - test_start)"},{"line_number":228,"context_line":"            should_check \u003d (time_elapsed \u003e\u003d 1 or current_data_size \u003d\u003d 0)"},{"line_number":229,"context_line":"            if should_check:"},{"line_number":230,"context_line":"                if (current_data_size / time_elapsed) \u003e ("}],"source_content_type":"text/x-python","patch_set":12,"id":"7a2fa921_2cbe5565","line":227,"updated":"2015-10-08 20:48:13.000000000","message":"you can remove this debug message, the Mellanox CI passed :)","commit_id":"12ea54660b01abe7d27b7577b9ca54a398dc5932"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"a89c02a726de9b25cac8af0bb4314a89a021b796","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                if total_size \u003d\u003d file_size:"},{"line_number":213,"context_line":"                    break"},{"line_number":214,"context_line":"                elif total_size \u003e file_size:"},{"line_number":215,"context_line":"                    raise exceptions.FileReadNotCompleted()"},{"line_number":216,"context_line":"                data \u003d client_socket.recv(buffer_size)"},{"line_number":217,"context_line":"            except socket.error as e:"},{"line_number":218,"context_line":"                error \u003d e.args[0]"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a2fa921_96588f8b","line":215,"updated":"2015-10-11 07:02:40.000000000","message":"Lines 211-215 can\u0027t ever raise socket.error, so they should not be in the try-except block at all.\n\nAlso, these checks should appear AFTER the data is read from the socket (since logically you first read the data, then make sure if it worked/if you\u0027re done.","commit_id":"ba8a8b0b16dbdab343a5bbe2318b5bd9f5789abc"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"fcafd4392e594124dcb7022d08e7feef2be6635a","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                if total_size \u003d\u003d file_size:"},{"line_number":213,"context_line":"                    break"},{"line_number":214,"context_line":"                elif total_size \u003e file_size:"},{"line_number":215,"context_line":"                    raise exceptions.FileReadNotCompleted()"},{"line_number":216,"context_line":"                data \u003d client_socket.recv(buffer_size)"},{"line_number":217,"context_line":"            except socket.error as e:"},{"line_number":218,"context_line":"                error \u003d e.args[0]"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a2fa921_711e1d0d","line":215,"in_reply_to":"7a2fa921_96588f8b","updated":"2015-10-11 08:51:46.000000000","message":"Done","commit_id":"ba8a8b0b16dbdab343a5bbe2318b5bd9f5789abc"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"12717ed9867a67079c4f6d4de825000391c19f85","unresolved":false,"context_lines":[{"line_number":197,"context_line":"                    \u0027host\u0027: host, \u0027port\u0027: port}"},{"line_number":198,"context_line":"                raise exceptions.TimeoutException(msg)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def _check_bw(self, host, port, limit, file_size):"},{"line_number":201,"context_line":"        NUM_BITS \u003d 8"},{"line_number":202,"context_line":"        NUM_BYTES \u003d 1024"},{"line_number":203,"context_line":"        buffer_size \u003d 10000 * 1024"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_564af428","line":200,"updated":"2015-10-11 15:09:52.000000000","message":"This function has so many variables and constants, it\u0027s making the function a bit difficult to read and understand. Can we remove some of them? For example, NUM_BITS should be removed (see comment on line 225), NUM_BYTES is only used once and test_start is purely used for debugging purposes and should be removed.","commit_id":"3f8da4b7b5e51cee5f4f58095c0e0d174d7bd787"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"60cf3f65da9e2ade37fdd2c605c2056b42d906d1","unresolved":false,"context_lines":[{"line_number":197,"context_line":"                    \u0027host\u0027: host, \u0027port\u0027: port}"},{"line_number":198,"context_line":"                raise exceptions.TimeoutException(msg)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def _check_bw(self, host, port, limit, file_size):"},{"line_number":201,"context_line":"        NUM_BITS \u003d 8"},{"line_number":202,"context_line":"        NUM_BYTES \u003d 1024"},{"line_number":203,"context_line":"        buffer_size \u003d 10000 * 1024"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a2ca52d_a4863a63","line":200,"in_reply_to":"7a2fa921_564af428","updated":"2015-10-25 10:26:15.000000000","message":"Removed NUM_BITS and NUM_BYTES\nMoved test_start to test_qos , I think we should keep this debug message to help in the case of bandwidth change.","commit_id":"3f8da4b7b5e51cee5f4f58095c0e0d174d7bd787"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"12717ed9867a67079c4f6d4de825000391c19f85","unresolved":false,"context_lines":[{"line_number":200,"context_line":"    def _check_bw(self, host, port, limit, file_size):"},{"line_number":201,"context_line":"        NUM_BITS \u003d 8"},{"line_number":202,"context_line":"        NUM_BYTES \u003d 1024"},{"line_number":203,"context_line":"        buffer_size \u003d 10000 * 1024"},{"line_number":204,"context_line":"        current_data_size \u003d 0"},{"line_number":205,"context_line":"        client_socket \u003d self._connect_socket(host, port)"},{"line_number":206,"context_line":"        total_size \u003d 0"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_36edf8ef","line":203,"updated":"2015-10-11 15:09:52.000000000","message":"Why aren\u0027t we reading \u00271024 * 1024 * 10\u0027?","commit_id":"3f8da4b7b5e51cee5f4f58095c0e0d174d7bd787"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"60cf3f65da9e2ade37fdd2c605c2056b42d906d1","unresolved":false,"context_lines":[{"line_number":200,"context_line":"    def _check_bw(self, host, port, limit, file_size):"},{"line_number":201,"context_line":"        NUM_BITS \u003d 8"},{"line_number":202,"context_line":"        NUM_BYTES \u003d 1024"},{"line_number":203,"context_line":"        buffer_size \u003d 10000 * 1024"},{"line_number":204,"context_line":"        current_data_size \u003d 0"},{"line_number":205,"context_line":"        client_socket \u003d self._connect_socket(host, port)"},{"line_number":206,"context_line":"        total_size \u003d 0"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_30573828","line":203,"in_reply_to":"7a2fa921_36edf8ef","updated":"2015-10-25 10:26:15.000000000","message":"Done","commit_id":"3f8da4b7b5e51cee5f4f58095c0e0d174d7bd787"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"12717ed9867a67079c4f6d4de825000391c19f85","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        test_start \u003d time.time()"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        while True:"},{"line_number":210,"context_line":"            try:"},{"line_number":211,"context_line":"                start \u003d time.time()"},{"line_number":212,"context_line":"                data \u003d client_socket.recv(buffer_size)"},{"line_number":213,"context_line":"            except socket.error as e:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_b6126808","line":210,"updated":"2015-10-11 15:09:52.000000000","message":"\u0027start\u0027 and \u0027time_elapsed\u0027 are confusing names.. \u0027start\u0027 of what? of the entire connection? \u0027time_elapsed\u0027 since what?","commit_id":"3f8da4b7b5e51cee5f4f58095c0e0d174d7bd787"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"60cf3f65da9e2ade37fdd2c605c2056b42d906d1","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        test_start \u003d time.time()"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        while True:"},{"line_number":210,"context_line":"            try:"},{"line_number":211,"context_line":"                start \u003d time.time()"},{"line_number":212,"context_line":"                data \u003d client_socket.recv(buffer_size)"},{"line_number":213,"context_line":"            except socket.error as e:"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a2ca52d_c4e81613","line":210,"in_reply_to":"7a2fa921_b6126808","updated":"2015-10-25 10:26:15.000000000","message":"changed start to cycle_start","commit_id":"3f8da4b7b5e51cee5f4f58095c0e0d174d7bd787"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"12717ed9867a67079c4f6d4de825000391c19f85","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                    raise"},{"line_number":219,"context_line":"            current_data_size \u003d len(data)"},{"line_number":220,"context_line":"            total_size +\u003d current_data_size"},{"line_number":221,"context_line":"            time_elapsed \u003d time.time() - start"},{"line_number":222,"context_line":"            should_check \u003d (time_elapsed \u003e\u003d 1 or current_data_size \u003d\u003d 0)"},{"line_number":223,"context_line":"            if should_check:"},{"line_number":224,"context_line":"                if (current_data_size / time_elapsed) \u003e ("}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_f62f803c","line":221,"updated":"2015-10-11 15:09:52.000000000","message":"This is buggy - I imagine \u0027time_elapsed\u0027 should be used to check if a second has passed and if so we we should check the bandwidth we had in that second. However, since \u0027start\u0027 is reset every loop entrance (line 211 occurs right before the recv) and not once every second, \u0027time_elapsed\u0027 will never reach one second.\n\nInstead, we should only reset \u0027start\u0027 if should_check \u003d\u003d True.","commit_id":"3f8da4b7b5e51cee5f4f58095c0e0d174d7bd787"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"60cf3f65da9e2ade37fdd2c605c2056b42d906d1","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                    raise"},{"line_number":219,"context_line":"            current_data_size \u003d len(data)"},{"line_number":220,"context_line":"            total_size +\u003d current_data_size"},{"line_number":221,"context_line":"            time_elapsed \u003d time.time() - start"},{"line_number":222,"context_line":"            should_check \u003d (time_elapsed \u003e\u003d 1 or current_data_size \u003d\u003d 0)"},{"line_number":223,"context_line":"            if should_check:"},{"line_number":224,"context_line":"                if (current_data_size / time_elapsed) \u003e ("}],"source_content_type":"text/x-python","patch_set":14,"id":"5a2ca52d_3e6f9bc6","line":221,"in_reply_to":"7a2fa921_f62f803c","updated":"2015-10-25 10:26:15.000000000","message":"Done","commit_id":"3f8da4b7b5e51cee5f4f58095c0e0d174d7bd787"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"12717ed9867a67079c4f6d4de825000391c19f85","unresolved":false,"context_lines":[{"line_number":222,"context_line":"            should_check \u003d (time_elapsed \u003e\u003d 1 or current_data_size \u003d\u003d 0)"},{"line_number":223,"context_line":"            if should_check:"},{"line_number":224,"context_line":"                if (current_data_size / time_elapsed) \u003e ("},{"line_number":225,"context_line":"                    limit * NUM_BITS * NUM_BYTES):"},{"line_number":226,"context_line":"                    # Limit reached"},{"line_number":227,"context_line":"                    return False"},{"line_number":228,"context_line":"            if total_size \u003d\u003d file_size:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_96c88caa","line":225,"updated":"2015-10-11 15:09:52.000000000","message":"The above \u0027if\u0027 is incorrect. Data read (as received from \u0027recv\u0027 calls) are in bytes, meaning that if we read \"abc\", current_data_size will be 3. Since we already multiplied \u0027limit\u0027 by 8 (see line 244), we probably don\u0027t want to do it again.","commit_id":"3f8da4b7b5e51cee5f4f58095c0e0d174d7bd787"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"60cf3f65da9e2ade37fdd2c605c2056b42d906d1","unresolved":false,"context_lines":[{"line_number":222,"context_line":"            should_check \u003d (time_elapsed \u003e\u003d 1 or current_data_size \u003d\u003d 0)"},{"line_number":223,"context_line":"            if should_check:"},{"line_number":224,"context_line":"                if (current_data_size / time_elapsed) \u003e ("},{"line_number":225,"context_line":"                    limit * NUM_BITS * NUM_BYTES):"},{"line_number":226,"context_line":"                    # Limit reached"},{"line_number":227,"context_line":"                    return False"},{"line_number":228,"context_line":"            if total_size \u003d\u003d file_size:"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a2ca52d_be63abdb","line":225,"in_reply_to":"7a2fa921_96c88caa","updated":"2015-10-25 10:26:15.000000000","message":"Done","commit_id":"3f8da4b7b5e51cee5f4f58095c0e0d174d7bd787"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"12717ed9867a67079c4f6d4de825000391c19f85","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                    return False"},{"line_number":228,"context_line":"            if total_size \u003d\u003d file_size:"},{"line_number":229,"context_line":"                break"},{"line_number":230,"context_line":"            elif total_size \u003e file_size:"},{"line_number":231,"context_line":"                raise exceptions.FileReadNotCompleted()"},{"line_number":232,"context_line":"        LOG.debug(\"total_time_sent_file\u003d%s\", time.time() - test_start)"},{"line_number":233,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_761cd013","line":230,"updated":"2015-10-11 15:09:52.000000000","message":"Again, \u0027total_size\u0027 is confusing. total size of the data we\u0027re expecting to read, or what we already read? This makes this \u0027if\u0027 very confusing - if we\u0027ve read more than we should have, we\u0027ve over-read (so FileReadNotCompleted is indicating the wrong error!)","commit_id":"3f8da4b7b5e51cee5f4f58095c0e0d174d7bd787"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"60cf3f65da9e2ade37fdd2c605c2056b42d906d1","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                    return False"},{"line_number":228,"context_line":"            if total_size \u003d\u003d file_size:"},{"line_number":229,"context_line":"                break"},{"line_number":230,"context_line":"            elif total_size \u003e file_size:"},{"line_number":231,"context_line":"                raise exceptions.FileReadNotCompleted()"},{"line_number":232,"context_line":"        LOG.debug(\"total_time_sent_file\u003d%s\", time.time() - test_start)"},{"line_number":233,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a2ca52d_9e9fcfb3","line":230,"in_reply_to":"7a2fa921_761cd013","updated":"2015-10-25 10:26:15.000000000","message":"Removed","commit_id":"3f8da4b7b5e51cee5f4f58095c0e0d174d7bd787"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"12717ed9867a67079c4f6d4de825000391c19f85","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        This is a basic test that check that a QoS policy with"},{"line_number":240,"context_line":"        a bandwidth limit rule is applied correctly by sending"},{"line_number":241,"context_line":"        a file from the instance to the test node."},{"line_number":242,"context_line":"        \u0027\u0027\u0027"},{"line_number":243,"context_line":"        nc_port \u003d 1234"},{"line_number":244,"context_line":"        limit \u003d CONF.network.qos_limit * 8"},{"line_number":245,"context_line":"        bs \u003d 1024"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_36c4185e","line":242,"updated":"2015-10-11 15:09:52.000000000","message":"all of these variables are constants and should be capitalised.","commit_id":"3f8da4b7b5e51cee5f4f58095c0e0d174d7bd787"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"60cf3f65da9e2ade37fdd2c605c2056b42d906d1","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        This is a basic test that check that a QoS policy with"},{"line_number":240,"context_line":"        a bandwidth limit rule is applied correctly by sending"},{"line_number":241,"context_line":"        a file from the instance to the test node."},{"line_number":242,"context_line":"        \u0027\u0027\u0027"},{"line_number":243,"context_line":"        nc_port \u003d 1234"},{"line_number":244,"context_line":"        limit \u003d CONF.network.qos_limit * 8"},{"line_number":245,"context_line":"        bs \u003d 1024"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_70da90eb","line":242,"in_reply_to":"7a2fa921_36c4185e","updated":"2015-10-25 10:26:15.000000000","message":"Done","commit_id":"3f8da4b7b5e51cee5f4f58095c0e0d174d7bd787"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"12717ed9867a67079c4f6d4de825000391c19f85","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        a file from the instance to the test node."},{"line_number":242,"context_line":"        \u0027\u0027\u0027"},{"line_number":243,"context_line":"        nc_port \u003d 1234"},{"line_number":244,"context_line":"        limit \u003d CONF.network.qos_limit * 8"},{"line_number":245,"context_line":"        bs \u003d 1024"},{"line_number":246,"context_line":"        count \u003d 10240"},{"line_number":247,"context_line":"        file_size \u003d bs * count"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_d69fe463","line":244,"updated":"2015-10-11 15:09:52.000000000","message":"\u0027limit\u0027 is not a good name. Limit of how many bytes we want to ready each time? limit of the bandwidth of qos per second? limit of burst? limit of how many reads we are allowed in our connection?","commit_id":"3f8da4b7b5e51cee5f4f58095c0e0d174d7bd787"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"60cf3f65da9e2ade37fdd2c605c2056b42d906d1","unresolved":false,"context_lines":[{"line_number":241,"context_line":"        a file from the instance to the test node."},{"line_number":242,"context_line":"        \u0027\u0027\u0027"},{"line_number":243,"context_line":"        nc_port \u003d 1234"},{"line_number":244,"context_line":"        limit \u003d CONF.network.qos_limit * 8"},{"line_number":245,"context_line":"        bs \u003d 1024"},{"line_number":246,"context_line":"        count \u003d 10240"},{"line_number":247,"context_line":"        file_size \u003d bs * count"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a29b11f_01e73bad","line":244,"in_reply_to":"7a2fa921_d69fe463","updated":"2015-10-25 10:26:15.000000000","message":"Done","commit_id":"3f8da4b7b5e51cee5f4f58095c0e0d174d7bd787"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"923f58720877383f3a46f25d579e1ef45a8f0304","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                                                shared\u003dTrue)"},{"line_number":269,"context_line":"        policy_id \u003d policy[\u0027policy\u0027][\u0027id\u0027]"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        post_body \u003d {\u0027max_kbps\u0027: limit, \u0027max_burst_kbps\u0027: limit}"},{"line_number":272,"context_line":"        admin_client.create_bandwidth_limit_rule(policy_id,"},{"line_number":273,"context_line":"                                                 **post_body)"},{"line_number":274,"context_line":"        post_body \u003d {\u0027qos_policy_id\u0027: policy_id}"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a2fa921_6a8ff175","line":271,"updated":"2015-10-12 12:07:34.000000000","message":"please set burst to limit/10      (that\u0027s a 10%) , it\u0027s the recommendation for TCP to work reliably.","commit_id":"3f8da4b7b5e51cee5f4f58095c0e0d174d7bd787"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"60cf3f65da9e2ade37fdd2c605c2056b42d906d1","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                                                shared\u003dTrue)"},{"line_number":269,"context_line":"        policy_id \u003d policy[\u0027policy\u0027][\u0027id\u0027]"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        post_body \u003d {\u0027max_kbps\u0027: limit, \u0027max_burst_kbps\u0027: limit}"},{"line_number":272,"context_line":"        admin_client.create_bandwidth_limit_rule(policy_id,"},{"line_number":273,"context_line":"                                                 **post_body)"},{"line_number":274,"context_line":"        post_body \u003d {\u0027qos_policy_id\u0027: policy_id}"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a2ca52d_04c60e9a","line":271,"in_reply_to":"7a2fa921_6a8ff175","updated":"2015-10-25 10:26:15.000000000","message":"Done","commit_id":"3f8da4b7b5e51cee5f4f58095c0e0d174d7bd787"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"640da9796103ef79cfebc9b33a91adfd5556b5f3","unresolved":false,"context_lines":[{"line_number":198,"context_line":"                raise exceptions.TimeoutException(msg)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def _check_bw(self, host, port, limit_kbps, file_size):"},{"line_number":201,"context_line":"        BUFFER_SIZE \u003d 10 * 1024 * 1024"},{"line_number":202,"context_line":"        limit_bytes_sec \u003d limit_kbps / (8 * 1024)"},{"line_number":203,"context_line":"        client_socket \u003d self._connect_socket(host, port)"},{"line_number":204,"context_line":"        total_bytes_read \u003d 0"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa80f949_fa10abaa","line":201,"updated":"2015-11-03 17:28:07.000000000","message":"limit_bytes_sec is a constant so should be renamed to being capslocked.","commit_id":"6d9ee74074e4a3956a99f1e4323ed6132899a0ca"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"640da9796103ef79cfebc9b33a91adfd5556b5f3","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        LIMIT_KILO_BITS_SEC \u003d CONF.network.qos_limit"},{"line_number":240,"context_line":"        BS \u003d 1024"},{"line_number":241,"context_line":"        COUNT \u003d 10240"},{"line_number":242,"context_line":"        NC_PORT \u003d 1234"},{"line_number":243,"context_line":"        sg_id \u003d 0"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"        self._setup_network_and_servers()"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa80f949_7a74bbfc","line":242,"updated":"2015-11-03 17:28:07.000000000","message":"sg_id is not used prior to line , so this line can be removed.","commit_id":"6d9ee74074e4a3956a99f1e4323ed6132899a0ca"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"640da9796103ef79cfebc9b33a91adfd5556b5f3","unresolved":false,"context_lines":[{"line_number":263,"context_line":"                                                shared\u003dTrue)"},{"line_number":264,"context_line":"        policy_id \u003d policy[\u0027policy\u0027][\u0027id\u0027]"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"        post_body \u003d {\u0027max_kbps\u0027: LIMIT_KILO_BITS_SEC,"},{"line_number":267,"context_line":"                     \u0027max_burst_kbps\u0027: LIMIT_KILO_BITS_SEC / 10}"},{"line_number":268,"context_line":"        admin_client.create_bandwidth_limit_rule(policy_id,"},{"line_number":269,"context_line":"                                                 **post_body)"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa80f949_ba3c6330","line":266,"updated":"2015-11-03 17:28:07.000000000","message":"These \u0027post_body\u0027 variables can be removed and put directly into the function calls. It will make the code look cleaner :)","commit_id":"6d9ee74074e4a3956a99f1e4323ed6132899a0ca"},{"author":{"_account_id":12171,"name":"Moshe Levi","email":"moshele@nvidia.com","username":"moshele"},"change_message_id":"0ef6464e3679616542e5774522b17eed596205b1","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        NC_PORT \u003d 1234"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        self._setup_network_and_servers()"},{"line_number":258,"context_line":"        port, _ \u003d self._get_server_port_id_and_ip4(self.server)"},{"line_number":259,"context_line":"        ip \u003d self.floating_ip.floating_ip_address"},{"line_number":260,"context_line":"        ssh_client \u003d self.get_remote_client("},{"line_number":261,"context_line":"            server_or_ip\u003dip)"}],"source_content_type":"text/x-python","patch_set":16,"id":"da85f559_0bdba31c","line":258,"updated":"2015-11-15 12:23:53.000000000","message":"File \"tempest/scenario/test_network_advanced_server_ops.py\", line 258, in test_qos\n    port, _ \u003d self._get_server_port_id_and_ip4(self.server)\nAttributeError: \u0027TestNetworkAdvancedServerOps\u0027 object has no attribute \u0027server\u0027","commit_id":"6d673961672b185bfd26b85151f6510d3a139a72"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"216fe5c7efab5b1b5bb022df8d1b1dae5cfe9edd","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            time_elapsed \u003d time.time() - cycle_start_time"},{"line_number":230,"context_line":"            should_check \u003d (time_elapsed \u003e\u003d 1 or total_bytes_read \u003d\u003d file_size)"},{"line_number":231,"context_line":"            if should_check:"},{"line_number":232,"context_line":"                if (cycle_data_read / time_elapsed) \u003e LIMIT_BYTES_SEC:"},{"line_number":233,"context_line":"                    # Limit reached"},{"line_number":234,"context_line":"                    return False"},{"line_number":235,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a8ffd7b_12364f52","line":232,"updated":"2015-11-26 08:40:08.000000000","message":"you cannot do this comparison, you\u0027re ignoring \"burst\", this will fail randomly, because burst allows for an extra burst of data to go out quickly sometimes.\n\nyou should better do the check by the end of the test (outside the while cycle), and allow for some degree of tolerance (10%?)","commit_id":"c2ba147f1bd542334585ab39d57daf415e0e883a"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"216fe5c7efab5b1b5bb022df8d1b1dae5cfe9edd","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                else:"},{"line_number":236,"context_line":"                    cycle_start_time \u003d time.time()"},{"line_number":237,"context_line":"                    cycle_data_read \u003d 0"},{"line_number":238,"context_line":"        return True"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    @test.idempotent_id(\u002746fd0d45-5ac5-40b5-b613-01786bf36011\u0027)"},{"line_number":241,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a8ffd7b_325ef376","line":238,"updated":"2015-11-26 08:40:08.000000000","message":"check should go here:\n\nif (total_data_read / total_time_elapsed) \u003e LIMIT_BYTES_SEC * TOLERANCE_FACTOR:\n   return False\n\nYou probably don\u0027t want to go on measuring burst,","commit_id":"c2ba147f1bd542334585ab39d57daf415e0e883a"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"6b28c083990327d2e560786c4b4b4bbf6859567f","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                    \u0027host\u0027: host, \u0027port\u0027: port}"},{"line_number":207,"context_line":"                raise exceptions.TimeoutException(msg)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def _check_bw(self, host, port, limit_kbps, file_size, test_start):"},{"line_number":210,"context_line":"        BUFFER_SIZE \u003d 10 * 1024 * 1024"},{"line_number":211,"context_line":"        TOLERANCE_FACTOR \u003d 1.1"},{"line_number":212,"context_line":"        LIMIT_BYTES_SEC \u003d (limit_kbps * 1024 * TOLERANCE_FACTOR) / 8.0"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a68dd71_11b8c7e4","line":209,"range":{"start_line":209,"start_character":59,"end_line":209,"end_character":69},"updated":"2016-01-21 14:41:58.000000000","message":"I would change this function, so it returns the measured bandwidth, and then you do the assert checks outside this, having more meaningful failures.\n\nNow you just have true/false with no other indication.","commit_id":"e48a1a9df3d03b1c4dbe19082e962561c7f4c304"},{"author":{"_account_id":4727,"name":"Itzik Brown","email":"itzikb@redhat.com","username":"itzikb1"},"change_message_id":"52da2c3065c3c690b0ce9ed4a49cd64615b4c005","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                    \u0027host\u0027: host, \u0027port\u0027: port}"},{"line_number":207,"context_line":"                raise exceptions.TimeoutException(msg)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def _check_bw(self, host, port, limit_kbps, file_size, test_start):"},{"line_number":210,"context_line":"        BUFFER_SIZE \u003d 10 * 1024 * 1024"},{"line_number":211,"context_line":"        TOLERANCE_FACTOR \u003d 1.1"},{"line_number":212,"context_line":"        LIMIT_BYTES_SEC \u003d (limit_kbps * 1024 * TOLERANCE_FACTOR) / 8.0"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a68dd71_91b44935","line":209,"range":{"start_line":209,"start_character":59,"end_line":209,"end_character":69},"in_reply_to":"9a68dd71_11b8c7e4","updated":"2016-01-24 08:14:26.000000000","message":"I still want to check for a short periods of time.\nI can leave the debug messages so it can help us trace the problems when they occur","commit_id":"e48a1a9df3d03b1c4dbe19082e962561c7f4c304"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"6b28c083990327d2e560786c4b4b4bbf6859567f","unresolved":false,"context_lines":[{"line_number":236,"context_line":"                           \"bytes_read\": total_bytes_read,"},{"line_number":237,"context_line":"                           \"cycle_data\": cycle_data_read})"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"                if (cycle_data_read / time_elapsed) \u003e LIMIT_BYTES_SEC:"},{"line_number":240,"context_line":"                    # Limit reached"},{"line_number":241,"context_line":"                    return False"},{"line_number":242,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a68dd71_b1cbfb52","line":239,"range":{"start_line":239,"start_character":38,"end_line":239,"end_character":50},"updated":"2016-01-21 14:41:58.000000000","message":"ahh, I see \n\nyou check the intra-second spikes.\n\nPlease don\u0027t do that. I believe data bursts will always make that fail. \nIf you want to do that, please span over several seconds to repeat such kind of check (every 5 seconds at least?)","commit_id":"e48a1a9df3d03b1c4dbe19082e962561c7f4c304"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"798b2a1f8b42078a089b2fa017179614252c6f99","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    def _connect_socket(self, host, port):"},{"line_number":183,"context_line":"        \"\"\"Try to initiate a connection to a host using an ip address and a port."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        Trying couple of times until a timeout is reached in case the listening"},{"line_number":186,"context_line":"        host is not ready yet."},{"line_number":187,"context_line":"        \"\"\""},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"dab17558_7eb01d44","line":185,"range":{"start_line":185,"start_character":15,"end_line":185,"end_character":21},"updated":"2016-05-08 09:14:52.000000000","message":"s/couple/a couple/\n\nAlso, this doesn\u0027t run \"a couple\" of times - it will run numerous times until the connect() was successful or until the timer has expired - so the docstring is not accurate.","commit_id":"d839eec33ee8d846798b9416ceb38ad7d56fe89d"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"798b2a1f8b42078a089b2fa017179614252c6f99","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        host is not ready yet."},{"line_number":187,"context_line":"        \"\"\""},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        def try_connect(host_ip, port):"},{"line_number":190,"context_line":"            try:"},{"line_number":191,"context_line":"                client_socket \u003d socket.socket(socket.AF_INET,"},{"line_number":192,"context_line":"                                              socket.SOCK_STREAM)"}],"source_content_type":"text/x-python","patch_set":25,"id":"dab17558_fe5ecde7","line":189,"range":{"start_line":189,"start_character":28,"end_line":189,"end_character":31},"updated":"2016-05-08 09:14:52.000000000","message":"Please be consistent about the variable naming. if _connect_socket() accepts \u0027host\u0027, this should also accept \u0027host\u0027 (and not \u0027host_ip\u0027).","commit_id":"d839eec33ee8d846798b9416ceb38ad7d56fe89d"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"798b2a1f8b42078a089b2fa017179614252c6f99","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        host is not ready yet."},{"line_number":187,"context_line":"        \"\"\""},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        def try_connect(host_ip, port):"},{"line_number":190,"context_line":"            try:"},{"line_number":191,"context_line":"                client_socket \u003d socket.socket(socket.AF_INET,"},{"line_number":192,"context_line":"                                              socket.SOCK_STREAM)"}],"source_content_type":"text/x-python","patch_set":25,"id":"dab17558_de6149aa","line":189,"range":{"start_line":189,"start_character":12,"end_line":189,"end_character":23},"updated":"2016-05-08 09:14:52.000000000","message":"This function shouldn\u0027t receive any arguments since the \u0027host\u0027 and \u0027port\u0027 are already in the scope of the function (via _connect_socket).","commit_id":"d839eec33ee8d846798b9416ceb38ad7d56fe89d"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"798b2a1f8b42078a089b2fa017179614252c6f99","unresolved":false,"context_lines":[{"line_number":190,"context_line":"            try:"},{"line_number":191,"context_line":"                client_socket \u003d socket.socket(socket.AF_INET,"},{"line_number":192,"context_line":"                                              socket.SOCK_STREAM)"},{"line_number":193,"context_line":"                client_socket.connect((host_ip, port))"},{"line_number":194,"context_line":"                client_socket.setblocking(0)"},{"line_number":195,"context_line":"                return client_socket"},{"line_number":196,"context_line":"            except socket.error:"}],"source_content_type":"text/x-python","patch_set":25,"id":"dab17558_5e47191d","line":193,"range":{"start_line":193,"start_character":30,"end_line":193,"end_character":37},"updated":"2016-05-08 09:14:52.000000000","message":"So python sockets have a settimeout() function [1] which will make the connect() raise an exception if it didn\u0027t complete within the time specified. I suggest we incorporate the \"overall connect timeout\" that you have here with the settimeout() function, in order to make sure try_connect doesn\u0027t block forever.\n\n[1]: https://docs.python.org/2/library/socket.html#socket.socket.settimeout","commit_id":"d839eec33ee8d846798b9416ceb38ad7d56fe89d"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"798b2a1f8b42078a089b2fa017179614252c6f99","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                raise exceptions.TimeoutException(msg)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def _check_bw(self, host, port, limit_kbps, file_size, test_start):"},{"line_number":210,"context_line":"        BUFFER_SIZE \u003d 10 * 1024 * 1024"},{"line_number":211,"context_line":"        TOLERANCE_FACTOR \u003d 1.1"},{"line_number":212,"context_line":"        LIMIT_BYTES_SEC \u003d (limit_kbps * 1024 * TOLERANCE_FACTOR) / 8.0"},{"line_number":213,"context_line":"        client_socket \u003d self._connect_socket(host, port)"}],"source_content_type":"text/x-python","patch_set":25,"id":"dab17558_be0445c0","line":210,"range":{"start_line":210,"start_character":22,"end_line":210,"end_character":38},"updated":"2016-05-08 09:14:52.000000000","message":"In case there is a change in lines 260 or 261, this value should also be changed. This hints to me that all these variables should be defined in some common place (class attributes?)","commit_id":"d839eec33ee8d846798b9416ceb38ad7d56fe89d"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"798b2a1f8b42078a089b2fa017179614252c6f99","unresolved":false,"context_lines":[{"line_number":248,"context_line":"    @test.idempotent_id(\u002746fd0d45-5ac5-40b5-b613-01786bf36011\u0027)"},{"line_number":249,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027)"},{"line_number":250,"context_line":"    def test_qos(self):"},{"line_number":251,"context_line":"        \"\"\"This is a basic test that check that a QoS policy with"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"           a bandwidth limit rule is applied correctly by sending"},{"line_number":254,"context_line":"           a file from the instance to the test node."}],"source_content_type":"text/x-python","patch_set":25,"id":"dab17558_be6d659a","line":251,"range":{"start_line":251,"start_character":61,"end_line":251,"end_character":65},"updated":"2016-05-08 09:14:52.000000000","message":"Why does the sentence end so quickly? Please make the first line of this docstring a complete sentence, and the body its own \u0027entity\u0027.","commit_id":"d839eec33ee8d846798b9416ceb38ad7d56fe89d"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"798b2a1f8b42078a089b2fa017179614252c6f99","unresolved":false,"context_lines":[{"line_number":291,"context_line":"            max_burst_kbps\u003dLIMIT_KILO_BITS_SEC / 10)"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        self.ports_client.update_port(port, qos_policy_id\u003dpolicy_id)"},{"line_number":294,"context_line":"        msg \u003d \"Limit reached, limit \u003d %s\" % LIMIT_KILO_BITS_SEC"},{"line_number":295,"context_line":"        time.sleep(30)"},{"line_number":296,"context_line":"        test_start \u003d time.time()"},{"line_number":297,"context_line":"        self.assertTrue(self._check_bw(ip_address, NC_PORT,"}],"source_content_type":"text/x-python","patch_set":25,"id":"dab17558_9e686189","line":294,"range":{"start_line":294,"start_character":8,"end_line":294,"end_character":63},"updated":"2016-05-08 09:14:52.000000000","message":"This should be defined directly before being used (not a few lines prior).","commit_id":"d839eec33ee8d846798b9416ceb38ad7d56fe89d"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"798b2a1f8b42078a089b2fa017179614252c6f99","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        self.ports_client.update_port(port, qos_policy_id\u003dpolicy_id)"},{"line_number":294,"context_line":"        msg \u003d \"Limit reached, limit \u003d %s\" % LIMIT_KILO_BITS_SEC"},{"line_number":295,"context_line":"        time.sleep(30)"},{"line_number":296,"context_line":"        test_start \u003d time.time()"},{"line_number":297,"context_line":"        self.assertTrue(self._check_bw(ip_address, NC_PORT,"},{"line_number":298,"context_line":"                        LIMIT_KILO_BITS_SEC, BS * COUNT, test_start), msg)"}],"source_content_type":"text/x-python","patch_set":25,"id":"dab17558_1e13d10e","line":295,"range":{"start_line":295,"start_character":8,"end_line":295,"end_character":22},"updated":"2016-05-08 09:14:52.000000000","message":"Why do we need to sleep for 30 seconds before checking the bw? Why not 5? Why not 60? If this sleep is needed, please add a comment explaining why.","commit_id":"d839eec33ee8d846798b9416ceb38ad7d56fe89d"}],"tempest/services/network/json/network_client.py":[{"author":{"_account_id":8873,"name":"Assaf Muller","email":"amuller@redhat.com","username":"amuller"},"change_message_id":"795392a9f12ab9f9413990e0c7b5390639be4f3b","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        uri \u003d \u0027/security-group-rules\u0027"},{"line_number":109,"context_line":"        return self.list_resources(uri, **filters)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def create_qos_policy(self, **kwargs):"},{"line_number":112,"context_line":"        uri \u003d \u0027/qos/policies\u0027"},{"line_number":113,"context_line":"        post_data \u003d {\u0027policy\u0027: kwargs}"},{"line_number":114,"context_line":"        return self.create_resource(uri, post_data)"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a7b0d38_8a2b3030","line":111,"updated":"2015-12-23 17:01:51.000000000","message":"Should new Neutron client methods be moved to neutron-lib? That way we can use the same code from Tempest scenario tests and Neutron API tests in the Neutron tree.","commit_id":"d4728d6c254390d3c6ee81599db3b7ba196c9983"}]}
