)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a18b652d4d4d77f760a9e266df7dd32c3beb7f98","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Guy Kim \u003cguy.kim088@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-12-19 03:58:24 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"ITRI DISCO cinder volume driver"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit is the refactored version of DISCO volume driver of ITRI."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"1a6eadb0_0a9c6268","line":7,"updated":"2016-12-19 16:02:10.000000000","message":"If you do another update, can you change this to something actually describing this change? Every time I see this I wonder why we need another DISCO driver.","commit_id":"2ec5431b396216216856e2b7f175d390d8fc2146"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"dc7a5b39511020078342b1bf7557c21fcb7444ba","unresolved":false,"context_lines":[{"line_number":13,"context_line":"* Class for the different calls using REST API"},{"line_number":14,"context_line":"* Class for attach/detach a DISCO volume"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"We also add the manage/unmanage feature in our driver."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"It also includes the unit tests."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"da4df55a_c7da02e8","line":16,"updated":"2016-12-26 11:08:51.000000000","message":"Please, make refactoring and implement new features in separate patches","commit_id":"f97fa0e83fdf4590e10aa987b8a7069ba3f30430"}],"cinder/volume/drivers/disco/disco.py":[{"author":{"_account_id":22257,"name":"Manish","email":"deolalkar.manish@hpe.com","username":"manishd"},"change_message_id":"95bee2866884495407d7db7de0c084dadc4b0799","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                  \"[status] %(stat)s - [result] %(res)s.\",\r"},{"line_number":194,"context_line":"                  {\u0027stat\u0027: six.text_type(status), \u0027res\u0027: result})\r"},{"line_number":195,"context_line":"\r"},{"line_number":196,"context_line":"        if status !\u003d 0:\r"},{"line_number":197,"context_line":"            msg \u003d (_(\"Error while deleting snapshot \"\r"},{"line_number":198,"context_line":"                     \"[status] %(stat)s - [result] %(res)s\") %\r"},{"line_number":199,"context_line":"                   {\u0027stat\u0027: six.text_type(status), \u0027res\u0027: result})\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_e7f45588","line":196,"range":{"start_line":196,"start_character":8,"end_line":196,"end_character":23},"updated":"2016-07-29 09:07:22.000000000","message":"Preferred Pythonic way may be : if status:","commit_id":"098feebbb6f8a9cac98c7a16eb9160e26f72f65c"},{"author":{"_account_id":22257,"name":"Manish","email":"deolalkar.manish@hpe.com","username":"manishd"},"change_message_id":"95bee2866884495407d7db7de0c084dadc4b0799","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            LOG.error(msg)\r"},{"line_number":201,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)\r"},{"line_number":202,"context_line":"\r"},{"line_number":203,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):\r"},{"line_number":204,"context_line":"        \"\"\"Create a volume from a snapshot.\"\"\"\r"},{"line_number":205,"context_line":"        name \u003d self.configuration.volume_name_prefix, volume[\u0027id\u0027]\r"},{"line_number":206,"context_line":"        snap_id \u003d snapshot[\u0027provider_location\u0027]\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_671ce577","line":203,"range":{"start_line":203,"start_character":8,"end_line":203,"end_character":36},"updated":"2016-07-29 09:07:22.000000000","message":"better to check volume[\u0027size\u0027]  against snapshot[\u0027volume_size\u0027] as it must be be greater than or equal to the snapshot","commit_id":"098feebbb6f8a9cac98c7a16eb9160e26f72f65c"},{"author":{"_account_id":19576,"name":"Guy Kim","email":"guy.kim088@gmail.com","username":"Guy"},"change_message_id":"27c210efbebe31dd34050821df976cc3f5f7f107","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            LOG.error(msg)\r"},{"line_number":201,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)\r"},{"line_number":202,"context_line":"\r"},{"line_number":203,"context_line":"    def create_volume_from_snapshot(self, volume, snapshot):\r"},{"line_number":204,"context_line":"        \"\"\"Create a volume from a snapshot.\"\"\"\r"},{"line_number":205,"context_line":"        name \u003d self.configuration.volume_name_prefix, volume[\u0027id\u0027]\r"},{"line_number":206,"context_line":"        snap_id \u003d snapshot[\u0027provider_location\u0027]\r"}],"source_content_type":"text/x-python","patch_set":5,"id":"bacf61ea_29d27f5c","line":203,"range":{"start_line":203,"start_character":8,"end_line":203,"end_character":36},"in_reply_to":"bacf61ea_671ce577","updated":"2016-08-01 04:56:07.000000000","message":"Hi Manish,\nCinder already check volume[\u0027size\u0027] against snapshot[\u0027volume_size\u0027] (/opt/stack/cinder/cinder/volume/flows/api/create_volume.py:147). So we don\u0027t check it in our driver.","commit_id":"098feebbb6f8a9cac98c7a16eb9160e26f72f65c"},{"author":{"_account_id":22257,"name":"Manish","email":"deolalkar.manish@hpe.com","username":"manishd"},"change_message_id":"862ceac78add05a58a0333a79be52a6f5a450c28","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def do_setup(self, context):"},{"line_number":96,"context_line":"        \"\"\"Create client for DISCO request manager.\"\"\""},{"line_number":97,"context_line":"        LOG.debug(\"Enter in DiscoDriver do_setup.\")"},{"line_number":98,"context_line":"        self.disco_src_api \u003d disco_api.DISCOAPI("},{"line_number":99,"context_line":"            CONF.disco_src_api_ip, CONF.disco_src_api_port)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def check_for_setup_error(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ac06dbe_4652f4de","line":98,"range":{"start_line":97,"start_character":48,"end_line":98,"end_character":39},"updated":"2016-08-19 10:23:03.000000000","message":"Naming conventions not consistent. Please refer other drivers naming conventions. Class names should follow the UpperCaseCamelCase convention","commit_id":"86458f864c81f44d3c8c1189f88d7308d30e9b29"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2335a6ddf78b83dccea02c1d976392d2a4ff05ff","unresolved":false,"context_lines":[{"line_number":80,"context_line":"class DiscoDriver(driver.VolumeDriver):"},{"line_number":81,"context_line":"    \"\"\"Execute commands related to DISCO Volumes.\"\"\""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    # Version 1.0: disco volume driver using SOAP"},{"line_number":84,"context_line":"    # Version 1.1: disco volume driver using REST and only compatible"},{"line_number":85,"context_line":"    # with version greater than disco-1.6.4"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5da102_33c3ca58","line":83,"updated":"2016-11-02 19:26:46.000000000","message":"Not required, but if you format this in your docstring it will show up in the driver list for easy reference.\n\nExample:\n\nhttp://docs.openstack.org/developer/cinder/drivers.html#dellstoragecenterfcdriver","commit_id":"4d8b68323e19bca2376227e55ceef6d425714387"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f89ea2c31676ef61a6800faee58892609d294bcc","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        super(DiscoDriver, self).__init__(*args, **kwargs)"},{"line_number":96,"context_line":"        self.configuration.append_config_values(disco_opts)"},{"line_number":97,"context_line":"        self.ctxt \u003d context.get_admin_context()"},{"line_number":98,"context_line":"        self.attach_detach_volume \u003d \\"},{"line_number":99,"context_line":"            disco_attach_detach.AttachDetachDiscoVolume()"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def do_setup(self, context):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a77a97e_dc276162","line":98,"range":{"start_line":98,"start_character":36,"end_line":98,"end_character":37},"updated":"2016-11-16 15:14:33.000000000","message":"We\u0027ve made an effort to get rid of using \\ to span multiple lines. Please wrap in () if needed to get rid of this.","commit_id":"34e547f716e531fa210fa80abb5135b07da6fcc1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f89ea2c31676ef61a6800faee58892609d294bcc","unresolved":false,"context_lines":[{"line_number":443,"context_line":"            src_vol \u003d self.disco_src_api.volume_detail_by_name("},{"line_number":444,"context_line":"                existing_ref[\u0027source-name\u0027])"},{"line_number":445,"context_line":"            if src_vol[\u0027status\u0027] !\u003d 0:"},{"line_number":446,"context_line":"                msg \u003d (_(\" Error while getting volume details by name \"))"},{"line_number":447,"context_line":"                LOG.error(msg)"},{"line_number":448,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":449,"context_line":"            return {"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a77a97e_7ce48d3a","line":446,"range":{"start_line":446,"start_character":69,"end_line":446,"end_character":70},"updated":"2016-11-16 15:14:33.000000000","message":"Remove extra space.","commit_id":"34e547f716e531fa210fa80abb5135b07da6fcc1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f89ea2c31676ef61a6800faee58892609d294bcc","unresolved":false,"context_lines":[{"line_number":452,"context_line":"    def unmanage(self, volume):"},{"line_number":453,"context_line":"        \"\"\"Unmanage an existing volume.\"\"\""},{"line_number":454,"context_line":"        LOG.debug(\"unmanage is called\")"},{"line_number":455,"context_line":"        pass"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    def manage_existing_get_size(self, volume, existing_ref):"},{"line_number":458,"context_line":"        \"\"\"Return size of an existing volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a77a97e_1cc6399a","line":455,"range":{"start_line":455,"start_character":8,"end_line":455,"end_character":12},"updated":"2016-11-16 15:14:33.000000000","message":"pass not needed.","commit_id":"34e547f716e531fa210fa80abb5135b07da6fcc1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f89ea2c31676ef61a6800faee58892609d294bcc","unresolved":false,"context_lines":[{"line_number":464,"context_line":"            src_vol \u003d self.disco_src_api.volume_detail_by_id("},{"line_number":465,"context_line":"                existing_ref[\u0027source-id\u0027])"},{"line_number":466,"context_line":"            if src_vol[\u0027status\u0027] !\u003d 0:"},{"line_number":467,"context_line":"                msg \u003d (_(\" Error while getting volume details. \"))"},{"line_number":468,"context_line":"                LOG.error(msg)"},{"line_number":469,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":470,"context_line":"            return src_vol[\u0027volumeInfoResult\u0027][\u0027volSizeMb\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a77a97e_fc45fd16","line":467,"range":{"start_line":467,"start_character":62,"end_line":467,"end_character":63},"updated":"2016-11-16 15:14:33.000000000","message":"Remove extra space.","commit_id":"34e547f716e531fa210fa80abb5135b07da6fcc1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f89ea2c31676ef61a6800faee58892609d294bcc","unresolved":false,"context_lines":[{"line_number":472,"context_line":"            src_vol \u003d self.disco_src_api.volume_detail_by_name("},{"line_number":473,"context_line":"                existing_ref[\u0027source-name\u0027])"},{"line_number":474,"context_line":"            if src_vol[\u0027status\u0027] !\u003d 0:"},{"line_number":475,"context_line":"                msg \u003d (_(\" Error while getting volume details by name. \"))"},{"line_number":476,"context_line":"                LOG.error(msg)"},{"line_number":477,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":478,"context_line":"            return src_vol[\u0027volumeInfoResult\u0027][\u0027volSizeMb\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a77a97e_9c5fa9e4","line":475,"range":{"start_line":475,"start_character":70,"end_line":475,"end_character":71},"updated":"2016-11-16 15:14:33.000000000","message":"Remove extra space.","commit_id":"34e547f716e531fa210fa80abb5135b07da6fcc1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f89ea2c31676ef61a6800faee58892609d294bcc","unresolved":false,"context_lines":[{"line_number":557,"context_line":"        elif operation \u003d\u003d \u0027clone_detail\u0027:"},{"line_number":558,"context_line":"            return int(reply[\u0027result\u0027])"},{"line_number":559,"context_line":"        elif operation \u003d\u003d \u0027backup_detail\u0027:"},{"line_number":560,"context_line":"            LOG.debug(\"details : %s\" % format(reply))"},{"line_number":561,"context_line":"            return reply[\u0027backupDetail\u0027][\u0027status\u0027]"},{"line_number":562,"context_line":"        else:"},{"line_number":563,"context_line":"            msg \u003d (_(\"Unknown operation \""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a77a97e_7c69ed8a","line":560,"range":{"start_line":560,"start_character":37,"end_line":560,"end_character":38},"updated":"2016-11-16 15:14:33.000000000","message":"s/%/,/","commit_id":"34e547f716e531fa210fa80abb5135b07da6fcc1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2db9743124abf249cd05e97d72438fdff4e51769","unresolved":false,"context_lines":[{"line_number":54,"context_line":"              help\u003d\u0027The IP address of the REST server\u0027),"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027choice_client\u0027,"},{"line_number":56,"context_line":"               help\u003d\u0027Use soap client or rest client for communicating\u0027"},{"line_number":57,"context_line":"                    \u0027with DISCO\u0027),"},{"line_number":58,"context_line":"    cfg.PortOpt(\u0027disco_src_api_port\u0027,"},{"line_number":59,"context_line":"                default\u003d\u00278080\u0027,"},{"line_number":60,"context_line":"                help\u003d\u0027The port of DISCO source API\u0027),"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_a7f79757","line":57,"updated":"2016-12-15 21:42:55.000000000","message":"Should probably give what the valid options are for this setting.","commit_id":"198db9729a5f1c02a01b0261ba23e0e56b0e4b4e"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2db9743124abf249cd05e97d72438fdff4e51769","unresolved":false,"context_lines":[{"line_number":499,"context_line":"            src_vol \u003d self.client.volumeDetailByName("},{"line_number":500,"context_line":"                existing_ref[\u0027source-name\u0027])"},{"line_number":501,"context_line":"            if src_vol[\u0027status\u0027] !\u003d 0:"},{"line_number":502,"context_line":"                msg \u003d (_(\" Error while getting volume details by name.\"))"},{"line_number":503,"context_line":"                LOG.error(msg)"},{"line_number":504,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":505,"context_line":"            return src_vol[\u0027volumeInfoResult\u0027][\u0027volSizeMb\u0027]"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a6eadb0_07812bc3","line":502,"updated":"2016-12-15 21:42:55.000000000","message":"nit: All of these msg assignments have an extra and unnecessary outer (). Not a big deal, just something that could be cleaned up if you do another patch.","commit_id":"198db9729a5f1c02a01b0261ba23e0e56b0e4b4e"},{"author":{"_account_id":14865,"name":"Adriano Freires Rosso","email":"adriano.rosso@fit-tecnologia.org.br","username":"adriano_rosso"},"change_message_id":"3d64b0938dababc2ce58489586d052b2e36828d9","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        \"\"\"Return the path to the DISCO volume.\"\"\""},{"line_number":453,"context_line":"        return \"/dev/dms%s\" % volume[\u0027name\u0027]"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    def manage_existing(self, volume, existing_ref):"},{"line_number":456,"context_line":"        \"\"\"Manage an existing volume.\"\"\""},{"line_number":457,"context_line":"        if \u0027source-name\u0027 not in existing_ref and\u0027source-id\u0027not in existing_ref:"},{"line_number":458,"context_line":"            msg \u003d _(\" No source-id/source-name in existing_ref\")"},{"line_number":459,"context_line":"            LOG.error(msg)"},{"line_number":460,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":461,"context_line":"        elif \u0027source-name\u0027 not in existing_ref:"},{"line_number":462,"context_line":"            src_vol \u003d self.client.volumeDetail("},{"line_number":463,"context_line":"                existing_ref[\u0027source-id\u0027])"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"            if src_vol[\u0027status\u0027] !\u003d 0:"},{"line_number":466,"context_line":"                msg \u003d _(\" Error while getting volume details.\")"},{"line_number":467,"context_line":"                LOG.error(msg)"},{"line_number":468,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":469,"context_line":"            return {\u0027display_name\u0027: src_vol[\u0027volumeInfoResult\u0027][\u0027volumeName\u0027],"},{"line_number":470,"context_line":"                    \u0027provider_location\u0027: existing_ref[\u0027source-id\u0027]}"},{"line_number":471,"context_line":"        else:"},{"line_number":472,"context_line":"            src_vol \u003d self.client.volumeDetailByName("},{"line_number":473,"context_line":"                existing_ref[\u0027source-name\u0027])"},{"line_number":474,"context_line":"            if src_vol[\u0027status\u0027] !\u003d 0:"},{"line_number":475,"context_line":"                msg \u003d _(\" Error while getting volume details by name\")"},{"line_number":476,"context_line":"                LOG.error(msg)"},{"line_number":477,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":478,"context_line":"            return {"},{"line_number":479,"context_line":"                \u0027provider_location\u0027: src_vol[\u0027volumeInfoResult\u0027][\u0027volumeId\u0027]}"},{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    def unmanage(self, volume):"},{"line_number":482,"context_line":"        \"\"\"Unmanage an existing volume.\"\"\""},{"line_number":483,"context_line":"        LOG.debug(\"unmanage is called\")"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def manage_existing_get_size(self, volume, existing_ref):"},{"line_number":486,"context_line":"        \"\"\"Return size of an existing volume.\"\"\""},{"line_number":487,"context_line":"        if \u0027source-name\u0027 not in existing_ref and\u0027source-id\u0027not in existing_ref:"},{"line_number":488,"context_line":"            msg \u003d _(\" No source-id/source-name in existing_ref\")"},{"line_number":489,"context_line":"            LOG.error(msg)"},{"line_number":490,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":491,"context_line":"        elif \u0027source-name\u0027 not in existing_ref:"},{"line_number":492,"context_line":"            src_vol \u003d self.client.volumeDetail("},{"line_number":493,"context_line":"                existing_ref[\u0027source-id\u0027])"},{"line_number":494,"context_line":"            if src_vol[\u0027status\u0027] !\u003d 0:"},{"line_number":495,"context_line":"                msg \u003d _(\" Error while getting volume details.\")"},{"line_number":496,"context_line":"                LOG.error(msg)"},{"line_number":497,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":498,"context_line":"            return src_vol[\u0027volumeInfoResult\u0027][\u0027volSizeMb\u0027]"},{"line_number":499,"context_line":"        else:"},{"line_number":500,"context_line":"            src_vol \u003d self.client.volumeDetailByName("},{"line_number":501,"context_line":"                existing_ref[\u0027source-name\u0027])"},{"line_number":502,"context_line":"            if src_vol[\u0027status\u0027] !\u003d 0:"},{"line_number":503,"context_line":"                msg \u003d _(\" Error while getting volume details by name.\")"},{"line_number":504,"context_line":"                LOG.error(msg)"},{"line_number":505,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":506,"context_line":"            return src_vol[\u0027volumeInfoResult\u0027][\u0027volSizeMb\u0027]"},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"    def ensure_export(self, context, volume):"},{"line_number":509,"context_line":"        \"\"\"Ensure an export.\"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a6eadb0_2fda0b79","line":506,"range":{"start_line":455,"start_character":0,"end_line":506,"end_character":59},"updated":"2016-12-19 17:30:14.000000000","message":"It seems that you are adding manage/unmanage features to the driver. I\u0027d be better to create a separated dependent patch to do this.\nAnyway, it should at least be mentioned in the commit message and release notes.","commit_id":"2ec5431b396216216856e2b7f175d390d8fc2146"},{"author":{"_account_id":14865,"name":"Adriano Freires Rosso","email":"adriano.rosso@fit-tecnologia.org.br","username":"adriano_rosso"},"change_message_id":"7737a6e4a664cb13cde198e59fbe74020c026726","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    def do_setup(self, context):"},{"line_number":119,"context_line":"        \"\"\"Create client for DISCO request manager.\"\"\""},{"line_number":120,"context_line":"        LOG.debug(\"Enter in DiscoDriver do_setup.\")"},{"line_number":121,"context_line":"        if CONF.choice_client \u003d\u003d \"rest\":"},{"line_number":122,"context_line":"            self.client \u003d disco_api.DiscoApi("},{"line_number":123,"context_line":"                CONF.rest_ip, CONF.disco_src_api_port)"},{"line_number":124,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":23,"id":"da4df55a_3209b32d","line":121,"range":{"start_line":121,"start_character":33,"end_line":121,"end_character":39},"updated":"2016-12-22 11:38:11.000000000","message":"Maybe you should consider accepting values like REST also","commit_id":"c138b7307c840924539eb646c91dbd4fa72b969b"},{"author":{"_account_id":19576,"name":"Guy Kim","email":"guy.kim088@gmail.com","username":"Guy"},"change_message_id":"a38c67dbbca05915a98f772ece70099d33fd6c2e","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    def do_setup(self, context):"},{"line_number":119,"context_line":"        \"\"\"Create client for DISCO request manager.\"\"\""},{"line_number":120,"context_line":"        LOG.debug(\"Enter in DiscoDriver do_setup.\")"},{"line_number":121,"context_line":"        if CONF.choice_client \u003d\u003d \"rest\":"},{"line_number":122,"context_line":"            self.client \u003d disco_api.DiscoApi("},{"line_number":123,"context_line":"                CONF.rest_ip, CONF.disco_src_api_port)"},{"line_number":124,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":23,"id":"da4df55a_bda9cf7d","line":121,"range":{"start_line":121,"start_character":33,"end_line":121,"end_character":39},"in_reply_to":"da4df55a_3209b32d","updated":"2016-12-23 04:06:44.000000000","message":"Ok, I will change it to consider the case \"rest\" and \"REST\"","commit_id":"c138b7307c840924539eb646c91dbd4fa72b969b"},{"author":{"_account_id":14865,"name":"Adriano Freires Rosso","email":"adriano.rosso@fit-tecnologia.org.br","username":"adriano_rosso"},"change_message_id":"7737a6e4a664cb13cde198e59fbe74020c026726","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def check_for_setup_error(self):"},{"line_number":130,"context_line":"        \"\"\"Make sure we have the pre-requisites.\"\"\""},{"line_number":131,"context_line":"        if not CONF.rest_ip and CONF.choice_client \u003d\u003d \"rest\":"},{"line_number":132,"context_line":"            msg \u003d _(\"Could not find the IP address of the REST server.\")"},{"line_number":133,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":134,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":23,"id":"da4df55a_72133b5d","line":131,"range":{"start_line":131,"start_character":54,"end_line":131,"end_character":60},"updated":"2016-12-22 11:38:11.000000000","message":"same","commit_id":"c138b7307c840924539eb646c91dbd4fa72b969b"},{"author":{"_account_id":19576,"name":"Guy Kim","email":"guy.kim088@gmail.com","username":"Guy"},"change_message_id":"a38c67dbbca05915a98f772ece70099d33fd6c2e","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def check_for_setup_error(self):"},{"line_number":130,"context_line":"        \"\"\"Make sure we have the pre-requisites.\"\"\""},{"line_number":131,"context_line":"        if not CONF.rest_ip and CONF.choice_client \u003d\u003d \"rest\":"},{"line_number":132,"context_line":"            msg \u003d _(\"Could not find the IP address of the REST server.\")"},{"line_number":133,"context_line":"            raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":134,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":23,"id":"da4df55a_3db4ffcf","line":131,"range":{"start_line":131,"start_character":54,"end_line":131,"end_character":60},"in_reply_to":"da4df55a_72133b5d","updated":"2016-12-23 04:06:44.000000000","message":"Ok, I will change it to consider the case \"rest\" and \"REST\"","commit_id":"c138b7307c840924539eb646c91dbd4fa72b969b"},{"author":{"_account_id":14865,"name":"Adriano Freires Rosso","email":"adriano.rosso@fit-tecnologia.org.br","username":"adriano_rosso"},"change_message_id":"7737a6e4a664cb13cde198e59fbe74020c026726","unresolved":false,"context_lines":[{"line_number":462,"context_line":"            src_vol \u003d self.client.volumeDetail("},{"line_number":463,"context_line":"                existing_ref[\u0027source-id\u0027])"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"            if src_vol[\u0027status\u0027] !\u003d 0:"},{"line_number":466,"context_line":"                msg \u003d _(\" Error while getting volume details.\")"},{"line_number":467,"context_line":"                LOG.error(msg)"},{"line_number":468,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":23,"id":"da4df55a_3257f303","line":465,"range":{"start_line":465,"start_character":12,"end_line":465,"end_character":38},"updated":"2016-12-22 11:38:11.000000000","message":"Could keep the pattern and use omit the !\u003d 0","commit_id":"c138b7307c840924539eb646c91dbd4fa72b969b"},{"author":{"_account_id":19576,"name":"Guy Kim","email":"guy.kim088@gmail.com","username":"Guy"},"change_message_id":"a38c67dbbca05915a98f772ece70099d33fd6c2e","unresolved":false,"context_lines":[{"line_number":462,"context_line":"            src_vol \u003d self.client.volumeDetail("},{"line_number":463,"context_line":"                existing_ref[\u0027source-id\u0027])"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"            if src_vol[\u0027status\u0027] !\u003d 0:"},{"line_number":466,"context_line":"                msg \u003d _(\" Error while getting volume details.\")"},{"line_number":467,"context_line":"                LOG.error(msg)"},{"line_number":468,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":23,"id":"da4df55a_1de81bb4","line":465,"range":{"start_line":465,"start_character":12,"end_line":465,"end_character":38},"in_reply_to":"da4df55a_3257f303","updated":"2016-12-23 04:06:44.000000000","message":"Remove !\u003d 0","commit_id":"c138b7307c840924539eb646c91dbd4fa72b969b"},{"author":{"_account_id":14865,"name":"Adriano Freires Rosso","email":"adriano.rosso@fit-tecnologia.org.br","username":"adriano_rosso"},"change_message_id":"7737a6e4a664cb13cde198e59fbe74020c026726","unresolved":false,"context_lines":[{"line_number":471,"context_line":"        else:"},{"line_number":472,"context_line":"            src_vol \u003d self.client.volumeDetailByName("},{"line_number":473,"context_line":"                existing_ref[\u0027source-name\u0027])"},{"line_number":474,"context_line":"            if src_vol[\u0027status\u0027] !\u003d 0:"},{"line_number":475,"context_line":"                msg \u003d _(\" Error while getting volume details by name\")"},{"line_number":476,"context_line":"                LOG.error(msg)"},{"line_number":477,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":23,"id":"da4df55a_72417b39","line":474,"range":{"start_line":474,"start_character":12,"end_line":474,"end_character":38},"updated":"2016-12-22 11:38:11.000000000","message":"same","commit_id":"c138b7307c840924539eb646c91dbd4fa72b969b"},{"author":{"_account_id":19576,"name":"Guy Kim","email":"guy.kim088@gmail.com","username":"Guy"},"change_message_id":"a38c67dbbca05915a98f772ece70099d33fd6c2e","unresolved":false,"context_lines":[{"line_number":471,"context_line":"        else:"},{"line_number":472,"context_line":"            src_vol \u003d self.client.volumeDetailByName("},{"line_number":473,"context_line":"                existing_ref[\u0027source-name\u0027])"},{"line_number":474,"context_line":"            if src_vol[\u0027status\u0027] !\u003d 0:"},{"line_number":475,"context_line":"                msg \u003d _(\" Error while getting volume details by name\")"},{"line_number":476,"context_line":"                LOG.error(msg)"},{"line_number":477,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":23,"id":"da4df55a_3deb1fb2","line":474,"range":{"start_line":474,"start_character":12,"end_line":474,"end_character":38},"in_reply_to":"da4df55a_72417b39","updated":"2016-12-23 04:06:44.000000000","message":"Remove !\u003d 0","commit_id":"c138b7307c840924539eb646c91dbd4fa72b969b"},{"author":{"_account_id":14865,"name":"Adriano Freires Rosso","email":"adriano.rosso@fit-tecnologia.org.br","username":"adriano_rosso"},"change_message_id":"7737a6e4a664cb13cde198e59fbe74020c026726","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        elif \u0027source-name\u0027 not in existing_ref:"},{"line_number":492,"context_line":"            src_vol \u003d self.client.volumeDetail("},{"line_number":493,"context_line":"                existing_ref[\u0027source-id\u0027])"},{"line_number":494,"context_line":"            if src_vol[\u0027status\u0027] !\u003d 0:"},{"line_number":495,"context_line":"                msg \u003d _(\" Error while getting volume details.\")"},{"line_number":496,"context_line":"                LOG.error(msg)"},{"line_number":497,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":23,"id":"da4df55a_72689bbb","line":494,"range":{"start_line":494,"start_character":11,"end_line":494,"end_character":38},"updated":"2016-12-22 11:38:11.000000000","message":"same","commit_id":"c138b7307c840924539eb646c91dbd4fa72b969b"},{"author":{"_account_id":19576,"name":"Guy Kim","email":"guy.kim088@gmail.com","username":"Guy"},"change_message_id":"a38c67dbbca05915a98f772ece70099d33fd6c2e","unresolved":false,"context_lines":[{"line_number":491,"context_line":"        elif \u0027source-name\u0027 not in existing_ref:"},{"line_number":492,"context_line":"            src_vol \u003d self.client.volumeDetail("},{"line_number":493,"context_line":"                existing_ref[\u0027source-id\u0027])"},{"line_number":494,"context_line":"            if src_vol[\u0027status\u0027] !\u003d 0:"},{"line_number":495,"context_line":"                msg \u003d _(\" Error while getting volume details.\")"},{"line_number":496,"context_line":"                LOG.error(msg)"},{"line_number":497,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":23,"id":"da4df55a_5dd2a301","line":494,"range":{"start_line":494,"start_character":11,"end_line":494,"end_character":38},"in_reply_to":"da4df55a_72689bbb","updated":"2016-12-23 04:06:44.000000000","message":"Remove !\u003d 0","commit_id":"c138b7307c840924539eb646c91dbd4fa72b969b"},{"author":{"_account_id":14865,"name":"Adriano Freires Rosso","email":"adriano.rosso@fit-tecnologia.org.br","username":"adriano_rosso"},"change_message_id":"7737a6e4a664cb13cde198e59fbe74020c026726","unresolved":false,"context_lines":[{"line_number":499,"context_line":"        else:"},{"line_number":500,"context_line":"            src_vol \u003d self.client.volumeDetailByName("},{"line_number":501,"context_line":"                existing_ref[\u0027source-name\u0027])"},{"line_number":502,"context_line":"            if src_vol[\u0027status\u0027] !\u003d 0:"},{"line_number":503,"context_line":"                msg \u003d _(\" Error while getting volume details by name.\")"},{"line_number":504,"context_line":"                LOG.error(msg)"},{"line_number":505,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":23,"id":"da4df55a_f29acbc4","line":502,"range":{"start_line":502,"start_character":12,"end_line":502,"end_character":38},"updated":"2016-12-22 11:38:11.000000000","message":"same","commit_id":"c138b7307c840924539eb646c91dbd4fa72b969b"},{"author":{"_account_id":19576,"name":"Guy Kim","email":"guy.kim088@gmail.com","username":"Guy"},"change_message_id":"a38c67dbbca05915a98f772ece70099d33fd6c2e","unresolved":false,"context_lines":[{"line_number":499,"context_line":"        else:"},{"line_number":500,"context_line":"            src_vol \u003d self.client.volumeDetailByName("},{"line_number":501,"context_line":"                existing_ref[\u0027source-name\u0027])"},{"line_number":502,"context_line":"            if src_vol[\u0027status\u0027] !\u003d 0:"},{"line_number":503,"context_line":"                msg \u003d _(\" Error while getting volume details by name.\")"},{"line_number":504,"context_line":"                LOG.error(msg)"},{"line_number":505,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":23,"id":"da4df55a_fd08b7db","line":502,"range":{"start_line":502,"start_character":12,"end_line":502,"end_character":38},"in_reply_to":"da4df55a_f29acbc4","updated":"2016-12-23 04:06:44.000000000","message":"Remove !\u003d 0","commit_id":"c138b7307c840924539eb646c91dbd4fa72b969b"},{"author":{"_account_id":14865,"name":"Adriano Freires Rosso","email":"adriano.rosso@fit-tecnologia.org.br","username":"adriano_rosso"},"change_message_id":"7737a6e4a664cb13cde198e59fbe74020c026726","unresolved":false,"context_lines":[{"line_number":531,"context_line":"    def is_timeout(self, start_time, timeout):"},{"line_number":532,"context_line":"        \"\"\"Check whether we reach the timeout.\"\"\""},{"line_number":533,"context_line":"        current_time \u003d int(time.time())"},{"line_number":534,"context_line":"        return (current_time - start_time \u003e timeout)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"    def _retry_get_detail(self, start_time, timeout, operation, params):"},{"line_number":537,"context_line":"        \"\"\"Keep trying to query an item detail unless we reach the timeout.\"\"\""}],"source_content_type":"text/x-python","patch_set":23,"id":"da4df55a_d25227dd","line":534,"range":{"start_line":534,"start_character":15,"end_line":534,"end_character":52},"updated":"2016-12-22 11:38:11.000000000","message":"Why are you using () here?","commit_id":"c138b7307c840924539eb646c91dbd4fa72b969b"},{"author":{"_account_id":19576,"name":"Guy Kim","email":"guy.kim088@gmail.com","username":"Guy"},"change_message_id":"a38c67dbbca05915a98f772ece70099d33fd6c2e","unresolved":false,"context_lines":[{"line_number":531,"context_line":"    def is_timeout(self, start_time, timeout):"},{"line_number":532,"context_line":"        \"\"\"Check whether we reach the timeout.\"\"\""},{"line_number":533,"context_line":"        current_time \u003d int(time.time())"},{"line_number":534,"context_line":"        return (current_time - start_time \u003e timeout)"},{"line_number":535,"context_line":""},{"line_number":536,"context_line":"    def _retry_get_detail(self, start_time, timeout, operation, params):"},{"line_number":537,"context_line":"        \"\"\"Keep trying to query an item detail unless we reach the timeout.\"\"\""}],"source_content_type":"text/x-python","patch_set":23,"id":"da4df55a_7dcda75c","line":534,"range":{"start_line":534,"start_character":15,"end_line":534,"end_character":52},"in_reply_to":"da4df55a_d25227dd","updated":"2016-12-23 04:06:44.000000000","message":"Remove useless parenthesis","commit_id":"c138b7307c840924539eb646c91dbd4fa72b969b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"978d010c8261caca49dcce85b89a17646b6f96b1","unresolved":false,"context_lines":[{"line_number":480,"context_line":""},{"line_number":481,"context_line":"    def unmanage(self, volume):"},{"line_number":482,"context_line":"        \"\"\"Unmanage an existing volume.\"\"\""},{"line_number":483,"context_line":"        LOG.debug(\"unmanage is called\")"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    def manage_existing_get_size(self, volume, existing_ref):"},{"line_number":486,"context_line":"        \"\"\"Return size of an existing volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":25,"id":"da4df55a_870f1a87","line":483,"updated":"2016-12-26 11:07:51.000000000","message":"Please, change to:\nLOG.debug(\"unmanage is called\", resource\u003dvolume)","commit_id":"f97fa0e83fdf4590e10aa987b8a7069ba3f30430"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"978d010c8261caca49dcce85b89a17646b6f96b1","unresolved":false,"context_lines":[{"line_number":493,"context_line":"                existing_ref[\u0027source-id\u0027])"},{"line_number":494,"context_line":"            if src_vol[\u0027status\u0027]:"},{"line_number":495,"context_line":"                msg \u003d _(\" Error while getting volume details.\")"},{"line_number":496,"context_line":"                LOG.error(msg)"},{"line_number":497,"context_line":"                raise exception.VolumeBackendAPIException(data\u003dmsg)"},{"line_number":498,"context_line":"            return src_vol[\u0027volumeInfoResult\u0027][\u0027volSizeMb\u0027]"},{"line_number":499,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":25,"id":"da4df55a_a7289ee3","line":496,"updated":"2016-12-26 11:07:51.000000000","message":"Please, add volume id to the error message","commit_id":"f97fa0e83fdf4590e10aa987b8a7069ba3f30430"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"5af4918c87478fc8313d7cba051cc30bc997bc1b","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    cfg.IPOpt(\u0027rest_ip\u0027,"},{"line_number":54,"context_line":"              help\u003d\u0027The IP address of the REST server\u0027),"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027choice_client\u0027,"},{"line_number":56,"context_line":"               help\u003d\u0027Use soap client or rest client for communicating\u0027"},{"line_number":57,"context_line":"                    \u0027with DISCO. Possible values are \"soap\" or \u0027"},{"line_number":58,"context_line":"                    \u0027\"rest\".\u0027),"},{"line_number":59,"context_line":"    cfg.PortOpt(\u0027disco_src_api_port\u0027,"}],"source_content_type":"text/x-python","patch_set":29,"id":"da4df55a_6dc65e9b","line":56,"range":{"start_line":56,"start_character":69,"end_line":56,"end_character":70},"updated":"2016-12-28 14:21:21.000000000","message":"Space needed here so the resulting string doesn\u0027t run together with the next line.","commit_id":"112f57b57dfca57d01e67f3608ffccd4114bbcb1"},{"author":{"_account_id":19576,"name":"Guy Kim","email":"guy.kim088@gmail.com","username":"Guy"},"change_message_id":"8028fff9f306a69c958397dc6873d9058a55fe9f","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    cfg.IPOpt(\u0027rest_ip\u0027,"},{"line_number":54,"context_line":"              help\u003d\u0027The IP address of the REST server\u0027),"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027choice_client\u0027,"},{"line_number":56,"context_line":"               help\u003d\u0027Use soap client or rest client for communicating\u0027"},{"line_number":57,"context_line":"                    \u0027with DISCO. Possible values are \"soap\" or \u0027"},{"line_number":58,"context_line":"                    \u0027\"rest\".\u0027),"},{"line_number":59,"context_line":"    cfg.PortOpt(\u0027disco_src_api_port\u0027,"}],"source_content_type":"text/x-python","patch_set":29,"id":"da4df55a_6d7e5e1a","line":56,"range":{"start_line":56,"start_character":69,"end_line":56,"end_character":70},"in_reply_to":"da4df55a_6dc65e9b","updated":"2016-12-28 14:26:53.000000000","message":"I change it now. Thank you.","commit_id":"112f57b57dfca57d01e67f3608ffccd4114bbcb1"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"50bf1bbbfb4f5ec5981306bdeb13a9dc5c93d1c8","unresolved":false,"context_lines":[{"line_number":50,"context_line":"               deprecated_for_removal\u003dTrue,"},{"line_number":51,"context_line":"               help\u003d\u0027Path to the wsdl file \u0027"},{"line_number":52,"context_line":"                    \u0027to communicate with DISCO request manager\u0027),"},{"line_number":53,"context_line":"    cfg.IPOpt(\u0027rest_ip\u0027,"},{"line_number":54,"context_line":"              help\u003d\u0027The IP address of the REST server\u0027),"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027choice_client\u0027,"},{"line_number":56,"context_line":"               help\u003d\u0027Use soap client or rest client for communicating \u0027"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa31d9ce_dec37355","line":53,"updated":"2017-02-14 19:49:56.000000000","message":"Could we use san_ip here like other drivers? Also if you\u0027re going to use generic config names, these should be in volume/driver.py.","commit_id":"5c841f2d7b1dee7c8f2f7082ad5ada47f033f2e7"},{"author":{"_account_id":19576,"name":"Guy Kim","email":"guy.kim088@gmail.com","username":"Guy"},"change_message_id":"4c12cab2b0b9a81fc5144bb2a88037dbc1ac8020","unresolved":false,"context_lines":[{"line_number":50,"context_line":"               deprecated_for_removal\u003dTrue,"},{"line_number":51,"context_line":"               help\u003d\u0027Path to the wsdl file \u0027"},{"line_number":52,"context_line":"                    \u0027to communicate with DISCO request manager\u0027),"},{"line_number":53,"context_line":"    cfg.IPOpt(\u0027rest_ip\u0027,"},{"line_number":54,"context_line":"              help\u003d\u0027The IP address of the REST server\u0027),"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027choice_client\u0027,"},{"line_number":56,"context_line":"               help\u003d\u0027Use soap client or rest client for communicating \u0027"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa31d9ce_1a511b63","line":53,"in_reply_to":"fa31d9ce_dec37355","updated":"2017-02-17 08:57:00.000000000","message":"Yes we can change and use san_ip instead. \nI will make a new patch for the P release.","commit_id":"5c841f2d7b1dee7c8f2f7082ad5ada47f033f2e7"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"50bf1bbbfb4f5ec5981306bdeb13a9dc5c93d1c8","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                    \u0027to communicate with DISCO request manager\u0027),"},{"line_number":53,"context_line":"    cfg.IPOpt(\u0027rest_ip\u0027,"},{"line_number":54,"context_line":"              help\u003d\u0027The IP address of the REST server\u0027),"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027choice_client\u0027,"},{"line_number":56,"context_line":"               help\u003d\u0027Use soap client or rest client for communicating \u0027"},{"line_number":57,"context_line":"                    \u0027with DISCO. Possible values are \"soap\" or \u0027"},{"line_number":58,"context_line":"                    \u0027\"rest\".\u0027),"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa31d9ce_fea2f7ac","line":55,"updated":"2017-02-14 19:49:56.000000000","message":"Name suggestion: client_protocol","commit_id":"5c841f2d7b1dee7c8f2f7082ad5ada47f033f2e7"},{"author":{"_account_id":19576,"name":"Guy Kim","email":"guy.kim088@gmail.com","username":"Guy"},"change_message_id":"4c12cab2b0b9a81fc5144bb2a88037dbc1ac8020","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                    \u0027to communicate with DISCO request manager\u0027),"},{"line_number":53,"context_line":"    cfg.IPOpt(\u0027rest_ip\u0027,"},{"line_number":54,"context_line":"              help\u003d\u0027The IP address of the REST server\u0027),"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027choice_client\u0027,"},{"line_number":56,"context_line":"               help\u003d\u0027Use soap client or rest client for communicating \u0027"},{"line_number":57,"context_line":"                    \u0027with DISCO. Possible values are \"soap\" or \u0027"},{"line_number":58,"context_line":"                    \u0027\"rest\".\u0027),"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa31d9ce_7ac69717","line":55,"in_reply_to":"fa31d9ce_fea2f7ac","updated":"2017-02-17 08:57:00.000000000","message":"Ok I can change it for the P release.","commit_id":"5c841f2d7b1dee7c8f2f7082ad5ada47f033f2e7"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"50bf1bbbfb4f5ec5981306bdeb13a9dc5c93d1c8","unresolved":false,"context_lines":[{"line_number":56,"context_line":"               help\u003d\u0027Use soap client or rest client for communicating \u0027"},{"line_number":57,"context_line":"                    \u0027with DISCO. Possible values are \"soap\" or \u0027"},{"line_number":58,"context_line":"                    \u0027\"rest\".\u0027),"},{"line_number":59,"context_line":"    cfg.PortOpt(\u0027disco_src_api_port\u0027,"},{"line_number":60,"context_line":"                default\u003d\u00278080\u0027,"},{"line_number":61,"context_line":"                help\u003d\u0027The port of DISCO source API\u0027),"},{"line_number":62,"context_line":"    cfg.StrOpt(\u0027volume_name_prefix\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa31d9ce_1ea8ab8c","line":59,"updated":"2017-02-14 19:49:56.000000000","message":"Maybe instead of using san_ip, we could create a generic api_server_port and and api_server_ip in volume/driver.py ... eventually getting rid of all these vendor specific ones.","commit_id":"5c841f2d7b1dee7c8f2f7082ad5ada47f033f2e7"},{"author":{"_account_id":19576,"name":"Guy Kim","email":"guy.kim088@gmail.com","username":"Guy"},"change_message_id":"fe802a95f9dc0e14850c38da751cdb98f270643d","unresolved":false,"context_lines":[{"line_number":56,"context_line":"               help\u003d\u0027Use soap client or rest client for communicating \u0027"},{"line_number":57,"context_line":"                    \u0027with DISCO. Possible values are \"soap\" or \u0027"},{"line_number":58,"context_line":"                    \u0027\"rest\".\u0027),"},{"line_number":59,"context_line":"    cfg.PortOpt(\u0027disco_src_api_port\u0027,"},{"line_number":60,"context_line":"                default\u003d\u00278080\u0027,"},{"line_number":61,"context_line":"                help\u003d\u0027The port of DISCO source API\u0027),"},{"line_number":62,"context_line":"    cfg.StrOpt(\u0027volume_name_prefix\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"ffe62b97_269cb00d","line":59,"in_reply_to":"fa31d9ce_1ad83bef","updated":"2017-03-28 07:11:21.000000000","message":"I proposed a new blueprint for this: https://blueprints.launchpad.net/cinder/+spec/add-new-option-in-volume-driver-base-class","commit_id":"5c841f2d7b1dee7c8f2f7082ad5ada47f033f2e7"},{"author":{"_account_id":19576,"name":"Guy Kim","email":"guy.kim088@gmail.com","username":"Guy"},"change_message_id":"4c12cab2b0b9a81fc5144bb2a88037dbc1ac8020","unresolved":false,"context_lines":[{"line_number":56,"context_line":"               help\u003d\u0027Use soap client or rest client for communicating \u0027"},{"line_number":57,"context_line":"                    \u0027with DISCO. Possible values are \"soap\" or \u0027"},{"line_number":58,"context_line":"                    \u0027\"rest\".\u0027),"},{"line_number":59,"context_line":"    cfg.PortOpt(\u0027disco_src_api_port\u0027,"},{"line_number":60,"context_line":"                default\u003d\u00278080\u0027,"},{"line_number":61,"context_line":"                help\u003d\u0027The port of DISCO source API\u0027),"},{"line_number":62,"context_line":"    cfg.StrOpt(\u0027volume_name_prefix\u0027,"}],"source_content_type":"text/x-python","patch_set":30,"id":"fa31d9ce_1ad83bef","line":59,"in_reply_to":"fa31d9ce_1ea8ab8c","updated":"2017-02-17 08:57:00.000000000","message":"Yes it is a possibility. I will propose a blueprint for the P release.","commit_id":"5c841f2d7b1dee7c8f2f7082ad5ada47f033f2e7"}],"cinder/volume/drivers/disco/disco_api.py":[{"author":{"_account_id":22257,"name":"Manish","email":"deolalkar.manish@hpe.com","username":"manishd"},"change_message_id":"862ceac78add05a58a0333a79be52a6f5a450c28","unresolved":false,"context_lines":[{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class DISCOAPI(object):"},{"line_number":29,"context_line":"    \"\"\"Class for all the requests to Disco API.\"\"\""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def __init__(self, ip, port):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ac06dbe_661a9019","line":28,"range":{"start_line":28,"start_character":6,"end_line":28,"end_character":14},"updated":"2016-08-19 10:23:03.000000000","message":"Class names should follow the UpperCaseCamelCase convention","commit_id":"86458f864c81f44d3c8c1189f88d7308d30e9b29"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f89ea2c31676ef61a6800faee58892609d294bcc","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\"DISCO Backup Service Implementation.\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import json"},{"line_number":19,"context_line":"import requests"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from oslo_log import log as logging"},{"line_number":22,"context_line":"import six"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a77a97e_1ce9d9e6","line":19,"updated":"2016-11-16 15:14:33.000000000","message":"requests is a third party library, so it should be in the next import grouping.","commit_id":"34e547f716e531fa210fa80abb5135b07da6fcc1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f89ea2c31676ef61a6800faee58892609d294bcc","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                          separators\u003d(\u0027,\u0027, \u0027: \u0027))"},{"line_number":50,"context_line":"        request \u003d (\"%(req_prefix)s/volume\" % self.prefix_var)"},{"line_number":51,"context_line":"        r \u003d requests.post(request, data, headers\u003dself.req_headers)"},{"line_number":52,"context_line":"        response \u003d r.json()"},{"line_number":53,"context_line":"        return response"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def volume_delete(self, volume_id):"},{"line_number":56,"context_line":"        \"\"\"Delete the temporary volume.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a77a97e_dc83e102","line":53,"range":{"start_line":52,"start_character":8,"end_line":53,"end_character":23},"updated":"2016-11-16 15:14:33.000000000","message":"Looks like all of these could be changed to just be \"return r.json()\"","commit_id":"34e547f716e531fa210fa80abb5135b07da6fcc1"}],"releasenotes/notes/refactor-disco-volume-driver-3ff0145707ec0f3e.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"f89ea2c31676ef61a6800faee58892609d294bcc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - Change SOAP API to REST API."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"7a77a97e_bcbaa5be","line":1,"updated":"2016-11-16 15:14:33.000000000","message":"This doesn\u0027t make any sense in the release notes.","commit_id":"34e547f716e531fa210fa80abb5135b07da6fcc1"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"2db9743124abf249cd05e97d72438fdff4e51769","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"Deprecations:"},{"line_number":3,"context_line":"    - Marked as deprecated the config disco_wsdl_path in the volume driver"}],"source_content_type":"text/x-yaml","patch_set":21,"id":"1a6eadb0_07e68baf","line":3,"updated":"2016-12-15 21:42:55.000000000","message":"This won\u0027t be that clear in the release notes. Can you change it to something like:\n\nMarked the ITRI DISCO driver option ``disco_wsdl_path`` as deprecated. The new preferred protocol for array communication is REST and SOAP support will be removed.","commit_id":"198db9729a5f1c02a01b0261ba23e0e56b0e4b4e"},{"author":{"_account_id":14865,"name":"Adriano Freires Rosso","email":"adriano.rosso@fit-tecnologia.org.br","username":"adriano_rosso"},"change_message_id":"3d64b0938dababc2ce58489586d052b2e36828d9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"Deprecations:"},{"line_number":3,"context_line":"    - Marked the ITRI DISCO driver option ``disco_wsdl_path`` as deprecated. The new preferred protocol for array communication is REST and SOAP support will be removed."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"1a6eadb0_8fbb1f75","line":3,"range":{"start_line":3,"start_character":94,"end_line":3,"end_character":169},"updated":"2016-12-19 17:30:14.000000000","message":"It would be nice if you break the lines with more than 80 characters here also.","commit_id":"2ec5431b396216216856e2b7f175d390d8fc2146"}]}
