machine: generalize rename_image_and_update_cache() logic

This is a prep step to reuse the function in varlink interface
This commit is contained in:
Ivan Kruglov
2024-10-14 10:42:47 +02:00
parent ad0d4f9a4c
commit dd2d5952c9
3 changed files with 30 additions and 11 deletions
+3 -11
View File
@@ -127,17 +127,9 @@ int bus_image_method_rename(
if (r == 0)
return 1; /* Will call us back */
/* The image is cached with its name, hence it is necessary to remove from the cache before renaming. */
assert_se(hashmap_remove_value(m->image_cache, image->name, image));
r = image_rename(image, new_name);
if (r < 0) {
image_unref(image);
return r;
}
/* Then save the object again in the cache. */
assert_se(hashmap_put(m->image_cache, image->name, image) > 0);
r = rename_image_and_update_cache(m, image, new_name);
if (r < 0)
return sd_bus_error_set_errnof(error, r, "Failed to rename image: %m");
return sd_bus_reply_method_return(message, NULL);
}
+26
View File
@@ -456,3 +456,29 @@ int manager_acquire_image(Manager *m, const char *name, Image **ret) {
TAKE_PTR(image);
return 0;
}
int rename_image_and_update_cache(Manager *m, Image *image, const char* new_name) {
int r;
assert(m);
assert(image);
assert(new_name);
/* The image is cached with its name, hence it is necessary to remove from the cache before renaming. */
assert_se(hashmap_remove_value(m->image_cache, image->name, image));
r = image_rename(image, new_name);
if (r < 0) {
image = image_unref(image);
return r;
}
/* Then save the object again in the cache. */
r = hashmap_put(m->image_cache, image->name, image);
if (r < 0) {
image = image_unref(image);
log_debug_errno(r, "Failed to put renamed image into cache, ignoring: %m");
}
return 0;
}
+1
View File
@@ -69,3 +69,4 @@ void manager_enqueue_gc(Manager *m);
int machine_get_addresses(Machine* machine, struct local_address **ret_addresses);
int machine_get_os_release(Machine *machine, char ***ret_os_release);
int manager_acquire_image(Manager *m, const char *name, Image **ret);
int rename_image_and_update_cache(Manager *m, Image *image, const char* new_name);