)]}'
{"cinder/exception.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"667d8ebc37618d98c45b30bc874e47b0773a3823","unresolved":false,"context_lines":[{"line_number":1099,"context_line":""},{"line_number":1100,"context_line":""},{"line_number":1101,"context_line":"# Hitachi VSP Driver"},{"line_number":1102,"context_line":"class VSPError(CinderException):"},{"line_number":1103,"context_line":"    message \u003d _(\"VSP error occurs.\")"},{"line_number":1104,"context_line":""},{"line_number":1105,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_62949142","line":1102,"updated":"2016-11-02 20:10:26.000000000","message":"Please inherit from VolumeDriverException rather than CinderException here.","commit_id":"9b573ab86dccb612c4a3b980ff8138e4b5055475"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"1a9aef01ed65d833fe79bb8c2f19efb72dd6b10d","unresolved":false,"context_lines":[{"line_number":1099,"context_line":""},{"line_number":1100,"context_line":""},{"line_number":1101,"context_line":"# Hitachi VSP Driver"},{"line_number":1102,"context_line":"class VSPError(CinderException):"},{"line_number":1103,"context_line":"    message \u003d _(\"VSP error occurs.\")"},{"line_number":1104,"context_line":""},{"line_number":1105,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ba5da102_53958130","line":1102,"in_reply_to":"ba5da102_62949142","updated":"2016-11-03 12:38:36.000000000","message":"Done","commit_id":"9b573ab86dccb612c4a3b980ff8138e4b5055475"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"ce9b6b6c960fee997d10c0b5e9c5a32c3623eb4a","unresolved":false,"context_lines":[{"line_number":1104,"context_line":""},{"line_number":1105,"context_line":""},{"line_number":1106,"context_line":"class VSPBusy(VSPError):"},{"line_number":1107,"context_line":"    message \u003d \"Device or resource is busy.\""},{"line_number":1108,"context_line":""},{"line_number":1109,"context_line":""},{"line_number":1110,"context_line":"class VSPVolumeIsBusy(VolumeIsBusy):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a629dbe_ab766503","line":1107,"updated":"2016-11-11 14:22:23.000000000","message":"We should translate all exception messages.","commit_id":"f08ff5fa7195cebe28fc518e3f84a39cbc404a50"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"44b0b063e48238a51cd095e37f38f136cd1c5389","unresolved":false,"context_lines":[{"line_number":1100,"context_line":""},{"line_number":1101,"context_line":"# Hitachi VSP Driver"},{"line_number":1102,"context_line":"class VSPError(VolumeDriverException):"},{"line_number":1103,"context_line":"    message \u003d _(\"VSP error occurs.\")"},{"line_number":1104,"context_line":""},{"line_number":1105,"context_line":""},{"line_number":1106,"context_line":"class VSPBusy(VSPError):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_ba128555","line":1103,"range":{"start_line":1103,"start_character":27,"end_line":1103,"end_character":33},"updated":"2016-11-25 16:32:45.000000000","message":"\"occurred\" would probably be a better form.","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"8e9f3b919631ee375ffdcc68f448d7d900d6cfba","unresolved":false,"context_lines":[{"line_number":1100,"context_line":""},{"line_number":1101,"context_line":"# Hitachi VSP Driver"},{"line_number":1102,"context_line":"class VSPError(VolumeDriverException):"},{"line_number":1103,"context_line":"    message \u003d _(\"VSP error occurs.\")"},{"line_number":1104,"context_line":""},{"line_number":1105,"context_line":""},{"line_number":1106,"context_line":"class VSPBusy(VSPError):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_c2bc4ede","line":1103,"range":{"start_line":1103,"start_character":27,"end_line":1103,"end_character":33},"in_reply_to":"5a74a57a_ba128555","updated":"2016-11-29 12:33:34.000000000","message":"Done","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"44b0b063e48238a51cd095e37f38f136cd1c5389","unresolved":false,"context_lines":[{"line_number":1111,"context_line":"    message \u003d _(\"Volume %(volume_name)s is busy.\")"},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":""},{"line_number":1114,"context_line":"class VSPSnapshotIsBusy(SnapshotIsBusy):"},{"line_number":1115,"context_line":"    message \u003d _(\"Snapshot %(snapshot_name)s is busy.\")"},{"line_number":1116,"context_line":""},{"line_number":1117,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_7aa8eddb","line":1114,"updated":"2016-11-25 16:32:45.000000000","message":"Is there a reason the common VolumeIsBusy and SnapshotIsBusy exceptions can\u0027t be used?","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"8e9f3b919631ee375ffdcc68f448d7d900d6cfba","unresolved":false,"context_lines":[{"line_number":1111,"context_line":"    message \u003d _(\"Volume %(volume_name)s is busy.\")"},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":""},{"line_number":1114,"context_line":"class VSPSnapshotIsBusy(SnapshotIsBusy):"},{"line_number":1115,"context_line":"    message \u003d _(\"Snapshot %(snapshot_name)s is busy.\")"},{"line_number":1116,"context_line":""},{"line_number":1117,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_02aac684","line":1114,"in_reply_to":"5a74a57a_7aa8eddb","updated":"2016-11-29 12:33:34.000000000","message":"We used VSPVolumeIsBusy for distinguishing between driver error and standard error. Removed VSPVolumeIsBusy and VSPSnapshotIsBusy.","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"}],"cinder/tests/unit/volume/drivers/hitachi/test_hitachi_vsp_horcm_fc.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"58347344ebb58350ee0065b95354799e6ba434dd","unresolved":false,"context_lines":[{"line_number":46,"context_line":"# Configuration parameter values"},{"line_number":47,"context_line":"CONFIG_MAP \u003d {"},{"line_number":48,"context_line":"    \u0027serial\u0027: \u0027492015\u0027,"},{"line_number":49,"context_line":"    \u0027my_ip\u0027: cfg.CONF.my_ip,"},{"line_number":50,"context_line":"}"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"# RAID Manager instance numbers"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_d8bb57c2","line":49,"updated":"2016-11-03 21:11:43.000000000","message":"my_ip should be hard-coded for unit tests rather than gotten from the host.\n\nYou should be able to skip using cfg.CONF here.","commit_id":"a7d3ce0532603d6b618e96657ee77948eb3395e1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"44b0b063e48238a51cd095e37f38f136cd1c5389","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"# cmd: raidcom get copy_grp"},{"line_number":72,"context_line":"GET_COPY_GRP_RESULT \u003d ("},{"line_number":73,"context_line":"    \"COPY_GROUP        LDEV_GROUP        MU# JID#  Serial#\\n\" +"},{"line_number":74,"context_line":"    \"%(cg0)s           %(cg0)sP            0    -  %(serial)s\\n\" +"},{"line_number":75,"context_line":"    \"%(cg1)s           %(cg1)sP            0    -  %(serial)s\\n\" +"},{"line_number":76,"context_line":"    \"%(cg1)s           %(cg1)sS            -    -  %(serial)s\\n\""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_3af035fe","line":73,"range":{"start_line":73,"start_character":61,"end_line":73,"end_character":63},"updated":"2016-11-25 16:32:45.000000000","message":"These + are not really needed, but not really harming anything either.","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"8e9f3b919631ee375ffdcc68f448d7d900d6cfba","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"# cmd: raidcom get copy_grp"},{"line_number":72,"context_line":"GET_COPY_GRP_RESULT \u003d ("},{"line_number":73,"context_line":"    \"COPY_GROUP        LDEV_GROUP        MU# JID#  Serial#\\n\" +"},{"line_number":74,"context_line":"    \"%(cg0)s           %(cg0)sP            0    -  %(serial)s\\n\" +"},{"line_number":75,"context_line":"    \"%(cg1)s           %(cg1)sP            0    -  %(serial)s\\n\" +"},{"line_number":76,"context_line":"    \"%(cg1)s           %(cg1)sS            -    -  %(serial)s\\n\""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_22842209","line":73,"range":{"start_line":73,"start_character":61,"end_line":73,"end_character":63},"in_reply_to":"5a74a57a_3af035fe","updated":"2016-11-29 12:33:34.000000000","message":"Done","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"}],"cinder/volume/drivers/hitachi/vsp_common.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"58347344ebb58350ee0065b95354799e6ba434dd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2014, 2016, Hitachi, Ltd.\r"},{"line_number":2,"context_line":"#\r"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may\r"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_9848ffb4","line":1,"updated":"2016-11-03 21:11:43.000000000","message":"This file is formatted with dos-style endlines, please remove these.","commit_id":"a7d3ce0532603d6b618e96657ee77948eb3395e1"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1d76eabcf8e4c91a15f3ef8ec38ab9a839c03631","unresolved":false,"context_lines":[{"line_number":45,"context_line":"common_opts \u003d ["},{"line_number":46,"context_line":"    cfg.StrOpt("},{"line_number":47,"context_line":"        \u0027vsp_storage_id\u0027,"},{"line_number":48,"context_line":"        help\u003d\u0027ID of storage system\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt("},{"line_number":50,"context_line":"        \u0027vsp_pool\u0027,"},{"line_number":51,"context_line":"        help\u003d\u0027Pool of storage system\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_19e5a736","line":48,"range":{"start_line":48,"start_character":34,"end_line":48,"end_character":37},"updated":"2016-11-07 22:05:00.000000000","message":"Nit, I prefer to end these with \u0027.\u0027.","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"ff267c1ea7e1bf7c26377ab82b3e3e7f122b1780","unresolved":false,"context_lines":[{"line_number":45,"context_line":"common_opts \u003d ["},{"line_number":46,"context_line":"    cfg.StrOpt("},{"line_number":47,"context_line":"        \u0027vsp_storage_id\u0027,"},{"line_number":48,"context_line":"        help\u003d\u0027ID of storage system\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt("},{"line_number":50,"context_line":"        \u0027vsp_pool\u0027,"},{"line_number":51,"context_line":"        help\u003d\u0027Pool of storage system\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_4a1e0360","line":48,"range":{"start_line":48,"start_character":34,"end_line":48,"end_character":37},"in_reply_to":"9a629dbe_19e5a736","updated":"2016-11-09 17:19:39.000000000","message":"Done","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1d76eabcf8e4c91a15f3ef8ec38ab9a839c03631","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        \u0027vsp_copy_check_interval\u0027,"},{"line_number":70,"context_line":"        type\u003dtypes.Integer(min\u003d1, max\u003d600),"},{"line_number":71,"context_line":"        default\u003d3,"},{"line_number":72,"context_line":"        help\u003d\u0027Interval to check copy\u0027),"},{"line_number":73,"context_line":"    cfg.Opt("},{"line_number":74,"context_line":"        \u0027vsp_async_copy_check_interval\u0027,"},{"line_number":75,"context_line":"        type\u003dtypes.Integer(min\u003d1, max\u003d600),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_f990f397","line":72,"range":{"start_line":72,"start_character":36,"end_line":72,"end_character":39},"updated":"2016-11-07 22:05:00.000000000","message":"What unit is this in?  Should document here.","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"ff267c1ea7e1bf7c26377ab82b3e3e7f122b1780","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        \u0027vsp_copy_check_interval\u0027,"},{"line_number":70,"context_line":"        type\u003dtypes.Integer(min\u003d1, max\u003d600),"},{"line_number":71,"context_line":"        default\u003d3,"},{"line_number":72,"context_line":"        help\u003d\u0027Interval to check copy\u0027),"},{"line_number":73,"context_line":"    cfg.Opt("},{"line_number":74,"context_line":"        \u0027vsp_async_copy_check_interval\u0027,"},{"line_number":75,"context_line":"        type\u003dtypes.Integer(min\u003d1, max\u003d600),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_6a23c7a7","line":72,"range":{"start_line":72,"start_character":36,"end_line":72,"end_character":39},"in_reply_to":"9a629dbe_f990f397","updated":"2016-11-09 17:19:39.000000000","message":"Done","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1d76eabcf8e4c91a15f3ef8ec38ab9a839c03631","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        \u0027vsp_async_copy_check_interval\u0027,"},{"line_number":75,"context_line":"        type\u003dtypes.Integer(min\u003d1, max\u003d600),"},{"line_number":76,"context_line":"        default\u003d10,"},{"line_number":77,"context_line":"        help\u003d\u0027Interval to check copy asynchronously\u0027),"},{"line_number":78,"context_line":"    cfg.ListOpt("},{"line_number":79,"context_line":"        \u0027vsp_target_ports\u0027,"},{"line_number":80,"context_line":"        help\u003d\u0027Target port names for host group\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_59ee3f23","line":77,"range":{"start_line":77,"start_character":51,"end_line":77,"end_character":54},"updated":"2016-11-07 22:05:00.000000000","message":"Same question here.","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"ff267c1ea7e1bf7c26377ab82b3e3e7f122b1780","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        \u0027vsp_async_copy_check_interval\u0027,"},{"line_number":75,"context_line":"        type\u003dtypes.Integer(min\u003d1, max\u003d600),"},{"line_number":76,"context_line":"        default\u003d10,"},{"line_number":77,"context_line":"        help\u003d\u0027Interval to check copy asynchronously\u0027),"},{"line_number":78,"context_line":"    cfg.ListOpt("},{"line_number":79,"context_line":"        \u0027vsp_target_ports\u0027,"},{"line_number":80,"context_line":"        help\u003d\u0027Target port names for host group\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_aa395fd9","line":77,"range":{"start_line":77,"start_character":51,"end_line":77,"end_character":54},"in_reply_to":"9a629dbe_59ee3f23","updated":"2016-11-09 17:19:39.000000000","message":"Done","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1d76eabcf8e4c91a15f3ef8ec38ab9a839c03631","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    cfg.BoolOpt("},{"line_number":82,"context_line":"        \u0027vsp_group_request\u0027,"},{"line_number":83,"context_line":"        default\u003dFalse,"},{"line_number":84,"context_line":"        help\u003d\u0027Request for creating host group\u0027),"},{"line_number":85,"context_line":"]"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"_REQUIRED_COMMON_OPTS \u003d ["}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_d9da4f78","line":84,"updated":"2016-11-07 22:05:00.000000000","message":"Can you explain what this causes to happen?","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"ff267c1ea7e1bf7c26377ab82b3e3e7f122b1780","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    cfg.BoolOpt("},{"line_number":82,"context_line":"        \u0027vsp_group_request\u0027,"},{"line_number":83,"context_line":"        default\u003dFalse,"},{"line_number":84,"context_line":"        help\u003d\u0027Request for creating host group\u0027),"},{"line_number":85,"context_line":"]"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"_REQUIRED_COMMON_OPTS \u003d ["}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_ca8e9378","line":84,"in_reply_to":"9a629dbe_d9da4f78","updated":"2016-11-09 17:19:39.000000000","message":"Done","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1d76eabcf8e4c91a15f3ef8ec38ab9a839c03631","unresolved":false,"context_lines":[{"line_number":372,"context_line":"            self.delete_pair_based_on_svol("},{"line_number":373,"context_line":"                pair_info[\u0027pvol\u0027], pair_info[\u0027svol_info\u0027][0])"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"    def get_pair_info(self, ldev):"},{"line_number":376,"context_line":"        \"\"\"Return volume pair info(LDEV number, pair status and pair type).\"\"\""},{"line_number":377,"context_line":"        raise NotImplementedError()"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    def delete_pair_based_on_pvol(self, pair_info, all_split):"},{"line_number":380,"context_line":"        \"\"\"Disconnect all volume pairs to which the specified P-VOL belongs.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_b95e7b43","line":377,"range":{"start_line":375,"start_character":3,"end_line":377,"end_character":35},"updated":"2016-11-07 22:05:00.000000000","message":"Why do you have all these methods that are not implemented in here?","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"ff267c1ea7e1bf7c26377ab82b3e3e7f122b1780","unresolved":false,"context_lines":[{"line_number":372,"context_line":"            self.delete_pair_based_on_svol("},{"line_number":373,"context_line":"                pair_info[\u0027pvol\u0027], pair_info[\u0027svol_info\u0027][0])"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"    def get_pair_info(self, ldev):"},{"line_number":376,"context_line":"        \"\"\"Return volume pair info(LDEV number, pair status and pair type).\"\"\""},{"line_number":377,"context_line":"        raise NotImplementedError()"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    def delete_pair_based_on_pvol(self, pair_info, all_split):"},{"line_number":380,"context_line":"        \"\"\"Disconnect all volume pairs to which the specified P-VOL belongs.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_ca6a1381","line":377,"range":{"start_line":375,"start_character":3,"end_line":377,"end_character":35},"in_reply_to":"9a629dbe_b95e7b43","updated":"2016-11-09 17:19:39.000000000","message":"We use it in VSPHORCM class and we maybe add new interface in the future. For  scalability, to indicate that these methods must be implemented in subclasses.","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1d76eabcf8e4c91a15f3ef8ec38ab9a839c03631","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        self.ctxt \u003d context"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"        self.check_param()"},{"line_number":582,"context_line":"        self.config_lock()"},{"line_number":583,"context_line":"        self.connect_storage()"},{"line_number":584,"context_line":"        self.init_cinder_hosts()"},{"line_number":585,"context_line":"        self.output_param_to_log()"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_1c8e7578","line":582,"range":{"start_line":582,"start_character":8,"end_line":582,"end_character":26},"updated":"2016-11-07 22:05:00.000000000","message":"How can you have this in do_setup when it is not implemented below?","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"ff267c1ea7e1bf7c26377ab82b3e3e7f122b1780","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        self.ctxt \u003d context"},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"        self.check_param()"},{"line_number":582,"context_line":"        self.config_lock()"},{"line_number":583,"context_line":"        self.connect_storage()"},{"line_number":584,"context_line":"        self.init_cinder_hosts()"},{"line_number":585,"context_line":"        self.output_param_to_log()"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_6a290737","line":582,"range":{"start_line":582,"start_character":8,"end_line":582,"end_character":26},"in_reply_to":"9a629dbe_1c8e7578","updated":"2016-11-09 17:19:39.000000000","message":"It is implemented in the subclass(i.e. VSPHORCM).","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1d76eabcf8e4c91a15f3ef8ec38ab9a839c03631","unresolved":false,"context_lines":[{"line_number":624,"context_line":"        if self.storage_info[\u0027pool_id\u0027] is None:"},{"line_number":625,"context_line":"            msg \u003d utils.output_log(640, pool\u003dself.conf.vsp_pool)"},{"line_number":626,"context_line":"            raise exception.VSPError(data\u003dmsg)"},{"line_number":627,"context_line":"        LOG.debug(\u0027Setting pool id: %s\u0027, self.storage_info[\u0027pool_id\u0027])"},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"    def check_ports_info(self):"},{"line_number":630,"context_line":"        \"\"\"Check if available storage ports exist.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_1ce59536","line":627,"range":{"start_line":627,"start_character":7,"end_line":627,"end_character":17},"updated":"2016-11-07 22:05:00.000000000","message":"I think it would be more useful to have some of these setup messages as LOG.info to give the user some basic info to start with.","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"ff267c1ea7e1bf7c26377ab82b3e3e7f122b1780","unresolved":false,"context_lines":[{"line_number":624,"context_line":"        if self.storage_info[\u0027pool_id\u0027] is None:"},{"line_number":625,"context_line":"            msg \u003d utils.output_log(640, pool\u003dself.conf.vsp_pool)"},{"line_number":626,"context_line":"            raise exception.VSPError(data\u003dmsg)"},{"line_number":627,"context_line":"        LOG.debug(\u0027Setting pool id: %s\u0027, self.storage_info[\u0027pool_id\u0027])"},{"line_number":628,"context_line":""},{"line_number":629,"context_line":"    def check_ports_info(self):"},{"line_number":630,"context_line":"        \"\"\"Check if available storage ports exist.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_cac69367","line":627,"range":{"start_line":627,"start_character":7,"end_line":627,"end_character":17},"in_reply_to":"9a629dbe_1ce59536","updated":"2016-11-09 17:19:39.000000000","message":"Changed the log level from debug to info.","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1d76eabcf8e4c91a15f3ef8ec38ab9a839c03631","unresolved":false,"context_lines":[{"line_number":632,"context_line":"                not self.storage_info[\u0027ports\u0027]):"},{"line_number":633,"context_line":"            msg \u003d utils.output_log(650, resource\u003d\"Target ports\")"},{"line_number":634,"context_line":"            raise exception.VSPError(data\u003dmsg)"},{"line_number":635,"context_line":"        LOG.debug("},{"line_number":636,"context_line":"            \u0027Setting target_ports: %s\u0027, self.storage_info[\u0027ports\u0027])"},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"    def get_pool_id(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_1cbcb504","line":635,"range":{"start_line":635,"start_character":8,"end_line":635,"end_character":17},"updated":"2016-11-07 22:05:00.000000000","message":"Same here.","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"ff267c1ea7e1bf7c26377ab82b3e3e7f122b1780","unresolved":false,"context_lines":[{"line_number":632,"context_line":"                not self.storage_info[\u0027ports\u0027]):"},{"line_number":633,"context_line":"            msg \u003d utils.output_log(650, resource\u003d\"Target ports\")"},{"line_number":634,"context_line":"            raise exception.VSPError(data\u003dmsg)"},{"line_number":635,"context_line":"        LOG.debug("},{"line_number":636,"context_line":"            \u0027Setting target_ports: %s\u0027, self.storage_info[\u0027ports\u0027])"},{"line_number":637,"context_line":""},{"line_number":638,"context_line":"    def get_pool_id(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_0aa32bb3","line":635,"range":{"start_line":635,"start_character":8,"end_line":635,"end_character":17},"in_reply_to":"9a629dbe_1cbcb504","updated":"2016-11-09 17:19:39.000000000","message":"Done","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"ce9b6b6c960fee997d10c0b5e9c5a32c3623eb4a","unresolved":false,"context_lines":[{"line_number":107,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"def _str2int(num):"},{"line_number":111,"context_line":"    \"\"\"Convert a string into an integer.\"\"\""},{"line_number":112,"context_line":"    if not num:"},{"line_number":113,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a629dbe_4e7eb76a","line":110,"updated":"2016-11-11 14:22:23.000000000","message":"Can we use as_int in cinder/utils.py?","commit_id":"f08ff5fa7195cebe28fc518e3f84a39cbc404a50"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9743fc775e62ab40ea3138f67ceb61f6414ca27f","unresolved":false,"context_lines":[{"line_number":506,"context_line":"        data[\u0027total_capacity_gb\u0027] \u003d total_gb"},{"line_number":507,"context_line":"        data[\u0027free_capacity_gb\u0027] \u003d free_gb"},{"line_number":508,"context_line":"        data[\u0027allocated_capacity_gb\u0027] \u003d 0 if total_gb \u003d\u003d \u0027infinite\u0027 else ("},{"line_number":509,"context_line":"            total_gb - free_gb)"},{"line_number":510,"context_line":"        data[\u0027reserved_percentage\u0027] \u003d self.conf.safe_get(\u0027reserved_percentage\u0027)"},{"line_number":511,"context_line":"        data[\u0027QoS_support\u0027] \u003d False"},{"line_number":512,"context_line":"        LOG.debug(\"Updating volume status. (%s)\", data)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a74a57a_8a4a2d82","line":509,"updated":"2016-11-23 20:29:15.000000000","message":"allocated_capacity will be updated by the scheduler.  The driver should not be reporting it.","commit_id":"bfe3350cde1f5a0c28bd65486edf0f20760379fe"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"019bb262c25aab8ab655f243ad2b7b1cf9201dc9","unresolved":false,"context_lines":[{"line_number":506,"context_line":"        data[\u0027total_capacity_gb\u0027] \u003d total_gb"},{"line_number":507,"context_line":"        data[\u0027free_capacity_gb\u0027] \u003d free_gb"},{"line_number":508,"context_line":"        data[\u0027allocated_capacity_gb\u0027] \u003d 0 if total_gb \u003d\u003d \u0027infinite\u0027 else ("},{"line_number":509,"context_line":"            total_gb - free_gb)"},{"line_number":510,"context_line":"        data[\u0027reserved_percentage\u0027] \u003d self.conf.safe_get(\u0027reserved_percentage\u0027)"},{"line_number":511,"context_line":"        data[\u0027QoS_support\u0027] \u003d False"},{"line_number":512,"context_line":"        LOG.debug(\"Updating volume status. (%s)\", data)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a74a57a_e867dbb4","line":509,"in_reply_to":"5a74a57a_8a4a2d82","updated":"2016-11-25 14:04:47.000000000","message":"Done","commit_id":"bfe3350cde1f5a0c28bd65486edf0f20760379fe"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":68,"context_line":"             \u0027Image.\u0027),"},{"line_number":69,"context_line":"    cfg.Opt("},{"line_number":70,"context_line":"        \u0027vsp_copy_speed\u0027,"},{"line_number":71,"context_line":"        type\u003dtypes.Integer(min\u003d1, max\u003d15),"},{"line_number":72,"context_line":"        default\u003d3,"},{"line_number":73,"context_line":"        help\u003d\u0027Speed at which data is copied by ShadowImage. 1 or 2 indicates \u0027"},{"line_number":74,"context_line":"             \u0027low speed, 3 indicates middle speed, and a value between 4 and \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_e280338e","line":71,"range":{"start_line":71,"start_character":13,"end_line":71,"end_character":42},"updated":"2016-11-30 13:42:02.000000000","message":"You have min-max directly in IntOpt [1].\n\n[1] http://docs.openstack.org/developer/oslo.config/opts.html#oslo_config.cfg.IntOpt","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":68,"context_line":"             \u0027Image.\u0027),"},{"line_number":69,"context_line":"    cfg.Opt("},{"line_number":70,"context_line":"        \u0027vsp_copy_speed\u0027,"},{"line_number":71,"context_line":"        type\u003dtypes.Integer(min\u003d1, max\u003d15),"},{"line_number":72,"context_line":"        default\u003d3,"},{"line_number":73,"context_line":"        help\u003d\u0027Speed at which data is copied by ShadowImage. 1 or 2 indicates \u0027"},{"line_number":74,"context_line":"             \u0027low speed, 3 indicates middle speed, and a value between 4 and \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_4ec00d7d","line":71,"range":{"start_line":71,"start_character":13,"end_line":71,"end_character":42},"in_reply_to":"5a74a57a_e280338e","updated":"2016-12-02 13:38:55.000000000","message":"Done","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":75,"context_line":"             \u002715 indicates high speed.\u0027),"},{"line_number":76,"context_line":"    cfg.Opt("},{"line_number":77,"context_line":"        \u0027vsp_copy_check_interval\u0027,"},{"line_number":78,"context_line":"        type\u003dtypes.Integer(min\u003d1, max\u003d600),"},{"line_number":79,"context_line":"        default\u003d3,"},{"line_number":80,"context_line":"        help\u003d\u0027Interval in seconds at which volume pair synchronization status \u0027"},{"line_number":81,"context_line":"             \u0027is checked when volume pairs are created.\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_22494b8f","line":78,"range":{"start_line":78,"start_character":13,"end_line":78,"end_character":42},"updated":"2016-11-30 13:42:02.000000000","message":"ditto","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":75,"context_line":"             \u002715 indicates high speed.\u0027),"},{"line_number":76,"context_line":"    cfg.Opt("},{"line_number":77,"context_line":"        \u0027vsp_copy_check_interval\u0027,"},{"line_number":78,"context_line":"        type\u003dtypes.Integer(min\u003d1, max\u003d600),"},{"line_number":79,"context_line":"        default\u003d3,"},{"line_number":80,"context_line":"        help\u003d\u0027Interval in seconds at which volume pair synchronization status \u0027"},{"line_number":81,"context_line":"             \u0027is checked when volume pairs are created.\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_ee41d90c","line":78,"range":{"start_line":78,"start_character":13,"end_line":78,"end_character":42},"in_reply_to":"5a74a57a_22494b8f","updated":"2016-12-02 13:38:55.000000000","message":"Done","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":81,"context_line":"             \u0027is checked when volume pairs are created.\u0027),"},{"line_number":82,"context_line":"    cfg.Opt("},{"line_number":83,"context_line":"        \u0027vsp_async_copy_check_interval\u0027,"},{"line_number":84,"context_line":"        type\u003dtypes.Integer(min\u003d1, max\u003d600),"},{"line_number":85,"context_line":"        default\u003d10,"},{"line_number":86,"context_line":"        help\u003d\u0027Interval in seconds at which volume pair synchronization status \u0027"},{"line_number":87,"context_line":"             \u0027is checked when volume pairs are deleted.\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_424e4797","line":84,"range":{"start_line":84,"start_character":13,"end_line":84,"end_character":42},"updated":"2016-11-30 13:42:02.000000000","message":"ditto","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":81,"context_line":"             \u0027is checked when volume pairs are created.\u0027),"},{"line_number":82,"context_line":"    cfg.Opt("},{"line_number":83,"context_line":"        \u0027vsp_async_copy_check_interval\u0027,"},{"line_number":84,"context_line":"        type\u003dtypes.Integer(min\u003d1, max\u003d600),"},{"line_number":85,"context_line":"        default\u003d10,"},{"line_number":86,"context_line":"        help\u003d\u0027Interval in seconds at which volume pair synchronization status \u0027"},{"line_number":87,"context_line":"             \u0027is checked when volume pairs are deleted.\u0027),"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_4e472d1d","line":84,"range":{"start_line":84,"start_character":13,"end_line":84,"end_character":42},"in_reply_to":"5a74a57a_424e4797","updated":"2016-12-02 13:38:55.000000000","message":"Done","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        return None"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"class VSPCommon(object):"},{"line_number":126,"context_line":"    \"\"\"Common class for Hitachi VSP Driver."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    Version history:"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_85b869e7","line":125,"range":{"start_line":125,"start_character":6,"end_line":125,"end_character":15},"updated":"2016-11-30 13:42:02.000000000","message":"Shouldn\u0027t this be an abstract class?","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        return None"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"class VSPCommon(object):"},{"line_number":126,"context_line":"    \"\"\"Common class for Hitachi VSP Driver."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    Version history:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_2ee831e2","line":125,"range":{"start_line":125,"start_character":6,"end_line":125,"end_character":15},"in_reply_to":"5a74a57a_85b869e7","updated":"2016-12-02 13:38:55.000000000","message":"Changed the class to an abstract class and changed the methods with NotImplementedError to abstract classes.","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    def __init__(self, conf, driverinfo, **kwargs):"},{"line_number":137,"context_line":"        \"\"\"Initialize instance variables.\"\"\""},{"line_number":138,"context_line":"        self.conf \u003d conf"},{"line_number":139,"context_line":"        self.db \u003d kwargs.get(\u0027db\u0027)"},{"line_number":140,"context_line":"        self.ctxt \u003d None"},{"line_number":141,"context_line":"        self.lock \u003d {}"},{"line_number":142,"context_line":"        self.driver_info \u003d driverinfo"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_458c9135","line":139,"range":{"start_line":139,"start_character":18,"end_line":139,"end_character":34},"updated":"2016-11-30 13:42:02.000000000","message":"Why not simply make the method signature:\n\n def __init__(self, conf, driverinfo, db\u003dNone, **kwargs):\n\nand do:\n\n self.db \u003d db\n\n?","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    def __init__(self, conf, driverinfo, **kwargs):"},{"line_number":137,"context_line":"        \"\"\"Initialize instance variables.\"\"\""},{"line_number":138,"context_line":"        self.conf \u003d conf"},{"line_number":139,"context_line":"        self.db \u003d kwargs.get(\u0027db\u0027)"},{"line_number":140,"context_line":"        self.ctxt \u003d None"},{"line_number":141,"context_line":"        self.lock \u003d {}"},{"line_number":142,"context_line":"        self.driver_info \u003d driverinfo"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_0eb455cf","line":139,"range":{"start_line":139,"start_character":18,"end_line":139,"end_character":34},"in_reply_to":"5a74a57a_458c9135","updated":"2016-12-02 13:38:55.000000000","message":"Done","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            \u0027ldev_range\u0027: [],"},{"line_number":147,"context_line":"            \u0027ports\u0027: [],"},{"line_number":148,"context_line":"            \u0027wwns\u0027: {},"},{"line_number":149,"context_line":"            \u0027output_first\u0027: True"},{"line_number":150,"context_line":"        }"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        self._stats \u003d {}"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_65aa6d87","line":149,"updated":"2016-11-30 13:42:02.000000000","message":"According to hacking rules [1] you should add comma at the end.\n\n[1] http://docs.openstack.org/developer/hacking/#dictionaries-lists","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            \u0027ldev_range\u0027: [],"},{"line_number":147,"context_line":"            \u0027ports\u0027: [],"},{"line_number":148,"context_line":"            \u0027wwns\u0027: {},"},{"line_number":149,"context_line":"            \u0027output_first\u0027: True"},{"line_number":150,"context_line":"        }"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"        self._stats \u003d {}"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_ce07bd7f","line":149,"in_reply_to":"5a74a57a_65aa6d87","updated":"2016-12-02 13:38:55.000000000","message":"Done","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"14c5c6d6a0bbc0216375513601f6cb63dd644af1","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            ldev \u003d self.create_ldev(volume[\u0027size\u0027])"},{"line_number":190,"context_line":"        except exception.VSPError:"},{"line_number":191,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":192,"context_line":"                utils.output_log(636)"},{"line_number":193,"context_line":"        metadata \u003d utils.get_volume_metadata(volume)"},{"line_number":194,"context_line":"        return {"},{"line_number":195,"context_line":"            \u0027provider_location\u0027: six.text_type(ldev),"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_90f8857e","line":192,"updated":"2016-11-30 22:55:16.000000000","message":"I don\u0027t know about these output_log(random_number) calls.\n\nThese should really be an enum w/ names of errors so that someone can understand the code.  It\u0027s also just begging to run into format string problems.","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":16373,"name":"Kazumasa Nomura","email":"kazumasa.nomura.rx@hitachi.com","username":"knomura"},"change_message_id":"467bbda01d2037dcb92aed515650f13f32a85abb","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            ldev \u003d self.create_ldev(volume[\u0027size\u0027])"},{"line_number":190,"context_line":"        except exception.VSPError:"},{"line_number":191,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":192,"context_line":"                utils.output_log(636)"},{"line_number":193,"context_line":"        metadata \u003d utils.get_volume_metadata(volume)"},{"line_number":194,"context_line":"        return {"},{"line_number":195,"context_line":"            \u0027provider_location\u0027: six.text_type(ldev),"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_d7b4fe83","line":192,"in_reply_to":"3a71b18c_31b09043","updated":"2016-12-07 12:30:22.000000000","message":"Change message IDs from integer to Enum at the patch set 16.","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":189,"context_line":"            ldev \u003d self.create_ldev(volume[\u0027size\u0027])"},{"line_number":190,"context_line":"        except exception.VSPError:"},{"line_number":191,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":192,"context_line":"                utils.output_log(636)"},{"line_number":193,"context_line":"        metadata \u003d utils.get_volume_metadata(volume)"},{"line_number":194,"context_line":"        return {"},{"line_number":195,"context_line":"            \u0027provider_location\u0027: six.text_type(ldev),"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_31b09043","line":192,"in_reply_to":"5a74a57a_90f8857e","updated":"2016-12-02 13:38:55.000000000","message":"The driver have about one hundred messages, it takes long time to change the code. We are working on that one. Please considering continuing the reviews while we finish, ok?","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        metadata \u003d utils.get_volume_metadata(volume)"},{"line_number":194,"context_line":"        return {"},{"line_number":195,"context_line":"            \u0027provider_location\u0027: six.text_type(ldev),"},{"line_number":196,"context_line":"            \u0027metadata\u0027: dict("},{"line_number":197,"context_line":"                metadata, ldev\u003dldev, type\u003dutils.NORMAL_LDEV_TYPE),"},{"line_number":198,"context_line":"        }"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_45673125","line":196,"range":{"start_line":196,"start_character":24,"end_line":196,"end_character":28},"updated":"2016-11-30 13:42:02.000000000","message":"BTW - literal {} is more performant [1].\n\n[1] https://doughellmann.com/blog/2012/11/12/the-performance-impact-of-using-dict-instead-of-in-cpython-2-7-2/","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        metadata \u003d utils.get_volume_metadata(volume)"},{"line_number":194,"context_line":"        return {"},{"line_number":195,"context_line":"            \u0027provider_location\u0027: six.text_type(ldev),"},{"line_number":196,"context_line":"            \u0027metadata\u0027: dict("},{"line_number":197,"context_line":"                metadata, ldev\u003dldev, type\u003dutils.NORMAL_LDEV_TYPE),"},{"line_number":198,"context_line":"        }"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_a553a56b","line":196,"range":{"start_line":196,"start_character":13,"end_line":196,"end_character":21},"updated":"2016-11-30 13:42:02.000000000","message":"Shouldn\u0027t this go into admin_metadata that is non-modifiable by user?","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"d5d8ea5100122f911b73c3091d740d1381fd63d6","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        metadata \u003d utils.get_volume_metadata(volume)"},{"line_number":194,"context_line":"        return {"},{"line_number":195,"context_line":"            \u0027provider_location\u0027: six.text_type(ldev),"},{"line_number":196,"context_line":"            \u0027metadata\u0027: dict("},{"line_number":197,"context_line":"                metadata, ldev\u003dldev, type\u003dutils.NORMAL_LDEV_TYPE),"},{"line_number":198,"context_line":"        }"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_e9bd48d8","line":196,"range":{"start_line":196,"start_character":13,"end_line":196,"end_character":21},"in_reply_to":"3a71b18c_030d0637","updated":"2016-12-02 16:14:50.000000000","message":"I know what your concern is. But this data is not used to export/attach the volume, which could cause the security issue. The information for that is in the provider_location[1].\n[1] https://github.com/openstack/cinder/blob/074b1cd23d474ceb2c020aa26c09c50aec05477b/cinder/volume/drivers/hitachi/vsp_utils.py#L499-L499","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"90d7b7e4bd588afa57765036634f3b9b6bf76476","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        metadata \u003d utils.get_volume_metadata(volume)"},{"line_number":194,"context_line":"        return {"},{"line_number":195,"context_line":"            \u0027provider_location\u0027: six.text_type(ldev),"},{"line_number":196,"context_line":"            \u0027metadata\u0027: dict("},{"line_number":197,"context_line":"                metadata, ldev\u003dldev, type\u003dutils.NORMAL_LDEV_TYPE),"},{"line_number":198,"context_line":"        }"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_030d0637","line":196,"range":{"start_line":196,"start_character":13,"end_line":196,"end_character":21},"in_reply_to":"3a71b18c_6ee6a9b5","updated":"2016-12-02 14:33:57.000000000","message":"Waaaait, isn\u0027t unmanage/manage an admin action? What if cloud user modifies that data in a dangerous way? Think public cloud use case here.","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        metadata \u003d utils.get_volume_metadata(volume)"},{"line_number":194,"context_line":"        return {"},{"line_number":195,"context_line":"            \u0027provider_location\u0027: six.text_type(ldev),"},{"line_number":196,"context_line":"            \u0027metadata\u0027: dict("},{"line_number":197,"context_line":"                metadata, ldev\u003dldev, type\u003dutils.NORMAL_LDEV_TYPE),"},{"line_number":198,"context_line":"        }"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_2e4031a5","line":196,"range":{"start_line":196,"start_character":24,"end_line":196,"end_character":28},"in_reply_to":"5a74a57a_45673125","updated":"2016-12-02 13:38:55.000000000","message":"Done","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        metadata \u003d utils.get_volume_metadata(volume)"},{"line_number":194,"context_line":"        return {"},{"line_number":195,"context_line":"            \u0027provider_location\u0027: six.text_type(ldev),"},{"line_number":196,"context_line":"            \u0027metadata\u0027: dict("},{"line_number":197,"context_line":"                metadata, ldev\u003dldev, type\u003dutils.NORMAL_LDEV_TYPE),"},{"line_number":198,"context_line":"        }"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_6ee6a9b5","line":196,"range":{"start_line":196,"start_character":13,"end_line":196,"end_character":21},"in_reply_to":"5a74a57a_a553a56b","updated":"2016-12-02 13:38:55.000000000","message":"No. Our user needs to know the info when they unmanage the volume or when they directly manage the storage. Therefore, the info needs to be visible to the user by \"cinder show\" or \"cinder metadata-show\". admin_metadata cannot be viewed by these commands, so the info cannot be transplanted to admin_metadata.\nFurthermore, this same info is stored in the provider_location, and from there is used to attach to hosts. So, even if the user can modify this data, it will have no harm to the system.","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            msg \u003d utils.output_log(621, copy_method\u003dutils.THIN,"},{"line_number":233,"context_line":"                                   type\u003d\u0027snapshot\u0027, volume_id\u003dvolume[\u0027id\u0027])"},{"line_number":234,"context_line":"            raise exception.VSPError(data\u003dmsg)"},{"line_number":235,"context_line":"        sync \u003d True if size \u003e snapshot[\u0027volume_size\u0027] else False"},{"line_number":236,"context_line":"        new_ldev, ldev_type \u003d self._copy_ldev("},{"line_number":237,"context_line":"            ldev, snapshot[\u0027volume_size\u0027], metadata, sync)"},{"line_number":238,"context_line":"        if size \u003e snapshot[\u0027volume_size\u0027]:"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_85a3094f","line":235,"range":{"start_line":235,"start_character":0,"end_line":235,"end_character":64},"updated":"2016-11-30 13:42:02.000000000","message":"sync \u003d size \u003e snapshot[\u0027volume_size\u0027]","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            msg \u003d utils.output_log(621, copy_method\u003dutils.THIN,"},{"line_number":233,"context_line":"                                   type\u003d\u0027snapshot\u0027, volume_id\u003dvolume[\u0027id\u0027])"},{"line_number":234,"context_line":"            raise exception.VSPError(data\u003dmsg)"},{"line_number":235,"context_line":"        sync \u003d True if size \u003e snapshot[\u0027volume_size\u0027] else False"},{"line_number":236,"context_line":"        new_ldev, ldev_type \u003d self._copy_ldev("},{"line_number":237,"context_line":"            ldev, snapshot[\u0027volume_size\u0027], metadata, sync)"},{"line_number":238,"context_line":"        if size \u003e snapshot[\u0027volume_size\u0027]:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_aeee0189","line":235,"range":{"start_line":235,"start_character":0,"end_line":235,"end_character":64},"in_reply_to":"5a74a57a_85a3094f","updated":"2016-12-02 13:38:55.000000000","message":"Done","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        sync \u003d True if size \u003e snapshot[\u0027volume_size\u0027] else False"},{"line_number":236,"context_line":"        new_ldev, ldev_type \u003d self._copy_ldev("},{"line_number":237,"context_line":"            ldev, snapshot[\u0027volume_size\u0027], metadata, sync)"},{"line_number":238,"context_line":"        if size \u003e snapshot[\u0027volume_size\u0027]:"},{"line_number":239,"context_line":"            self.delete_pair(new_ldev)"},{"line_number":240,"context_line":"            self.extend_ldev(new_ldev, snapshot[\u0027volume_size\u0027], size)"},{"line_number":241,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_65b50d7d","line":238,"range":{"start_line":238,"start_character":11,"end_line":238,"end_character":41},"updated":"2016-11-30 13:42:02.000000000","message":"if sync:","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        sync \u003d True if size \u003e snapshot[\u0027volume_size\u0027] else False"},{"line_number":236,"context_line":"        new_ldev, ldev_type \u003d self._copy_ldev("},{"line_number":237,"context_line":"            ldev, snapshot[\u0027volume_size\u0027], metadata, sync)"},{"line_number":238,"context_line":"        if size \u003e snapshot[\u0027volume_size\u0027]:"},{"line_number":239,"context_line":"            self.delete_pair(new_ldev)"},{"line_number":240,"context_line":"            self.extend_ldev(new_ldev, snapshot[\u0027volume_size\u0027], size)"},{"line_number":241,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_0eec558e","line":238,"range":{"start_line":238,"start_character":11,"end_line":238,"end_character":41},"in_reply_to":"5a74a57a_65b50d7d","updated":"2016-12-02 13:38:55.000000000","message":"Done","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            self.extend_ldev(new_ldev, snapshot[\u0027volume_size\u0027], size)"},{"line_number":241,"context_line":"        return {"},{"line_number":242,"context_line":"            \u0027provider_location\u0027: six.text_type(new_ldev),"},{"line_number":243,"context_line":"            \u0027metadata\u0027: dict("},{"line_number":244,"context_line":"                metadata, ldev\u003dnew_ldev, type\u003dldev_type,"},{"line_number":245,"context_line":"                snapshot\u003dsnapshot[\u0027id\u0027]),"},{"line_number":246,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_c5ac2138","line":243,"range":{"start_line":243,"start_character":13,"end_line":243,"end_character":21},"updated":"2016-11-30 13:42:02.000000000","message":"admin_metadata?","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            self.extend_ldev(new_ldev, snapshot[\u0027volume_size\u0027], size)"},{"line_number":241,"context_line":"        return {"},{"line_number":242,"context_line":"            \u0027provider_location\u0027: six.text_type(new_ldev),"},{"line_number":243,"context_line":"            \u0027metadata\u0027: dict("},{"line_number":244,"context_line":"                metadata, ldev\u003dnew_ldev, type\u003dldev_type,"},{"line_number":245,"context_line":"                snapshot\u003dsnapshot[\u0027id\u0027]),"},{"line_number":246,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_e5803d8e","line":243,"range":{"start_line":243,"start_character":24,"end_line":243,"end_character":28},"updated":"2016-11-30 13:42:02.000000000","message":"https://doughellmann.com/blog/2012/11/12/the-performance-impact-of-using-dict-instead-of-in-cpython-2-7-2/","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            self.extend_ldev(new_ldev, snapshot[\u0027volume_size\u0027], size)"},{"line_number":241,"context_line":"        return {"},{"line_number":242,"context_line":"            \u0027provider_location\u0027: six.text_type(new_ldev),"},{"line_number":243,"context_line":"            \u0027metadata\u0027: dict("},{"line_number":244,"context_line":"                metadata, ldev\u003dnew_ldev, type\u003dldev_type,"},{"line_number":245,"context_line":"                snapshot\u003dsnapshot[\u0027id\u0027]),"},{"line_number":246,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_ae9521e5","line":243,"range":{"start_line":243,"start_character":13,"end_line":243,"end_character":21},"in_reply_to":"5a74a57a_c5ac2138","updated":"2016-12-02 13:38:55.000000000","message":"Same as vsp_common.py:196.","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            self.extend_ldev(new_ldev, snapshot[\u0027volume_size\u0027], size)"},{"line_number":241,"context_line":"        return {"},{"line_number":242,"context_line":"            \u0027provider_location\u0027: six.text_type(new_ldev),"},{"line_number":243,"context_line":"            \u0027metadata\u0027: dict("},{"line_number":244,"context_line":"                metadata, ldev\u003dnew_ldev, type\u003dldev_type,"},{"line_number":245,"context_line":"                snapshot\u003dsnapshot[\u0027id\u0027]),"},{"line_number":246,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_0ea37550","line":243,"range":{"start_line":243,"start_character":24,"end_line":243,"end_character":28},"in_reply_to":"5a74a57a_e5803d8e","updated":"2016-12-02 13:38:55.000000000","message":"Done","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":416,"context_line":"            msg \u003d utils.output_log(621, copy_method\u003dutils.THIN, type\u003d\u0027volume\u0027,"},{"line_number":417,"context_line":"                                   volume_id\u003dvolume[\u0027id\u0027])"},{"line_number":418,"context_line":"            raise exception.VSPError(data\u003dmsg)"},{"line_number":419,"context_line":"        sync \u003d True if size \u003e src_vref[\u0027size\u0027] else False"},{"line_number":420,"context_line":"        new_ldev, ldev_type \u003d self._copy_ldev("},{"line_number":421,"context_line":"            ldev, src_vref[\u0027size\u0027], metadata, sync)"},{"line_number":422,"context_line":"        if size \u003e src_vref[\u0027size\u0027]:"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_c7c980ae","line":419,"range":{"start_line":419,"start_character":0,"end_line":419,"end_character":57},"updated":"2016-11-30 13:42:02.000000000","message":"sync \u003d size \u003e src_vref[\u0027size\u0027]","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":416,"context_line":"            msg \u003d utils.output_log(621, copy_method\u003dutils.THIN, type\u003d\u0027volume\u0027,"},{"line_number":417,"context_line":"                                   volume_id\u003dvolume[\u0027id\u0027])"},{"line_number":418,"context_line":"            raise exception.VSPError(data\u003dmsg)"},{"line_number":419,"context_line":"        sync \u003d True if size \u003e src_vref[\u0027size\u0027] else False"},{"line_number":420,"context_line":"        new_ldev, ldev_type \u003d self._copy_ldev("},{"line_number":421,"context_line":"            ldev, src_vref[\u0027size\u0027], metadata, sync)"},{"line_number":422,"context_line":"        if size \u003e src_vref[\u0027size\u0027]:"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_cebfbd5e","line":419,"range":{"start_line":419,"start_character":0,"end_line":419,"end_character":57},"in_reply_to":"5a74a57a_c7c980ae","updated":"2016-12-02 13:38:55.000000000","message":"Done","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":419,"context_line":"        sync \u003d True if size \u003e src_vref[\u0027size\u0027] else False"},{"line_number":420,"context_line":"        new_ldev, ldev_type \u003d self._copy_ldev("},{"line_number":421,"context_line":"            ldev, src_vref[\u0027size\u0027], metadata, sync)"},{"line_number":422,"context_line":"        if size \u003e src_vref[\u0027size\u0027]:"},{"line_number":423,"context_line":"            self.delete_pair(new_ldev)"},{"line_number":424,"context_line":"            self.extend_ldev(new_ldev, src_vref[\u0027size\u0027], size)"},{"line_number":425,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_27c15481","line":422,"range":{"start_line":422,"start_character":11,"end_line":422,"end_character":34},"updated":"2016-11-30 13:42:02.000000000","message":"if sync","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":419,"context_line":"        sync \u003d True if size \u003e src_vref[\u0027size\u0027] else False"},{"line_number":420,"context_line":"        new_ldev, ldev_type \u003d self._copy_ldev("},{"line_number":421,"context_line":"            ldev, src_vref[\u0027size\u0027], metadata, sync)"},{"line_number":422,"context_line":"        if size \u003e src_vref[\u0027size\u0027]:"},{"line_number":423,"context_line":"            self.delete_pair(new_ldev)"},{"line_number":424,"context_line":"            self.extend_ldev(new_ldev, src_vref[\u0027size\u0027], size)"},{"line_number":425,"context_line":"        return {"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_0e71b5e0","line":422,"range":{"start_line":422,"start_character":11,"end_line":422,"end_character":34},"in_reply_to":"5a74a57a_27c15481","updated":"2016-12-02 13:38:55.000000000","message":"Done","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":424,"context_line":"            self.extend_ldev(new_ldev, src_vref[\u0027size\u0027], size)"},{"line_number":425,"context_line":"        return {"},{"line_number":426,"context_line":"            \u0027provider_location\u0027: six.text_type(new_ldev),"},{"line_number":427,"context_line":"            \u0027metadata\u0027: dict("},{"line_number":428,"context_line":"                metadata, ldev\u003dnew_ldev,"},{"line_number":429,"context_line":"                type\u003dldev_type, volume\u003dsrc_vref[\u0027id\u0027]),"},{"line_number":430,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_8736a8b2","line":427,"range":{"start_line":427,"start_character":13,"end_line":427,"end_character":21},"updated":"2016-11-30 13:42:02.000000000","message":"admin_metadata?","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":424,"context_line":"            self.extend_ldev(new_ldev, src_vref[\u0027size\u0027], size)"},{"line_number":425,"context_line":"        return {"},{"line_number":426,"context_line":"            \u0027provider_location\u0027: six.text_type(new_ldev),"},{"line_number":427,"context_line":"            \u0027metadata\u0027: dict("},{"line_number":428,"context_line":"                metadata, ldev\u003dnew_ldev,"},{"line_number":429,"context_line":"                type\u003dldev_type, volume\u003dsrc_vref[\u0027id\u0027]),"},{"line_number":430,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_4e73ade7","line":427,"range":{"start_line":427,"start_character":13,"end_line":427,"end_character":21},"in_reply_to":"5a74a57a_8736a8b2","updated":"2016-12-02 13:38:55.000000000","message":"Ditto","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"14c5c6d6a0bbc0216375513601f6cb63dd644af1","unresolved":false,"context_lines":[{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":446,"context_line":"        \"\"\"Create a snapshot from a volume and return its properties.\"\"\""},{"line_number":447,"context_line":"        src_vref \u003d self.db.volume_get(self.ctxt, snapshot[\u0027volume_id\u0027])"},{"line_number":448,"context_line":"        ldev \u003d utils.get_ldev(src_vref)"},{"line_number":449,"context_line":"        # When \u0027ldev\u0027 is 0, it should be true."},{"line_number":450,"context_line":"        # Therefore, it cannot remove \u0027is None\u0027."}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_d0ad9d89","line":447,"updated":"2016-11-30 22:55:16.000000000","message":"Why do you have to do another volume_get() call here?\n\nThis shouldn\u0027t be needed.","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def create_snapshot(self, snapshot):"},{"line_number":446,"context_line":"        \"\"\"Create a snapshot from a volume and return its properties.\"\"\""},{"line_number":447,"context_line":"        src_vref \u003d self.db.volume_get(self.ctxt, snapshot[\u0027volume_id\u0027])"},{"line_number":448,"context_line":"        ldev \u003d utils.get_ldev(src_vref)"},{"line_number":449,"context_line":"        # When \u0027ldev\u0027 is 0, it should be true."},{"line_number":450,"context_line":"        # Therefore, it cannot remove \u0027is None\u0027."}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_91b5e432","line":447,"in_reply_to":"5a74a57a_d0ad9d89","updated":"2016-12-02 13:38:55.000000000","message":"Changed self.db.volume_get() to snapshot.volume.","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":456,"context_line":"        new_ldev, ldev_type \u003d self._copy_ldev(ldev, size, metadata)"},{"line_number":457,"context_line":"        self.db.snapshot_metadata_update("},{"line_number":458,"context_line":"            self.ctxt, snapshot[\u0027id\u0027],"},{"line_number":459,"context_line":"            dict(ldev\u003dnew_ldev, type\u003dldev_type), False)"},{"line_number":460,"context_line":"        return {"},{"line_number":461,"context_line":"            \u0027provider_location\u0027: six.text_type(new_ldev),"},{"line_number":462,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_476c909c","line":459,"range":{"start_line":459,"start_character":12,"end_line":459,"end_character":47},"updated":"2016-11-30 13:42:02.000000000","message":"use {} notation","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":456,"context_line":"        new_ldev, ldev_type \u003d self._copy_ldev(ldev, size, metadata)"},{"line_number":457,"context_line":"        self.db.snapshot_metadata_update("},{"line_number":458,"context_line":"            self.ctxt, snapshot[\u0027id\u0027],"},{"line_number":459,"context_line":"            dict(ldev\u003dnew_ldev, type\u003dldev_type), False)"},{"line_number":460,"context_line":"        return {"},{"line_number":461,"context_line":"            \u0027provider_location\u0027: six.text_type(new_ldev),"},{"line_number":462,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_ae31a10d","line":459,"range":{"start_line":459,"start_character":12,"end_line":459,"end_character":47},"in_reply_to":"5a74a57a_476c909c","updated":"2016-12-02 13:38:55.000000000","message":"Done","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":541,"context_line":"        metadata \u003d utils.get_volume_metadata(volume)"},{"line_number":542,"context_line":"        return {"},{"line_number":543,"context_line":"            \u0027provider_location\u0027: six.text_type(ldev),"},{"line_number":544,"context_line":"            \u0027metadata\u0027: dict("},{"line_number":545,"context_line":"                metadata, ldev\u003dldev, type\u003dutils.NORMAL_LDEV_TYPE),"},{"line_number":546,"context_line":"        }"},{"line_number":547,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_67eeeced","line":544,"range":{"start_line":544,"start_character":13,"end_line":544,"end_character":21},"updated":"2016-11-30 13:42:02.000000000","message":"admin_metadata?","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":541,"context_line":"        metadata \u003d utils.get_volume_metadata(volume)"},{"line_number":542,"context_line":"        return {"},{"line_number":543,"context_line":"            \u0027provider_location\u0027: six.text_type(ldev),"},{"line_number":544,"context_line":"            \u0027metadata\u0027: dict("},{"line_number":545,"context_line":"                metadata, ldev\u003dldev, type\u003dutils.NORMAL_LDEV_TYPE),"},{"line_number":546,"context_line":"        }"},{"line_number":547,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_ee3b99e9","line":544,"range":{"start_line":544,"start_character":13,"end_line":544,"end_character":21},"in_reply_to":"5a74a57a_67eeeced","updated":"2016-12-02 13:38:55.000000000","message":"Ditto","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c995ccb5d75e3e5f5ee9fde0355946aeb2960280","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                ret\u003dret, out\u003d\u0027 \u0027.join(stdout.splitlines()),"},{"line_number":169,"context_line":"                err\u003d\u0027 \u0027.join(stderr.splitlines()))"},{"line_number":170,"context_line":"            if do_raise:"},{"line_number":171,"context_line":"                raise exception.VSPError(data\u003dmsg)"},{"line_number":172,"context_line":"        return ret, stdout, stderr"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_c0af6f92","line":171,"updated":"2016-12-02 22:46:15.000000000","message":"This is going to throw an exception while it is trying to raise VSPError as there is no \"data\" parameter.  Should either change to exception.VSPError(msg) here or change the exception to add a \"data\".\n\nPlease fix all places.","commit_id":"066238dd74d7c59930d5c71b725d16b32b7a3a54"},{"author":{"_account_id":16373,"name":"Kazumasa Nomura","email":"kazumasa.nomura.rx@hitachi.com","username":"knomura"},"change_message_id":"fbc8d31c9313d1b45323bda9998892f0d8d8c002","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                ret\u003dret, out\u003d\u0027 \u0027.join(stdout.splitlines()),"},{"line_number":169,"context_line":"                err\u003d\u0027 \u0027.join(stderr.splitlines()))"},{"line_number":170,"context_line":"            if do_raise:"},{"line_number":171,"context_line":"                raise exception.VSPError(data\u003dmsg)"},{"line_number":172,"context_line":"        return ret, stdout, stderr"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_00b2194c","line":171,"in_reply_to":"3a71b18c_c0af6f92","updated":"2016-12-05 14:21:32.000000000","message":"Done","commit_id":"066238dd74d7c59930d5c71b725d16b32b7a3a54"}],"cinder/volume/drivers/hitachi/vsp_fc.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"58347344ebb58350ee0065b95354799e6ba434dd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2014, 2016, Hitachi, Ltd.\r"},{"line_number":2,"context_line":"#\r"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may\r"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_3857f358","line":1,"updated":"2016-11-03 21:11:43.000000000","message":"This file is formatted with dos-style endlines, please remove these.","commit_id":"a7d3ce0532603d6b618e96657ee77948eb3395e1"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1d76eabcf8e4c91a15f3ef8ec38ab9a839c03631","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    # ThirdPartySystems wiki page"},{"line_number":65,"context_line":"    CI_WIKI_NAME \u003d [\"Hitachi_VSP_CI\"]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":68,"context_line":"        \"\"\"Initialize instance variables.\"\"\""},{"line_number":69,"context_line":"        super(VSPFCDriver, self).__init__(*args, **kwargs)"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_bcd109fe","line":67,"range":{"start_line":67,"start_character":8,"end_line":67,"end_character":17},"updated":"2016-11-07 22:05:00.000000000","message":"Would be good to have some indication here with a LOG.info that we are initializing for FC.  I don\u0027t think I saw anything like that in the common file.","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"ff267c1ea7e1bf7c26377ab82b3e3e7f122b1780","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    # ThirdPartySystems wiki page"},{"line_number":65,"context_line":"    CI_WIKI_NAME \u003d [\"Hitachi_VSP_CI\"]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":68,"context_line":"        \"\"\"Initialize instance variables.\"\"\""},{"line_number":69,"context_line":"        super(VSPFCDriver, self).__init__(*args, **kwargs)"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_8a281be4","line":67,"range":{"start_line":67,"start_character":8,"end_line":67,"end_character":17},"in_reply_to":"9a629dbe_bcd109fe","updated":"2016-11-09 17:19:39.000000000","message":"Done. Output \"MSGID0004-I: Initialization of VSPFCDriver 1.2.0 started.\" message to volume.log","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1d76eabcf8e4c91a15f3ef8ec38ab9a839c03631","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def check_for_setup_error(self):"},{"line_number":77,"context_line":"        \"\"\"Check if problems exist in initializing the driver.\"\"\""},{"line_number":78,"context_line":"        pass"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def create_volume(self, volume):"},{"line_number":81,"context_line":"        \"\"\"Create a volume and return its properties.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_7c99316e","line":78,"range":{"start_line":78,"start_character":8,"end_line":78,"end_character":12},"updated":"2016-11-07 22:05:00.000000000","message":"Really?  Nothing that needs to be checked here.","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"ff267c1ea7e1bf7c26377ab82b3e3e7f122b1780","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def check_for_setup_error(self):"},{"line_number":77,"context_line":"        \"\"\"Check if problems exist in initializing the driver.\"\"\""},{"line_number":78,"context_line":"        pass"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def create_volume(self, volume):"},{"line_number":81,"context_line":"        \"\"\"Create a volume and return its properties.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_ed18d177","line":78,"range":{"start_line":78,"start_character":8,"end_line":78,"end_character":12},"in_reply_to":"9a629dbe_7c99316e","updated":"2016-11-09 17:19:39.000000000","message":"No. Parameters are checked in do_setup() before setting up the environment because we don\u0027t want to set up the environment based on invalid parameters.","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":9171,"name":"Vipin Balachandran","email":"vipin.bl@gmail.com","username":"vbala"},"change_message_id":"ce9b6b6c960fee997d10c0b5e9c5a32c3623eb4a","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    VERSION \u003d common.VERSION"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    # ThirdPartySystems wiki page"},{"line_number":67,"context_line":"    CI_WIKI_NAME \u003d [\"Hitachi_VSP_CI\"]"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def __init__(self, *args, **kwargs):"},{"line_number":70,"context_line":"        \"\"\"Initialize instance variables.\"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a629dbe_2b341548","line":67,"updated":"2016-11-11 14:22:23.000000000","message":"This must be a string.","commit_id":"f08ff5fa7195cebe28fc518e3f84a39cbc404a50"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9743fc775e62ab40ea3138f67ceb61f6414ca27f","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    1.0.0 - Initial driver."},{"line_number":59,"context_line":"    1.1.0 - Add manage_existing/manage_existing_get_size/unmanage methods."},{"line_number":60,"context_line":"    1.2.0 - Refactor the driver."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    \"\"\""},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5a74a57a_4d910f99","line":60,"updated":"2016-11-23 20:29:15.000000000","message":"If this version is a refactor, shouldn\u0027t you be removing the old driver code as well?\n\nVSP is shown in the following support matrix but I don\u0027t know whether it is up to date.\n\nhttps://wiki.openstack.org/wiki/CinderSupportMatrix","commit_id":"bfe3350cde1f5a0c28bd65486edf0f20760379fe"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"019bb262c25aab8ab655f243ad2b7b1cf9201dc9","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    1.0.0 - Initial driver."},{"line_number":59,"context_line":"    1.1.0 - Add manage_existing/manage_existing_get_size/unmanage methods."},{"line_number":60,"context_line":"    1.2.0 - Refactor the driver."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    \"\"\""},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5a74a57a_c86a1f81","line":60,"in_reply_to":"5a74a57a_4d910f99","updated":"2016-11-25 14:04:47.000000000","message":"We have already submitted the following patch for removing the old driver.\nhttps://review.openstack.org/#/c/396474/","commit_id":"bfe3350cde1f5a0c28bd65486edf0f20760379fe"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"fbac9124558d29d2234f9099eb2eebf4f516d097","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    1.0.0 - Initial driver."},{"line_number":59,"context_line":"    1.1.0 - Add manage_existing/manage_existing_get_size/unmanage methods."},{"line_number":60,"context_line":"    1.2.0 - Refactor the driver."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    \"\"\""},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5a74a57a_c2f0ce69","line":60,"in_reply_to":"5a74a57a_b2553bfb","updated":"2016-11-29 12:33:07.000000000","message":"This is not a refactored version of the old driver, so this cannot substitute for the old driver. We\u0027ve updated the version number and version history in this file and other files as well so that the version of this new driver becomes 1.0.0. The old driver still supports HUS series in Ocata.\"","commit_id":"bfe3350cde1f5a0c28bd65486edf0f20760379fe"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"46fbe98e1edc25174a65812233581265947fff7e","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    1.0.0 - Initial driver."},{"line_number":59,"context_line":"    1.1.0 - Add manage_existing/manage_existing_get_size/unmanage methods."},{"line_number":60,"context_line":"    1.2.0 - Refactor the driver."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    \"\"\""},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5a74a57a_b2553bfb","line":60,"in_reply_to":"5a74a57a_c86a1f81","updated":"2016-11-26 15:12:24.000000000","message":"If this refactored driver supports VSP in Ocata, you should just remove the old driver in Ocata and add a mapping entry in manager.py.  Otherwise you have two drivers supporting the same thing.\n\nDoes the old driver still support HUS110 family in Ocata?","commit_id":"bfe3350cde1f5a0c28bd65486edf0f20760379fe"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"44b0b063e48238a51cd095e37f38f136cd1c5389","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"fc_opts \u003d ["},{"line_number":26,"context_line":"    cfg.BoolOpt("},{"line_number":27,"context_line":"        \u0027vsp_zoning_request\u0027,"},{"line_number":28,"context_line":"        default\u003dFalse,"},{"line_number":29,"context_line":"        help\u003d\u0027If True, the driver will configure FC zoning between the server \u0027"},{"line_number":30,"context_line":"             \u0027and the storage system provided that FC zoning manager is \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_ce406237","line":27,"updated":"2016-11-25 16:32:45.000000000","message":"Why is this needed? If FCZM is configured, it should perform zoning. If it\u0027s not configured, then it won\u0027t.","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"8e9f3b919631ee375ffdcc68f448d7d900d6cfba","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"fc_opts \u003d ["},{"line_number":26,"context_line":"    cfg.BoolOpt("},{"line_number":27,"context_line":"        \u0027vsp_zoning_request\u0027,"},{"line_number":28,"context_line":"        default\u003dFalse,"},{"line_number":29,"context_line":"        help\u003d\u0027If True, the driver will configure FC zoning between the server \u0027"},{"line_number":30,"context_line":"             \u0027and the storage system provided that FC zoning manager is \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_62f61a90","line":27,"in_reply_to":"5a74a57a_ce406237","updated":"2016-11-29 12:33:34.000000000","message":"Because we allow the user to choose between manual configuration and automatic configuration of FC zoning. Some our user chooses manual configuration and configures FC zoning beforehand because the performance of initialize_connection() may improve.","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c995ccb5d75e3e5f5ee9fde0355946aeb2960280","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    @utils.output_start_end_log"},{"line_number":177,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":178,"context_line":"        \"\"\"Terminate connection between the server and the volume.\"\"\""},{"line_number":179,"context_line":"        self.common.terminate_connection(volume, connector)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_c0ebefae","line":179,"updated":"2016-12-02 22:46:15.000000000","message":"This should return self.common.terminate_connection(volume, connector).  Otherwise zoning will never be removed.","commit_id":"066238dd74d7c59930d5c71b725d16b32b7a3a54"},{"author":{"_account_id":16373,"name":"Kazumasa Nomura","email":"kazumasa.nomura.rx@hitachi.com","username":"knomura"},"change_message_id":"fbc8d31c9313d1b45323bda9998892f0d8d8c002","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    @utils.output_start_end_log"},{"line_number":177,"context_line":"    def terminate_connection(self, volume, connector, **kwargs):"},{"line_number":178,"context_line":"        \"\"\"Terminate connection between the server and the volume.\"\"\""},{"line_number":179,"context_line":"        self.common.terminate_connection(volume, connector)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_20c4758f","line":179,"in_reply_to":"3a71b18c_c0ebefae","updated":"2016-12-05 14:21:32.000000000","message":"Moved \"@fczm_utils.RemoveFCZone\" from vsp_fc::terminate_connection() to vsp_horcm_fc::terminate_connection(). The reason why we did not modify as you suggested is that vsp_horcm_fc::terminate_connection() is called indirectly from vsp_fc::create_{snapshot|volume_from_snapshot|cloned_volume}() and auto FC zoning should work in those cases as well.","commit_id":"066238dd74d7c59930d5c71b725d16b32b7a3a54"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2b9931ebdd1edef487eeb68f315eb38aaec0b65d","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    .. code-block:: none"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    1.0.0 - Initial driver."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    \"\"\""},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3a71b18c_c29a3e6e","line":59,"updated":"2016-12-08 15:40:36.000000000","message":"I believe this needs to be indented to be formatted properly for the code-block.","commit_id":"5c815388e2d8d4b62f7a66dd14d07ce961143435"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f09792c10f0958e2bb1005dce5c3844ca578425e","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        pass"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    @utils.output_start_end_log"},{"line_number":171,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":172,"context_line":"        \"\"\"Initialize connection between the server and the volume.\"\"\""},{"line_number":173,"context_line":"        return self.common.initialize_connection(volume, connector)"},{"line_number":174,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3a71b18c_fbcd2a5e","line":171,"updated":"2016-12-08 14:31:46.000000000","message":"initialize and terminate need to have the fczm decorators.","commit_id":"5c815388e2d8d4b62f7a66dd14d07ce961143435"}],"cinder/volume/drivers/hitachi/vsp_horcm.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"58347344ebb58350ee0065b95354799e6ba434dd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2014, 2016, Hitachi, Ltd.\r"},{"line_number":2,"context_line":"#\r"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may\r"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_586bc71d","line":1,"updated":"2016-11-03 21:11:43.000000000","message":"This file is formatted with dos-style endlines, please remove these.","commit_id":"a7d3ce0532603d6b618e96657ee77948eb3395e1"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1d76eabcf8e4c91a15f3ef8ec38ab9a839c03631","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        \u0027vsp_horcm_numbers\u0027,"},{"line_number":195,"context_line":"        type\u003dtypes.List(item_type\u003dtypes.Integer(min\u003d0, max\u003d2047)),"},{"line_number":196,"context_line":"        default\u003d[200, 201],"},{"line_number":197,"context_line":"        help\u003d\u0027Instance numbers for HORCM\u0027),"},{"line_number":198,"context_line":"    cfg.StrOpt("},{"line_number":199,"context_line":"        \u0027vsp_horcm_user\u0027,"},{"line_number":200,"context_line":"        help\u003d\u0027Username of storage system for HORCM\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_27ab2676","line":197,"range":{"start_line":197,"start_character":40,"end_line":197,"end_character":41},"updated":"2016-11-07 22:05:00.000000000","message":"Suggest adding \u0027.\u0027 here like in the common file.","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"ff267c1ea7e1bf7c26377ab82b3e3e7f122b1780","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        \u0027vsp_horcm_numbers\u0027,"},{"line_number":195,"context_line":"        type\u003dtypes.List(item_type\u003dtypes.Integer(min\u003d0, max\u003d2047)),"},{"line_number":196,"context_line":"        default\u003d[200, 201],"},{"line_number":197,"context_line":"        help\u003d\u0027Instance numbers for HORCM\u0027),"},{"line_number":198,"context_line":"    cfg.StrOpt("},{"line_number":199,"context_line":"        \u0027vsp_horcm_user\u0027,"},{"line_number":200,"context_line":"        help\u003d\u0027Username of storage system for HORCM\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_ad409935","line":197,"range":{"start_line":197,"start_character":40,"end_line":197,"end_character":41},"in_reply_to":"9a629dbe_27ab2676","updated":"2016-11-09 17:19:39.000000000","message":"Done","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1d76eabcf8e4c91a15f3ef8ec38ab9a839c03631","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        help\u003d\u0027Instance numbers for HORCM\u0027),"},{"line_number":198,"context_line":"    cfg.StrOpt("},{"line_number":199,"context_line":"        \u0027vsp_horcm_user\u0027,"},{"line_number":200,"context_line":"        help\u003d\u0027Username of storage system for HORCM\u0027),"},{"line_number":201,"context_line":"    cfg.StrOpt("},{"line_number":202,"context_line":"        \u0027vsp_horcm_password\u0027,"},{"line_number":203,"context_line":"        secret\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_67bb5ec5","line":200,"range":{"start_line":200,"start_character":14,"end_line":200,"end_character":50},"updated":"2016-11-07 22:05:00.000000000","message":"Do you mean \u0027Username for HORCM storage system.\u0027 ?","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"ff267c1ea7e1bf7c26377ab82b3e3e7f122b1780","unresolved":false,"context_lines":[{"line_number":197,"context_line":"        help\u003d\u0027Instance numbers for HORCM\u0027),"},{"line_number":198,"context_line":"    cfg.StrOpt("},{"line_number":199,"context_line":"        \u0027vsp_horcm_user\u0027,"},{"line_number":200,"context_line":"        help\u003d\u0027Username of storage system for HORCM\u0027),"},{"line_number":201,"context_line":"    cfg.StrOpt("},{"line_number":202,"context_line":"        \u0027vsp_horcm_password\u0027,"},{"line_number":203,"context_line":"        secret\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_8d6af5b1","line":200,"range":{"start_line":200,"start_character":14,"end_line":200,"end_character":50},"in_reply_to":"9a629dbe_67bb5ec5","updated":"2016-11-09 17:19:39.000000000","message":"Done","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1d76eabcf8e4c91a15f3ef8ec38ab9a839c03631","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    cfg.StrOpt("},{"line_number":202,"context_line":"        \u0027vsp_horcm_password\u0027,"},{"line_number":203,"context_line":"        secret\u003dTrue,"},{"line_number":204,"context_line":"        help\u003d\u0027Password of storage system for HORCM\u0027),"},{"line_number":205,"context_line":"    cfg.BoolOpt("},{"line_number":206,"context_line":"        \u0027vsp_horcm_add_conf\u0027,"},{"line_number":207,"context_line":"        default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_87b072df","line":204,"range":{"start_line":204,"start_character":14,"end_line":204,"end_character":50},"updated":"2016-11-07 22:05:00.000000000","message":"Do you mean \u0027Password for HORCM storage system.\u0027 ?","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"ff267c1ea7e1bf7c26377ab82b3e3e7f122b1780","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    cfg.StrOpt("},{"line_number":202,"context_line":"        \u0027vsp_horcm_password\u0027,"},{"line_number":203,"context_line":"        secret\u003dTrue,"},{"line_number":204,"context_line":"        help\u003d\u0027Password of storage system for HORCM\u0027),"},{"line_number":205,"context_line":"    cfg.BoolOpt("},{"line_number":206,"context_line":"        \u0027vsp_horcm_add_conf\u0027,"},{"line_number":207,"context_line":"        default\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_ed5d3116","line":204,"range":{"start_line":204,"start_character":14,"end_line":204,"end_character":50},"in_reply_to":"9a629dbe_87b072df","updated":"2016-11-09 17:19:39.000000000","message":"Done","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1d76eabcf8e4c91a15f3ef8ec38ab9a839c03631","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    cfg.BoolOpt("},{"line_number":206,"context_line":"        \u0027vsp_horcm_add_conf\u0027,"},{"line_number":207,"context_line":"        default\u003dTrue,"},{"line_number":208,"context_line":"        help\u003d\u0027Add to HORCM configuration\u0027),"},{"line_number":209,"context_line":"]"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"_REQUIRED_HORCM_OPTS \u003d ["}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_a79e5654","line":208,"range":{"start_line":208,"start_character":40,"end_line":208,"end_character":43},"updated":"2016-11-07 22:05:00.000000000","message":"What does this mean?  Can you provide more explanation?","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"ff267c1ea7e1bf7c26377ab82b3e3e7f122b1780","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    cfg.BoolOpt("},{"line_number":206,"context_line":"        \u0027vsp_horcm_add_conf\u0027,"},{"line_number":207,"context_line":"        default\u003dTrue,"},{"line_number":208,"context_line":"        help\u003d\u0027Add to HORCM configuration\u0027),"},{"line_number":209,"context_line":"]"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"_REQUIRED_HORCM_OPTS \u003d ["}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_767f2e66","line":208,"range":{"start_line":208,"start_character":40,"end_line":208,"end_character":43},"in_reply_to":"9a629dbe_a79e5654","updated":"2016-11-09 17:19:39.000000000","message":"If True, the driver will create or update the RAID Manager configuration file as needed. Updated the help message.","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1d76eabcf8e4c91a15f3ef8ec38ab9a839c03631","unresolved":false,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"def _run_horcmshutdown(inst):"},{"line_number":267,"context_line":"    \"\"\"Stop the RAID Manager instance and return 0 if successful.\"\"\""},{"line_number":268,"context_line":"    result \u003d utils.execute(\u0027horcmshutdown.sh\u0027, inst)"},{"line_number":269,"context_line":"    return result[0]"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"def _run_horcmstart(inst):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_87feb269","line":269,"range":{"start_line":268,"start_character":0,"end_line":269,"end_character":20},"updated":"2016-11-07 22:05:00.000000000","message":"Seems like there should be some error checking around this.","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"ff267c1ea7e1bf7c26377ab82b3e3e7f122b1780","unresolved":false,"context_lines":[{"line_number":265,"context_line":""},{"line_number":266,"context_line":"def _run_horcmshutdown(inst):"},{"line_number":267,"context_line":"    \"\"\"Stop the RAID Manager instance and return 0 if successful.\"\"\""},{"line_number":268,"context_line":"    result \u003d utils.execute(\u0027horcmshutdown.sh\u0027, inst)"},{"line_number":269,"context_line":"    return result[0]"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"def _run_horcmstart(inst):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_560dcae6","line":269,"range":{"start_line":268,"start_character":0,"end_line":269,"end_character":20},"in_reply_to":"9a629dbe_87feb269","updated":"2016-11-09 17:19:39.000000000","message":"Error checking is in the hands of the callers because how errors should be treated differs from caller to caller.","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1d76eabcf8e4c91a15f3ef8ec38ab9a839c03631","unresolved":false,"context_lines":[{"line_number":270,"context_line":""},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"def _run_horcmstart(inst):"},{"line_number":273,"context_line":"    \"\"\"Start the RAID Manager instance and return 0 if successful.\"\"\""},{"line_number":274,"context_line":"    result \u003d utils.execute(\u0027horcmstart.sh\u0027, inst)"},{"line_number":275,"context_line":"    return result[0]"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"def _check_ldev(ldev_info, ldev, existing_ref):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_07f3829f","line":275,"range":{"start_line":273,"start_character":0,"end_line":275,"end_character":20},"updated":"2016-11-07 22:05:00.000000000","message":"Same comment here.","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"ff267c1ea7e1bf7c26377ab82b3e3e7f122b1780","unresolved":false,"context_lines":[{"line_number":270,"context_line":""},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"def _run_horcmstart(inst):"},{"line_number":273,"context_line":"    \"\"\"Start the RAID Manager instance and return 0 if successful.\"\"\""},{"line_number":274,"context_line":"    result \u003d utils.execute(\u0027horcmstart.sh\u0027, inst)"},{"line_number":275,"context_line":"    return result[0]"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"def _check_ldev(ldev_info, ldev, existing_ref):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_f6fedeac","line":275,"range":{"start_line":273,"start_character":0,"end_line":275,"end_character":20},"in_reply_to":"9a629dbe_07f3829f","updated":"2016-11-09 17:19:39.000000000","message":"Same as above.","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"1d76eabcf8e4c91a15f3ef8ec38ab9a839c03631","unresolved":false,"context_lines":[{"line_number":357,"context_line":"            result \u003d utils.execute(*cmd, **kwargs)"},{"line_number":358,"context_line":"            if _NOT_LOCKED in result[2] and not utils.check_timeout("},{"line_number":359,"context_line":"                    start_time, _LOCK_WAITTIME):"},{"line_number":360,"context_line":"                LOG.debug("},{"line_number":361,"context_line":"                    \"The resource group to which the operation object \""},{"line_number":362,"context_line":"                    \"belongs is being locked by other software.\")"},{"line_number":363,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_4779fafb","line":360,"range":{"start_line":360,"start_character":16,"end_line":360,"end_character":25},"updated":"2016-11-07 22:05:00.000000000","message":"This seems like it should be a LOG.warning .","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"ff267c1ea7e1bf7c26377ab82b3e3e7f122b1780","unresolved":false,"context_lines":[{"line_number":357,"context_line":"            result \u003d utils.execute(*cmd, **kwargs)"},{"line_number":358,"context_line":"            if _NOT_LOCKED in result[2] and not utils.check_timeout("},{"line_number":359,"context_line":"                    start_time, _LOCK_WAITTIME):"},{"line_number":360,"context_line":"                LOG.debug("},{"line_number":361,"context_line":"                    \"The resource group to which the operation object \""},{"line_number":362,"context_line":"                    \"belongs is being locked by other software.\")"},{"line_number":363,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a629dbe_56a94a8f","line":360,"range":{"start_line":360,"start_character":16,"end_line":360,"end_character":25},"in_reply_to":"9a629dbe_4779fafb","updated":"2016-11-09 17:19:39.000000000","message":"This happens quite often. If we output this as a warning message, volume.log would be covered by this message if the resource group is locked for just a few minutes.","commit_id":"e6478d258a2918ca313cb580107e344ec88ac225"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"b2d2b1684856b7dd5250a7111982a0254d3de23e","unresolved":false,"context_lines":[{"line_number":877,"context_line":""},{"line_number":878,"context_line":"    def connect_storage(self):"},{"line_number":879,"context_line":"        \"\"\"Prepare for using the storage.\"\"\""},{"line_number":880,"context_line":"        self._set_copy_groups(CONF.my_ip)"},{"line_number":881,"context_line":""},{"line_number":882,"context_line":"        if self.conf.vsp_horcm_add_conf:"},{"line_number":883,"context_line":"            self._create_horcm_conf()"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_64af267d","line":880,"updated":"2016-11-28 21:01:16.000000000","message":"Needs to be self.configuration.my_ip to allow proper configuration of multiple backends.","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"8e9f3b919631ee375ffdcc68f448d7d900d6cfba","unresolved":false,"context_lines":[{"line_number":877,"context_line":""},{"line_number":878,"context_line":"    def connect_storage(self):"},{"line_number":879,"context_line":"        \"\"\"Prepare for using the storage.\"\"\""},{"line_number":880,"context_line":"        self._set_copy_groups(CONF.my_ip)"},{"line_number":881,"context_line":""},{"line_number":882,"context_line":"        if self.conf.vsp_horcm_add_conf:"},{"line_number":883,"context_line":"            self._create_horcm_conf()"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_c2336e12","line":880,"in_reply_to":"5a74a57a_64af267d","updated":"2016-11-29 12:33:34.000000000","message":"We cannot substitute self.conf.my_ip for CONF.my_ip because self.conf does not have my_ip. Substituting self.conf.my_ip for CONF.my_ip causes NoSuchOptError.","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":190,"context_line":"CMD_PATTERN \u003d re.compile(r\"((?:^|\\n)HORCM_CMD\\n)\")"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"horcm_opts \u003d ["},{"line_number":193,"context_line":"    cfg.Opt("},{"line_number":194,"context_line":"        \u0027vsp_horcm_numbers\u0027,"},{"line_number":195,"context_line":"        type\u003dtypes.List(item_type\u003dtypes.Integer(min\u003d0, max\u003d2047)),"},{"line_number":196,"context_line":"        default\u003d[200, 201],"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_072538c1","line":193,"range":{"start_line":193,"start_character":8,"end_line":193,"end_character":11},"updated":"2016-11-30 13:42:02.000000000","message":"ListOpt","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":190,"context_line":"CMD_PATTERN \u003d re.compile(r\"((?:^|\\n)HORCM_CMD\\n)\")"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"horcm_opts \u003d ["},{"line_number":193,"context_line":"    cfg.Opt("},{"line_number":194,"context_line":"        \u0027vsp_horcm_numbers\u0027,"},{"line_number":195,"context_line":"        type\u003dtypes.List(item_type\u003dtypes.Integer(min\u003d0, max\u003d2047)),"},{"line_number":196,"context_line":"        default\u003d[200, 201],"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_11ce34b4","line":193,"range":{"start_line":193,"start_character":8,"end_line":193,"end_character":11},"in_reply_to":"5a74a57a_072538c1","updated":"2016-12-02 13:38:55.000000000","message":"Done","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":192,"context_line":"horcm_opts \u003d ["},{"line_number":193,"context_line":"    cfg.Opt("},{"line_number":194,"context_line":"        \u0027vsp_horcm_numbers\u0027,"},{"line_number":195,"context_line":"        type\u003dtypes.List(item_type\u003dtypes.Integer(min\u003d0, max\u003d2047)),"},{"line_number":196,"context_line":"        default\u003d[200, 201],"},{"line_number":197,"context_line":"        help\u003d\u0027Command Control Interface instance numbers in the format of \u0027"},{"line_number":198,"context_line":"             \u0027\\\u0027xxx,yyy\\\u0027. The second one is for ShadowImage operation and \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_27095432","line":195,"range":{"start_line":195,"start_character":8,"end_line":195,"end_character":66},"updated":"2016-11-30 13:42:02.000000000","message":"item_type\u003dtypes.Integer(min\u003d0, max\u003d2047)","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":192,"context_line":"horcm_opts \u003d ["},{"line_number":193,"context_line":"    cfg.Opt("},{"line_number":194,"context_line":"        \u0027vsp_horcm_numbers\u0027,"},{"line_number":195,"context_line":"        type\u003dtypes.List(item_type\u003dtypes.Integer(min\u003d0, max\u003d2047)),"},{"line_number":196,"context_line":"        default\u003d[200, 201],"},{"line_number":197,"context_line":"        help\u003d\u0027Command Control Interface instance numbers in the format of \u0027"},{"line_number":198,"context_line":"             \u0027\\\u0027xxx,yyy\\\u0027. The second one is for ShadowImage operation and \u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_71bf68fb","line":195,"range":{"start_line":195,"start_character":8,"end_line":195,"end_character":66},"in_reply_to":"5a74a57a_27095432","updated":"2016-12-02 13:38:55.000000000","message":"Done","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c995ccb5d75e3e5f5ee9fde0355946aeb2960280","unresolved":false,"context_lines":[{"line_number":1027,"context_line":"            int(pool_match.group(\u0027vcap\u0027)))"},{"line_number":1028,"context_line":""},{"line_number":1029,"context_line":"        if vcap \u003d\u003d \u0027infinite\u0027:"},{"line_number":1030,"context_line":"            return \u0027infinite\u0027, \u0027infinite\u0027"},{"line_number":1031,"context_line":"        else:"},{"line_number":1032,"context_line":"            total_gb \u003d int(math.floor(tp_cap * (vcap / 100.0)))"},{"line_number":1033,"context_line":"            free_gb \u003d int(math.floor(total_gb - tl_cap))"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_00da4778","line":1030,"updated":"2016-12-02 22:46:15.000000000","message":"We don\u0027t recommend reporting \u0027infinite\u0027 any more.  If you don\u0027t know the capacity, please report \u0027unknown\u0027.  It is treated the same as \u0027infinite\u0027.","commit_id":"066238dd74d7c59930d5c71b725d16b32b7a3a54"},{"author":{"_account_id":16373,"name":"Kazumasa Nomura","email":"kazumasa.nomura.rx@hitachi.com","username":"knomura"},"change_message_id":"fbc8d31c9313d1b45323bda9998892f0d8d8c002","unresolved":false,"context_lines":[{"line_number":1027,"context_line":"            int(pool_match.group(\u0027vcap\u0027)))"},{"line_number":1028,"context_line":""},{"line_number":1029,"context_line":"        if vcap \u003d\u003d \u0027infinite\u0027:"},{"line_number":1030,"context_line":"            return \u0027infinite\u0027, \u0027infinite\u0027"},{"line_number":1031,"context_line":"        else:"},{"line_number":1032,"context_line":"            total_gb \u003d int(math.floor(tp_cap * (vcap / 100.0)))"},{"line_number":1033,"context_line":"            free_gb \u003d int(math.floor(total_gb - tl_cap))"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a71b18c_c03f4185","line":1030,"in_reply_to":"3a71b18c_00da4778","updated":"2016-12-05 14:21:32.000000000","message":"Done","commit_id":"066238dd74d7c59930d5c71b725d16b32b7a3a54"}],"cinder/volume/drivers/hitachi/vsp_horcm_fc.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f09792c10f0958e2bb1005dce5c3844ca578425e","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        return nr_not_found"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    @fczm_utils.AddFCZone"},{"line_number":167,"context_line":"    def initialize_connection(self, volume, connector):"},{"line_number":168,"context_line":"        \"\"\"Initialize connection between the server and the volume.\"\"\""},{"line_number":169,"context_line":"        conn_info \u003d super(VSPHORCMFC, self).initialize_connection("}],"source_content_type":"text/x-python","patch_set":16,"id":"3a71b18c_9bd0b6cb","line":166,"range":{"start_line":166,"start_character":16,"end_line":166,"end_character":25},"updated":"2016-12-08 14:31:46.000000000","message":"OK, I guess this would work. We usually have this on the driver itself, but if I\u0027m reading things right, I think this should be fine.","commit_id":"5c815388e2d8d4b62f7a66dd14d07ce961143435"}],"cinder/volume/drivers/hitachi/vsp_utils.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"58347344ebb58350ee0065b95354799e6ba434dd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2014, 2016, Hitachi, Ltd.\r"},{"line_number":2,"context_line":"#\r"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may\r"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain\r"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba5da102_f881fbc3","line":1,"updated":"2016-11-03 21:11:43.000000000","message":"This file is formatted with dos-style endlines, please remove these.","commit_id":"a7d3ce0532603d6b618e96657ee77948eb3395e1"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"4b5830beb6f82e3a4cf6157a4e603984d1cc895f","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    },"},{"line_number":119,"context_line":"    304: {"},{"line_number":120,"context_line":"        \u0027loglevel\u0027: base_logging.WARNING,"},{"line_number":121,"context_line":"        \u0027msg\u0027: _("},{"line_number":122,"context_line":"            \u0027Failed to specify a logical device to be deleted. \u0027"},{"line_number":123,"context_line":"            \u0027(method: %(method)s, id: %(id)s)\u0027),"},{"line_number":124,"context_line":"        \u0027suffix\u0027: WARNING_SUFFIX,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_ebf7d556","line":121,"range":{"start_line":121,"start_character":15,"end_line":121,"end_character":16},"updated":"2016-11-25 14:41:25.000000000","message":"Shouldn\u0027t you use _LW here? Same for other ones with base_logging.WARNING and _LE for base_logging.ERROR.","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"8e9f3b919631ee375ffdcc68f448d7d900d6cfba","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    },"},{"line_number":119,"context_line":"    304: {"},{"line_number":120,"context_line":"        \u0027loglevel\u0027: base_logging.WARNING,"},{"line_number":121,"context_line":"        \u0027msg\u0027: _("},{"line_number":122,"context_line":"            \u0027Failed to specify a logical device to be deleted. \u0027"},{"line_number":123,"context_line":"            \u0027(method: %(method)s, id: %(id)s)\u0027),"},{"line_number":124,"context_line":"        \u0027suffix\u0027: WARNING_SUFFIX,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_623ffab3","line":121,"range":{"start_line":121,"start_character":15,"end_line":121,"end_character":16},"in_reply_to":"5a74a57a_ebf7d556","updated":"2016-11-29 12:33:34.000000000","message":"Done","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"44b0b063e48238a51cd095e37f38f136cd1c5389","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    },"},{"line_number":119,"context_line":"    304: {"},{"line_number":120,"context_line":"        \u0027loglevel\u0027: base_logging.WARNING,"},{"line_number":121,"context_line":"        \u0027msg\u0027: _("},{"line_number":122,"context_line":"            \u0027Failed to specify a logical device to be deleted. \u0027"},{"line_number":123,"context_line":"            \u0027(method: %(method)s, id: %(id)s)\u0027),"},{"line_number":124,"context_line":"        \u0027suffix\u0027: WARNING_SUFFIX,"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_f1c6e366","line":121,"range":{"start_line":121,"start_character":15,"end_line":121,"end_character":16},"in_reply_to":"5a74a57a_ebf7d556","updated":"2016-11-25 16:32:45.000000000","message":"Yes, according to how this is used, these need to have the proper translation markers.","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"4b5830beb6f82e3a4cf6157a4e603984d1cc895f","unresolved":false,"context_lines":[{"line_number":458,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"def synchronized(key):"},{"line_number":462,"context_line":"    \"\"\"Synchronize the wrapped function.\"\"\""},{"line_number":463,"context_line":"    def synchronized_wrapper(func):"},{"line_number":464,"context_line":"        \"\"\"Synchronize the wrapped function.\"\"\""},{"line_number":465,"context_line":"        @functools.wraps(func)"},{"line_number":466,"context_line":"        def wrap(self, *args, **kwargs):"},{"line_number":467,"context_line":"            \"\"\"Synchronize the wrapped function.\"\"\""},{"line_number":468,"context_line":"            @cinder_utils.synchronized(self.lock[key], external\u003dTrue)"},{"line_number":469,"context_line":"            def func_locked(*_args, **_kargs):"},{"line_number":470,"context_line":"                \"\"\"Execute the wrapped function in a synchronized section.\"\"\""},{"line_number":471,"context_line":"                return func(*_args, **_kargs)"},{"line_number":472,"context_line":"            return func_locked(self, *args, **kwargs)"},{"line_number":473,"context_line":"        return wrap"},{"line_number":474,"context_line":"    return synchronized_wrapper"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"def output_log(msg_id, **kwargs):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_ab5ddd48","line":474,"range":{"start_line":461,"start_character":0,"end_line":474,"end_character":31},"updated":"2016-11-25 14:41:25.000000000","message":"You\u0027re using external\u003dTrue here. Any particular reason not to use cinder.coordination to make sure these locks will be shared in A/A c-vol configurations?","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"8e9f3b919631ee375ffdcc68f448d7d900d6cfba","unresolved":false,"context_lines":[{"line_number":458,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"def synchronized(key):"},{"line_number":462,"context_line":"    \"\"\"Synchronize the wrapped function.\"\"\""},{"line_number":463,"context_line":"    def synchronized_wrapper(func):"},{"line_number":464,"context_line":"        \"\"\"Synchronize the wrapped function.\"\"\""},{"line_number":465,"context_line":"        @functools.wraps(func)"},{"line_number":466,"context_line":"        def wrap(self, *args, **kwargs):"},{"line_number":467,"context_line":"            \"\"\"Synchronize the wrapped function.\"\"\""},{"line_number":468,"context_line":"            @cinder_utils.synchronized(self.lock[key], external\u003dTrue)"},{"line_number":469,"context_line":"            def func_locked(*_args, **_kargs):"},{"line_number":470,"context_line":"                \"\"\"Execute the wrapped function in a synchronized section.\"\"\""},{"line_number":471,"context_line":"                return func(*_args, **_kargs)"},{"line_number":472,"context_line":"            return func_locked(self, *args, **kwargs)"},{"line_number":473,"context_line":"        return wrap"},{"line_number":474,"context_line":"    return synchronized_wrapper"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"def output_log(msg_id, **kwargs):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_62661aee","line":474,"range":{"start_line":461,"start_character":0,"end_line":474,"end_character":31},"in_reply_to":"5a74a57a_ab5ddd48","updated":"2016-11-29 12:33:34.000000000","message":"Done","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"4b5830beb6f82e3a4cf6157a4e603984d1cc895f","unresolved":false,"context_lines":[{"line_number":518,"context_line":"        return True"},{"line_number":519,"context_line":"    return False"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"def mask_password(cmd):"},{"line_number":523,"context_line":"    \"\"\"Return a string in which the password is masked.\"\"\""},{"line_number":524,"context_line":"    if len(cmd) \u003e 3 and cmd[0] \u003d\u003d \u0027raidcom\u0027 and cmd[1] \u003d\u003d \u0027-login\u0027:"},{"line_number":525,"context_line":"        tmp \u003d list(cmd)"},{"line_number":526,"context_line":"        tmp[3] \u003d \u0027*****\u0027"},{"line_number":527,"context_line":"    else:"},{"line_number":528,"context_line":"        tmp \u003d cmd"},{"line_number":529,"context_line":"    return \u0027 \u0027.join([six.text_type(c) for c in tmp])"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":""},{"line_number":532,"context_line":"def execute(*cmd, **kwargs):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_2b1f0d6d","line":529,"range":{"start_line":521,"start_character":0,"end_line":529,"end_character":52},"updated":"2016-11-25 14:41:25.000000000","message":"You can use oslo_utils.strutils.mask_password here.","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"44b0b063e48238a51cd095e37f38f136cd1c5389","unresolved":false,"context_lines":[{"line_number":518,"context_line":"        return True"},{"line_number":519,"context_line":"    return False"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"def mask_password(cmd):"},{"line_number":523,"context_line":"    \"\"\"Return a string in which the password is masked.\"\"\""},{"line_number":524,"context_line":"    if len(cmd) \u003e 3 and cmd[0] \u003d\u003d \u0027raidcom\u0027 and cmd[1] \u003d\u003d \u0027-login\u0027:"},{"line_number":525,"context_line":"        tmp \u003d list(cmd)"},{"line_number":526,"context_line":"        tmp[3] \u003d \u0027*****\u0027"},{"line_number":527,"context_line":"    else:"},{"line_number":528,"context_line":"        tmp \u003d cmd"},{"line_number":529,"context_line":"    return \u0027 \u0027.join([six.text_type(c) for c in tmp])"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":""},{"line_number":532,"context_line":"def execute(*cmd, **kwargs):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_91120f08","line":529,"range":{"start_line":521,"start_character":0,"end_line":529,"end_character":52},"in_reply_to":"5a74a57a_2b1f0d6d","updated":"2016-11-25 16:32:45.000000000","message":"+1 - would be better to stick with the common utilities wherever possible.","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"8e9f3b919631ee375ffdcc68f448d7d900d6cfba","unresolved":false,"context_lines":[{"line_number":518,"context_line":"        return True"},{"line_number":519,"context_line":"    return False"},{"line_number":520,"context_line":""},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"def mask_password(cmd):"},{"line_number":523,"context_line":"    \"\"\"Return a string in which the password is masked.\"\"\""},{"line_number":524,"context_line":"    if len(cmd) \u003e 3 and cmd[0] \u003d\u003d \u0027raidcom\u0027 and cmd[1] \u003d\u003d \u0027-login\u0027:"},{"line_number":525,"context_line":"        tmp \u003d list(cmd)"},{"line_number":526,"context_line":"        tmp[3] \u003d \u0027*****\u0027"},{"line_number":527,"context_line":"    else:"},{"line_number":528,"context_line":"        tmp \u003d cmd"},{"line_number":529,"context_line":"    return \u0027 \u0027.join([six.text_type(c) for c in tmp])"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":""},{"line_number":532,"context_line":"def execute(*cmd, **kwargs):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_027ba67b","line":529,"range":{"start_line":521,"start_character":0,"end_line":529,"end_character":52},"in_reply_to":"5a74a57a_91120f08","updated":"2016-11-29 12:33:34.000000000","message":"We used oslo_utils.strutils.mask_dict_password instead just to get the replacement string of \u0027***\u0027.","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"44b0b063e48238a51cd095e37f38f136cd1c5389","unresolved":false,"context_lines":[{"line_number":595,"context_line":""},{"line_number":596,"context_line":"def output_storage_cli_info(name, version):"},{"line_number":597,"context_line":"    \"\"\"Output storage CLI info to the log file.\"\"\""},{"line_number":598,"context_line":"    LOG.log(base_logging.INFO, \u0027\\t%(name)-35s%(version)s\u0027,"},{"line_number":599,"context_line":"            {\u0027name\u0027: name + \u0027 version: \u0027, \u0027version\u0027: version})"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_f118a320","line":598,"range":{"start_line":598,"start_character":4,"end_line":598,"end_character":31},"updated":"2016-11-25 16:32:45.000000000","message":"Just call LOG.info. Also need _LI() marker.","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"8e9f3b919631ee375ffdcc68f448d7d900d6cfba","unresolved":false,"context_lines":[{"line_number":595,"context_line":""},{"line_number":596,"context_line":"def output_storage_cli_info(name, version):"},{"line_number":597,"context_line":"    \"\"\"Output storage CLI info to the log file.\"\"\""},{"line_number":598,"context_line":"    LOG.log(base_logging.INFO, \u0027\\t%(name)-35s%(version)s\u0027,"},{"line_number":599,"context_line":"            {\u0027name\u0027: name + \u0027 version: \u0027, \u0027version\u0027: version})"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_228502ce","line":598,"range":{"start_line":598,"start_character":4,"end_line":598,"end_character":31},"in_reply_to":"5a74a57a_f118a320","updated":"2016-11-29 12:33:34.000000000","message":"Done","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"44b0b063e48238a51cd095e37f38f136cd1c5389","unresolved":false,"context_lines":[{"line_number":602,"context_line":"def output_opt_info(conf, names):"},{"line_number":603,"context_line":"    \"\"\"Output parameter names and values to the log file.\"\"\""},{"line_number":604,"context_line":"    for name in names:"},{"line_number":605,"context_line":"        LOG.log(base_logging.INFO, \u0027\\t%(name)-35s%(attr)s\u0027,"},{"line_number":606,"context_line":"                {\u0027name\u0027: name + \u0027: \u0027, \u0027attr\u0027: getattr(conf, name)})"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_b1e9cbe8","line":605,"updated":"2016-11-25 16:32:45.000000000","message":"same.","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"8e9f3b919631ee375ffdcc68f448d7d900d6cfba","unresolved":false,"context_lines":[{"line_number":602,"context_line":"def output_opt_info(conf, names):"},{"line_number":603,"context_line":"    \"\"\"Output parameter names and values to the log file.\"\"\""},{"line_number":604,"context_line":"    for name in names:"},{"line_number":605,"context_line":"        LOG.log(base_logging.INFO, \u0027\\t%(name)-35s%(attr)s\u0027,"},{"line_number":606,"context_line":"                {\u0027name\u0027: name + \u0027: \u0027, \u0027attr\u0027: getattr(conf, name)})"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_626b7a1e","line":605,"in_reply_to":"5a74a57a_b1e9cbe8","updated":"2016-11-29 12:33:34.000000000","message":"Done","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":462,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"def synchronized(key):"},{"line_number":466,"context_line":"    \"\"\"Synchronize the wrapped function.\"\"\""},{"line_number":467,"context_line":"    def synchronized_wrapper(func):"},{"line_number":468,"context_line":"        \"\"\"Synchronize the wrapped function.\"\"\""},{"line_number":469,"context_line":"        @functools.wraps(func)"},{"line_number":470,"context_line":"        def wrap(self, *args, **kwargs):"},{"line_number":471,"context_line":"            \"\"\"Synchronize the wrapped function.\"\"\""},{"line_number":472,"context_line":"            @coordination.synchronized(self.lock[key])"},{"line_number":473,"context_line":"            def func_locked(*_args, **_kargs):"},{"line_number":474,"context_line":"                \"\"\"Execute the wrapped function in a synchronized section.\"\"\""},{"line_number":475,"context_line":"                return func(*_args, **_kargs)"},{"line_number":476,"context_line":"            return func_locked(self, *args, **kwargs)"},{"line_number":477,"context_line":"        return wrap"},{"line_number":478,"context_line":"    return synchronized_wrapper"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"def output_log(msg_id, **kwargs):"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_871148b2","line":478,"range":{"start_line":465,"start_character":0,"end_line":478,"end_character":31},"updated":"2016-11-30 13:42:02.000000000","message":"4 levels? Why can\u0027t you simply decorate methods with @coordination.synchronize?","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":462,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"def synchronized(key):"},{"line_number":466,"context_line":"    \"\"\"Synchronize the wrapped function.\"\"\""},{"line_number":467,"context_line":"    def synchronized_wrapper(func):"},{"line_number":468,"context_line":"        \"\"\"Synchronize the wrapped function.\"\"\""},{"line_number":469,"context_line":"        @functools.wraps(func)"},{"line_number":470,"context_line":"        def wrap(self, *args, **kwargs):"},{"line_number":471,"context_line":"            \"\"\"Synchronize the wrapped function.\"\"\""},{"line_number":472,"context_line":"            @coordination.synchronized(self.lock[key])"},{"line_number":473,"context_line":"            def func_locked(*_args, **_kargs):"},{"line_number":474,"context_line":"                \"\"\"Execute the wrapped function in a synchronized section.\"\"\""},{"line_number":475,"context_line":"                return func(*_args, **_kargs)"},{"line_number":476,"context_line":"            return func_locked(self, *args, **kwargs)"},{"line_number":477,"context_line":"        return wrap"},{"line_number":478,"context_line":"    return synchronized_wrapper"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"def output_log(msg_id, **kwargs):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_b12ca04b","line":478,"range":{"start_line":465,"start_character":0,"end_line":478,"end_character":31},"in_reply_to":"5a74a57a_871148b2","updated":"2016-12-02 13:38:55.000000000","message":"Removed the synchronized function and added the decorator to each method.","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"6533bf3037ea2559ca30bf4f4bb60cbf282af9b8","unresolved":false,"context_lines":[{"line_number":517,"context_line":""},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"def check_timeout(start_time, timeout):"},{"line_number":520,"context_line":"    \"\"\"Return True if the specified time has passed, False otherwise.\"\"\""},{"line_number":521,"context_line":"    if timeutils.is_older_than(start_time, timeout):"},{"line_number":522,"context_line":"        return True"},{"line_number":523,"context_line":"    return False"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"def mask_password(cmd):"}],"source_content_type":"text/x-python","patch_set":13,"id":"5a74a57a_a2e63b14","line":523,"range":{"start_line":520,"start_character":0,"end_line":523,"end_character":16},"updated":"2016-11-30 13:42:02.000000000","message":"If you really want this, then just do:\n\n return timeutils.is_older_than(start_time, timeout)","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"566f0a630fb7b2223a55742ff9a0d6f4809ca7d9","unresolved":false,"context_lines":[{"line_number":517,"context_line":""},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"def check_timeout(start_time, timeout):"},{"line_number":520,"context_line":"    \"\"\"Return True if the specified time has passed, False otherwise.\"\"\""},{"line_number":521,"context_line":"    if timeutils.is_older_than(start_time, timeout):"},{"line_number":522,"context_line":"        return True"},{"line_number":523,"context_line":"    return False"},{"line_number":524,"context_line":""},{"line_number":525,"context_line":""},{"line_number":526,"context_line":"def mask_password(cmd):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a71b18c_3121704e","line":523,"range":{"start_line":520,"start_character":0,"end_line":523,"end_character":16},"in_reply_to":"5a74a57a_a2e63b14","updated":"2016-12-02 13:38:55.000000000","message":"Done.","commit_id":"c00eb3878f939d767483bcadff123f16b33946ed"}],"releasenotes/notes/hitachi-vsp-driver-87659bb496bb459b.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"44b0b063e48238a51cd095e37f38f136cd1c5389","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds new Hitachi VSP FC Driver. The VSP driver supports all Hitachi VSP"},{"line_number":4,"context_line":"    Family and HUSVM."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"5a74a57a_d1948744","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":8},"updated":"2016-11-25 16:32:45.000000000","message":"s/Adds/Added/","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"},{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"8e9f3b919631ee375ffdcc68f448d7d900d6cfba","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds new Hitachi VSP FC Driver. The VSP driver supports all Hitachi VSP"},{"line_number":4,"context_line":"    Family and HUSVM."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"5a74a57a_e265ca44","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":8},"in_reply_to":"5a74a57a_d1948744","updated":"2016-11-29 12:33:34.000000000","message":"Done","commit_id":"592936885fb94e9c84a2ca42c5a73d9f90cfc092"}]}
