From b2e6e4498e7ce1df9ada4f24363390e56a9eef49 Mon Sep 17 00:00:00 2001 From: haozi007 Date: Wed, 6 May 2020 03:33:13 -0400 Subject: [PATCH] refactor lookup api Signed-off-by: haozi007 --- .../oci/storage/layer_store/layer_store.c | 18 ++++++++++++------ .../oci/storage/layer_store/layer_store.h | 2 +- .../oci/storage/layers/storage_layers_llt.cc | 17 +++++++++++++---- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/src/image/oci/storage/layer_store/layer_store.c b/src/image/oci/storage/layer_store/layer_store.c index 646a94c..e903ad9 100644 --- a/src/image/oci/storage/layer_store/layer_store.c +++ b/src/image/oci/storage/layer_store/layer_store.c @@ -1198,23 +1198,29 @@ struct layer** layer_store_by_uncompress_digest(const char *digest, size_t *laye return layers_by_digest_map(g_metadata.by_uncompress_digest, digest, layers_len); } -char *layer_store_lookup(const char *name) +struct layer *layer_store_lookup(const char *name) { - char *result = NULL; + struct layer *ret = NULL; layer_t *l = NULL; if (name == NULL) { - return result; + return ret; + } + ret = util_common_calloc_s(sizeof(struct layer)); + if (ret == NULL) { + ERROR("Out of memory"); + return ret; } + l = lookup_with_lock(name); if (l == NULL) { - return result; + return ret; } layer_lock(l); - result = util_strdup_s(l->slayer->id); + copy_json_to_layer(l, ret); layer_unlock(l); layer_ref_dec(l); - return result; + return ret; } static char *mount_helper(layer_t *l, const struct layer_store_mount_opts *opts) diff --git a/src/image/oci/storage/layer_store/layer_store.h b/src/image/oci/storage/layer_store/layer_store.h index 883444a..daa3911 100644 --- a/src/image/oci/storage/layer_store/layer_store.h +++ b/src/image/oci/storage/layer_store/layer_store.h @@ -57,7 +57,7 @@ struct layer** layer_store_list(size_t *layers_len); bool layer_store_is_used(const char *id); struct layer** layer_store_by_compress_digest(const char *digest, size_t *layers_len); struct layer** layer_store_by_uncompress_digest(const char *digest, size_t *layers_len); -char *layer_store_lookup(const char *name); +struct layer *layer_store_lookup(const char *name); char *layer_store_mount(const char *id, const struct layer_store_mount_opts *opts); int layer_store_umount(const char *id, bool force); int layer_store_mounted(const char *id); diff --git a/test/image/oci/storage/layers/storage_layers_llt.cc b/test/image/oci/storage/layers/storage_layers_llt.cc index a68d2d0..3d139fc 100644 --- a/test/image/oci/storage/layers/storage_layers_llt.cc +++ b/test/image/oci/storage/layers/storage_layers_llt.cc @@ -179,10 +179,19 @@ TEST_F(StorageImagesUnitTest, test_layer_store_lookup) std::string id { "ac86325a0e6384e251f2f4418d7b36321ad6811f9ba8a3dc87e13d634b0ec1d1" }; std::string name { "689feccc14f14112b43b1fbf7dc14c3426e4fdd6e2bff462ec70b9f6ee4b3fae-layer" }; std::string incorrectId { "4db68de4ff27" }; - - ASSERT_STREQ(layer_store_lookup(name.c_str()), id.c_str()); - ASSERT_STREQ(layer_store_lookup(id.c_str()), id.c_str()); - ASSERT_EQ(layer_store_lookup(incorrectId.c_str()), nullptr); + struct layer *l = NULL; + + l = layer_store_lookup(name.c_str()); + ASSERT_NE(l, nullptr); + ASSERT_STREQ(l->id, id.c_str()); + free_layer(l); + l = layer_store_lookup(id.c_str()); + ASSERT_NE(l, nullptr); + ASSERT_STREQ(l->id, id.c_str()); + free_layer(l); + l = layer_store_lookup(incorrectId.c_str()); + ASSERT_EQ(l->id, nullptr); + free_layer(l); } TEST_F(StorageImagesUnitTest, test_layer_store_exists) -- GitLab