diff options
Diffstat (limited to '0027-improve-code-of-pull-progress.patch')
-rw-r--r-- | 0027-improve-code-of-pull-progress.patch | 631 |
1 files changed, 631 insertions, 0 deletions
diff --git a/0027-improve-code-of-pull-progress.patch b/0027-improve-code-of-pull-progress.patch new file mode 100644 index 0000000..86b4eca --- /dev/null +++ b/0027-improve-code-of-pull-progress.patch @@ -0,0 +1,631 @@ +From 78304f7ad584517e02125c928e976f34aaf859f8 Mon Sep 17 00:00:00 2001 +From: haozi007 <liuhao27@huawei.com> +Date: Wed, 22 Nov 2023 15:00:43 +0800 +Subject: [PATCH 27/64] improve code of pull progress + +Signed-off-by: haozi007 <liuhao27@huawei.com> +--- + src/client/connect/CMakeLists.txt | 7 +- + src/client/connect/grpc/grpc_images_client.cc | 48 ++---- + .../connect/grpc/grpc_volumes_client.cc | 1 - + src/daemon/common/events_format.h | 2 + + .../v1/v1_cri_image_manager_service_impl.cc | 2 - + .../v1alpha/cri_image_manager_service_impl.cc | 2 - + src/daemon/executor/image_cb/image_cb.c | 2 + + src/daemon/modules/api/event_type.h | 4 +- + src/daemon/modules/events/collector.c | 4 +- + src/daemon/modules/image/image.c | 2 +- + src/daemon/modules/image/oci/oci_pull.c | 146 ++++++++++-------- + src/daemon/modules/image/oci/progress.c | 28 +++- + src/daemon/modules/image/oci/progress.h | 6 +- + .../modules/image/oci/registry/http_request.c | 28 +--- + .../oci/storage/image_store/image_store.c | 2 +- + .../graphdriver/overlay2/driver_overlay2.c | 2 +- + .../modules/image/oci/storage/storage.c | 5 +- + 17 files changed, 137 insertions(+), 154 deletions(-) + +diff --git a/src/client/connect/CMakeLists.txt b/src/client/connect/CMakeLists.txt +index 00ba2f68..d4ce6c9c 100644 +--- a/src/client/connect/CMakeLists.txt ++++ b/src/client/connect/CMakeLists.txt +@@ -12,10 +12,7 @@ if (GRPC_CONNECTOR) + aux_source_directory(${CMAKE_BINARY_DIR}/grpc/src/api/services/containers CONNECT_API_CONTAINERS) + aux_source_directory(${CMAKE_BINARY_DIR}/grpc/src/api/services/images CONNECT_API_IMAGES) + aux_source_directory(${CMAKE_BINARY_DIR}/grpc/src/api/services/volumes CONNECT_API_VOLUMES) +- # TODO: current isula pull use CRI pullImage API, we should remove this dependence +- aux_source_directory(${CMAKE_BINARY_DIR}/grpc/src/api/services/cri CONNECT_API_CRI) +- aux_source_directory(${CMAKE_BINARY_DIR}/grpc/src/api/services/cri/v1alpha CONNECT_API_CRI_ALPHAS) +- set(CONNECT_API ${CONNECT_API_VOLUMES} ${CONNECT_API_CONTAINERS} ${CONNECT_API_IMAGES} ${CONNECT_API_CRI_ALPHAS} ${CONNECT_API_CRI}) ++ set(CONNECT_API ${CONNECT_API_VOLUMES} ${CONNECT_API_CONTAINERS} ${CONNECT_API_IMAGES}) + list(APPEND local_client_connect_srcs ${CONNECT_API}) + + list(APPEND local_client_connect_incs ${CMAKE_CURRENT_SOURCE_DIR}/grpc) +@@ -23,8 +20,6 @@ if (GRPC_CONNECTOR) + ${CMAKE_BINARY_DIR}/grpc/src/api/services/volumes + ${CMAKE_BINARY_DIR}/grpc/src/api/services/containers + ${CMAKE_BINARY_DIR}/grpc/src/api/services/images +- ${CMAKE_BINARY_DIR}/grpc/src/api/services/cri +- ${CMAKE_BINARY_DIR}/grpc/src/api/services/cri/v1alpha + ) + + if(ENABLE_NATIVE_NETWORK) +diff --git a/src/client/connect/grpc/grpc_images_client.cc b/src/client/connect/grpc/grpc_images_client.cc +index 7a283e8c..7fd36cc1 100644 +--- a/src/client/connect/grpc/grpc_images_client.cc ++++ b/src/client/connect/grpc/grpc_images_client.cc +@@ -390,50 +390,20 @@ public: + return 0; + } + +- auto run(const struct isula_pull_request *request, struct isula_pull_response *response) -> int override +- { +- ClientContext context; +- PullImageRequest grequest; +- +-#ifdef ENABLE_GRPC_REMOTE_CONNECT +-#ifdef OPENSSL_VERIFY +- // Set common name from cert.perm +- char common_name_value[ClientBaseConstants::COMMON_NAME_LEN] = { 0 }; +- int ret = get_common_name_from_tls_cert(m_certFile.c_str(), common_name_value, +- ClientBaseConstants::COMMON_NAME_LEN); +- if (ret != 0) { +- ERROR("Failed to get common name in: %s", m_certFile.c_str()); +- return -1; +- } +- context.AddMetadata("username", std::string(common_name_value, strlen(common_name_value))); +- context.AddMetadata("tls_mode", m_tlsMode); +-#endif +-#endif +- if (request_to_grpc(request, &grequest) != 0) { +- ERROR("Failed to transform pull request to grpc"); +- response->server_errono = ISULAD_ERR_INPUT; +- return -1; +- } +- +- auto reader = stub_->PullImage(&context, grequest); ++ auto grpc_call(ClientContext *context, const PullImageRequest &req, PullImageResponse *reply) -> Status override ++ { ++ auto reader = stub_->PullImage(context, req); + +- PullImageResponse gresponse; +- if (grequest.is_progress_visible()) { +- while (reader->Read(&gresponse)) { +- output_progress(gresponse); ++ if (req.is_progress_visible()) { ++ while (reader->Read(reply)) { ++ output_progress(*reply); + } + } else { +- reader->Read(&gresponse); ++ reader->Read(reply); + WARN("The terminal may not support ANSI Escape code. Display is skipped"); + } +- Status status = reader->Finish(); +- if (!status.ok()) { +- ERROR("Error code: %d: %s", status.error_code(), status.error_message().c_str()); +- unpackStatus(status, response); +- return -1; +- } +- response->image_ref = util_strdup_s(gresponse.image_ref().c_str()); +- return 0; ++ ++ return reader->Finish(); + } + + private: +diff --git a/src/client/connect/grpc/grpc_volumes_client.cc b/src/client/connect/grpc/grpc_volumes_client.cc +index 32b83a9e..5fe8ed5e 100644 +--- a/src/client/connect/grpc/grpc_volumes_client.cc ++++ b/src/client/connect/grpc/grpc_volumes_client.cc +@@ -16,7 +16,6 @@ + + #include <string> + +-#include "api.grpc.pb.h" + #include "client_base.h" + #include "volumes.grpc.pb.h" + #include "utils.h" +diff --git a/src/daemon/common/events_format.h b/src/daemon/common/events_format.h +index 7e97b2c5..6b8fcfd5 100644 +--- a/src/daemon/common/events_format.h ++++ b/src/daemon/common/events_format.h +@@ -64,6 +64,8 @@ typedef enum { + EVENTS_TYPE_IMAGE_PULL, + EVENTS_TYPE_IMAGE_LOGIN, + EVENTS_TYPE_IMAGE_LOGOUT, ++ EVENTS_TYPE_IMAGE_IMPORT, ++ EVENTS_TYPE_IMAGE_TAG, + EVENTS_TYPE_IMAGE_MAX_STATE + } image_events_type_t; + +diff --git a/src/daemon/entry/cri/v1/v1_cri_image_manager_service_impl.cc b/src/daemon/entry/cri/v1/v1_cri_image_manager_service_impl.cc +index b9cbf24c..066eed5e 100644 +--- a/src/daemon/entry/cri/v1/v1_cri_image_manager_service_impl.cc ++++ b/src/daemon/entry/cri/v1/v1_cri_image_manager_service_impl.cc +@@ -25,7 +25,6 @@ + + #include "v1_cri_helpers.h" + #include "err_msg.h" +-#include "events_sender_api.h" + #include "isula_libutils/log.h" + #include "service_image_api.h" + #include "utils.h" +@@ -277,7 +276,6 @@ auto ImageManagerServiceImpl::PullImage(const runtime::v1::ImageSpec &image, + if (response->image_ref != nullptr) { + out_str = response->image_ref; + } +- (void)isulad_monitor_send_image_event(request->image, IM_PULL); + + cleanup: + DAEMON_CLEAR_ERRMSG(); +diff --git a/src/daemon/entry/cri/v1alpha/cri_image_manager_service_impl.cc b/src/daemon/entry/cri/v1alpha/cri_image_manager_service_impl.cc +index 0b36f007..9015df26 100644 +--- a/src/daemon/entry/cri/v1alpha/cri_image_manager_service_impl.cc ++++ b/src/daemon/entry/cri/v1alpha/cri_image_manager_service_impl.cc +@@ -25,7 +25,6 @@ + + #include "cri_helpers.h" + #include "err_msg.h" +-#include "events_sender_api.h" + #include "isula_libutils/log.h" + #include "service_image_api.h" + #include "utils.h" +@@ -277,7 +276,6 @@ auto ImageManagerServiceImpl::PullImage(const runtime::v1alpha2::ImageSpec &imag + if (response->image_ref != nullptr) { + out_str = response->image_ref; + } +- (void)isulad_monitor_send_image_event(request->image, IM_PULL); + + cleanup: + DAEMON_CLEAR_ERRMSG(); +diff --git a/src/daemon/executor/image_cb/image_cb.c b/src/daemon/executor/image_cb/image_cb.c +index 317cb0a8..60899f2b 100644 +--- a/src/daemon/executor/image_cb/image_cb.c ++++ b/src/daemon/executor/image_cb/image_cb.c +@@ -519,6 +519,7 @@ static int image_tag_cb(const image_tag_image_request *request, image_tag_image_ + } + + EVENT("Image Event: {Object: %s, Type: Tagged}", request->src_name); ++ (void)isulad_monitor_send_image_event(request->src_name, IM_TAG); + + out: + if (*response != NULL) { +@@ -997,6 +998,7 @@ static int image_pull_cb(const image_pull_image_request *request, stream_func_wr + } + + EVENT("Image Event: {Object: %s, Type: Pulled}", request->image_name); ++ (void)isulad_monitor_send_image_event(request->image_name, IM_PULL); + + out: + (*response)->cc = cc; +diff --git a/src/daemon/modules/api/event_type.h b/src/daemon/modules/api/event_type.h +index c3c7951b..4f2aaf28 100644 +--- a/src/daemon/modules/api/event_type.h ++++ b/src/daemon/modules/api/event_type.h +@@ -54,7 +54,9 @@ typedef enum { + MAX_STATE, + } runtime_state_t; + +-typedef enum { IM_LOAD, IM_REMOVE, IM_PULL, IM_LOGIN, IM_LOGOUT, IM_IMPORT } image_state_t; ++// relate to g_isulad_image_event_strtype and image_events_type_t ++// we should keep them consistent ++typedef enum { IM_LOAD, IM_REMOVE, IM_PULL, IM_LOGIN, IM_LOGOUT, IM_IMPORT, IM_TAG } image_state_t; + + typedef enum { CONTAINER_EVENT, IMAGE_EVENT } msg_event_type_t; + typedef enum { MONITORD_MSG_STATE, MONITORD_MSG_PRIORITY, MONITORD_MSG_EXIT_CODE } msg_type_t; +diff --git a/src/daemon/modules/events/collector.c b/src/daemon/modules/events/collector.c +index b82ede81..36aa9299 100644 +--- a/src/daemon/modules/events/collector.c ++++ b/src/daemon/modules/events/collector.c +@@ -157,11 +157,11 @@ static const char *isulad_event_sta2str(container_events_type_t sta) + return g_isulad_event_strtype[sta]; + } + +-static const char * const g_isulad_image_event_strtype[] = { "load", "remove", "pull", "login", "logout" }; ++static const char * const g_isulad_image_event_strtype[] = { "load", "remove", "pull", "login", "logout", "import", "tag" }; + + static const char *isulad_image_event_sta2str(image_events_type_t sta) + { +- if (sta > EVENTS_TYPE_IMAGE_LOGOUT) { ++ if (sta >= EVENTS_TYPE_IMAGE_MAX_STATE) { + return NULL; + } + +diff --git a/src/daemon/modules/image/image.c b/src/daemon/modules/image/image.c +index 8d7e2c1a..4a1950fe 100644 +--- a/src/daemon/modules/image/image.c ++++ b/src/daemon/modules/image/image.c +@@ -784,7 +784,7 @@ int im_merge_image_config(const char *image_type, const char *image_name, contai + int ret = 0; + struct bim *bim = NULL; + +- // there is no need to judge the image name as empty, ++ // there is no need to judge the image name as empty, + // because the image name of external type allows it to be empty. + if (container_spec == NULL || image_type == NULL) { + ERROR("Invalid input arguments"); +diff --git a/src/daemon/modules/image/oci/oci_pull.c b/src/daemon/modules/image/oci/oci_pull.c +index 2706af91..9ad875a5 100644 +--- a/src/daemon/modules/image/oci/oci_pull.c ++++ b/src/daemon/modules/image/oci/oci_pull.c +@@ -75,7 +75,8 @@ out: + return ret; + } + +-static void update_option_insecure_registry(registry_pull_options *options, char **insecure_registries, const char *host) ++static void update_option_insecure_registry(registry_pull_options *options, char **insecure_registries, ++ const char *host) + { + char **registry = NULL; + +@@ -188,83 +189,95 @@ typedef struct status_arg { + stream_func_wrapper *stream; + } status_arg; + ++static int do_get_progress_from_store(progress_status_map *status_store, image_progress *result) ++{ ++ int i = 0; ++ size_t progress_size = progress_status_map_size(status_store); ++ ++ result->progresses = util_smart_calloc_s(sizeof(image_progress_progresses_element *), progress_size); ++ if (result->progresses == NULL) { ++ ERROR("Out of memory"); ++ return -1; ++ } ++ ++ if (!progress_status_map_lock(status_store)) { ++ WARN("Cannot itorate progress status map for locking failed"); ++ // ignore lock error, retry lock after delay. ++ return 0; ++ } ++ ++ map_itor *itor = map_itor_new(status_store->map); ++ for (i = 0; map_itor_valid(itor) && i < progress_size; map_itor_next(itor), i++) { ++ void *id = map_itor_key(itor); ++ const progress *value = (progress *)map_itor_value(itor); ++ const int ID_LEN = 12; // The last 12 charactos of image digest. ++ ++ result->progresses[i] = util_common_calloc_s(sizeof(image_progress_progresses_element)); ++ if (result->progresses[i] == NULL) { ++ // ignore error, return got progress data ++ WARN("Out of memory"); ++ break; ++ } ++ result->progresses[i]->id = util_strdup_s((char *)id + strlen((char *)id) - ID_LEN); ++ result->progresses[i]->total = value->dltotal; ++ result->progresses[i]->current = value->dlnow; ++ result->progresses_len++; ++ } ++ map_itor_free(itor); ++ progress_status_map_unlock(status_store); ++ ++ return 0; ++} ++ + void *get_progress_status(void *arg) + { + status_arg *status = (status_arg *)arg; +- const int delay = 100; // Sleep for 100 milliseconds +- bool write_ok = false; ++ ++ prctl(PR_SET_NAME, "PullProgress"); + + if (status == NULL || status->status_store == NULL || status->stream == NULL) { + ERROR("Get progress status condition error"); + return NULL; + } + +- for (;;) { +- int i = 0; +- +- usleep(delay * 1000); // Sleep for 100 milliseconds ++ while (!status->should_terminal || status->image != NULL) { ++ bool write_ok = false; ++ image_progress *iprogresses = NULL; + +- if (status->should_terminal && status->image == NULL) { ++ // Step 1: delay 100ms, wait progress update ++ util_usleep_nointerupt(100 * 1000); ++ ++ // Step 2: check client whether is canceled? ++ if (status->stream->is_cancelled(status->stream->context)) { ++ WARN("pull stream is cancelled"); + break; + } +- +- image_progress *progresses; +- size_t progress_size = progress_status_map_size(status->status_store); + +- progresses = util_common_calloc_s(sizeof(image_progress)); +- if (progresses == NULL) { +- ERROR("Out of memory. Skip progress show."); +- break; ++ iprogresses = util_common_calloc_s(sizeof(image_progress)); ++ if (iprogresses == NULL) { ++ ERROR("Out of memory"); ++ break; + } +- +- progresses->progresses = util_smart_calloc_s(sizeof(image_progress_progresses_element *), progress_size); +- if (progresses->progresses == NULL) { +- ERROR("Out of memory. Skip progress show."); +- goto roundend; ++ // Step 3: get progress of pull from progress status store ++ if (do_get_progress_from_store(status->status_store, iprogresses) != 0) { ++ free_image_progress(iprogresses); ++ break; + } ++ ++ // Step 4: check main thread whether is finished, and setted pulled image info + if (status->image != NULL) { +- progresses->image = util_strdup_s(status->image_name); ++ iprogresses->image = util_strdup_s(status->image_name); + status->image = NULL; + } + +- if (!progress_status_map_lock(status->status_store)) { +- ERROR("Cannot itorate progress status map for locking failed"); +- goto roundend; +- } +- map_itor *itor = map_itor_new(status->status_store->map); +- for (i = 0; map_itor_valid(itor) && i < progress_size; map_itor_next(itor), i++) { +- void *id = map_itor_key(itor); +- const progress *value = (progress *)map_itor_value(itor); +- const int ID_LEN = 12; // The last 12 charactos of image digest. +- +- progresses->progresses[i] = util_common_calloc_s(sizeof(image_progress_progresses_element)); +- if (progresses->progresses[i] == NULL) { +- WARN("Out of memory. Skip progress show."); +- map_itor_free(itor); +- progress_status_map_unlock(status->status_store); +- goto roundend; +- } +- progresses->progresses[i]->id = util_strdup_s((char *)id + strlen((char *)id) - ID_LEN); +- progresses->progresses[i]->total = value->dltotal; +- progresses->progresses[i]->current = value->dlnow; +- progresses->progresses_len++; ++ // Step 5: send got progress of pull to client ++ write_ok = status->stream->write_func(status->stream->writer, iprogresses); ++ if (!write_ok) { ++ WARN("Send progress data to client failed, just ignore and retry it"); + } +- map_itor_free(itor); +- progress_status_map_unlock(status->status_store); +- +- /* send to client */ +- write_ok = status->stream->write_func(status->stream->writer, progresses); +- if (write_ok) { +- goto roundend; +- } +- if (status->stream->is_cancelled(status->stream->context)) { +- ERROR("pull stream is cancelled"); +- goto roundend; +- } +- ERROR("Send progress data to client failed"); +-roundend: +- free_image_progress(progresses); ++ free_image_progress(iprogresses); + } ++ + return NULL; + } + +@@ -286,7 +299,7 @@ int oci_do_pull_image(const im_pull_request *request, stream_func_wrapper *strea + if (request->is_progress_visible && stream != NULL) { + progress_status_store = progress_status_map_new(); + if (progress_status_store == NULL) { +- ERROR("Out of memory and will not show the pull progress"); ++ ERROR("Out of memory"); + isulad_set_error_message("Failed to pull image %s with error: out of memory", request->image); + ret = -1; + goto out; +@@ -321,21 +334,28 @@ int oci_do_pull_image(const im_pull_request *request, stream_func_wrapper *strea + arg.image = image; + arg.image_name = dest_image_name; + if (!request->is_progress_visible && stream != NULL) { +- image_progress *progresses; ++ image_progress *progresses = NULL; ++ bool nret = false; + + progresses = util_common_calloc_s(sizeof(image_progress)); + if (progresses == NULL) { +- ERROR("Out of memory. Skip progress show."); +- goto out; ++ ERROR("Out of memory"); ++ isulad_set_error_message("Failed to pull image %s with error: out of memory", request->image); ++ ret = -1; ++ goto out; + } + progresses->image = util_strdup_s(dest_image_name); +- if (stream->write_func(stream->writer, progresses)) { ++ nret = stream->write_func(stream->writer, progresses); ++ free_image_progress(progresses); ++ if (!nret) { + ERROR("Send progress data to client failed"); ++ isulad_set_error_message("Failed to pull image %s with error: send progress data to client failed", request->image); ++ ret = -1; + goto out; + } + } + response->image_ref = util_strdup_s(image->id); +- ++ + out: + arg.should_terminal = true; + if (tid != 0 && pthread_join(tid, NULL) != 0) { +diff --git a/src/daemon/modules/image/oci/progress.c b/src/daemon/modules/image/oci/progress.c +index 110f22c0..7d0c10a4 100644 +--- a/src/daemon/modules/image/oci/progress.c ++++ b/src/daemon/modules/image/oci/progress.c +@@ -34,15 +34,16 @@ size_t progress_status_map_size(progress_status_map *progress_status_map) + } + ret = map_size(progress_status_map->map); + progress_status_map_unlock(progress_status_map); +- ++ + return ret; + } + +-bool progress_status_map_insert(progress_status_map *progress_status_map, char *key, progress *value) ++bool progress_status_map_udpate(progress_status_map *progress_status_map, char *key, int64_t current, int64_t total) + { + bool ret = false; ++ progress *pval = NULL; + +- if (progress_status_map == NULL || key == NULL || value == NULL) { ++ if (progress_status_map == NULL || key == NULL) { + ERROR("Invalid parameter"); + return false; + } +@@ -51,9 +52,26 @@ bool progress_status_map_insert(progress_status_map *progress_status_map, char * + ERROR("Cannot replace the progress status map item for locking failed"); + return false; + } +- ret = map_insert(progress_status_map->map, key, value); +- progress_status_map_unlock(progress_status_map); + ++ // If the item exists, only replace the value. ++ pval = map_search(progress_status_map->map, key); ++ if (pval != NULL) { ++ pval->dlnow = current; ++ pval->dltotal = total; ++ progress_status_map_unlock(progress_status_map); ++ return true; ++ } ++ pval = util_common_calloc_s(sizeof(progress)); ++ if (pval == NULL) { ++ ERROR("Out of memory"); ++ progress_status_map_unlock(progress_status_map); ++ return false; ++ } ++ pval->dlnow = current; ++ pval->dltotal = total; ++ ++ ret = map_insert(progress_status_map->map, key, pval); ++ progress_status_map_unlock(progress_status_map); + return ret; + } + +diff --git a/src/daemon/modules/image/oci/progress.h b/src/daemon/modules/image/oci/progress.h +index 496a32f3..dcc8e144 100644 +--- a/src/daemon/modules/image/oci/progress.h ++++ b/src/daemon/modules/image/oci/progress.h +@@ -29,11 +29,11 @@ typedef struct progress_status_map { + } progress_status_map; + + typedef struct progress { +- int64_t dlnow; +- int64_t dltotal; ++ int64_t dlnow; ++ int64_t dltotal; + } progress; + +-bool progress_status_map_insert(progress_status_map *progress_status_map, char *key, progress *value); ++bool progress_status_map_udpate(progress_status_map *progress_status_map, char *key, int64_t current, int64_t total); + + progress_status_map *progress_status_map_new(); + +diff --git a/src/daemon/modules/image/oci/registry/http_request.c b/src/daemon/modules/image/oci/registry/http_request.c +index 748c9a9b..450fbc41 100644 +--- a/src/daemon/modules/image/oci/registry/http_request.c ++++ b/src/daemon/modules/image/oci/registry/http_request.c +@@ -692,44 +692,22 @@ out: + static int xfer_inner(void *p, int64_t dltotal, int64_t dlnow, int64_t ultotal, int64_t ulnow) + { + progress_arg *arg = (progress_arg *)p; +- progress *progress_value = NULL; + + if (arg == NULL || arg->map_store == NULL) { + ERROR("Wrong progress arg"); + return -1; + } ++ + // When fetch_manifest_list, there's no digest. It's not a layer pulling progress and skip it. + if (arg->digest == NULL) { + return 0; + } + +- if (!progress_status_map_lock(arg->map_store)) { +- ERROR("Cannot update progress status map for locking failed"); ++ if (!progress_status_map_udpate(arg->map_store, arg->digest, dlnow, dltotal)) { ++ ERROR("Failed to update pull progress"); + return -1; + } + +- // If the item exists, only replace the value. +- progress_value = map_search(arg->map_store->map, arg->digest); +- if (progress_value != NULL) { +- progress_value->dlnow = dlnow; +- progress_value->dltotal = dltotal; +- progress_status_map_unlock(arg->map_store); +- +- return 0; +- } +- progress_status_map_unlock(arg->map_store); +- +- progress_value = util_common_calloc_s(sizeof(progress)); +- if (progress_value == NULL) { +- ERROR("Out of memory"); +- return -1; +- } +- +- progress_value->dlnow = dlnow; +- progress_value->dltotal = dltotal; +- +- progress_status_map_insert(arg->map_store, arg->digest, progress_value); +- + return 0; + } + +diff --git a/src/daemon/modules/image/oci/storage/image_store/image_store.c b/src/daemon/modules/image/oci/storage/image_store/image_store.c +index f49f4707..58baa47a 100644 +--- a/src/daemon/modules/image/oci/storage/image_store/image_store.c ++++ b/src/daemon/modules/image/oci/storage/image_store/image_store.c +@@ -2824,7 +2824,7 @@ static int implicit_digest(map_t *digests, image_t *img) + + // Find whether the manifest in big_data_digests exists, if not, return 0 directly + if (!get_index_by_key((const char **)img->simage->big_data_digests->keys, img->simage->big_data_digests->len, +- IMAGE_DIGEST_BIG_DATA_KEY, &index)) { ++ IMAGE_DIGEST_BIG_DATA_KEY, &index)) { + return 0; + } + +diff --git a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/overlay2/driver_overlay2.c b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/overlay2/driver_overlay2.c +index 7517dd43..3bc433ae 100644 +--- a/src/daemon/modules/image/oci/storage/layer_store/graphdriver/overlay2/driver_overlay2.c ++++ b/src/daemon/modules/image/oci/storage/layer_store/graphdriver/overlay2/driver_overlay2.c +@@ -1930,7 +1930,7 @@ int overlay2_apply_diff(const char *id, const struct graphdriver *driver, const + goto out; + } + +- ret = archive_unpack(content, layer_diff, &options, root_dir ,&err); ++ ret = archive_unpack(content, layer_diff, &options, root_dir, &err); + if (ret != 0) { + ERROR("Failed to unpack to %s: %s", layer_diff, err); + ret = -1; +diff --git a/src/daemon/modules/image/oci/storage/storage.c b/src/daemon/modules/image/oci/storage/storage.c +index 2e53dbac..0d1a846a 100644 +--- a/src/daemon/modules/image/oci/storage/storage.c ++++ b/src/daemon/modules/image/oci/storage/storage.c +@@ -215,7 +215,7 @@ int storage_inc_hold_refs(const char *layer_id) + int storage_dec_hold_refs(const char *layer_id) + { + int ret = 0; +- ++ + if (layer_id == NULL) { + ERROR("Empty layer id"); + return -1; +@@ -550,7 +550,8 @@ char *storage_img_get_image_id(const char *img_name) + return image_store_lookup(img_name); + } + +-static bool is_top_layer_of_other_image(const char *img_id, const imagetool_images_list *all_images, const char *layer_id) ++static bool is_top_layer_of_other_image(const char *img_id, const imagetool_images_list *all_images, ++ const char *layer_id) + { + size_t i = 0; + +-- +2.42.0 + |