218 lines
7.5 KiB
Diff
218 lines
7.5 KiB
Diff
From 72a02695064384dc8565a22fb786fbd639770afa Mon Sep 17 00:00:00 2001
|
|
From: haozi007 <liuhao27@huawei.com>
|
|
Date: Mon, 5 Jun 2023 07:56:41 +0000
|
|
Subject: [PATCH 01/15] [RO] refactor remote ro code
|
|
|
|
---
|
|
CI/pr-gateway.sh | 2 +-
|
|
.../leftover_cleanup/leftover_cleanup_api.c | 2 +-
|
|
.../graphdriver/overlay2/driver_overlay2.c | 36 +++++--------------
|
|
.../oci/storage/layer_store/layer_store.c | 21 ++++-------
|
|
src/utils/http/parser.c | 2 +-
|
|
5 files changed, 17 insertions(+), 46 deletions(-)
|
|
|
|
diff --git a/CI/pr-gateway.sh b/CI/pr-gateway.sh
|
|
index 93b07c44..b3da52d0 100755
|
|
--- a/CI/pr-gateway.sh
|
|
+++ b/CI/pr-gateway.sh
|
|
@@ -111,7 +111,7 @@ pushd iSulad
|
|
rm -rf build
|
|
mkdir build
|
|
pushd build
|
|
-cmake -DDEBUG=ON -DCMAKE_INSTALL_PREFIX=/usr -DENABLE_UT=ON -DENABLE_SHIM_V2=OFF ../ || exit 1
|
|
+cmake -DDEBUG=ON -DCMAKE_INSTALL_PREFIX=/usr -DENABLE_UT=ON -DENABLE_REMOTE_LAYER_STORE=ON -DENABLE_SHIM_V2=OFF ../ || exit 1
|
|
make -j $(nproc) || exit 1
|
|
ctest -V
|
|
popd
|
|
diff --git a/src/daemon/modules/container/leftover_cleanup/leftover_cleanup_api.c b/src/daemon/modules/container/leftover_cleanup/leftover_cleanup_api.c
|
|
index 8f077916..a20dbc3a 100644
|
|
--- a/src/daemon/modules/container/leftover_cleanup/leftover_cleanup_api.c
|
|
+++ b/src/daemon/modules/container/leftover_cleanup/leftover_cleanup_api.c
|
|
@@ -25,7 +25,7 @@ int clean_module_init(const isulad_daemon_configs *args)
|
|
if (args->storage_enable_remote_layer) {
|
|
// need to disable cleanup
|
|
// cause cleanup may cleanup local broken RO layer
|
|
- // while this RO layer is valid for remote
|
|
+ // while this RO layer is valid for remote
|
|
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 5ad487f9..4f7be30d 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
|
|
@@ -867,7 +867,7 @@ out:
|
|
static int do_create_remote_ro(const char *id, const char *parent, const struct graphdriver *driver,
|
|
const struct driver_create_opts *create_opts)
|
|
{
|
|
- int ret = 0;
|
|
+ int ret = -1;
|
|
int get_err = 0;
|
|
char *ro_symlink = NULL;
|
|
char *ro_home = NULL;
|
|
@@ -879,69 +879,51 @@ static int do_create_remote_ro(const char *id, const char *parent, const struct
|
|
ro_home = util_path_join(driver->home, OVERLAY_RO_DIR);
|
|
if (ro_home == NULL) {
|
|
ERROR("Failed to join ro_home");
|
|
- ret = -1;
|
|
- goto out;
|
|
+ return -1;
|
|
}
|
|
|
|
layer_dir = util_path_join(ro_home, id);
|
|
if (layer_dir == NULL) {
|
|
- ERROR("Failed to join layer_dir");
|
|
- ret = -1;
|
|
+ ERROR("Failed to join layer dir: %s", id);
|
|
goto out;
|
|
}
|
|
|
|
ro_symlink = util_path_join(driver->home, id);
|
|
if (ro_symlink == NULL) {
|
|
ERROR("Failed to join ro_symlink");
|
|
- ret = -1;
|
|
- goto out;
|
|
- }
|
|
-
|
|
- if (layer_dir == NULL) {
|
|
- ERROR("Failed to join layer dir:%s", id);
|
|
- ret = -1;
|
|
goto out;
|
|
}
|
|
|
|
if (check_parent_valid(parent, driver) != 0) {
|
|
- ret = -1;
|
|
goto out;
|
|
}
|
|
|
|
if (util_mkdir_p(layer_dir, 0700) != 0) {
|
|
ERROR("Unable to create layer directory %s.", layer_dir);
|
|
- ret = -1;
|
|
goto out;
|
|
}
|
|
|
|
// mk symbol link
|
|
if (symlink(layer_dir, ro_symlink) != 0) {
|
|
SYSERROR("Unable to create symbol link to layer directory %s", layer_dir);
|
|
- ret = -1;
|
|
goto err_out;
|
|
}
|
|
|
|
#ifdef ENABLE_USERNS_REMAP
|
|
if (set_file_owner_for_userns_remap(layer_dir, userns_remap) != 0) {
|
|
ERROR("Unable to change directory %s owner for user remap.", layer_dir);
|
|
- ret = -1;
|
|
goto out;
|
|
}
|
|
#endif
|
|
|
|
- if (create_opts->storage_opt != NULL && create_opts->storage_opt->len != 0) {
|
|
- if (set_layer_quota(layer_dir, create_opts->storage_opt, driver) != 0) {
|
|
- ERROR("Unable to set layer quota %s", layer_dir);
|
|
- ret = -1;
|
|
- goto err_out;
|
|
- }
|
|
- }
|
|
+ // quota opts only setting on rw layer
|
|
|
|
if (mk_sub_directories(id, parent, layer_dir, driver->home) != 0) {
|
|
- ret = -1;
|
|
+ ERROR("Create layer: %s sub dir failed", id);
|
|
goto err_out;
|
|
}
|
|
|
|
+ ret = 0;
|
|
goto out;
|
|
|
|
err_out:
|
|
@@ -1118,12 +1100,10 @@ int overlay2_create_ro(const char *id, const char *parent, const struct graphdri
|
|
#ifdef ENABLE_REMOTE_LAYER_STORE
|
|
if (driver->enable_remote_layer) {
|
|
return do_create_remote_ro(id, parent, driver, create_opts);
|
|
- } else {
|
|
- return do_create(id, parent, driver, create_opts);
|
|
}
|
|
-#else
|
|
- return do_create(id, parent, driver, create_opts);
|
|
#endif
|
|
+
|
|
+ return do_create(id, parent, driver, create_opts);
|
|
}
|
|
|
|
static char *read_layer_link_file(const char *layer_dir)
|
|
diff --git a/src/daemon/modules/image/oci/storage/layer_store/layer_store.c b/src/daemon/modules/image/oci/storage/layer_store/layer_store.c
|
|
index 800a1cd7..08c7e4a6 100644
|
|
--- a/src/daemon/modules/image/oci/storage/layer_store/layer_store.c
|
|
+++ b/src/daemon/modules/image/oci/storage/layer_store/layer_store.c
|
|
@@ -1329,7 +1329,7 @@ driver_remove:
|
|
if (ret != 0) {
|
|
(void)graphdriver_rm_layer(lid);
|
|
#ifdef ENABLE_REMOTE_LAYER_STORE
|
|
- if (g_enable_remote_layer) {
|
|
+ if (g_enable_remote_layer && !opts->writable) {
|
|
(void)remote_layer_remove_ro_dir(lid);
|
|
} else {
|
|
(void)layer_store_remove_layer(lid);
|
|
@@ -1412,14 +1412,10 @@ static int do_delete_layer(const char *id)
|
|
}
|
|
|
|
#ifdef ENABLE_REMOTE_LAYER_STORE
|
|
- if (!g_enable_remote_layer) {
|
|
- ret = layer_store_remove_layer(l->slayer->id);
|
|
+ if (g_enable_remote_layer && !(l->slayer->writable)) {
|
|
+ ret = remote_layer_remove_ro_dir(l->slayer->id);
|
|
} else {
|
|
- if (l->slayer->writable) {
|
|
- ret = layer_store_remove_layer(l->slayer->id);
|
|
- } else {
|
|
- ret = remote_layer_remove_ro_dir(l->slayer->id);
|
|
- }
|
|
+ ret = layer_store_remove_layer(l->slayer->id);
|
|
}
|
|
#else
|
|
ret = layer_store_remove_layer(l->slayer->id);
|
|
@@ -2387,11 +2383,6 @@ int remote_layer_remove_memory_stores_with_lock(const char *id)
|
|
goto unlock_out;
|
|
}
|
|
|
|
- if (map_search(g_metadata.by_id, (void *)id) == NULL) {
|
|
- DEBUG("remote layer already removed, don't delete: %s", id);
|
|
- goto unlock_out;
|
|
- }
|
|
-
|
|
ret = remove_memory_stores(id);
|
|
|
|
unlock_out:
|
|
@@ -2412,13 +2403,13 @@ static layer_t *load_one_layer_from_json(const char *id)
|
|
nret = snprintf(tmpdir, PATH_MAX, "%s/%s", g_root_dir, id);
|
|
if (nret < 0 || nret >= PATH_MAX) {
|
|
ERROR("Sprintf: %s failed", id);
|
|
- goto free_out;
|
|
+ return NULL;
|
|
}
|
|
|
|
mount_point_path = mountpoint_json_path(id);
|
|
if (mount_point_path == NULL) {
|
|
ERROR("Out of Memory");
|
|
- goto free_out;
|
|
+ return NULL;
|
|
}
|
|
|
|
rpath = layer_json_path(id);
|
|
diff --git a/src/utils/http/parser.c b/src/utils/http/parser.c
|
|
index a79893ba..30b26a00 100644
|
|
--- a/src/utils/http/parser.c
|
|
+++ b/src/utils/http/parser.c
|
|
@@ -105,7 +105,7 @@ static int parser_cb_header_value(http_parser *parser, const char *buf,
|
|
size_t len)
|
|
{
|
|
struct parsed_http_message *m = parser->data;
|
|
-
|
|
+
|
|
if (m->num_headers == 0) {
|
|
ERROR("Failed to parse header value because headers num is 0");
|
|
return -1;
|
|
--
|
|
2.25.1
|
|
|