)]}'
{"api-ref/source/v3/parameters.yaml":[{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"60fbdedd994b3a7c8e7a9e12cb0698dc6169977b","unresolved":false,"context_lines":[{"line_number":555,"context_line":"  in: body"},{"line_number":556,"context_line":"  required: false"},{"line_number":557,"context_line":"  type: string"},{"line_number":558,"context_line":"  min_version: 3.45"},{"line_number":559,"context_line":"backup_service:"},{"line_number":560,"context_line":"  description: |"},{"line_number":561,"context_line":"    The service used to perform the backup."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3f4b6375_b62e1bf8","line":558,"range":{"start_line":558,"start_character":15,"end_line":558,"end_character":19},"updated":"2017-10-30 01:23:13.000000000","message":"Please update this version:)","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"73b98d65622d0e73f0e78ff6af3f54fc76591b0d","unresolved":false,"context_lines":[{"line_number":555,"context_line":"  in: body"},{"line_number":556,"context_line":"  required: false"},{"line_number":557,"context_line":"  type: string"},{"line_number":558,"context_line":"  min_version: 3.45"},{"line_number":559,"context_line":"backup_service:"},{"line_number":560,"context_line":"  description: |"},{"line_number":561,"context_line":"    The service used to perform the backup."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3f4b6375_31091531","line":558,"range":{"start_line":558,"start_character":15,"end_line":558,"end_character":19},"in_reply_to":"3f4b6375_b62e1bf8","updated":"2017-10-30 05:02:55.000000000","message":"Done","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"}],"cinder/api/microversions.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b5a3262d29a20c978edeec42c5ce0ee60ab98d80","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"SUPPORT_COUNT_INFO \u003d \u00273.45\u0027"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"VOLUME_CREATE_FROM_BACKUP \u003d \u00273.46\u0027"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"def get_mv_header(version):"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_6b34ca93","line":132,"range":{"start_line":132,"start_character":0,"end_line":132,"end_character":25},"updated":"2017-11-27 15:48:21.000000000","message":"Will need a rebase now that https://review.openstack.org/#/c/314944/ is approved.","commit_id":"f91d22767a83728274cb7b18e4ae2a4c929d241b"}],"cinder/api/v3/volumes.py":[{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"8d09d2d439f88094eca7377436f552de33d5c873","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        # to VOLUME_CREATE_FROM_BACKUP."},{"line_number":310,"context_line":"        if req_version.matches(mv.VOLUME_CREATE_FROM_BACKUP, None):"},{"line_number":311,"context_line":"            backup_id \u003d volume.get(\u0027backup_id\u0027)"},{"line_number":312,"context_line":"            if backup_id is not None:"},{"line_number":313,"context_line":"                if not uuidutils.is_uuid_like(backup_id):"},{"line_number":314,"context_line":"                    msg \u003d _(\"Backup ID must be in UUID form.\")"},{"line_number":315,"context_line":"                    raise exc.HTTPBadRequest(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_d8379de3","line":312,"range":{"start_line":312,"start_character":12,"end_line":312,"end_character":37},"updated":"2017-10-19 01:21:17.000000000","message":"``If backup:`` is enough here:)","commit_id":"9ed2496b7cc66b22a9baaa0ce0175057d31a4272"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"c36d12bdd73f7095fab9da806d29c2f278d4942c","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        # to VOLUME_CREATE_FROM_BACKUP."},{"line_number":310,"context_line":"        if req_version.matches(mv.VOLUME_CREATE_FROM_BACKUP, None):"},{"line_number":311,"context_line":"            backup_id \u003d volume.get(\u0027backup_id\u0027)"},{"line_number":312,"context_line":"            if backup_id is not None:"},{"line_number":313,"context_line":"                if not uuidutils.is_uuid_like(backup_id):"},{"line_number":314,"context_line":"                    msg \u003d _(\"Backup ID must be in UUID form.\")"},{"line_number":315,"context_line":"                    raise exc.HTTPBadRequest(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_89570f27","line":312,"range":{"start_line":312,"start_character":12,"end_line":312,"end_character":37},"in_reply_to":"3f4b6375_d8379de3","updated":"2017-10-26 07:43:23.000000000","message":"Done","commit_id":"9ed2496b7cc66b22a9baaa0ce0175057d31a4272"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"820dd1894fdbe574228712a281218cc662121835","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        elif size is None and kwargs[\u0027source_volume\u0027] is not None:"},{"line_number":295,"context_line":"            size \u003d kwargs[\u0027source_volume\u0027][\u0027size\u0027]"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        # Add backup if min version is greater than or equal"},{"line_number":298,"context_line":"        # to VOLUME_CREATE_FROM_BACKUP."},{"line_number":299,"context_line":"        if req_version.matches(mv.VOLUME_CREATE_FROM_BACKUP, None):"},{"line_number":300,"context_line":"            backup_id \u003d volume.get(\u0027backup_id\u0027)"},{"line_number":301,"context_line":"            if backup_id:"},{"line_number":302,"context_line":"                if not uuidutils.is_uuid_like(backup_id):"},{"line_number":303,"context_line":"                    msg \u003d _(\"Backup ID must be in UUID form.\")"},{"line_number":304,"context_line":"                    raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":305,"context_line":"                kwargs[\u0027backup\u0027] \u003d self.backup_api.get(context,"},{"line_number":306,"context_line":"                                                       backup_id\u003dbackup_id)"},{"line_number":307,"context_line":"            else:"},{"line_number":308,"context_line":"                kwargs[\u0027backup\u0027] \u003d None"},{"line_number":309,"context_line":"        LOG.info(\"Create volume of %s GB\", size)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        if self.ext_mgr.is_loaded(\u0027os-image-create\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_88622509","line":308,"range":{"start_line":297,"start_character":4,"end_line":308,"end_character":39},"updated":"2017-10-26 12:05:35.000000000","message":"Need to place this section before size fetching code (line 291) and try to get the size from backup if original size is empty while backup_id exists.","commit_id":"e9e79a8e42f52596fb7df032cee1195de99711c7"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"179c8945fbbc110b233eeeda08b6ba62b889174d","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        elif size is None and kwargs[\u0027source_volume\u0027] is not None:"},{"line_number":295,"context_line":"            size \u003d kwargs[\u0027source_volume\u0027][\u0027size\u0027]"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        # Add backup if min version is greater than or equal"},{"line_number":298,"context_line":"        # to VOLUME_CREATE_FROM_BACKUP."},{"line_number":299,"context_line":"        if req_version.matches(mv.VOLUME_CREATE_FROM_BACKUP, None):"},{"line_number":300,"context_line":"            backup_id \u003d volume.get(\u0027backup_id\u0027)"},{"line_number":301,"context_line":"            if backup_id:"},{"line_number":302,"context_line":"                if not uuidutils.is_uuid_like(backup_id):"},{"line_number":303,"context_line":"                    msg \u003d _(\"Backup ID must be in UUID form.\")"},{"line_number":304,"context_line":"                    raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":305,"context_line":"                kwargs[\u0027backup\u0027] \u003d self.backup_api.get(context,"},{"line_number":306,"context_line":"                                                       backup_id\u003dbackup_id)"},{"line_number":307,"context_line":"            else:"},{"line_number":308,"context_line":"                kwargs[\u0027backup\u0027] \u003d None"},{"line_number":309,"context_line":"        LOG.info(\"Create volume of %s GB\", size)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"        if self.ext_mgr.is_loaded(\u0027os-image-create\u0027):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_d002c20b","line":308,"range":{"start_line":297,"start_character":4,"end_line":308,"end_character":39},"in_reply_to":"3f4b6375_88622509","updated":"2017-10-29 13:34:31.000000000","message":"Done","commit_id":"e9e79a8e42f52596fb7df032cee1195de99711c7"}],"cinder/objects/base.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2c6139781085d131e62fa3bc4175a047477dd236","unresolved":false,"context_lines":[{"line_number":137,"context_line":"OBJ_VERSIONS.add(\u00271.27\u0027, {\u0027Backup\u0027: \u00271.5\u0027, \u0027BackupImport\u0027: \u00271.5\u0027})"},{"line_number":138,"context_line":"OBJ_VERSIONS.add(\u00271.28\u0027, {\u0027Service\u0027: \u00271.5\u0027})"},{"line_number":139,"context_line":"OBJ_VERSIONS.add(\u00271.29\u0027, {\u0027Service\u0027: \u00271.6\u0027})"},{"line_number":140,"context_line":"OBJ_VERSIONS.add(\u00271.30\u0027, {\u0027RequestSpec\u0027: \u00271.3\u0027})"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"class CinderObjectRegistry(base.VersionedObjectRegistry):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1f485f77_ef954888","line":140,"range":{"start_line":140,"start_character":0,"end_line":140,"end_character":48},"updated":"2017-11-16 17:02:19.000000000","message":"A new version should actually be added here:\n\n OBJ_VERSIONS.add(\u00271.30\u0027, {\u0027RequestSpec\u0027: \u00271.2\u0027})\n OBJ_VERSIONS.add(\u00271.31\u0027, {\u0027RequestSpec\u0027: \u00271.3\u0027})","commit_id":"cf8c6f745a1637a5ef2c3a46b5e1f69a301aa8c7"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"5334070cebad951735e4361807d24b61482b07f1","unresolved":false,"context_lines":[{"line_number":137,"context_line":"OBJ_VERSIONS.add(\u00271.27\u0027, {\u0027Backup\u0027: \u00271.5\u0027, \u0027BackupImport\u0027: \u00271.5\u0027})"},{"line_number":138,"context_line":"OBJ_VERSIONS.add(\u00271.28\u0027, {\u0027Service\u0027: \u00271.5\u0027})"},{"line_number":139,"context_line":"OBJ_VERSIONS.add(\u00271.29\u0027, {\u0027Service\u0027: \u00271.6\u0027})"},{"line_number":140,"context_line":"OBJ_VERSIONS.add(\u00271.30\u0027, {\u0027RequestSpec\u0027: \u00271.3\u0027})"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"class CinderObjectRegistry(base.VersionedObjectRegistry):"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff82abbf_5ab25de8","line":140,"range":{"start_line":140,"start_character":0,"end_line":140,"end_character":48},"in_reply_to":"1f485f77_ef954888","updated":"2017-11-22 06:39:48.000000000","message":"Done","commit_id":"cf8c6f745a1637a5ef2c3a46b5e1f69a301aa8c7"}],"cinder/objects/request_spec.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5346d79968f0e051ffbcee9d340cac740e53c9da","unresolved":false,"context_lines":[{"line_number":23,"context_line":"                  base.CinderComparableObject):"},{"line_number":24,"context_line":"    # Version 1.0: Initial version"},{"line_number":25,"context_line":"    # Version 1.1: Added group_id and group_backend"},{"line_number":26,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    fields \u003d {"},{"line_number":29,"context_line":"        \u0027consistencygroup_id\u0027: fields.UUIDField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_67eecc8c","line":26,"range":{"start_line":26,"start_character":4,"end_line":26,"end_character":19},"updated":"2017-10-27 16:09:24.000000000","message":"Please bump the version.","commit_id":"e9e79a8e42f52596fb7df032cee1195de99711c7"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"179c8945fbbc110b233eeeda08b6ba62b889174d","unresolved":false,"context_lines":[{"line_number":23,"context_line":"                  base.CinderComparableObject):"},{"line_number":24,"context_line":"    # Version 1.0: Initial version"},{"line_number":25,"context_line":"    # Version 1.1: Added group_id and group_backend"},{"line_number":26,"context_line":"    VERSION \u003d \u00271.1\u0027"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    fields \u003d {"},{"line_number":29,"context_line":"        \u0027consistencygroup_id\u0027: fields.UUIDField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_0b3cafbd","line":26,"range":{"start_line":26,"start_character":4,"end_line":26,"end_character":19},"in_reply_to":"3f4b6375_67eecc8c","updated":"2017-10-29 13:34:31.000000000","message":"Done","commit_id":"e9e79a8e42f52596fb7df032cee1195de99711c7"}],"cinder/scheduler/flows/create_volume.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2c6139781085d131e62fa3bc4175a047477dd236","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        \u0027volume\u0027: volume,"},{"line_number":161,"context_line":"        \u0027snapshot_id\u0027: snapshot_id,"},{"line_number":162,"context_line":"        \u0027image_id\u0027: image_id,"},{"line_number":163,"context_line":"        \u0027backup_id\u0027: backup_id"},{"line_number":164,"context_line":"    }"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    flow_name \u003d ACTION.replace(\":\", \"_\") + \"_scheduler\""}],"source_content_type":"text/x-python","patch_set":9,"id":"1f485f77_8fd37460","line":163,"updated":"2017-11-16 17:02:19.000000000","message":"Missing comma at the end [1].\n\n[1] https://docs.openstack.org/hacking/latest/user/hacking.html#dictionaries-lists","commit_id":"cf8c6f745a1637a5ef2c3a46b5e1f69a301aa8c7"}],"cinder/scheduler/manager.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5346d79968f0e051ffbcee9d340cac740e53c9da","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    @objects.Volume.set_workers"},{"line_number":175,"context_line":"    def create_volume(self, context, volume, snapshot_id\u003dNone, image_id\u003dNone,"},{"line_number":176,"context_line":"                      backup_id\u003dNone, request_spec\u003dNone,"},{"line_number":177,"context_line":"                      filter_properties\u003dNone):"},{"line_number":178,"context_line":"        self._wait_for_scheduler()"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_a774c4ff","line":176,"range":{"start_line":176,"start_character":21,"end_line":176,"end_character":38},"updated":"2017-10-27 16:09:24.000000000","message":"This might be counter-intuitive, but can you add this parameter at the end? Otherwise it\u0027ll not be backward compatible.","commit_id":"e9e79a8e42f52596fb7df032cee1195de99711c7"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"179c8945fbbc110b233eeeda08b6ba62b889174d","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    @objects.Volume.set_workers"},{"line_number":175,"context_line":"    def create_volume(self, context, volume, snapshot_id\u003dNone, image_id\u003dNone,"},{"line_number":176,"context_line":"                      backup_id\u003dNone, request_spec\u003dNone,"},{"line_number":177,"context_line":"                      filter_properties\u003dNone):"},{"line_number":178,"context_line":"        self._wait_for_scheduler()"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_cb457745","line":176,"range":{"start_line":176,"start_character":21,"end_line":176,"end_character":38},"in_reply_to":"3f4b6375_a774c4ff","updated":"2017-10-29 13:34:31.000000000","message":"Done","commit_id":"e9e79a8e42f52596fb7df032cee1195de99711c7"}],"cinder/scheduler/rpcapi.py":[{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5346d79968f0e051ffbcee9d340cac740e53c9da","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        3.7 - Adds set_log_levels and get_log_levels"},{"line_number":71,"context_line":"    \"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    RPC_API_VERSION \u003d \u00273.7\u0027"},{"line_number":74,"context_line":"    RPC_DEFAULT_VERSION \u003d \u00273.0\u0027"},{"line_number":75,"context_line":"    TOPIC \u003d constants.SCHEDULER_TOPIC"},{"line_number":76,"context_line":"    BINARY \u003d \u0027cinder-scheduler\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_27cfb42a","line":73,"range":{"start_line":73,"start_character":4,"end_line":73,"end_character":27},"updated":"2017-10-27 16:09:24.000000000","message":"You need to bump the version and add comment if you\u0027re changing RPC API.","commit_id":"e9e79a8e42f52596fb7df032cee1195de99711c7"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"5346d79968f0e051ffbcee9d340cac740e53c9da","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        cctxt.cast(ctxt, \u0027create_group\u0027, **msg_args)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def create_volume(self, ctxt, volume, snapshot_id\u003dNone, image_id\u003dNone,"},{"line_number":95,"context_line":"                      backup_id\u003dNone, request_spec\u003dNone,"},{"line_number":96,"context_line":"                      filter_properties\u003dNone):"},{"line_number":97,"context_line":"        volume.create_worker()"},{"line_number":98,"context_line":"        cctxt \u003d self._get_cctxt()"},{"line_number":99,"context_line":"        msg_args \u003d {\u0027snapshot_id\u0027: snapshot_id, \u0027image_id\u0027: image_id,"},{"line_number":100,"context_line":"                    \u0027backup_id\u0027: backup_id, \u0027request_spec\u0027: request_spec,"},{"line_number":101,"context_line":"                    \u0027filter_properties\u0027: filter_properties, \u0027volume\u0027: volume}"},{"line_number":102,"context_line":"        return cctxt.cast(ctxt, \u0027create_volume\u0027, **msg_args)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def migrate_volume(self, ctxt, volume, backend, force_copy\u003dFalse,"},{"line_number":105,"context_line":"                       request_spec\u003dNone, filter_properties\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_47cab01a","line":102,"range":{"start_line":94,"start_character":0,"end_line":102,"end_character":60},"updated":"2017-10-27 16:09:24.000000000","message":"Can you make sure this is backward-compatible? Here\u0027s an example how to do that:\n\n[1] https://docs.openstack.org/cinder/latest/contributor/rolling.upgrades.html#rpc-api-changes","commit_id":"e9e79a8e42f52596fb7df032cee1195de99711c7"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"179c8945fbbc110b233eeeda08b6ba62b889174d","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        cctxt.cast(ctxt, \u0027create_group\u0027, **msg_args)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def create_volume(self, ctxt, volume, snapshot_id\u003dNone, image_id\u003dNone,"},{"line_number":95,"context_line":"                      backup_id\u003dNone, request_spec\u003dNone,"},{"line_number":96,"context_line":"                      filter_properties\u003dNone):"},{"line_number":97,"context_line":"        volume.create_worker()"},{"line_number":98,"context_line":"        cctxt \u003d self._get_cctxt()"},{"line_number":99,"context_line":"        msg_args \u003d {\u0027snapshot_id\u0027: snapshot_id, \u0027image_id\u0027: image_id,"},{"line_number":100,"context_line":"                    \u0027backup_id\u0027: backup_id, \u0027request_spec\u0027: request_spec,"},{"line_number":101,"context_line":"                    \u0027filter_properties\u0027: filter_properties, \u0027volume\u0027: volume}"},{"line_number":102,"context_line":"        return cctxt.cast(ctxt, \u0027create_volume\u0027, **msg_args)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def migrate_volume(self, ctxt, volume, backend, force_copy\u003dFalse,"},{"line_number":105,"context_line":"                       request_spec\u003dNone, filter_properties\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_8b79bf94","line":102,"range":{"start_line":94,"start_character":0,"end_line":102,"end_character":60},"in_reply_to":"3f4b6375_47cab01a","updated":"2017-10-29 13:34:31.000000000","message":"Yeah, i think so, thanks","commit_id":"e9e79a8e42f52596fb7df032cee1195de99711c7"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"60fbdedd994b3a7c8e7a9e12cb0698dc6169977b","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        cctxt.cast(ctxt, \u0027create_group\u0027, **msg_args)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def create_volume(self, ctxt, volume, snapshot_id\u003dNone, image_id\u003dNone,"},{"line_number":96,"context_line":"                      request_spec\u003dNone, filter_properties\u003dNone,"},{"line_number":97,"context_line":"                      backup_id\u003dNone):"},{"line_number":98,"context_line":"        volume.create_worker()"},{"line_number":99,"context_line":"        cctxt \u003d self._get_cctxt()"},{"line_number":100,"context_line":"        msg_args \u003d {\u0027snapshot_id\u0027: snapshot_id, \u0027image_id\u0027: image_id,"},{"line_number":101,"context_line":"                    \u0027request_spec\u0027: request_spec,"},{"line_number":102,"context_line":"                    \u0027filter_properties\u0027: filter_properties,"},{"line_number":103,"context_line":"                    \u0027volume\u0027: volume, \u0027backup_id\u0027: backup_id}"},{"line_number":104,"context_line":"        return cctxt.cast(ctxt, \u0027create_volume\u0027, **msg_args)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def migrate_volume(self, ctxt, volume, backend, force_copy\u003dFalse,"},{"line_number":107,"context_line":"                       request_spec\u003dNone, filter_properties\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_164e0fc1","line":104,"range":{"start_line":95,"start_character":4,"end_line":104,"end_character":60},"updated":"2017-10-30 01:23:13.000000000","message":"I guess still need to address Michał Dulko\u0027s comment?","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"73b98d65622d0e73f0e78ff6af3f54fc76591b0d","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        cctxt.cast(ctxt, \u0027create_group\u0027, **msg_args)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def create_volume(self, ctxt, volume, snapshot_id\u003dNone, image_id\u003dNone,"},{"line_number":96,"context_line":"                      request_spec\u003dNone, filter_properties\u003dNone,"},{"line_number":97,"context_line":"                      backup_id\u003dNone):"},{"line_number":98,"context_line":"        volume.create_worker()"},{"line_number":99,"context_line":"        cctxt \u003d self._get_cctxt()"},{"line_number":100,"context_line":"        msg_args \u003d {\u0027snapshot_id\u0027: snapshot_id, \u0027image_id\u0027: image_id,"},{"line_number":101,"context_line":"                    \u0027request_spec\u0027: request_spec,"},{"line_number":102,"context_line":"                    \u0027filter_properties\u0027: filter_properties,"},{"line_number":103,"context_line":"                    \u0027volume\u0027: volume, \u0027backup_id\u0027: backup_id}"},{"line_number":104,"context_line":"        return cctxt.cast(ctxt, \u0027create_volume\u0027, **msg_args)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def migrate_volume(self, ctxt, volume, backend, force_copy\u003dFalse,"},{"line_number":107,"context_line":"                       request_spec\u003dNone, filter_properties\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_6c9c565d","line":104,"range":{"start_line":95,"start_character":4,"end_line":104,"end_character":60},"in_reply_to":"3f4b6375_164e0fc1","updated":"2017-10-30 05:02:55.000000000","message":"Done","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"}],"cinder/tests/unit/api/v2/fakes.py":[{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"60fbdedd994b3a7c8e7a9e12cb0698dc6169977b","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"def fake_backup_get(self, context, backup_id):"},{"line_number":263,"context_line":"    if backup_id \u003d\u003d fake.WILL_NOT_BE_FOUND_ID:"},{"line_number":264,"context_line":"        raise exc.SnapshotNotFound(backup_id\u003dbackup_id)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    return fake_backup(backup_id)"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_96cf9f28","line":264,"range":{"start_line":264,"start_character":18,"end_line":264,"end_character":34},"updated":"2017-10-30 01:23:13.000000000","message":"BackupNotFound?","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"73b98d65622d0e73f0e78ff6af3f54fc76591b0d","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"def fake_backup_get(self, context, backup_id):"},{"line_number":263,"context_line":"    if backup_id \u003d\u003d fake.WILL_NOT_BE_FOUND_ID:"},{"line_number":264,"context_line":"        raise exc.SnapshotNotFound(backup_id\u003dbackup_id)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":"    return fake_backup(backup_id)"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_51db717c","line":264,"range":{"start_line":264,"start_character":18,"end_line":264,"end_character":34},"in_reply_to":"3f4b6375_96cf9f28","updated":"2017-10-30 05:02:55.000000000","message":"Done","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"}],"cinder/tests/unit/volume/flows/fake_volume_api.py":[{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"60fbdedd994b3a7c8e7a9e12cb0698dc6169977b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.test_inst \u003d test_inst"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def create_volume(self, ctxt, volume, snapshot_id\u003dNone, image_id\u003dNone,"},{"line_number":38,"context_line":"                      backup_id\u003dNone, request_spec\u003dNone,"},{"line_number":39,"context_line":"                      filter_properties\u003dNone):"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.test_inst.assertEqual(self.expected_spec, request_spec)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_36ffcb35","line":38,"range":{"start_line":38,"start_character":22,"end_line":38,"end_character":37},"updated":"2017-10-30 01:23:13.000000000","message":"Append this at the end.","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"73b98d65622d0e73f0e78ff6af3f54fc76591b0d","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.test_inst \u003d test_inst"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def create_volume(self, ctxt, volume, snapshot_id\u003dNone, image_id\u003dNone,"},{"line_number":38,"context_line":"                      backup_id\u003dNone, request_spec\u003dNone,"},{"line_number":39,"context_line":"                      filter_properties\u003dNone):"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.test_inst.assertEqual(self.expected_spec, request_spec)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_11be19ff","line":38,"range":{"start_line":38,"start_character":22,"end_line":38,"end_character":37},"in_reply_to":"3f4b6375_36ffcb35","updated":"2017-10-30 05:02:55.000000000","message":"Done","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"}],"cinder/volume/driver.py":[{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"8d09d2d439f88094eca7377436f552de33d5c873","unresolved":false,"context_lines":[{"line_number":1844,"context_line":"    def accept_transfer(self, context, volume, new_user, new_project):"},{"line_number":1845,"context_line":"        pass"},{"line_number":1846,"context_line":""},{"line_number":1847,"context_line":"    def create_volume_from_backup(self, volume, backup):"},{"line_number":1848,"context_line":"        \"\"\"Creates a volume from a backup.\"\"\""},{"line_number":1849,"context_line":"        raise NotImplementedError()"},{"line_number":1850,"context_line":""},{"line_number":1851,"context_line":""},{"line_number":1852,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_8c567206","line":1849,"range":{"start_line":1847,"start_character":3,"end_line":1849,"end_character":35},"updated":"2017-10-19 01:21:17.000000000","message":"Why you define the method both in VolumeDriver and BaseVD?","commit_id":"9ed2496b7cc66b22a9baaa0ce0175057d31a4272"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"c36d12bdd73f7095fab9da806d29c2f278d4942c","unresolved":false,"context_lines":[{"line_number":1844,"context_line":"    def accept_transfer(self, context, volume, new_user, new_project):"},{"line_number":1845,"context_line":"        pass"},{"line_number":1846,"context_line":""},{"line_number":1847,"context_line":"    def create_volume_from_backup(self, volume, backup):"},{"line_number":1848,"context_line":"        \"\"\"Creates a volume from a backup.\"\"\""},{"line_number":1849,"context_line":"        raise NotImplementedError()"},{"line_number":1850,"context_line":""},{"line_number":1851,"context_line":""},{"line_number":1852,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_a923ebbc","line":1849,"range":{"start_line":1847,"start_character":3,"end_line":1849,"end_character":35},"in_reply_to":"3f4b6375_8c567206","updated":"2017-10-26 07:43:23.000000000","message":"Seems like it only needed by BaseVD class.","commit_id":"9ed2496b7cc66b22a9baaa0ce0175057d31a4272"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"60fbdedd994b3a7c8e7a9e12cb0698dc6169977b","unresolved":false,"context_lines":[{"line_number":1844,"context_line":"    def accept_transfer(self, context, volume, new_user, new_project):"},{"line_number":1845,"context_line":"        pass"},{"line_number":1846,"context_line":""},{"line_number":1847,"context_line":"    def create_volume_from_backup(self, volume, backup):"},{"line_number":1848,"context_line":"        \"\"\"Creates a volume from a backup.\"\"\""},{"line_number":1849,"context_line":"        raise NotImplementedError()"},{"line_number":1850,"context_line":""},{"line_number":1851,"context_line":""},{"line_number":1852,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_5675a7cb","line":1849,"range":{"start_line":1847,"start_character":2,"end_line":1849,"end_character":35},"updated":"2017-10-30 01:23:13.000000000","message":"Need to add more detail on this interface.\n```\n:param...\n:param...\n:returns:\n```\nEspecially the valid desired return from backend.","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"73b98d65622d0e73f0e78ff6af3f54fc76591b0d","unresolved":false,"context_lines":[{"line_number":1844,"context_line":"    def accept_transfer(self, context, volume, new_user, new_project):"},{"line_number":1845,"context_line":"        pass"},{"line_number":1846,"context_line":""},{"line_number":1847,"context_line":"    def create_volume_from_backup(self, volume, backup):"},{"line_number":1848,"context_line":"        \"\"\"Creates a volume from a backup.\"\"\""},{"line_number":1849,"context_line":"        raise NotImplementedError()"},{"line_number":1850,"context_line":""},{"line_number":1851,"context_line":""},{"line_number":1852,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_31e23503","line":1849,"range":{"start_line":1847,"start_character":2,"end_line":1849,"end_character":35},"in_reply_to":"3f4b6375_5675a7cb","updated":"2017-10-30 05:02:55.000000000","message":"Done","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"}],"cinder/volume/flows/api/create_volume.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9cc2bce470bb98ef74dbfa7c0d225c2198362241","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            if backup and size \u003c backup[\u0027size\u0027]:"},{"line_number":174,"context_line":"                msg \u003d _(\"Volume size %(size)sGB cannot be smaller than \""},{"line_number":175,"context_line":"                        \"the backup size %(backup_size)sGB. \""},{"line_number":176,"context_line":"                        \"They must be \u003e\u003d backup size.\")"},{"line_number":177,"context_line":"                msg \u003d msg % {\u0027size\u0027: size,"},{"line_number":178,"context_line":"                             \u0027backup_size\u0027: backup[\u0027size\u0027]}"},{"line_number":179,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_93f1f104","line":176,"range":{"start_line":176,"start_character":25,"end_line":176,"end_character":29},"updated":"2017-10-29 21:54:20.000000000","message":"s/They/It/","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"73b98d65622d0e73f0e78ff6af3f54fc76591b0d","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            if backup and size \u003c backup[\u0027size\u0027]:"},{"line_number":174,"context_line":"                msg \u003d _(\"Volume size %(size)sGB cannot be smaller than \""},{"line_number":175,"context_line":"                        \"the backup size %(backup_size)sGB. \""},{"line_number":176,"context_line":"                        \"They must be \u003e\u003d backup size.\")"},{"line_number":177,"context_line":"                msg \u003d msg % {\u0027size\u0027: size,"},{"line_number":178,"context_line":"                             \u0027backup_size\u0027: backup[\u0027size\u0027]}"},{"line_number":179,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_36c10b82","line":176,"range":{"start_line":176,"start_character":25,"end_line":176,"end_character":29},"in_reply_to":"3f4b6375_93f1f104","updated":"2017-10-30 05:02:55.000000000","message":"Done","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2c6139781085d131e62fa3bc4175a047477dd236","unresolved":false,"context_lines":[{"line_number":513,"context_line":"            \u0027group_id\u0027: group_id,"},{"line_number":514,"context_line":"            \u0027replication_status\u0027: replication_status,"},{"line_number":515,"context_line":"            \u0027refresh_az\u0027: refresh_az,"},{"line_number":516,"context_line":"            \u0027backup_id\u0027: backup_id"},{"line_number":517,"context_line":"        }"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1f485f77_affcf0b4","line":516,"updated":"2017-11-16 17:02:19.000000000","message":"Missing trailing comma [1].\n\n[1] https://docs.openstack.org/hacking/latest/user/hacking.html#dictionaries-lists","commit_id":"cf8c6f745a1637a5ef2c3a46b5e1f69a301aa8c7"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"5334070cebad951735e4361807d24b61482b07f1","unresolved":false,"context_lines":[{"line_number":513,"context_line":"            \u0027group_id\u0027: group_id,"},{"line_number":514,"context_line":"            \u0027replication_status\u0027: replication_status,"},{"line_number":515,"context_line":"            \u0027refresh_az\u0027: refresh_az,"},{"line_number":516,"context_line":"            \u0027backup_id\u0027: backup_id"},{"line_number":517,"context_line":"        }"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ff82abbf_dac50d3e","line":516,"in_reply_to":"1f485f77_affcf0b4","updated":"2017-11-22 06:39:48.000000000","message":"Done","commit_id":"cf8c6f745a1637a5ef2c3a46b5e1f69a301aa8c7"}],"cinder/volume/flows/manager/create_volume.py":[{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"8d09d2d439f88094eca7377436f552de33d5c873","unresolved":false,"context_lines":[{"line_number":871,"context_line":"                                                 image_meta\u003dimage_meta)"},{"line_number":872,"context_line":"        return model_update"},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"    def _create_from_backup(self, context, volume, backup_id, **kwargs):"},{"line_number":875,"context_line":"        LOG.debug(\"Creating %(volume_id)s from backup %(backup_id)s.\","},{"line_number":876,"context_line":"                  {\u0027volume_id\u0027: volume.id,"},{"line_number":877,"context_line":"                   \u0027backup_id\u0027: backup_id})"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_b11e256e","line":874,"range":{"start_line":874,"start_character":8,"end_line":874,"end_character":27},"updated":"2017-10-19 01:21:17.000000000","message":"Need testcase for this method.","commit_id":"9ed2496b7cc66b22a9baaa0ce0175057d31a4272"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"c36d12bdd73f7095fab9da806d29c2f278d4942c","unresolved":false,"context_lines":[{"line_number":871,"context_line":"                                                 image_meta\u003dimage_meta)"},{"line_number":872,"context_line":"        return model_update"},{"line_number":873,"context_line":""},{"line_number":874,"context_line":"    def _create_from_backup(self, context, volume, backup_id, **kwargs):"},{"line_number":875,"context_line":"        LOG.debug(\"Creating %(volume_id)s from backup %(backup_id)s.\","},{"line_number":876,"context_line":"                  {\u0027volume_id\u0027: volume.id,"},{"line_number":877,"context_line":"                   \u0027backup_id\u0027: backup_id})"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_c9618707","line":874,"range":{"start_line":874,"start_character":8,"end_line":874,"end_character":27},"in_reply_to":"3f4b6375_b11e256e","updated":"2017-10-26 07:43:23.000000000","message":"Done","commit_id":"9ed2496b7cc66b22a9baaa0ce0175057d31a4272"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"8d09d2d439f88094eca7377436f552de33d5c873","unresolved":false,"context_lines":[{"line_number":878,"context_line":"        backup \u003d objects.Backup.get_by_id(context, backup_id)"},{"line_number":879,"context_line":"        try:"},{"line_number":880,"context_line":"            return self.driver.create_volume_from_backup(volume, backup)"},{"line_number":881,"context_line":"        except (NotImplementedError, exception.CinderException):"},{"line_number":882,"context_line":"            LOG.warning(\u0027Backend does not support creating volume from \u0027"},{"line_number":883,"context_line":"                        \u0027backup %(id)s. Will directly create the raw volume \u0027"},{"line_number":884,"context_line":"                        \u0027at the backend and then schedule the request to the \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_edf85d7d","line":881,"range":{"start_line":881,"start_character":37,"end_line":881,"end_character":63},"updated":"2017-10-19 01:21:17.000000000","message":"Why you catch all cinder exception here? I guess we only need to retry the generic way if the driver doesn\u0027t support this feature.","commit_id":"9ed2496b7cc66b22a9baaa0ce0175057d31a4272"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"c36d12bdd73f7095fab9da806d29c2f278d4942c","unresolved":false,"context_lines":[{"line_number":878,"context_line":"        backup \u003d objects.Backup.get_by_id(context, backup_id)"},{"line_number":879,"context_line":"        try:"},{"line_number":880,"context_line":"            return self.driver.create_volume_from_backup(volume, backup)"},{"line_number":881,"context_line":"        except (NotImplementedError, exception.CinderException):"},{"line_number":882,"context_line":"            LOG.warning(\u0027Backend does not support creating volume from \u0027"},{"line_number":883,"context_line":"                        \u0027backup %(id)s. Will directly create the raw volume \u0027"},{"line_number":884,"context_line":"                        \u0027at the backend and then schedule the request to the \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_4965971d","line":881,"range":{"start_line":881,"start_character":37,"end_line":881,"end_character":63},"in_reply_to":"3f4b6375_edf85d7d","updated":"2017-10-26 07:43:23.000000000","message":"Done","commit_id":"9ed2496b7cc66b22a9baaa0ce0175057d31a4272"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"8d09d2d439f88094eca7377436f552de33d5c873","unresolved":false,"context_lines":[{"line_number":889,"context_line":"            volume.update(model_update)"},{"line_number":890,"context_line":"            volume.save()"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"            LOG.info(\"Overwriting volume %(volume_id)s with restore of \""},{"line_number":893,"context_line":"                     \"backup %(backup_id)s\","},{"line_number":894,"context_line":"                     {\u0027volume_id\u0027: volume.id, \u0027backup_id\u0027: backup_id})"},{"line_number":895,"context_line":""},{"line_number":896,"context_line":"            backup_host \u003d self.backup_api.get_available_backup_service_host("}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_ed029d3e","line":893,"range":{"start_line":892,"start_character":22,"end_line":893,"end_character":44},"updated":"2017-10-19 01:21:17.000000000","message":"\"Restoring volume %(volume_id) with backup %(backup_id)\"","commit_id":"9ed2496b7cc66b22a9baaa0ce0175057d31a4272"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"c36d12bdd73f7095fab9da806d29c2f278d4942c","unresolved":false,"context_lines":[{"line_number":889,"context_line":"            volume.update(model_update)"},{"line_number":890,"context_line":"            volume.save()"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"            LOG.info(\"Overwriting volume %(volume_id)s with restore of \""},{"line_number":893,"context_line":"                     \"backup %(backup_id)s\","},{"line_number":894,"context_line":"                     {\u0027volume_id\u0027: volume.id, \u0027backup_id\u0027: backup_id})"},{"line_number":895,"context_line":""},{"line_number":896,"context_line":"            backup_host \u003d self.backup_api.get_available_backup_service_host("}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_29537b41","line":893,"range":{"start_line":892,"start_character":22,"end_line":893,"end_character":44},"in_reply_to":"3f4b6375_ed029d3e","updated":"2017-10-26 07:43:23.000000000","message":"This info is redundant, removed it","commit_id":"9ed2496b7cc66b22a9baaa0ce0175057d31a4272"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"441f65f549f8f639acc8eb38a9339394c7a3100f","unresolved":false,"context_lines":[{"line_number":903,"context_line":""},{"line_number":904,"context_line":"            self.backup_rpcapi.restore_backup(context, backup.host, backup,"},{"line_number":905,"context_line":"                                              volume.id)"},{"line_number":906,"context_line":"            while True:"},{"line_number":907,"context_line":"                backup_ref \u003d objects.Backup.get_by_id(context, backup_id)"},{"line_number":908,"context_line":"                if backup_ref[\u0027status\u0027] !\u003d fields.BackupStatus.RESTORING:"},{"line_number":909,"context_line":"                    break"},{"line_number":910,"context_line":"                greenthread.sleep(1)"},{"line_number":911,"context_line":""},{"line_number":912,"context_line":"            if backup_ref[\u0027status\u0027] \u003d\u003d fields.BackupStatus.ERROR:"},{"line_number":913,"context_line":"                msg \u003d (\u0027Error while creating volume %(volume_id)s \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_90dc5119","line":910,"range":{"start_line":906,"start_character":0,"end_line":910,"end_character":36},"updated":"2017-10-18 15:04:12.000000000","message":"This is dangerous and can lead to hangs.  We should instead use a fixed interval looping call please.","commit_id":"9ed2496b7cc66b22a9baaa0ce0175057d31a4272"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"fc6987175baeab8870662f47458f46dba178a923","unresolved":false,"context_lines":[{"line_number":903,"context_line":""},{"line_number":904,"context_line":"            self.backup_rpcapi.restore_backup(context, backup.host, backup,"},{"line_number":905,"context_line":"                                              volume.id)"},{"line_number":906,"context_line":"            while True:"},{"line_number":907,"context_line":"                backup_ref \u003d objects.Backup.get_by_id(context, backup_id)"},{"line_number":908,"context_line":"                if backup_ref[\u0027status\u0027] !\u003d fields.BackupStatus.RESTORING:"},{"line_number":909,"context_line":"                    break"},{"line_number":910,"context_line":"                greenthread.sleep(1)"},{"line_number":911,"context_line":""},{"line_number":912,"context_line":"            if backup_ref[\u0027status\u0027] \u003d\u003d fields.BackupStatus.ERROR:"},{"line_number":913,"context_line":"                msg \u003d (\u0027Error while creating volume %(volume_id)s \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_11abb91d","line":910,"range":{"start_line":906,"start_character":0,"end_line":910,"end_character":36},"in_reply_to":"3f4b6375_90dc5119","updated":"2017-10-19 01:01:47.000000000","message":"Got it, will update in the next patch, i was copied it from here: https://github.com/openstack/cinder/blob/master/cinder/backup/api.py#L361, so the backup restore api should be updated too.","commit_id":"9ed2496b7cc66b22a9baaa0ce0175057d31a4272"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"8d09d2d439f88094eca7377436f552de33d5c873","unresolved":false,"context_lines":[{"line_number":910,"context_line":"                greenthread.sleep(1)"},{"line_number":911,"context_line":""},{"line_number":912,"context_line":"            if backup_ref[\u0027status\u0027] \u003d\u003d fields.BackupStatus.ERROR:"},{"line_number":913,"context_line":"                msg \u003d (\u0027Error while creating volume %(volume_id)s \u0027"},{"line_number":914,"context_line":"                       \u0027for restoring backup %(backup_id)s.\u0027 %"},{"line_number":915,"context_line":"                       {\u0027volume_id\u0027: volume.id, \u0027backup_id\u0027: backup_id})"},{"line_number":916,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":917,"context_line":""},{"line_number":918,"context_line":"    def _create_raw_volume(self, volume, **kwargs):"},{"line_number":919,"context_line":"        ret \u003d self.driver.create_volume(volume)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_6db7cdda","line":916,"range":{"start_line":913,"start_character":14,"end_line":916,"end_character":57},"updated":"2017-10-19 01:21:17.000000000","message":"The message and exception is incorrect:)","commit_id":"9ed2496b7cc66b22a9baaa0ce0175057d31a4272"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"c36d12bdd73f7095fab9da806d29c2f278d4942c","unresolved":false,"context_lines":[{"line_number":910,"context_line":"                greenthread.sleep(1)"},{"line_number":911,"context_line":""},{"line_number":912,"context_line":"            if backup_ref[\u0027status\u0027] \u003d\u003d fields.BackupStatus.ERROR:"},{"line_number":913,"context_line":"                msg \u003d (\u0027Error while creating volume %(volume_id)s \u0027"},{"line_number":914,"context_line":"                       \u0027for restoring backup %(backup_id)s.\u0027 %"},{"line_number":915,"context_line":"                       {\u0027volume_id\u0027: volume.id, \u0027backup_id\u0027: backup_id})"},{"line_number":916,"context_line":"                raise exception.InvalidVolume(reason\u003dmsg)"},{"line_number":917,"context_line":""},{"line_number":918,"context_line":"    def _create_raw_volume(self, volume, **kwargs):"},{"line_number":919,"context_line":"        ret \u003d self.driver.create_volume(volume)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f4b6375_47d1d722","line":916,"range":{"start_line":913,"start_character":14,"end_line":916,"end_character":57},"in_reply_to":"3f4b6375_6db7cdda","updated":"2017-10-26 07:43:23.000000000","message":"Done","commit_id":"9ed2496b7cc66b22a9baaa0ce0175057d31a4272"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"820dd1894fdbe574228712a281218cc662121835","unresolved":false,"context_lines":[{"line_number":884,"context_line":"                        \"at the backend and then schedule the request to the \""},{"line_number":885,"context_line":"                        \"backup service to restore the volume with backup.\","},{"line_number":886,"context_line":"                        {\u0027id\u0027: backup_id})"},{"line_number":887,"context_line":"            model_update \u003d self._create_raw_volume(volume, **kwargs) or {}"},{"line_number":888,"context_line":"            model_update.update({\u0027status\u0027: \u0027restoring-backup\u0027})"},{"line_number":889,"context_line":"            volume.update(model_update)"},{"line_number":890,"context_line":"            volume.save()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_4e7af2b9","line":887,"range":{"start_line":887,"start_character":9,"end_line":887,"end_character":74},"updated":"2017-10-26 12:05:35.000000000","message":"If the process of create_raw_volume succeeded and restoring process failed, the cinder\u0027s work flow will reschedule the request  again, so the identical volume will be created at backend again (invoke this method a second time). Need to consider this case and fix it.","commit_id":"e9e79a8e42f52596fb7df032cee1195de99711c7"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"179c8945fbbc110b233eeeda08b6ba62b889174d","unresolved":false,"context_lines":[{"line_number":884,"context_line":"                        \"at the backend and then schedule the request to the \""},{"line_number":885,"context_line":"                        \"backup service to restore the volume with backup.\","},{"line_number":886,"context_line":"                        {\u0027id\u0027: backup_id})"},{"line_number":887,"context_line":"            model_update \u003d self._create_raw_volume(volume, **kwargs) or {}"},{"line_number":888,"context_line":"            model_update.update({\u0027status\u0027: \u0027restoring-backup\u0027})"},{"line_number":889,"context_line":"            volume.update(model_update)"},{"line_number":890,"context_line":"            volume.save()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_8b509f0c","line":887,"range":{"start_line":887,"start_character":9,"end_line":887,"end_character":74},"in_reply_to":"3f4b6375_4e7af2b9","updated":"2017-10-29 13:34:31.000000000","message":"The volume created here will be deleted by the method `_post_reschedule` before a new reschedule action, please see https://github.com/openstack/cinder/blob/master/cinder/volume/flows/manager/create_volume.py#L166","commit_id":"e9e79a8e42f52596fb7df032cee1195de99711c7"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"820dd1894fdbe574228712a281218cc662121835","unresolved":false,"context_lines":[{"line_number":914,"context_line":"            timer.start(interval\u003d2,"},{"line_number":915,"context_line":"                        timeout\u003dCONF.create_restore_volume_timeout).wait()"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":"            if backup[\u0027status\u0027] \u003d\u003d fields.BackupStatus.ERROR_RESTORING:"},{"line_number":918,"context_line":"                msg \u003d (\"Failed to restore backup %(backup_id)s \""},{"line_number":919,"context_line":"                       \"with volume %(volume_id)s.\" %"},{"line_number":920,"context_line":"                       {\u0027backup_id\u0027: backup.id, \u0027volume_id\u0027: volume.id})"},{"line_number":921,"context_line":"                raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":922,"context_line":""},{"line_number":923,"context_line":"        LOG.info(\"Created volume %(volume_id)s from backup %(backup_id)s \""},{"line_number":924,"context_line":"                 \"successfully.\","}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_2e17b6a6","line":921,"range":{"start_line":917,"start_character":11,"end_line":921,"end_character":57},"updated":"2017-10-26 12:05:35.000000000","message":"In some failure cases, the backup\u0027s status could be \u0027available\u0027 while the volume is \u0027error\u0027, need to consider this case and raise error too.","commit_id":"e9e79a8e42f52596fb7df032cee1195de99711c7"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"179c8945fbbc110b233eeeda08b6ba62b889174d","unresolved":false,"context_lines":[{"line_number":914,"context_line":"            timer.start(interval\u003d2,"},{"line_number":915,"context_line":"                        timeout\u003dCONF.create_restore_volume_timeout).wait()"},{"line_number":916,"context_line":""},{"line_number":917,"context_line":"            if backup[\u0027status\u0027] \u003d\u003d fields.BackupStatus.ERROR_RESTORING:"},{"line_number":918,"context_line":"                msg \u003d (\"Failed to restore backup %(backup_id)s \""},{"line_number":919,"context_line":"                       \"with volume %(volume_id)s.\" %"},{"line_number":920,"context_line":"                       {\u0027backup_id\u0027: backup.id, \u0027volume_id\u0027: volume.id})"},{"line_number":921,"context_line":"                raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":922,"context_line":""},{"line_number":923,"context_line":"        LOG.info(\"Created volume %(volume_id)s from backup %(backup_id)s \""},{"line_number":924,"context_line":"                 \"successfully.\","}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_2b3f6bb6","line":921,"range":{"start_line":917,"start_character":11,"end_line":921,"end_character":57},"in_reply_to":"3f4b6375_2e17b6a6","updated":"2017-10-29 13:34:31.000000000","message":"Yes, it need to check both the volume\u0027s status and backup\u0027s status.","commit_id":"e9e79a8e42f52596fb7df032cee1195de99711c7"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9cc2bce470bb98ef74dbfa7c0d225c2198362241","unresolved":false,"context_lines":[{"line_number":916,"context_line":""},{"line_number":917,"context_line":"            backup \u003d objects.Backup.get_by_id(context, backup.id)"},{"line_number":918,"context_line":"            volume \u003d objects.Volume.get_by_id(context, volume.id)"},{"line_number":919,"context_line":"            if ((backup[\u0027status\u0027] !\u003d fields.BackupStatus.AVAILABLE) or"},{"line_number":920,"context_line":"                    (volume[\u0027status\u0027] !\u003d \u0027available\u0027)):"},{"line_number":921,"context_line":"                msg \u003d (\"Failed to restore backup %(backup_id)s \""},{"line_number":922,"context_line":"                       \"with volume %(volume_id)s.\" %"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_d3e76946","line":919,"range":{"start_line":919,"start_character":66,"end_line":919,"end_character":67},"updated":"2017-10-29 21:54:20.000000000","message":"These () not needed.","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"73b98d65622d0e73f0e78ff6af3f54fc76591b0d","unresolved":false,"context_lines":[{"line_number":916,"context_line":""},{"line_number":917,"context_line":"            backup \u003d objects.Backup.get_by_id(context, backup.id)"},{"line_number":918,"context_line":"            volume \u003d objects.Volume.get_by_id(context, volume.id)"},{"line_number":919,"context_line":"            if ((backup[\u0027status\u0027] !\u003d fields.BackupStatus.AVAILABLE) or"},{"line_number":920,"context_line":"                    (volume[\u0027status\u0027] !\u003d \u0027available\u0027)):"},{"line_number":921,"context_line":"                msg \u003d (\"Failed to restore backup %(backup_id)s \""},{"line_number":922,"context_line":"                       \"with volume %(volume_id)s.\" %"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_3646ab23","line":919,"range":{"start_line":919,"start_character":66,"end_line":919,"end_character":67},"in_reply_to":"3f4b6375_d3e76946","updated":"2017-10-30 05:02:55.000000000","message":"Done","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"1e4db8140b22cdcadd5ae82cf48c38a32b62a7aa","unresolved":false,"context_lines":[{"line_number":891,"context_line":""},{"line_number":892,"context_line":"            backup_host \u003d self.backup_api.get_available_backup_service_host("},{"line_number":893,"context_line":"                backup.host, backup.availability_zone)"},{"line_number":894,"context_line":"            updates \u003d {\u0027status\u0027: fields.BackupStatus.RESTORING,"},{"line_number":895,"context_line":"                       \u0027restore_volume_id\u0027: volume.id,"},{"line_number":896,"context_line":"                       \u0027host\u0027: backup_host}"},{"line_number":897,"context_line":"            backup.update(updates)"},{"line_number":898,"context_line":"            backup.save()"},{"line_number":899,"context_line":""},{"line_number":900,"context_line":"            self.backup_rpcapi.restore_backup(context, backup.host, backup,"},{"line_number":901,"context_line":"                                              volume.id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_617a9877","line":898,"range":{"start_line":894,"start_character":9,"end_line":898,"end_character":25},"updated":"2017-11-03 01:16:50.000000000","message":"Need to update the backup\u0027s status before trying driver\u0027s implementation.","commit_id":"761f8febc3efca02a4849cf1ea801d9cb82917fc"},{"author":{"_account_id":25169,"name":"Xiaojun Liao","email":"xiaojunliao85@gmail.com","username":"wwba"},"change_message_id":"6cb7e2e8b2f3d559e61f1980ad0b914141cf8644","unresolved":false,"context_lines":[{"line_number":916,"context_line":""},{"line_number":917,"context_line":"            backup \u003d objects.Backup.get_by_id(context, backup.id)"},{"line_number":918,"context_line":"            volume \u003d objects.Volume.get_by_id(context, volume.id)"},{"line_number":919,"context_line":"            if (backup[\u0027status\u0027] !\u003d fields.BackupStatus.AVAILABLE or"},{"line_number":920,"context_line":"                    volume[\u0027status\u0027] !\u003d \u0027available\u0027):"},{"line_number":921,"context_line":"                msg \u003d (\"Failed to restore backup %(backup_id)s \""},{"line_number":922,"context_line":"                       \"with volume %(volume_id)s.\" %"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_f4c9eb78","line":919,"updated":"2017-11-01 02:31:36.000000000","message":"what happens if as soon as possible a new backup/volume API request initialized? I think asynchronous API call from backup is not the best way.","commit_id":"761f8febc3efca02a4849cf1ea801d9cb82917fc"},{"author":{"_account_id":25169,"name":"Xiaojun Liao","email":"xiaojunliao85@gmail.com","username":"wwba"},"change_message_id":"49acc48125335bac4a787a21a229f31e2a2254a4","unresolved":false,"context_lines":[{"line_number":916,"context_line":""},{"line_number":917,"context_line":"            backup \u003d objects.Backup.get_by_id(context, backup.id)"},{"line_number":918,"context_line":"            volume \u003d objects.Volume.get_by_id(context, volume.id)"},{"line_number":919,"context_line":"            if (backup[\u0027status\u0027] !\u003d fields.BackupStatus.AVAILABLE or"},{"line_number":920,"context_line":"                    volume[\u0027status\u0027] !\u003d \u0027available\u0027):"},{"line_number":921,"context_line":"                msg \u003d (\"Failed to restore backup %(backup_id)s \""},{"line_number":922,"context_line":"                       \"with volume %(volume_id)s.\" %"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_b2b6753d","line":919,"in_reply_to":"3f4b6375_5962ccaf","updated":"2017-11-06 06:01:02.000000000","message":"how do the volume process know when restoring finished in the backup process? To slove the problem i described, it seems that attaching the backup device to the volume process host is needed.","commit_id":"761f8febc3efca02a4849cf1ea801d9cb82917fc"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"b3bc2ad54c7cf9cea62e0f6426b1c1c901b05071","unresolved":false,"context_lines":[{"line_number":916,"context_line":""},{"line_number":917,"context_line":"            backup \u003d objects.Backup.get_by_id(context, backup.id)"},{"line_number":918,"context_line":"            volume \u003d objects.Volume.get_by_id(context, volume.id)"},{"line_number":919,"context_line":"            if (backup[\u0027status\u0027] !\u003d fields.BackupStatus.AVAILABLE or"},{"line_number":920,"context_line":"                    volume[\u0027status\u0027] !\u003d \u0027available\u0027):"},{"line_number":921,"context_line":"                msg \u003d (\"Failed to restore backup %(backup_id)s \""},{"line_number":922,"context_line":"                       \"with volume %(volume_id)s.\" %"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_cfedb525","line":919,"in_reply_to":"3f4b6375_b2b6753d","updated":"2017-11-07 03:27:02.000000000","message":"I mean the volume process only need to send a `restore_backup` message to backup process, we can leave the rest work to backup process to do it. please review my patch set 7, thanks.","commit_id":"761f8febc3efca02a4849cf1ea801d9cb82917fc"},{"author":{"_account_id":25169,"name":"Xiaojun Liao","email":"xiaojunliao85@gmail.com","username":"wwba"},"change_message_id":"49acc48125335bac4a787a21a229f31e2a2254a4","unresolved":false,"context_lines":[{"line_number":916,"context_line":""},{"line_number":917,"context_line":"            backup \u003d objects.Backup.get_by_id(context, backup.id)"},{"line_number":918,"context_line":"            volume \u003d objects.Volume.get_by_id(context, volume.id)"},{"line_number":919,"context_line":"            if (backup[\u0027status\u0027] !\u003d fields.BackupStatus.AVAILABLE or"},{"line_number":920,"context_line":"                    volume[\u0027status\u0027] !\u003d \u0027available\u0027):"},{"line_number":921,"context_line":"                msg \u003d (\"Failed to restore backup %(backup_id)s \""},{"line_number":922,"context_line":"                       \"with volume %(volume_id)s.\" %"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_17b9bb77","line":919,"in_reply_to":"3f4b6375_f4c9eb78","updated":"2017-11-06 06:01:02.000000000","message":"\u003e what happens if as soon as possible a new backup/volume API request\n \u003e initialized? I think asynchronous API call from backup is not the\n \u003e best way.","commit_id":"761f8febc3efca02a4849cf1ea801d9cb82917fc"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"45b8eeaaf3735e0f869dfe73d7fe46ab056637d8","unresolved":false,"context_lines":[{"line_number":916,"context_line":""},{"line_number":917,"context_line":"            backup \u003d objects.Backup.get_by_id(context, backup.id)"},{"line_number":918,"context_line":"            volume \u003d objects.Volume.get_by_id(context, volume.id)"},{"line_number":919,"context_line":"            if (backup[\u0027status\u0027] !\u003d fields.BackupStatus.AVAILABLE or"},{"line_number":920,"context_line":"                    volume[\u0027status\u0027] !\u003d \u0027available\u0027):"},{"line_number":921,"context_line":"                msg \u003d (\"Failed to restore backup %(backup_id)s \""},{"line_number":922,"context_line":"                       \"with volume %(volume_id)s.\" %"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_8a43abaf","line":919,"in_reply_to":"3f4b6375_f4c9eb78","updated":"2017-11-01 09:39:07.000000000","message":"Hey Xiaojun Liao, can you explain your concern with more detail?","commit_id":"761f8febc3efca02a4849cf1ea801d9cb82917fc"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"3bb9f286c4430f55a688d2d42d157e1aae7c816f","unresolved":false,"context_lines":[{"line_number":916,"context_line":""},{"line_number":917,"context_line":"            backup \u003d objects.Backup.get_by_id(context, backup.id)"},{"line_number":918,"context_line":"            volume \u003d objects.Volume.get_by_id(context, volume.id)"},{"line_number":919,"context_line":"            if (backup[\u0027status\u0027] !\u003d fields.BackupStatus.AVAILABLE or"},{"line_number":920,"context_line":"                    volume[\u0027status\u0027] !\u003d \u0027available\u0027):"},{"line_number":921,"context_line":"                msg \u003d (\"Failed to restore backup %(backup_id)s \""},{"line_number":922,"context_line":"                       \"with volume %(volume_id)s.\" %"}],"source_content_type":"text/x-python","patch_set":5,"id":"3f4b6375_5962ccaf","line":919,"in_reply_to":"3f4b6375_f4c9eb78","updated":"2017-11-06 02:50:01.000000000","message":"Xiaojun, thanks for you review, yes, you are right, can not wait the volume\u0027s status to be available in here, I think we can call the backup_rpc API and cinder-backup process will update the volume\u0027s status, so the state transition of a volume is: creating -\u003e restoring-backup -\u003e error_restoring/available.\nWill implement it in a new patch.","commit_id":"761f8febc3efca02a4849cf1ea801d9cb82917fc"},{"author":{"_account_id":25376,"name":"zhuangzejian","email":"zzj123389602@gmail.com","username":"smartu3"},"change_message_id":"093221018d3a061ca7932e3ef6a792a29ae89123","unresolved":false,"context_lines":[{"line_number":889,"context_line":""},{"line_number":890,"context_line":"        except NotImplementedError:"},{"line_number":891,"context_line":"            LOG.warning(\"Backend does not support creating volume from \""},{"line_number":892,"context_line":"                        \"backup %(id)s. Will directly create the raw volume \""},{"line_number":893,"context_line":"                        \"at the backend and then schedule the request to the \""},{"line_number":894,"context_line":"                        \"backup service to restore the volume with backup.\","},{"line_number":895,"context_line":"                        {\u0027id\u0027: backup_id})"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f485f77_1f0f2de2","line":892,"range":{"start_line":892,"start_character":40,"end_line":892,"end_character":44},"updated":"2017-11-13 03:14:10.000000000","message":"It will","commit_id":"9a8ca6bd19b16adf6d06166eddfb8314d36a5d79"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"258e04e96c50da57737592eb48e065fe2471a91e","unresolved":false,"context_lines":[{"line_number":889,"context_line":""},{"line_number":890,"context_line":"        except NotImplementedError:"},{"line_number":891,"context_line":"            LOG.warning(\"Backend does not support creating volume from \""},{"line_number":892,"context_line":"                        \"backup %(id)s. Will directly create the raw volume \""},{"line_number":893,"context_line":"                        \"at the backend and then schedule the request to the \""},{"line_number":894,"context_line":"                        \"backup service to restore the volume with backup.\","},{"line_number":895,"context_line":"                        {\u0027id\u0027: backup_id})"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f485f77_bf61d507","line":892,"range":{"start_line":892,"start_character":40,"end_line":892,"end_character":44},"in_reply_to":"1f485f77_1f0f2de2","updated":"2017-11-16 07:32:04.000000000","message":"Done","commit_id":"9a8ca6bd19b16adf6d06166eddfb8314d36a5d79"},{"author":{"_account_id":25376,"name":"zhuangzejian","email":"zzj123389602@gmail.com","username":"smartu3"},"change_message_id":"093221018d3a061ca7932e3ef6a792a29ae89123","unresolved":false,"context_lines":[{"line_number":913,"context_line":"        LOG.info(\"Created volume %(volume_id)s from backup %(backup_id)s \""},{"line_number":914,"context_line":"                 \"successfully.\","},{"line_number":915,"context_line":"                 {\u0027volume_id\u0027: volume.id,"},{"line_number":916,"context_line":"                  \u0027backup_id\u0027: backup.id})"},{"line_number":917,"context_line":"        return ret, need_update_volume"},{"line_number":918,"context_line":""},{"line_number":919,"context_line":"    def _create_raw_volume(self, volume, **kwargs):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f485f77_ffe1f1ff","line":916,"range":{"start_line":916,"start_character":31,"end_line":916,"end_character":40},"updated":"2017-11-13 03:14:10.000000000","message":"backup_id better?","commit_id":"9a8ca6bd19b16adf6d06166eddfb8314d36a5d79"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"258e04e96c50da57737592eb48e065fe2471a91e","unresolved":false,"context_lines":[{"line_number":913,"context_line":"        LOG.info(\"Created volume %(volume_id)s from backup %(backup_id)s \""},{"line_number":914,"context_line":"                 \"successfully.\","},{"line_number":915,"context_line":"                 {\u0027volume_id\u0027: volume.id,"},{"line_number":916,"context_line":"                  \u0027backup_id\u0027: backup.id})"},{"line_number":917,"context_line":"        return ret, need_update_volume"},{"line_number":918,"context_line":""},{"line_number":919,"context_line":"    def _create_raw_volume(self, volume, **kwargs):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f485f77_9f5e1942","line":916,"range":{"start_line":916,"start_character":31,"end_line":916,"end_character":40},"in_reply_to":"1f485f77_ffe1f1ff","updated":"2017-11-16 07:32:04.000000000","message":"Done","commit_id":"9a8ca6bd19b16adf6d06166eddfb8314d36a5d79"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"2c6139781085d131e62fa3bc4175a047477dd236","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from taskflow.patterns import linear_flow"},{"line_number":23,"context_line":"from taskflow.types import failure as ft"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cinder import backup as backupAPI"},{"line_number":26,"context_line":"from cinder.backup import rpcapi as backup_rpcapi"},{"line_number":27,"context_line":"from cinder import context as cinder_context"},{"line_number":28,"context_line":"from cinder import coordination"}],"source_content_type":"text/x-python","patch_set":9,"id":"1f485f77_ef1f8805","line":25,"range":{"start_line":25,"start_character":29,"end_line":25,"end_character":38},"updated":"2017-11-16 17:02:19.000000000","message":"backup_api would be more consistent with PEP8.","commit_id":"cf8c6f745a1637a5ef2c3a46b5e1f69a301aa8c7"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"5334070cebad951735e4361807d24b61482b07f1","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from taskflow.patterns import linear_flow"},{"line_number":23,"context_line":"from taskflow.types import failure as ft"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cinder import backup as backupAPI"},{"line_number":26,"context_line":"from cinder.backup import rpcapi as backup_rpcapi"},{"line_number":27,"context_line":"from cinder import context as cinder_context"},{"line_number":28,"context_line":"from cinder import coordination"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff82abbf_5a357d45","line":25,"range":{"start_line":25,"start_character":29,"end_line":25,"end_character":38},"in_reply_to":"1f485f77_ef1f8805","updated":"2017-11-22 06:39:48.000000000","message":"Done","commit_id":"cf8c6f745a1637a5ef2c3a46b5e1f69a301aa8c7"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"5334070cebad951735e4361807d24b61482b07f1","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from taskflow.patterns import linear_flow"},{"line_number":23,"context_line":"from taskflow.types import failure as ft"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from cinder import backup as backupAPI"},{"line_number":26,"context_line":"from cinder.backup import rpcapi as backup_rpcapi"},{"line_number":27,"context_line":"from cinder import context as cinder_context"},{"line_number":28,"context_line":"from cinder import coordination"}],"source_content_type":"text/x-python","patch_set":9,"id":"ff82abbf_da1bcd18","line":25,"range":{"start_line":25,"start_character":29,"end_line":25,"end_character":38},"in_reply_to":"1f485f77_ef1f8805","updated":"2017-11-22 06:39:48.000000000","message":"Done","commit_id":"cf8c6f745a1637a5ef2c3a46b5e1f69a301aa8c7"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"24dd7c229d4af1e0ad456f73fc3c3c10adff3b33","unresolved":false,"context_lines":[{"line_number":892,"context_line":"            need_update_volume \u003d True"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":"        except NotImplementedError:"},{"line_number":895,"context_line":"            LOG.warning(\"Backend does not support creating volume from \""},{"line_number":896,"context_line":"                        \"backup %(id)s. It will directly create the raw volume\""},{"line_number":897,"context_line":"                        \"at the backend and then schedule the request to the \""},{"line_number":898,"context_line":"                        \"backup service to restore the volume with backup.\","}],"source_content_type":"text/x-python","patch_set":9,"id":"1f485f77_54ce312d","line":895,"range":{"start_line":895,"start_character":16,"end_line":895,"end_character":23},"updated":"2017-11-16 16:38:48.000000000","message":"I think I would rather see this at info level. A warning is something that requires an operators attention for something that they can fix. If their backend does not support offloading backup restore, then it isn\u0027t really something they have any control over. It\u0027s good to let them know, just so they are aware of why it might take a little longer, but probably more appropriate at info or even debug level.","commit_id":"cf8c6f745a1637a5ef2c3a46b5e1f69a301aa8c7"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"5334070cebad951735e4361807d24b61482b07f1","unresolved":false,"context_lines":[{"line_number":892,"context_line":"            need_update_volume \u003d True"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":"        except NotImplementedError:"},{"line_number":895,"context_line":"            LOG.warning(\"Backend does not support creating volume from \""},{"line_number":896,"context_line":"                        \"backup %(id)s. It will directly create the raw volume\""},{"line_number":897,"context_line":"                        \"at the backend and then schedule the request to the \""},{"line_number":898,"context_line":"                        \"backup service to restore the volume with backup.\","}],"source_content_type":"text/x-python","patch_set":9,"id":"ff82abbf_5ab6ddfc","line":895,"range":{"start_line":895,"start_character":16,"end_line":895,"end_character":23},"in_reply_to":"1f485f77_54ce312d","updated":"2017-11-22 06:39:48.000000000","message":"Done","commit_id":"cf8c6f745a1637a5ef2c3a46b5e1f69a301aa8c7"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"9e5d44193de4708d2f1cf511299ed9907920ac03","unresolved":false,"context_lines":[{"line_number":709,"context_line":"                )"},{"line_number":710,"context_line":"                return model_update, True"},{"line_number":711,"context_line":"        except NotImplementedError:"},{"line_number":712,"context_line":"            LOG.info(\u0027Backend does not support creating image-volume \u0027"},{"line_number":713,"context_line":"                     \u0027clone. Image will be downloaded from Glance.\u0027)"},{"line_number":714,"context_line":"        except exception.CinderException as e:"},{"line_number":715,"context_line":"            LOG.warning(\u0027Failed to create volume from image-volume cache, \u0027"},{"line_number":716,"context_line":"                        \u0027image will be downloaded from Glance. Error: \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_cb95d641","line":713,"range":{"start_line":712,"start_character":0,"end_line":713,"end_character":68},"updated":"2017-11-27 15:53:10.000000000","message":"This looks like an unrelated change.  Why is it in here?  Was this accidentally changed based on Sean\u0027s comment below?","commit_id":"f91d22767a83728274cb7b18e4ae2a4c929d241b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"59c1289156fbff193d04a9c2a81c3c73440f180a","unresolved":false,"context_lines":[{"line_number":892,"context_line":"            need_update_volume \u003d True"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":"        except NotImplementedError:"},{"line_number":895,"context_line":"            LOG.warning(\"Backend does not support creating volume from \""},{"line_number":896,"context_line":"                        \"backup %(id)s. It will directly create the raw volume\""},{"line_number":897,"context_line":"                        \"at the backend and then schedule the request to the \""},{"line_number":898,"context_line":"                        \"backup service to restore the volume with backup.\","}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_4bd30661","line":895,"range":{"start_line":895,"start_character":16,"end_line":895,"end_character":23},"updated":"2017-11-27 15:46:00.000000000","message":"I\u0027d rather see this at info level, but not strongly enough to downvote on it.","commit_id":"f91d22767a83728274cb7b18e4ae2a4c929d241b"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"9e5d44193de4708d2f1cf511299ed9907920ac03","unresolved":false,"context_lines":[{"line_number":892,"context_line":"            need_update_volume \u003d True"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":"        except NotImplementedError:"},{"line_number":895,"context_line":"            LOG.warning(\"Backend does not support creating volume from \""},{"line_number":896,"context_line":"                        \"backup %(id)s. It will directly create the raw volume\""},{"line_number":897,"context_line":"                        \"at the backend and then schedule the request to the \""},{"line_number":898,"context_line":"                        \"backup service to restore the volume with backup.\","}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_8b74ae37","line":895,"range":{"start_line":895,"start_character":16,"end_line":895,"end_character":23},"in_reply_to":"ff82abbf_4bd30661","updated":"2017-11-27 15:53:10.000000000","message":"Agree with Sean\u0027s input.","commit_id":"f91d22767a83728274cb7b18e4ae2a4c929d241b"}],"cinder/volume/manager.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9cc2bce470bb98ef74dbfa7c0d225c2198362241","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                    \"supported now.\"),"},{"line_number":126,"context_line":"    cfg.IntOpt(\u0027create_restore_volume_timeout\u0027,"},{"line_number":127,"context_line":"               default\u003d3600,"},{"line_number":128,"context_line":"               help\u003d\u0027Timeout for creating the volume when performing\u0027"},{"line_number":129,"context_line":"                    \u0027volume restore from backup (seconds)\u0027),"},{"line_number":130,"context_line":"]"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_f38ca580","line":128,"range":{"start_line":128,"start_character":68,"end_line":128,"end_character":69},"updated":"2017-10-29 21:54:20.000000000","message":"Need trailing space.","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"73b98d65622d0e73f0e78ff6af3f54fc76591b0d","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                    \"supported now.\"),"},{"line_number":126,"context_line":"    cfg.IntOpt(\u0027create_restore_volume_timeout\u0027,"},{"line_number":127,"context_line":"               default\u003d3600,"},{"line_number":128,"context_line":"               help\u003d\u0027Timeout for creating the volume when performing\u0027"},{"line_number":129,"context_line":"                    \u0027volume restore from backup (seconds)\u0027),"},{"line_number":130,"context_line":"]"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_1653afe4","line":128,"range":{"start_line":128,"start_character":68,"end_line":128,"end_character":69},"in_reply_to":"3f4b6375_f38ca580","updated":"2017-10-30 05:02:55.000000000","message":"Done","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"}],"releasenotes/notes/support-create-volume-from-backup-d363e2b502a76dc2.yaml":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"9cc2bce470bb98ef74dbfa7c0d225c2198362241","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add a ``backup_id`` param to create volume, and we can specify type, size,"},{"line_number":5,"context_line":"    name and many other attributes to restore backup with volume."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    If the driver doesn\u0027t implement the ``create_volume_from_backup`` method,"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3f4b6375_13906195","line":4,"updated":"2017-10-29 21:54:20.000000000","message":"This has internal details of the code that an end user or deployer will not understand. The release notes need to be written for consumers that don\u0027t necessarily know anything about how things are implemented.\n\nMaybe just state something like:\n\nStarting with API microversion 3.x, Cinder now supports the ability to create a volume directly from a backup.","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"73b98d65622d0e73f0e78ff6af3f54fc76591b0d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add a ``backup_id`` param to create volume, and we can specify type, size,"},{"line_number":5,"context_line":"    name and many other attributes to restore backup with volume."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    If the driver doesn\u0027t implement the ``create_volume_from_backup`` method,"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3f4b6375_d65e37e8","line":4,"in_reply_to":"3f4b6375_13906195","updated":"2017-10-30 05:02:55.000000000","message":"Done","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"},{"author":{"_account_id":23083,"name":"TommyLike","email":"tommylikehu@gmail.com","username":"TommyLike"},"change_message_id":"60fbdedd994b3a7c8e7a9e12cb0698dc6169977b","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add a ``backup_id`` param to create volume, and we can specify type, size,"},{"line_number":5,"context_line":"    name and many other attributes to restore backup with volume."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    If the driver doesn\u0027t implement the ``create_volume_from_backup`` method,"},{"line_number":8,"context_line":"    Cinder will directly create the raw volume at the backend and then"},{"line_number":9,"context_line":"    schedule the request to the backup service to restore the volume"},{"line_number":10,"context_line":"    with backup."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3f4b6375_d64ab781","line":10,"range":{"start_line":6,"start_character":1,"end_line":10,"end_character":16},"updated":"2017-10-30 01:23:13.000000000","message":"Need to mention the new configure option ``create_restore_volume_timeout``","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"},{"author":{"_account_id":24564,"name":"qtlu","email":"qtlu@fiberhome.com","username":"qtlu"},"change_message_id":"73b98d65622d0e73f0e78ff6af3f54fc76591b0d","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Add a ``backup_id`` param to create volume, and we can specify type, size,"},{"line_number":5,"context_line":"    name and many other attributes to restore backup with volume."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    If the driver doesn\u0027t implement the ``create_volume_from_backup`` method,"},{"line_number":8,"context_line":"    Cinder will directly create the raw volume at the backend and then"},{"line_number":9,"context_line":"    schedule the request to the backup service to restore the volume"},{"line_number":10,"context_line":"    with backup."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3f4b6375_31ffd535","line":10,"range":{"start_line":6,"start_character":1,"end_line":10,"end_character":16},"in_reply_to":"3f4b6375_d64ab781","updated":"2017-10-30 05:02:55.000000000","message":"Done","commit_id":"58d0fb327f9fc980e0c8b84dcd9f64c093285d13"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"6e6318437ce6715dc3a3ebf81c615ad0e969ca29","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Starting with API microversion 3.46, Cinder now supports the ability to"},{"line_number":5,"context_line":"    create a volume directly from a backup."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"ff82abbf_0be41edf","line":5,"updated":"2017-11-27 15:55:17.000000000","message":"One other thought here.  Can we provide a command example of how we to create a volume from backup?","commit_id":"f91d22767a83728274cb7b18e4ae2a4c929d241b"}]}
