)]}'
{"karbor/services/protection/protection_plugins/utils.py":[{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"bdf37c2f5ffeb9e13327ebe83c0e0a5a009e654c","unresolved":false,"context_lines":[{"line_number":16,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"def udpate_resource_restore_result(restore_record, resource_type, resource_id,"},{"line_number":20,"context_line":"                                   status, reason\u003d\u0027\u0027):"},{"line_number":21,"context_line":"    try:"},{"line_number":22,"context_line":"        restore_record.update_resource_status(resource_type, resource_id,"},{"line_number":23,"context_line":"                                              status, reason)"},{"line_number":24,"context_line":"        restore_record.save()"},{"line_number":25,"context_line":"    except Exception:"},{"line_number":26,"context_line":"        LOG.error(\u0027Unable to update restoration result. \u0027"},{"line_number":27,"context_line":"                  \u0027resource type: %(resource_type)s, \u0027"},{"line_number":28,"context_line":"                  \u0027resource id: %(resource_id)s, \u0027"},{"line_number":29,"context_line":"                  \u0027status: %(status)s, reason: %(reason)s\u0027,"},{"line_number":30,"context_line":"                  {\u0027resource_type\u0027: resource_type, \u0027resource_id\u0027: resource_id,"},{"line_number":31,"context_line":"                   \u0027status\u0027: status, \u0027reason\u0027: reason})"},{"line_number":32,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_11303256","line":32,"range":{"start_line":19,"start_character":0,"end_line":32,"end_character":12},"updated":"2017-04-06 08:56:40.000000000","message":"is this actually necessary?","commit_id":"ffcf7f816fa9d2ee8de695e0df91e3d6a4f9439f"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"edac0afd115501e976a476fbd9d489140387e34b","unresolved":false,"context_lines":[{"line_number":16,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"def udpate_resource_restore_result(restore_record, resource_type, resource_id,"},{"line_number":20,"context_line":"                                   status, reason\u003d\u0027\u0027):"},{"line_number":21,"context_line":"    try:"},{"line_number":22,"context_line":"        restore_record.update_resource_status(resource_type, resource_id,"},{"line_number":23,"context_line":"                                              status, reason)"},{"line_number":24,"context_line":"        restore_record.save()"},{"line_number":25,"context_line":"    except Exception:"},{"line_number":26,"context_line":"        LOG.error(\u0027Unable to update restoration result. \u0027"},{"line_number":27,"context_line":"                  \u0027resource type: %(resource_type)s, \u0027"},{"line_number":28,"context_line":"                  \u0027resource id: %(resource_id)s, \u0027"},{"line_number":29,"context_line":"                  \u0027status: %(status)s, reason: %(reason)s\u0027,"},{"line_number":30,"context_line":"                  {\u0027resource_type\u0027: resource_type, \u0027resource_id\u0027: resource_id,"},{"line_number":31,"context_line":"                   \u0027status\u0027: status, \u0027reason\u0027: reason})"},{"line_number":32,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ffa3b31_cdde3c6c","line":32,"range":{"start_line":19,"start_character":0,"end_line":32,"end_character":12},"updated":"2017-04-20 10:21:17.000000000","message":"Still: I don\u0027t think this is necessary. We already have the restore method, no need to wrap it again.","commit_id":"add95b6c907f19ed4e5fd72e29452f5da5b16644"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"e5572799bc585a9df7656822eeb9f4a8a918496b","unresolved":false,"context_lines":[{"line_number":16,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"def udpate_resource_restore_result(restore_record, resource_type, resource_id,"},{"line_number":20,"context_line":"                                   status, reason\u003d\u0027\u0027):"},{"line_number":21,"context_line":"    try:"},{"line_number":22,"context_line":"        restore_record.update_resource_status(resource_type, resource_id,"},{"line_number":23,"context_line":"                                              status, reason)"},{"line_number":24,"context_line":"        restore_record.save()"},{"line_number":25,"context_line":"    except Exception:"},{"line_number":26,"context_line":"        LOG.error(\u0027Unable to update restoration result. \u0027"},{"line_number":27,"context_line":"                  \u0027resource type: %(resource_type)s, \u0027"},{"line_number":28,"context_line":"                  \u0027resource id: %(resource_id)s, \u0027"},{"line_number":29,"context_line":"                  \u0027status: %(status)s, reason: %(reason)s\u0027,"},{"line_number":30,"context_line":"                  {\u0027resource_type\u0027: resource_type, \u0027resource_id\u0027: resource_id,"},{"line_number":31,"context_line":"                   \u0027status\u0027: status, \u0027reason\u0027: reason})"},{"line_number":32,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_4c05f0c1","line":32,"range":{"start_line":19,"start_character":0,"end_line":32,"end_character":12},"in_reply_to":"5ff73747_1c0d0c3e","updated":"2017-04-25 09:00:27.000000000","message":"I don\u0027t think it is good to write log at \u0027update_resource_status\u0027.\n\u0027update_resource_status\u0027 just update memory, so it is impossible to raise an error. Actually, the error may happen when restore_record.save run, because it will access DB.","commit_id":"add95b6c907f19ed4e5fd72e29452f5da5b16644"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"c540da62cf3841f231e48350baa4cf20aeaf1831","unresolved":false,"context_lines":[{"line_number":16,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"def udpate_resource_restore_result(restore_record, resource_type, resource_id,"},{"line_number":20,"context_line":"                                   status, reason\u003d\u0027\u0027):"},{"line_number":21,"context_line":"    try:"},{"line_number":22,"context_line":"        restore_record.update_resource_status(resource_type, resource_id,"},{"line_number":23,"context_line":"                                              status, reason)"},{"line_number":24,"context_line":"        restore_record.save()"},{"line_number":25,"context_line":"    except Exception:"},{"line_number":26,"context_line":"        LOG.error(\u0027Unable to update restoration result. \u0027"},{"line_number":27,"context_line":"                  \u0027resource type: %(resource_type)s, \u0027"},{"line_number":28,"context_line":"                  \u0027resource id: %(resource_id)s, \u0027"},{"line_number":29,"context_line":"                  \u0027status: %(status)s, reason: %(reason)s\u0027,"},{"line_number":30,"context_line":"                  {\u0027resource_type\u0027: resource_type, \u0027resource_id\u0027: resource_id,"},{"line_number":31,"context_line":"                   \u0027status\u0027: status, \u0027reason\u0027: reason})"},{"line_number":32,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"5ff73747_1c0d0c3e","line":32,"range":{"start_line":19,"start_character":0,"end_line":32,"end_character":12},"in_reply_to":"7ffa3b31_b51b36c8","updated":"2017-04-23 07:40:07.000000000","message":"Why not call update_resource_status call directly? Do you miss the logging? How about add them to update_resource_status?","commit_id":"add95b6c907f19ed4e5fd72e29452f5da5b16644"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"28739f5c11921fd5f11a0f10859edde3b8382d1c","unresolved":false,"context_lines":[{"line_number":16,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"def udpate_resource_restore_result(restore_record, resource_type, resource_id,"},{"line_number":20,"context_line":"                                   status, reason\u003d\u0027\u0027):"},{"line_number":21,"context_line":"    try:"},{"line_number":22,"context_line":"        restore_record.update_resource_status(resource_type, resource_id,"},{"line_number":23,"context_line":"                                              status, reason)"},{"line_number":24,"context_line":"        restore_record.save()"},{"line_number":25,"context_line":"    except Exception:"},{"line_number":26,"context_line":"        LOG.error(\u0027Unable to update restoration result. \u0027"},{"line_number":27,"context_line":"                  \u0027resource type: %(resource_type)s, \u0027"},{"line_number":28,"context_line":"                  \u0027resource id: %(resource_id)s, \u0027"},{"line_number":29,"context_line":"                  \u0027status: %(status)s, reason: %(reason)s\u0027,"},{"line_number":30,"context_line":"                  {\u0027resource_type\u0027: resource_type, \u0027resource_id\u0027: resource_id,"},{"line_number":31,"context_line":"                   \u0027status\u0027: status, \u0027reason\u0027: reason})"},{"line_number":32,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ffa3b31_b51b36c8","line":32,"range":{"start_line":19,"start_character":0,"end_line":32,"end_character":12},"in_reply_to":"7ffa3b31_cdde3c6c","updated":"2017-04-20 11:40:18.000000000","message":"You can see this method is invoked several times at different codes. If I use Restore\u0027s method directly, then the codes here will be copied for several times. It is not a good practice. Do you have better idea?","commit_id":"add95b6c907f19ed4e5fd72e29452f5da5b16644"}],"karbor/services/protection/protection_plugins/volume/cinder_protection_plugin.py":[{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"bdf37c2f5ffeb9e13327ebe83c0e0a5a009e654c","unresolved":false,"context_lines":[{"line_number":272,"context_line":"            volume_id \u003d cinder_client.restores.restore(backup_id).volume_id"},{"line_number":273,"context_line":"            cinder_client.volumes.update(volume_id, **volume_property)"},{"line_number":274,"context_line":"        except Exception as ex:"},{"line_number":275,"context_line":"            LOG.error(\u0027Error creating volume (backup_id:%(backup_id)s): \u0027"},{"line_number":276,"context_line":"                      \u0027%(reason)s\u0027,"},{"line_number":277,"context_line":"                      {\u0027backup_id\u0027: backup_id,"},{"line_number":278,"context_line":"                       \u0027reason\u0027: ex})"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_d19d2a5a","line":275,"range":{"start_line":275,"start_character":55,"end_line":275,"end_character":57},"updated":"2017-04-06 08:56:40.000000000","message":"missing space","commit_id":"ffcf7f816fa9d2ee8de695e0df91e3d6a4f9439f"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"bdf37c2f5ffeb9e13327ebe83c0e0a5a009e654c","unresolved":false,"context_lines":[{"line_number":279,"context_line":"            raise"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        # check and update status"},{"line_number":282,"context_line":"        update_method \u003d partial("},{"line_number":283,"context_line":"            utils.udpate_resource_restore_result,"},{"line_number":284,"context_line":"            kwargs.get(\u0027restore\u0027), resource.type, volume_id)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        update_method(constants.RESOURCE_STATUS_RESTORING)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        is_success \u003d self._check_create_complete(cinder_client, volume_id)"},{"line_number":289,"context_line":"        if is_success:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_31a1f6aa","line":286,"range":{"start_line":282,"start_character":0,"end_line":286,"end_character":58},"updated":"2017-04-06 08:56:40.000000000","message":"Why do we need utils for that?\nWhy not just call `restore.update_resource_status(...)` ?","commit_id":"ffcf7f816fa9d2ee8de695e0df91e3d6a4f9439f"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"c07676e7a49860d807362e20f941eebdb5eb5537","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        is_success \u003d self._check_create_complete(cinder_client, volume_id)"},{"line_number":288,"context_line":"        if is_success:"},{"line_number":289,"context_line":"            update_method(constants.RESOURCE_STATUS_AVAILABLE)"},{"line_number":290,"context_line":"            kwargs.get(\"heat_template\").put_parameter(resource_id, volume_id)"},{"line_number":291,"context_line":"        else:"},{"line_number":292,"context_line":"            reason \u003d \u0027Error creating volume\u0027"},{"line_number":293,"context_line":"            update_method(constants.RESOURCE_STATUS_ERROR, reason)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff0f0b1f_014ce53f","line":290,"range":{"start_line":290,"start_character":0,"end_line":290,"end_character":77},"updated":"2017-05-23 12:43:01.000000000","message":"Why is that required? Isn\u0027t the whole idea to remove heat?","commit_id":"df14719df70e011d2b3a2af5b485b65f96c00635"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"2380f7a733bc65d8dbfd6149e0fc07e1e27ae3f1","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        is_success \u003d self._check_create_complete(cinder_client, volume_id)"},{"line_number":288,"context_line":"        if is_success:"},{"line_number":289,"context_line":"            update_method(constants.RESOURCE_STATUS_AVAILABLE)"},{"line_number":290,"context_line":"            kwargs.get(\"heat_template\").put_parameter(resource_id, volume_id)"},{"line_number":291,"context_line":"        else:"},{"line_number":292,"context_line":"            reason \u003d \u0027Error creating volume\u0027"},{"line_number":293,"context_line":"            update_method(constants.RESOURCE_STATUS_ERROR, reason)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ff0f0b1f_68792492","line":290,"range":{"start_line":290,"start_character":0,"end_line":290,"end_character":77},"in_reply_to":"ff0f0b1f_014ce53f","updated":"2017-05-24 08:34:22.000000000","message":"It will be replaced on subsequent patch. see https://review.openstack.org/#/c/466475","commit_id":"df14719df70e011d2b3a2af5b485b65f96c00635"},{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"c07676e7a49860d807362e20f941eebdb5eb5537","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        return utils.status_poll("},{"line_number":303,"context_line":"            partial(get_volume_status, cinder_client, volume_id),"},{"line_number":304,"context_line":"            interval\u003dself._interval,"},{"line_number":305,"context_line":"            success_statuses\u003d{\u0027available\u0027},"},{"line_number":306,"context_line":"            failure_statuses\u003d{\u0027error\u0027, \u0027not-found\u0027},"},{"line_number":307,"context_line":"            ignore_statuses\u003d{\u0027creating\u0027, \u0027restoring-backup\u0027, \u0027downloading\u0027},"},{"line_number":308,"context_line":"        )"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ff0f0b1f_61d8417a","line":307,"range":{"start_line":305,"start_character":0,"end_line":307,"end_character":76},"updated":"2017-05-23 12:43:01.000000000","message":"see:\nhttps://developer.openstack.org/api-ref/block-storage/v3/index.html\nfor the full list of volume statuses.\nSince \u0027ignore_unexpected\u0027 is default to \u0027False\u0027 in \u0027status_poll\u0027, it will fail for each unexpected status.\nEither set \u0027ignore_unexpected\u0027 to \u0027True\u0027, or preferably, add the missing statuses (could be nice to add them as constants at the top)","commit_id":"df14719df70e011d2b3a2af5b485b65f96c00635"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"2380f7a733bc65d8dbfd6149e0fc07e1e27ae3f1","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        return utils.status_poll("},{"line_number":303,"context_line":"            partial(get_volume_status, cinder_client, volume_id),"},{"line_number":304,"context_line":"            interval\u003dself._interval,"},{"line_number":305,"context_line":"            success_statuses\u003d{\u0027available\u0027},"},{"line_number":306,"context_line":"            failure_statuses\u003d{\u0027error\u0027, \u0027not-found\u0027},"},{"line_number":307,"context_line":"            ignore_statuses\u003d{\u0027creating\u0027, \u0027restoring-backup\u0027, \u0027downloading\u0027},"},{"line_number":308,"context_line":"        )"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ff0f0b1f_e89ad4b6","line":307,"range":{"start_line":305,"start_character":0,"end_line":307,"end_character":76},"in_reply_to":"ff0f0b1f_61d8417a","updated":"2017-05-24 08:34:22.000000000","message":"I referred Heat. I will check and update.","commit_id":"df14719df70e011d2b3a2af5b485b65f96c00635"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"7b993bc345d47688d0a0f7bc515e4600bba29e67","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        return utils.status_poll("},{"line_number":303,"context_line":"            partial(get_volume_status, cinder_client, volume_id),"},{"line_number":304,"context_line":"            interval\u003dself._interval,"},{"line_number":305,"context_line":"            success_statuses\u003d{\u0027available\u0027},"},{"line_number":306,"context_line":"            failure_statuses\u003d{\u0027error\u0027, \u0027not-found\u0027},"},{"line_number":307,"context_line":"            ignore_statuses\u003d{\u0027creating\u0027, \u0027restoring-backup\u0027, \u0027downloading\u0027},"},{"line_number":308,"context_line":"        )"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ff0f0b1f_76a67ec3","line":307,"range":{"start_line":305,"start_character":0,"end_line":307,"end_character":76},"in_reply_to":"ff0f0b1f_61d8417a","updated":"2017-05-25 09:47:23.000000000","message":"https://github.com/openstack/heat/blob/master/heat/engine/resources/volume_base.py#L47-L60\nhttps://github.com/openstack/heat/blob/master/heat/engine/resources/openstack/cinder/volume.py#L249\n\nI think the other statuses should not be exist when creating volume according to Heat.","commit_id":"df14719df70e011d2b3a2af5b485b65f96c00635"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"d8ba2b1165715a20b07c0bfb79d989dde4b28fb6","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        return utils.status_poll("},{"line_number":303,"context_line":"            partial(get_volume_status, cinder_client, volume_id),"},{"line_number":304,"context_line":"            interval\u003dself._interval,"},{"line_number":305,"context_line":"            success_statuses\u003d{\u0027available\u0027},"},{"line_number":306,"context_line":"            failure_statuses\u003d{\u0027error\u0027, \u0027not-found\u0027},"},{"line_number":307,"context_line":"            ignore_statuses\u003d{\u0027creating\u0027, \u0027restoring-backup\u0027, \u0027downloading\u0027},"},{"line_number":308,"context_line":"        )"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"ff0f0b1f_ae794194","line":307,"range":{"start_line":305,"start_character":0,"end_line":307,"end_character":76},"in_reply_to":"ff0f0b1f_76a67ec3","updated":"2017-05-26 01:46:43.000000000","message":"I also think that adding all the status to ignore_statuses is not a good idea. Lots of status of volume will not be set when creating  it. So here set ignore_unexpected\u003dTrue is a better way.","commit_id":"df14719df70e011d2b3a2af5b485b65f96c00635"}],"karbor/services/protection/resource_flow.py":[{"author":{"_account_id":20883,"name":"Yuval Brik","email":"yuval@brik.org.il","username":"yuvalbr"},"change_message_id":"bdf37c2f5ffeb9e13327ebe83c0e0a5a009e654c","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"OPERATION_EXTRA_ARGS \u003d {"},{"line_number":43,"context_line":"    constants.OPERATION_RESTORE: [\u0027heat_template\u0027, \u0027restore\u0027],"},{"line_number":44,"context_line":"}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bff0334d_9100c236","line":43,"range":{"start_line":43,"start_character":50,"end_line":43,"end_character":60},"updated":"2017-04-06 08:56:40.000000000","message":"Irrelevant for non-restore operations","commit_id":"ffcf7f816fa9d2ee8de695e0df91e3d6a4f9439f"},{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"34591848f84d55b4aae11590f0a28a8d2ce5942e","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"OPERATION_EXTRA_ARGS \u003d {"},{"line_number":43,"context_line":"    constants.OPERATION_RESTORE: [\u0027heat_template\u0027, \u0027restore\u0027],"},{"line_number":44,"context_line":"}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_0127bab5","line":43,"range":{"start_line":43,"start_character":4,"end_line":43,"end_character":62},"updated":"2017-05-05 07:07:14.000000000","message":"IMO, heat will not be used in karbor for resource restoration. The parameter about heat will be deleted.","commit_id":"add95b6c907f19ed4e5fd72e29452f5da5b16644"},{"author":{"_account_id":18266,"name":"zengchen","email":"chenzeng2@huawei.com","username":"zengchen"},"change_message_id":"e16624ac69182755390b316af5ed14dd51cfe565","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"OPERATION_EXTRA_ARGS \u003d {"},{"line_number":43,"context_line":"    constants.OPERATION_RESTORE: [\u0027heat_template\u0027, \u0027restore\u0027],"},{"line_number":44,"context_line":"}"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3f044301_453af2cb","line":43,"range":{"start_line":43,"start_character":4,"end_line":43,"end_character":62},"in_reply_to":"3f044301_0127bab5","updated":"2017-05-12 06:28:09.000000000","message":"yes, but not in this patch.","commit_id":"add95b6c907f19ed4e5fd72e29452f5da5b16644"}]}
