clone_partition: Modify background clone conditions 61/314861/1
authorSangYoun Kwak <sy.kwak@samsung.com>
Mon, 22 Jul 2024 06:48:15 +0000 (15:48 +0900)
committerSangYoun Kwak <sy.kwak@samsung.com>
Mon, 22 Jul 2024 07:01:18 +0000 (16:01 +0900)
Previously, to determine whether clone or not, checking bootmode was
sufficient.

Since the online upgrade feature is supported and it boots with bootmode
fota.

Thus, to determine if it is safe to clone or not, conditions below are
going to be checked:
 * upgrade state is "completed"
 * (bootmode is normal)
   or
   (bootmode is fota and upgrade type is online)

Also, due to it checks the upgrade state, clone_partition.service has to
wait the update-manager.service to be started since it changes the
upgrade state.

Change-Id: I103a39dbe12d4cfab2f4844206b9341c3323f793
Signed-off-by: SangYoun Kwak <sy.kwak@samsung.com>
scripts/clone_partitions/clone_partitions.service
scripts/clone_partitions/clone_partitions.sh

index e296d5bc71a12b5735b9fc66436bd8057c040821..f1a87458ae5f098adbbf4fbe829433ffc13bc4fe 100644 (file)
@@ -1,6 +1,6 @@
 [Unit]
 Description=Clone partitions
-After=system-delayed-target-done.service
+After=system-delayed-target-done.service update-manager.service
 
 [Service]
 Type=simple
index 3540f4ed4323238981ec0c01c77617739cab1ede..33d667815ecc5f5a058b984e0d6076426d189c77 100644 (file)
@@ -47,25 +47,56 @@ clone_recovery() {
 }
 
 check_clone_background_available() {
-       local bootmode=$(device_board_get_boot_mode)
-       local ret_boot_mode=$?
+       # Partitions should not be cloned if upgrade is in progress.
+       local upgrade_state
+       local upgrade_type
+       local bootmode
+       local ret
+
+       upgrade_state=$(device_board_get_upgrade_state)
+       ret=$?
+       if [[ $? -ne 0 ]]; then
+               critical_log "[Error] Cannot get upgrade state: ${ret}"
+               exit 1
+       fi
+
+       upgrade_type=$(device_board_get_upgrade_type)
+       ret=$?
+       if [[ $? -ne 0 ]]; then
+               critical_log "[Error] Cannot get upgrade type: ${ret}"
+               exit 1
+       fi
 
-       if [ ${ret_boot_mode} -ne 0 ]; then
-               critical_log "[Error] Cannot get boot mode: ${ret_boot_mode}"
+       bootmode=$(device_board_get_boot_mode)
+       ret=$?
+       if [[ $? -ne 0 ]]; then
+               critical_log "[Error] Cannot get boot mode: ${ret}"
                exit 1
        fi
 
-       if [ "${bootmode}" != "normal" ]; then
-               log "[Info] bootmode is not \"normal\": ${bootmode}"
+       if [[ "${upgrade_state}" != "completed" ]]; then
+               log "[Info] Upgrade state is not \"completed\": ${upgrade_state}"
                exit 0
        fi
+
+       if [[ "${bootmode}" != "normal" ]]; then
+               if [[ "${bootmode}" != "fota" ]]; then
+                       log "[Info] bootmode should be \"normal\" or \"fota\": ${bootmode}"
+                       exit 0
+               fi
+
+               if [[ "${upgrade_type}" != "online" ]]; then
+                       log "[Info] Upgrade type should be online if bootmode is fota: ${upgrade_type}"
+                       exit 0
+               fi
+       fi
 }
 
 clone_background() {
        # wait for 60 seconds to wait for bootup
        sleep 60
 
-       check_clone_available
+       check_clone_background_available
        start_clone
 }