)]}'
{"karbor/services/protection/bank_plugins/s3_bank_plugin.py":[{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"24bd015bf1fbf5d2c832e67353944999f59e120c","unresolved":false,"context_lines":[{"line_number":232,"context_line":"                    response \u003d self.connection.list_objects("},{"line_number":233,"context_line":"                        Bucket\u003dbucket,"},{"line_number":234,"context_line":"                        Prefix\u003dprefix,"},{"line_number":235,"context_line":"                        Marker\u003dmarker"},{"line_number":236,"context_line":"                    )"},{"line_number":237,"context_line":"                    if \u0027Contents\u0027 not in response:"},{"line_number":238,"context_line":"                        break"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f1a1f67_f626d5ba","line":235,"range":{"start_line":235,"start_character":23,"end_line":235,"end_character":37},"updated":"2017-07-21 02:40:54.000000000","message":"Listing all the objects in S3, is the parameter Marker needed?","commit_id":"ec700c43e9e86407292a14bec2a253ae5c902a84"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"952b5d3458f16c168d4b475a172274efb687708c","unresolved":false,"context_lines":[{"line_number":232,"context_line":"                    response \u003d self.connection.list_objects("},{"line_number":233,"context_line":"                        Bucket\u003dbucket,"},{"line_number":234,"context_line":"                        Prefix\u003dprefix,"},{"line_number":235,"context_line":"                        Marker\u003dmarker"},{"line_number":236,"context_line":"                    )"},{"line_number":237,"context_line":"                    if \u0027Contents\u0027 not in response:"},{"line_number":238,"context_line":"                        break"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f1a1f67_569349a4","line":235,"range":{"start_line":235,"start_character":23,"end_line":235,"end_character":37},"in_reply_to":"1f1a1f67_f626d5ba","updated":"2017-07-21 02:50:44.000000000","message":"yes, this means list all the objects after the maker","commit_id":"ec700c43e9e86407292a14bec2a253ae5c902a84"}],"karbor/services/protection/bank_plugins/swift_bank_plugin.py":[{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"24bd015bf1fbf5d2c832e67353944999f59e120c","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            raise exception.BankGetObjectFailed(reason\u003derr, key\u003dkey)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def list_objects(self, prefix\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":147,"context_line":"                     sort_dir\u003dNone, full_listing\u003dTrue):"},{"line_number":148,"context_line":"        try:"},{"line_number":149,"context_line":"            if sort_dir \u003d\u003d \"desc\":"},{"line_number":150,"context_line":"                body \u003d self._get_container("}],"source_content_type":"text/x-python","patch_set":8,"id":"1f1a1f67_563c69be","line":147,"range":{"start_line":147,"start_character":36,"end_line":147,"end_character":53},"updated":"2017-07-21 02:40:54.000000000","message":"If full_listing\u003dTrue, Are the limit and marker parameters ignored?","commit_id":"ec700c43e9e86407292a14bec2a253ae5c902a84"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"952b5d3458f16c168d4b475a172274efb687708c","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            raise exception.BankGetObjectFailed(reason\u003derr, key\u003dkey)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def list_objects(self, prefix\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":147,"context_line":"                     sort_dir\u003dNone, full_listing\u003dTrue):"},{"line_number":148,"context_line":"        try:"},{"line_number":149,"context_line":"            if sort_dir \u003d\u003d \"desc\":"},{"line_number":150,"context_line":"                body \u003d self._get_container("}],"source_content_type":"text/x-python","patch_set":8,"id":"1f1a1f67_f6ba55df","line":147,"range":{"start_line":147,"start_character":36,"end_line":147,"end_character":53},"in_reply_to":"1f1a1f67_563c69be","updated":"2017-07-21 02:50:44.000000000","message":"No. full_listing means list the objects after the maker, limit means the number of objects you can list in one request at most.\nThis is implemented in swiftclient.\nhttps://github.com/openstack/python-swiftclient/blob/74eb91b176464dcac225e7b8152e3a933fdf30ee/swiftclient/client.py#L737","commit_id":"ec700c43e9e86407292a14bec2a253ae5c902a84"}],"karbor/services/protection/checkpoint.py":[{"author":{"_account_id":22406,"name":"Kien Nguyen","email":"kiennt2609@gmail.com","username":"kiennt"},"change_message_id":"feaf2f610d63981e17fcd3779f1548523707a56b","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        self._checkpoints_section \u003d bank.get_sub_section(\"/checkpoints\")"},{"line_number":256,"context_line":"        self._indices_section \u003d bank.get_sub_section(\"/indices\")"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def list_ids(self, provider_id, limit\u003dNone, marker\u003dNone, plan_id\u003dNone,"},{"line_number":259,"context_line":"                 start_date\u003dNone, end_date\u003dNone, sort_dir\u003dNone):"},{"line_number":260,"context_line":"        marker_checkpoint \u003d None"},{"line_number":261,"context_line":"        if marker is not None:"},{"line_number":262,"context_line":"            checkpoint_section \u003d self._checkpoints_section.get_sub_section("}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_6da459ba","line":259,"range":{"start_line":258,"start_character":36,"end_line":259,"end_character":62},"updated":"2017-07-20 08:34:10.000000000","message":"You removed all these args usage in _list_ids method, so you should remove here too.","commit_id":"f0d871e591f0ba233fa5294cdff8c2fe53c8e401"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"e338b5bc0a46cb570b65a9fca33d91bc5bb8395b","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        self._checkpoints_section \u003d bank.get_sub_section(\"/checkpoints\")"},{"line_number":256,"context_line":"        self._indices_section \u003d bank.get_sub_section(\"/indices\")"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def list_ids(self, provider_id, limit\u003dNone, marker\u003dNone, plan_id\u003dNone,"},{"line_number":259,"context_line":"                 start_date\u003dNone, end_date\u003dNone, sort_dir\u003dNone):"},{"line_number":260,"context_line":"        marker_checkpoint \u003d None"},{"line_number":261,"context_line":"        if marker is not None:"},{"line_number":262,"context_line":"            checkpoint_section \u003d self._checkpoints_section.get_sub_section("}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_d5aacf6f","line":259,"range":{"start_line":258,"start_character":36,"end_line":259,"end_character":62},"in_reply_to":"1f1a1f67_6da459ba","updated":"2017-07-20 10:45:32.000000000","message":"reverted.","commit_id":"f0d871e591f0ba233fa5294cdff8c2fe53c8e401"},{"author":{"_account_id":22406,"name":"Kien Nguyen","email":"kiennt2609@gmail.com","username":"kiennt"},"change_message_id":"feaf2f610d63981e17fcd3779f1548523707a56b","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def list_ids(self, provider_id, limit\u003dNone, marker\u003dNone, plan_id\u003dNone,"},{"line_number":259,"context_line":"                 start_date\u003dNone, end_date\u003dNone, sort_dir\u003dNone):"},{"line_number":260,"context_line":"        marker_checkpoint \u003d None"},{"line_number":261,"context_line":"        if marker is not None:"},{"line_number":262,"context_line":"            checkpoint_section \u003d self._checkpoints_section.get_sub_section("},{"line_number":263,"context_line":"                marker)"},{"line_number":264,"context_line":"            marker_checkpoint \u003d checkpoint_section.get_object(_INDEX_FILE_NAME)"},{"line_number":265,"context_line":"            timestamp \u003d marker_checkpoint[\"timestamp\"]"},{"line_number":266,"context_line":"            marker \u003d \"%s@%s\" % (timestamp, marker)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        if start_date is not None:"},{"line_number":269,"context_line":"            if end_date is None:"},{"line_number":270,"context_line":"                end_date \u003d timeutils.utcnow()"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        if plan_id is None and start_date is None:"},{"line_number":273,"context_line":"            prefix \u003d \"/by-provider/%s/\" % provider_id"},{"line_number":274,"context_line":"            if marker is not None:"},{"line_number":275,"context_line":"                marker \u003d \"/%s\" % marker"},{"line_number":276,"context_line":"        elif plan_id is not None:"},{"line_number":277,"context_line":"            prefix \u003d \"/by-plan/%s/\" % plan_id"},{"line_number":278,"context_line":"            if marker is not None:"},{"line_number":279,"context_line":"                date \u003d marker_checkpoint[\"created_at\"]"},{"line_number":280,"context_line":"                marker \u003d \"/by-plan/%s/%s/%s\" % (plan_id, date, marker)"},{"line_number":281,"context_line":"        else:"},{"line_number":282,"context_line":"            prefix \u003d \"/by-date/\""},{"line_number":283,"context_line":"            if marker is not None:"},{"line_number":284,"context_line":"                date \u003d marker_checkpoint[\"created_at\"]"},{"line_number":285,"context_line":"                marker \u003d \"/by-date/%s/%s\" % (date, marker)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        return self._list_ids(prefix, limit, marker, start_date, end_date,"},{"line_number":288,"context_line":"                              sort_dir)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_ad727148","line":285,"range":{"start_line":260,"start_character":8,"end_line":285,"end_character":58},"updated":"2017-07-20 08:34:10.000000000","message":"This block is about set marker. If you\u0027re going to remove marker in 2 methods, these lines is not needed anymore.\n\nAnother way, if you don\u0027t mean to remove marker arg. Keep this block and revert to keep marker arg in _list_ids too, which you removed.","commit_id":"f0d871e591f0ba233fa5294cdff8c2fe53c8e401"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"e338b5bc0a46cb570b65a9fca33d91bc5bb8395b","unresolved":false,"context_lines":[{"line_number":257,"context_line":""},{"line_number":258,"context_line":"    def list_ids(self, provider_id, limit\u003dNone, marker\u003dNone, plan_id\u003dNone,"},{"line_number":259,"context_line":"                 start_date\u003dNone, end_date\u003dNone, sort_dir\u003dNone):"},{"line_number":260,"context_line":"        marker_checkpoint \u003d None"},{"line_number":261,"context_line":"        if marker is not None:"},{"line_number":262,"context_line":"            checkpoint_section \u003d self._checkpoints_section.get_sub_section("},{"line_number":263,"context_line":"                marker)"},{"line_number":264,"context_line":"            marker_checkpoint \u003d checkpoint_section.get_object(_INDEX_FILE_NAME)"},{"line_number":265,"context_line":"            timestamp \u003d marker_checkpoint[\"timestamp\"]"},{"line_number":266,"context_line":"            marker \u003d \"%s@%s\" % (timestamp, marker)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        if start_date is not None:"},{"line_number":269,"context_line":"            if end_date is None:"},{"line_number":270,"context_line":"                end_date \u003d timeutils.utcnow()"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        if plan_id is None and start_date is None:"},{"line_number":273,"context_line":"            prefix \u003d \"/by-provider/%s/\" % provider_id"},{"line_number":274,"context_line":"            if marker is not None:"},{"line_number":275,"context_line":"                marker \u003d \"/%s\" % marker"},{"line_number":276,"context_line":"        elif plan_id is not None:"},{"line_number":277,"context_line":"            prefix \u003d \"/by-plan/%s/\" % plan_id"},{"line_number":278,"context_line":"            if marker is not None:"},{"line_number":279,"context_line":"                date \u003d marker_checkpoint[\"created_at\"]"},{"line_number":280,"context_line":"                marker \u003d \"/by-plan/%s/%s/%s\" % (plan_id, date, marker)"},{"line_number":281,"context_line":"        else:"},{"line_number":282,"context_line":"            prefix \u003d \"/by-date/\""},{"line_number":283,"context_line":"            if marker is not None:"},{"line_number":284,"context_line":"                date \u003d marker_checkpoint[\"created_at\"]"},{"line_number":285,"context_line":"                marker \u003d \"/by-date/%s/%s\" % (date, marker)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        return self._list_ids(prefix, limit, marker, start_date, end_date,"},{"line_number":288,"context_line":"                              sort_dir)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_157cc71e","line":285,"range":{"start_line":260,"start_character":8,"end_line":285,"end_character":58},"in_reply_to":"1f1a1f67_ad727148","updated":"2017-07-20 10:45:32.000000000","message":"I have reverted this","commit_id":"f0d871e591f0ba233fa5294cdff8c2fe53c8e401"},{"author":{"_account_id":22056,"name":"yushangbin","email":"shangbin.yu@easystack.cn","username":"yushangbin"},"change_message_id":"d234d56728245a5c131e602310ec500eda3a68a0","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        return self._list_ids(prefix, limit, marker, start_date, end_date,"},{"line_number":288,"context_line":"                              sort_dir)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def _list_ids(self, prefix, limit, marker, start_date, end_date, sort_dir):"},{"line_number":291,"context_line":"        if start_date is None:"},{"line_number":292,"context_line":"            return [key[key.find(\"@\") + 1:]"},{"line_number":293,"context_line":"                    for key in self._indices_section.list_objects("}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_67d6ba2a","line":290,"range":{"start_line":290,"start_character":39,"end_line":290,"end_character":45},"updated":"2017-07-20 07:12:46.000000000","message":"It is no need any more, the same as sort_dir.","commit_id":"f0d871e591f0ba233fa5294cdff8c2fe53c8e401"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"e338b5bc0a46cb570b65a9fca33d91bc5bb8395b","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        return self._list_ids(prefix, limit, marker, start_date, end_date,"},{"line_number":288,"context_line":"                              sort_dir)"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    def _list_ids(self, prefix, limit, marker, start_date, end_date, sort_dir):"},{"line_number":291,"context_line":"        if start_date is None:"},{"line_number":292,"context_line":"            return [key[key.find(\"@\") + 1:]"},{"line_number":293,"context_line":"                    for key in self._indices_section.list_objects("}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_d5752f34","line":290,"range":{"start_line":290,"start_character":39,"end_line":290,"end_character":45},"in_reply_to":"1f1a1f67_67d6ba2a","updated":"2017-07-20 10:45:32.000000000","message":"reverted","commit_id":"f0d871e591f0ba233fa5294cdff8c2fe53c8e401"}],"karbor/services/protection/protection_plugins/image/image_protection_plugin.py":[{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"6ee733d2ffa63d321ad009f5cfd43c00d18d1282","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            data \u003d image_response_data.read()"},{"line_number":131,"context_line":"            if data !\u003d \u0027\u0027:"},{"line_number":132,"context_line":"                bank_section.update_object(\"data_\" + str(chunks_num), data)"},{"line_number":133,"context_line":"            else:"},{"line_number":134,"context_line":"                chunks_num -\u003d 1"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"            # Save the chunks_num to metadata"},{"line_number":137,"context_line":"            resource_definition \u003d bank_section.get_object(\"metadata\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f1a1f67_0cc3d958","line":134,"range":{"start_line":133,"start_character":0,"end_line":134,"end_character":31},"updated":"2017-07-19 02:06:52.000000000","message":"chunks_num has been +1 in the line 127. So here to check whether need to write last data from image response. if the data is not need write to bank here, so chunks_num need to -1.","commit_id":"6057f5c6516cb14d0c5fb92fbf61584590f33f17"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"9f7090d831c862dfd6aeeaee031b3011a3136617","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            data \u003d image_response_data.read()"},{"line_number":131,"context_line":"            if data !\u003d \u0027\u0027:"},{"line_number":132,"context_line":"                bank_section.update_object(\"data_\" + str(chunks_num), data)"},{"line_number":133,"context_line":"            else:"},{"line_number":134,"context_line":"                chunks_num -\u003d 1"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"            # Save the chunks_num to metadata"},{"line_number":137,"context_line":"            resource_definition \u003d bank_section.get_object(\"metadata\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f1a1f67_acb065de","line":134,"range":{"start_line":133,"start_character":0,"end_line":134,"end_character":31},"in_reply_to":"1f1a1f67_0cc3d958","updated":"2017-07-19 02:11:22.000000000","message":"I have tested it. I created an image file, it\u0027s size is 7000MB(7340032000B). In this situation, the chunks_num is a wrong one, because there is no data need to write to bank here.","commit_id":"6057f5c6516cb14d0c5fb92fbf61584590f33f17"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"e5c0b5b40be71dcad2a4d0619028c6adfd596757","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            data \u003d image_response_data.read()"},{"line_number":131,"context_line":"            if data !\u003d \u0027\u0027:"},{"line_number":132,"context_line":"                bank_section.update_object(\"data_\" + str(chunks_num), data)"},{"line_number":133,"context_line":"            else:"},{"line_number":134,"context_line":"                chunks_num -\u003d 1"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"            # Save the chunks_num to metadata"},{"line_number":137,"context_line":"            resource_definition \u003d bank_section.get_object(\"metadata\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"1f1a1f67_bc9065ef","line":134,"range":{"start_line":133,"start_character":0,"end_line":134,"end_character":31},"in_reply_to":"1f1a1f67_acb065de","updated":"2017-07-20 06:41:07.000000000","message":"I see.","commit_id":"6057f5c6516cb14d0c5fb92fbf61584590f33f17"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"24bd015bf1fbf5d2c832e67353944999f59e120c","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            # check the chunks_num"},{"line_number":207,"context_line":"            chunks_num \u003d resource_definition.get(\"chunks_num\", 0)"},{"line_number":208,"context_line":"            if len(objects) !\u003d int(chunks_num):"},{"line_number":209,"context_line":"                LOG.info(\u0027object num: {0}, chunk num: {1}\u0027."},{"line_number":210,"context_line":"                         format(len(objects), chunks_num))"},{"line_number":211,"context_line":"                raise exception.RestoreBackupFailed("},{"line_number":212,"context_line":"                    reason\u003d\" The chunks_num of restored image is invalid.\","},{"line_number":213,"context_line":"                    resource_id\u003doriginal_image_id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f1a1f67_4306ed22","line":210,"range":{"start_line":209,"start_character":0,"end_line":210,"end_character":58},"updated":"2017-07-21 02:40:54.000000000","message":"Is this debug messages? Does it need be deleted?","commit_id":"ec700c43e9e86407292a14bec2a253ae5c902a84"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"7fccb5677ad989323d1cfacf8034b3fd8f70695d","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            # check the chunks_num"},{"line_number":207,"context_line":"            chunks_num \u003d resource_definition.get(\"chunks_num\", 0)"},{"line_number":208,"context_line":"            if len(objects) !\u003d int(chunks_num):"},{"line_number":209,"context_line":"                LOG.info(\u0027object num: {0}, chunk num: {1}\u0027."},{"line_number":210,"context_line":"                         format(len(objects), chunks_num))"},{"line_number":211,"context_line":"                raise exception.RestoreBackupFailed("},{"line_number":212,"context_line":"                    reason\u003d\" The chunks_num of restored image is invalid.\","},{"line_number":213,"context_line":"                    resource_id\u003doriginal_image_id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f1a1f67_793f56b5","line":210,"range":{"start_line":209,"start_character":0,"end_line":210,"end_character":58},"in_reply_to":"1f1a1f67_169a716d","updated":"2017-07-21 03:19:34.000000000","message":"It is better to use debug level here.","commit_id":"ec700c43e9e86407292a14bec2a253ae5c902a84"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"952b5d3458f16c168d4b475a172274efb687708c","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            # check the chunks_num"},{"line_number":207,"context_line":"            chunks_num \u003d resource_definition.get(\"chunks_num\", 0)"},{"line_number":208,"context_line":"            if len(objects) !\u003d int(chunks_num):"},{"line_number":209,"context_line":"                LOG.info(\u0027object num: {0}, chunk num: {1}\u0027."},{"line_number":210,"context_line":"                         format(len(objects), chunks_num))"},{"line_number":211,"context_line":"                raise exception.RestoreBackupFailed("},{"line_number":212,"context_line":"                    reason\u003d\" The chunks_num of restored image is invalid.\","},{"line_number":213,"context_line":"                    resource_id\u003doriginal_image_id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f1a1f67_169a716d","line":210,"range":{"start_line":209,"start_character":0,"end_line":210,"end_character":58},"in_reply_to":"1f1a1f67_4306ed22","updated":"2017-07-21 02:50:44.000000000","message":"IMO, I think it shoud be here. Because this happens only when the restore failed. And this will help us know the error info.","commit_id":"ec700c43e9e86407292a14bec2a253ae5c902a84"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"6f6f9c6868cdd6c79b2a6d5edcea2c1a894c94f9","unresolved":false,"context_lines":[{"line_number":206,"context_line":"            # check the chunks_num"},{"line_number":207,"context_line":"            chunks_num \u003d resource_definition.get(\"chunks_num\", 0)"},{"line_number":208,"context_line":"            if len(objects) !\u003d int(chunks_num):"},{"line_number":209,"context_line":"                LOG.info(\u0027object num: {0}, chunk num: {1}\u0027."},{"line_number":210,"context_line":"                         format(len(objects), chunks_num))"},{"line_number":211,"context_line":"                raise exception.RestoreBackupFailed("},{"line_number":212,"context_line":"                    reason\u003d\" The chunks_num of restored image is invalid.\","},{"line_number":213,"context_line":"                    resource_id\u003doriginal_image_id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1f1a1f67_3990be95","line":210,"range":{"start_line":209,"start_character":0,"end_line":210,"end_character":58},"in_reply_to":"1f1a1f67_793f56b5","updated":"2017-07-21 03:23:01.000000000","message":"Done","commit_id":"ec700c43e9e86407292a14bec2a253ae5c902a84"}],"karbor/tests/unit/protection/fake_s3_client.py":[{"author":{"_account_id":22056,"name":"yushangbin","email":"shangbin.yu@easystack.cn","username":"yushangbin"},"change_message_id":"d234d56728245a5c131e602310ec500eda3a68a0","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \u0027Keys\u0027: {}"},{"line_number":34,"context_line":"        }"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def list_objects(self, Bucket, Prefix, Marker):"},{"line_number":37,"context_line":"        body \u003d []"},{"line_number":38,"context_line":"        prefix \u003d \u0027\u0027 if not Prefix else Prefix"},{"line_number":39,"context_line":"        for obj in self.s3_dir[Bucket][\u0027Keys\u0027].keys():"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_8788b622","line":36,"range":{"start_line":36,"start_character":43,"end_line":36,"end_character":49},"updated":"2017-07-20 07:12:46.000000000","message":"Marker is no use.","commit_id":"f0d871e591f0ba233fa5294cdff8c2fe53c8e401"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"e338b5bc0a46cb570b65a9fca33d91bc5bb8395b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \u0027Keys\u0027: {}"},{"line_number":34,"context_line":"        }"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def list_objects(self, Bucket, Prefix, Marker):"},{"line_number":37,"context_line":"        body \u003d []"},{"line_number":38,"context_line":"        prefix \u003d \u0027\u0027 if not Prefix else Prefix"},{"line_number":39,"context_line":"        for obj in self.s3_dir[Bucket][\u0027Keys\u0027].keys():"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_1593a75e","line":36,"range":{"start_line":36,"start_character":43,"end_line":36,"end_character":49},"in_reply_to":"1f1a1f67_8788b622","updated":"2017-07-20 10:45:32.000000000","message":"It is needed by test","commit_id":"f0d871e591f0ba233fa5294cdff8c2fe53c8e401"}],"karbor/tests/unit/protection/fake_swift_client.py":[{"author":{"_account_id":22406,"name":"Kien Nguyen","email":"kiennt2609@gmail.com","username":"kiennt"},"change_message_id":"feaf2f610d63981e17fcd3779f1548523707a56b","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        else:"},{"line_number":39,"context_line":"            os.makedirs(container_dir)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def get_container(self, container, prefix, full_listing):"},{"line_number":42,"context_line":"        container_dir \u003d self.swiftdir + \"/\" + container"},{"line_number":43,"context_line":"        body \u003d []"},{"line_number":44,"context_line":"        if prefix:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_6de0d9cd","line":41,"range":{"start_line":41,"start_character":47,"end_line":41,"end_character":59},"updated":"2017-07-20 08:34:10.000000000","message":"It\u0027s unused.","commit_id":"f0d871e591f0ba233fa5294cdff8c2fe53c8e401"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"e338b5bc0a46cb570b65a9fca33d91bc5bb8395b","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        else:"},{"line_number":39,"context_line":"            os.makedirs(container_dir)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def get_container(self, container, prefix, full_listing):"},{"line_number":42,"context_line":"        container_dir \u003d self.swiftdir + \"/\" + container"},{"line_number":43,"context_line":"        body \u003d []"},{"line_number":44,"context_line":"        if prefix:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_f5ca6b6c","line":41,"range":{"start_line":41,"start_character":47,"end_line":41,"end_character":59},"in_reply_to":"1f1a1f67_6de0d9cd","updated":"2017-07-20 10:45:32.000000000","message":"fake_swift_client is mocking swift client, so it should keep the same parameters as swift client keep(although it is not used by this function). It is needed by SwiftBankPluginTest.","commit_id":"f0d871e591f0ba233fa5294cdff8c2fe53c8e401"}],"karbor/tests/unit/protection/test_bank.py":[{"author":{"_account_id":22406,"name":"Kien Nguyen","email":"kiennt2609@gmail.com","username":"kiennt"},"change_message_id":"feaf2f610d63981e17fcd3779f1548523707a56b","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def list_objects(self, prefix\u003dNone):"},{"line_number":41,"context_line":"        for key in six.iterkeys(self._data):"},{"line_number":42,"context_line":"            if prefix is not None and key.startswith(prefix):"},{"line_number":43,"context_line":"                yield key"},{"line_number":44,"context_line":"            if prefix is None:"},{"line_number":45,"context_line":"                yield key"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def delete_object(self, key):"},{"line_number":48,"context_line":"        del self._data[key]"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_4d33dd63","line":45,"range":{"start_line":42,"start_character":12,"end_line":45,"end_character":25},"updated":"2017-07-20 08:34:10.000000000","message":"This block may be not correct and optimize.","commit_id":"f0d871e591f0ba233fa5294cdff8c2fe53c8e401"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"e338b5bc0a46cb570b65a9fca33d91bc5bb8395b","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def list_objects(self, prefix\u003dNone):"},{"line_number":41,"context_line":"        for key in six.iterkeys(self._data):"},{"line_number":42,"context_line":"            if prefix is not None and key.startswith(prefix):"},{"line_number":43,"context_line":"                yield key"},{"line_number":44,"context_line":"            if prefix is None:"},{"line_number":45,"context_line":"                yield key"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def delete_object(self, key):"},{"line_number":48,"context_line":"        del self._data[key]"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_9588d722","line":45,"range":{"start_line":42,"start_character":12,"end_line":45,"end_character":25},"in_reply_to":"1f1a1f67_4d33dd63","updated":"2017-07-20 10:45:32.000000000","message":"I have reverted this","commit_id":"f0d871e591f0ba233fa5294cdff8c2fe53c8e401"}]}
