From 31f08986f83fa6f2dcf55523b2cf706460aeed7c Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Tue, 7 Jul 2015 13:31:37 -0700 Subject: Split app move into separate copy/delete steps. App movement now has three distinct stages: copying, scanning, and cleanup. Previously, a battery pull late in the move process would end up with packages.xml pointing at the old location which had been torn down. Now, we update packages.xml to point at the new location as the "source of truth" before we start deleting the old location. Bug: 21831336 Change-Id: I62b8916c673265c240e2574ea968cdce5a7a0074 --- cmds/installd/commands.cpp | 18 ++++-------------- cmds/installd/installd.cpp | 6 +++--- cmds/installd/installd.h | 2 +- 3 files changed, 8 insertions(+), 18 deletions(-) (limited to 'cmds') diff --git a/cmds/installd/commands.cpp b/cmds/installd/commands.cpp index f2c76d5..0c3ae02 100644 --- a/cmds/installd/commands.cpp +++ b/cmds/installd/commands.cpp @@ -177,7 +177,7 @@ int make_user_data(const char *uuid, const char *pkgname, uid_t uid, userid_t us return 0; } -int move_complete_app(const char *from_uuid, const char *to_uuid, +int copy_complete_app(const char *from_uuid, const char *to_uuid, const char *package_name, const char *data_app_name, appid_t appid, const char* seinfo) { std::vector users = get_known_users(from_uuid); @@ -264,19 +264,9 @@ int move_complete_app(const char *from_uuid, const char *to_uuid, } } - // Delete old app and data - { - std::string from(create_data_app_package_path(from_uuid, data_app_name)); - if (delete_dir_contents(from.c_str(), 1, NULL) != 0) { - LOG(WARNING) << "Failed to delete " << from; - } - } - for (auto user : users) { - std::string from(create_data_user_package_path(from_uuid, user, package_name)); - if (delete_dir_contents(from.c_str(), 1, NULL) != 0) { - LOG(WARNING) << "Failed to delete " << from; - } - } + // We let the framework scan the new location and persist that before + // deleting the data in the old location; this ordering ensures that + // we can recover from things like battery pulls. return 0; fail: diff --git a/cmds/installd/installd.cpp b/cmds/installd/installd.cpp index 297b3a1..13e3168 100644 --- a/cmds/installd/installd.cpp +++ b/cmds/installd/installd.cpp @@ -124,10 +124,10 @@ static int do_rm_user_data(char **arg, char reply[REPLY_MAX] __unused) return delete_user_data(parse_null(arg[0]), arg[1], atoi(arg[2])); /* uuid, pkgname, userid */ } -static int do_mv_complete_app(char **arg, char reply[REPLY_MAX] __unused) +static int do_cp_complete_app(char **arg, char reply[REPLY_MAX] __unused) { // from_uuid, to_uuid, package_name, data_app_name, appid, seinfo - return move_complete_app(parse_null(arg[0]), parse_null(arg[1]), arg[2], arg[3], atoi(arg[4]), arg[5]); + return copy_complete_app(parse_null(arg[0]), parse_null(arg[1]), arg[2], arg[3], atoi(arg[4]), arg[5]); } static int do_mk_user_data(char **arg, char reply[REPLY_MAX] __unused) @@ -206,7 +206,7 @@ struct cmdinfo cmds[] = { { "rmcodecache", 3, do_rm_code_cache }, { "getsize", 8, do_get_size }, { "rmuserdata", 3, do_rm_user_data }, - { "mvcompleteapp", 6, do_mv_complete_app }, + { "cpcompleteapp", 6, do_cp_complete_app }, { "movefiles", 0, do_movefiles }, { "linklib", 4, do_linklib }, { "mkuserdata", 5, do_mk_user_data }, diff --git a/cmds/installd/installd.h b/cmds/installd/installd.h index 744ed3a..7ec5793 100644 --- a/cmds/installd/installd.h +++ b/cmds/installd/installd.h @@ -225,7 +225,7 @@ int fix_uid(const char *uuid, const char *pkgname, uid_t uid, gid_t gid); int delete_user_data(const char *uuid, const char *pkgname, userid_t userid); int make_user_data(const char *uuid, const char *pkgname, uid_t uid, userid_t userid, const char* seinfo); -int move_complete_app(const char* from_uuid, const char *to_uuid, +int copy_complete_app(const char* from_uuid, const char *to_uuid, const char *package_name, const char *data_app_name, appid_t appid, const char* seinfo); int make_user_config(userid_t userid); -- cgit v1.1