)]}'
{"nova_powervm/tests/virt/powervm/volume/test_npiv.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2e49c8234d3b7c841498b4c354e063ccc72bca61","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"9a89bdaa_4a2debfc","updated":"2016-09-13 13:49:46.000000000","message":"The UT here seems a tad pale in light of all the permutations possible in the algorithm.  We at least ought to test with multiple VIOSes.","commit_id":"cda7cb6c2686bec137cda50394ea9e66c5659003"},{"author":{"_account_id":13002,"name":"Shyama","email":"shyvenug@in.ibm.com","username":"shyama"},"change_message_id":"a6a458a96627c111e327c9e97d5feb8883bc6fc6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7a8ec9b2_5313630d","in_reply_to":"9a89bdaa_4a2debfc","updated":"2016-09-14 18:17:24.000000000","message":"Done","commit_id":"cda7cb6c2686bec137cda50394ea9e66c5659003"}],"nova_powervm/virt/powervm/volume/npiv.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2e49c8234d3b7c841498b4c354e063ccc72bca61","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                         method."},{"line_number":122,"context_line":"        \"\"\""},{"line_number":123,"context_line":"        fabrics \u003d self._fabric_names()"},{"line_number":124,"context_line":"        vios_wraps \u003d self.stg_ftsk.feed"},{"line_number":125,"context_line":"        # This mapping contains the client slots used on a given vios."},{"line_number":126,"context_line":"        slot_peer_dict \u003d dict()"},{"line_number":127,"context_line":"        for fabric in fabrics:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_e7cb5a70","line":124,"updated":"2016-09-13 13:49:46.000000000","message":"The slot_peer_dict should use VIOS UUIDs as keys, rather than the wrappers.  Whenever you store a dict value, python has to calculate the hash value on the key.  This is way easier on a simple string than on a huge complicated object.\n\nComments below assume this is done.","commit_id":"cda7cb6c2686bec137cda50394ea9e66c5659003"},{"author":{"_account_id":13002,"name":"Shyama","email":"shyvenug@in.ibm.com","username":"shyama"},"change_message_id":"07933c89b19e0ffe1f053438953defa3612a31cf","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                         method."},{"line_number":122,"context_line":"        \"\"\""},{"line_number":123,"context_line":"        fabrics \u003d self._fabric_names()"},{"line_number":124,"context_line":"        vios_wraps \u003d self.stg_ftsk.feed"},{"line_number":125,"context_line":"        # This mapping contains the client slots used on a given vios."},{"line_number":126,"context_line":"        slot_peer_dict \u003d dict()"},{"line_number":127,"context_line":"        for fabric in fabrics:"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_a0ab6bd5","line":124,"in_reply_to":"9a89bdaa_e7cb5a70","updated":"2016-09-14 17:58:09.000000000","message":"Done","commit_id":"cda7cb6c2686bec137cda50394ea9e66c5659003"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2e49c8234d3b7c841498b4c354e063ccc72bca61","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        \"\"\""},{"line_number":123,"context_line":"        fabrics \u003d self._fabric_names()"},{"line_number":124,"context_line":"        vios_wraps \u003d self.stg_ftsk.feed"},{"line_number":125,"context_line":"        # This mapping contains the client slots used on a given vios."},{"line_number":126,"context_line":"        slot_peer_dict \u003d dict()"},{"line_number":127,"context_line":"        for fabric in fabrics:"},{"line_number":128,"context_line":"            npiv_port_maps \u003d self._get_fabric_meta(fabric)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_479de6ba","line":125,"updated":"2016-09-13 13:49:46.000000000","message":"Wouldn\u0027t mind enhancing this comment to describe the shape of the dict.\n\n { vios_uuid: [slot_num, ...], ... }","commit_id":"cda7cb6c2686bec137cda50394ea9e66c5659003"},{"author":{"_account_id":13002,"name":"Shyama","email":"shyvenug@in.ibm.com","username":"shyama"},"change_message_id":"07933c89b19e0ffe1f053438953defa3612a31cf","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        \"\"\""},{"line_number":123,"context_line":"        fabrics \u003d self._fabric_names()"},{"line_number":124,"context_line":"        vios_wraps \u003d self.stg_ftsk.feed"},{"line_number":125,"context_line":"        # This mapping contains the client slots used on a given vios."},{"line_number":126,"context_line":"        slot_peer_dict \u003d dict()"},{"line_number":127,"context_line":"        for fabric in fabrics:"},{"line_number":128,"context_line":"            npiv_port_maps \u003d self._get_fabric_meta(fabric)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_60a963df","line":125,"in_reply_to":"9a89bdaa_479de6ba","updated":"2016-09-14 17:58:09.000000000","message":"Done","commit_id":"cda7cb6c2686bec137cda50394ea9e66c5659003"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2e49c8234d3b7c841498b4c354e063ccc72bca61","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                vios_w, vfc_map \u003d pvm_vfcm.find_vios_for_vfc_wwpns("},{"line_number":135,"context_line":"                    vios_wraps, port_map[1].split())"},{"line_number":136,"context_line":"                slot_num \u003d vfc_map.client_adapter.lpar_slot_num"},{"line_number":137,"context_line":"                if not slot_peer_dict.get(vios_w):"},{"line_number":138,"context_line":"                    slot_peer_dict[vios_w] \u003d []"},{"line_number":139,"context_line":"                slot_peer_dict[vios_w].append(slot_num)"},{"line_number":140,"context_line":"                client_slots.append(slot_num)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_eb524612","line":137,"range":{"start_line":137,"start_character":16,"end_line":137,"end_character":50},"updated":"2016-09-13 13:49:46.000000000","message":"Prefer syntax:\n\n if vios_uuid not in slot_peer_dict:\n\nSaves you a variable, which isn\u0027t that big of a deal, but I\u0027m a nerd.  Also saves you overwriting in the (hypothetical) case where the value exists, but evaluates to False (e.g. empty list).","commit_id":"cda7cb6c2686bec137cda50394ea9e66c5659003"},{"author":{"_account_id":13002,"name":"Shyama","email":"shyvenug@in.ibm.com","username":"shyama"},"change_message_id":"07933c89b19e0ffe1f053438953defa3612a31cf","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                vios_w, vfc_map \u003d pvm_vfcm.find_vios_for_vfc_wwpns("},{"line_number":135,"context_line":"                    vios_wraps, port_map[1].split())"},{"line_number":136,"context_line":"                slot_num \u003d vfc_map.client_adapter.lpar_slot_num"},{"line_number":137,"context_line":"                if not slot_peer_dict.get(vios_w):"},{"line_number":138,"context_line":"                    slot_peer_dict[vios_w] \u003d []"},{"line_number":139,"context_line":"                slot_peer_dict[vios_w].append(slot_num)"},{"line_number":140,"context_line":"                client_slots.append(slot_num)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_009c1fbf","line":137,"range":{"start_line":137,"start_character":16,"end_line":137,"end_character":50},"in_reply_to":"9a89bdaa_eb524612","updated":"2016-09-14 17:58:09.000000000","message":"Done","commit_id":"cda7cb6c2686bec137cda50394ea9e66c5659003"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2e49c8234d3b7c841498b4c354e063ccc72bca61","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            mig_data[\u0027src_npiv_fabric_slots_%s\u0027 % fabric] \u003d ("},{"line_number":145,"context_line":"                jsonutils.dumps(client_slots))"},{"line_number":146,"context_line":"        # The target really doesn\u0027t care what the UUID is of the source VIOS"},{"line_number":147,"context_line":"        # it is on a different server.  So lets strip that out and just get the"},{"line_number":148,"context_line":"        # values."},{"line_number":149,"context_line":"        vios_peer_slots \u003d slot_peer_dict.values()"},{"line_number":150,"context_line":"        mig_data[\u0027src_vios_peer_slots\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_a72152a0","line":147,"range":{"start_line":147,"start_character":43,"end_line":147,"end_character":47},"updated":"2016-09-13 13:49:46.000000000","message":"let\u0027s","commit_id":"cda7cb6c2686bec137cda50394ea9e66c5659003"},{"author":{"_account_id":13002,"name":"Shyama","email":"shyvenug@in.ibm.com","username":"shyama"},"change_message_id":"07933c89b19e0ffe1f053438953defa3612a31cf","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            mig_data[\u0027src_npiv_fabric_slots_%s\u0027 % fabric] \u003d ("},{"line_number":145,"context_line":"                jsonutils.dumps(client_slots))"},{"line_number":146,"context_line":"        # The target really doesn\u0027t care what the UUID is of the source VIOS"},{"line_number":147,"context_line":"        # it is on a different server.  So lets strip that out and just get the"},{"line_number":148,"context_line":"        # values."},{"line_number":149,"context_line":"        vios_peer_slots \u003d slot_peer_dict.values()"},{"line_number":150,"context_line":"        mig_data[\u0027src_vios_peer_slots\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_c06317db","line":147,"range":{"start_line":147,"start_character":43,"end_line":147,"end_character":47},"in_reply_to":"9a89bdaa_a72152a0","updated":"2016-09-14 17:58:09.000000000","message":"Done","commit_id":"cda7cb6c2686bec137cda50394ea9e66c5659003"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2e49c8234d3b7c841498b4c354e063ccc72bca61","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        # The target really doesn\u0027t care what the UUID is of the source VIOS"},{"line_number":147,"context_line":"        # it is on a different server.  So lets strip that out and just get the"},{"line_number":148,"context_line":"        # values."},{"line_number":149,"context_line":"        vios_peer_slots \u003d slot_peer_dict.values()"},{"line_number":150,"context_line":"        mig_data[\u0027src_vios_peer_slots\u0027] \u003d ("},{"line_number":151,"context_line":"            jsonutils.dumps(vios_peer_slots))"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_902c87ad","line":149,"range":{"start_line":149,"start_character":26,"end_line":149,"end_character":49},"updated":"2016-09-13 13:49:46.000000000","message":"I believe this will return an iterator in py3.  Should probably use list(slot_peer_dict.values()).","commit_id":"cda7cb6c2686bec137cda50394ea9e66c5659003"},{"author":{"_account_id":13002,"name":"Shyama","email":"shyvenug@in.ibm.com","username":"shyama"},"change_message_id":"07933c89b19e0ffe1f053438953defa3612a31cf","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        # The target really doesn\u0027t care what the UUID is of the source VIOS"},{"line_number":147,"context_line":"        # it is on a different server.  So lets strip that out and just get the"},{"line_number":148,"context_line":"        # values."},{"line_number":149,"context_line":"        vios_peer_slots \u003d slot_peer_dict.values()"},{"line_number":150,"context_line":"        mig_data[\u0027src_vios_peer_slots\u0027] \u003d ("},{"line_number":151,"context_line":"            jsonutils.dumps(vios_peer_slots))"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_a0644be5","line":149,"range":{"start_line":149,"start_character":26,"end_line":149,"end_character":49},"in_reply_to":"9a89bdaa_902c87ad","updated":"2016-09-14 17:58:09.000000000","message":"Done","commit_id":"cda7cb6c2686bec137cda50394ea9e66c5659003"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2e49c8234d3b7c841498b4c354e063ccc72bca61","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        # it is on a different server.  So lets strip that out and just get the"},{"line_number":148,"context_line":"        # values."},{"line_number":149,"context_line":"        vios_peer_slots \u003d slot_peer_dict.values()"},{"line_number":150,"context_line":"        mig_data[\u0027src_vios_peer_slots\u0027] \u003d ("},{"line_number":151,"context_line":"            jsonutils.dumps(vios_peer_slots))"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def pre_live_migration_on_destination(self, mig_data):"},{"line_number":154,"context_line":"        \"\"\"Perform pre live migration steps for the volume on the target host."}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_106a37ed","line":151,"range":{"start_line":150,"start_character":0,"end_line":151,"end_character":45},"updated":"2016-09-13 13:49:46.000000000","message":"Why is this split onto two lines?","commit_id":"cda7cb6c2686bec137cda50394ea9e66c5659003"},{"author":{"_account_id":13002,"name":"Shyama","email":"shyvenug@in.ibm.com","username":"shyama"},"change_message_id":"07933c89b19e0ffe1f053438953defa3612a31cf","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        # it is on a different server.  So lets strip that out and just get the"},{"line_number":148,"context_line":"        # values."},{"line_number":149,"context_line":"        vios_peer_slots \u003d slot_peer_dict.values()"},{"line_number":150,"context_line":"        mig_data[\u0027src_vios_peer_slots\u0027] \u003d ("},{"line_number":151,"context_line":"            jsonutils.dumps(vios_peer_slots))"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def pre_live_migration_on_destination(self, mig_data):"},{"line_number":154,"context_line":"        \"\"\"Perform pre live migration steps for the volume on the target host."}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_80690fc1","line":151,"range":{"start_line":150,"start_character":0,"end_line":151,"end_character":45},"in_reply_to":"9a89bdaa_106a37ed","updated":"2016-09-14 17:58:09.000000000","message":"Done","commit_id":"cda7cb6c2686bec137cda50394ea9e66c5659003"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2e49c8234d3b7c841498b4c354e063ccc72bca61","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def _pre_live_migration_on_dest_legacy(self, vios_wraps, mig_data):"},{"line_number":197,"context_line":"        # Used in case the source server is running an old nova-compute (ex."},{"line_number":198,"context_line":"        # Mitaka).  To be removed in Ocata or P."},{"line_number":199,"context_line":"        #"},{"line_number":200,"context_line":"        # Need to first derive the port mappings that can be passed back"},{"line_number":201,"context_line":"        # to the source system for the live migration call.  This tells"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a89bdaa_2700e201","line":198,"range":{"start_line":198,"start_character":46,"end_line":198,"end_character":47},"updated":"2016-09-13 13:49:46.000000000","message":"This is called \"Pike\".","commit_id":"cda7cb6c2686bec137cda50394ea9e66c5659003"},{"author":{"_account_id":13002,"name":"Shyama","email":"shyvenug@in.ibm.com","username":"shyama"},"change_message_id":"07933c89b19e0ffe1f053438953defa3612a31cf","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def _pre_live_migration_on_dest_legacy(self, vios_wraps, mig_data):"},{"line_number":197,"context_line":"        # Used in case the source server is running an old nova-compute (ex."},{"line_number":198,"context_line":"        # Mitaka).  To be removed in Ocata or P."},{"line_number":199,"context_line":"        #"},{"line_number":200,"context_line":"        # Need to first derive the port mappings that can be passed back"},{"line_number":201,"context_line":"        # to the source system for the live migration call.  This tells"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a8ec9b2_607243af","line":198,"range":{"start_line":198,"start_character":46,"end_line":198,"end_character":47},"in_reply_to":"9a89bdaa_2700e201","updated":"2016-09-14 17:58:09.000000000","message":"Done","commit_id":"cda7cb6c2686bec137cda50394ea9e66c5659003"}]}
