Home | History | Annotate | Download | only in backup
      1 /*
      2  * Copyright (C) 2018 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License
     15  */
     16 
     17 package com.android.server.backup;
     18 
     19 import android.content.ContentResolver;
     20 import android.os.Handler;
     21 import android.provider.Settings;
     22 import android.util.KeyValueListParser;
     23 import android.util.KeyValueSettingObserver;
     24 import android.util.Slog;
     25 import com.android.internal.annotations.GuardedBy;
     26 import com.android.internal.annotations.VisibleForTesting;
     27 
     28 /**
     29  * Configure backup and restore agent timeouts.
     30  *
     31  * <p>These timeout parameters are stored in Settings.Global to be configurable flags with P/H. They
     32  * are represented as a comma-delimited key value list.
     33  */
     34 public class BackupAgentTimeoutParameters extends KeyValueSettingObserver {
     35     private static final String TAG = "BackupAgentTimeout";
     36 
     37     @VisibleForTesting
     38     public static final String SETTING = Settings.Global.BACKUP_AGENT_TIMEOUT_PARAMETERS;
     39 
     40     @VisibleForTesting
     41     public static final String SETTING_KV_BACKUP_AGENT_TIMEOUT_MILLIS =
     42             "kv_backup_agent_timeout_millis";
     43 
     44     @VisibleForTesting
     45     public static final String SETTING_FULL_BACKUP_AGENT_TIMEOUT_MILLIS =
     46             "full_backup_agent_timeout_millis";
     47 
     48     @VisibleForTesting
     49     public static final String SETTING_SHARED_BACKUP_AGENT_TIMEOUT_MILLIS =
     50             "shared_backup_agent_timeout_millis";
     51 
     52     @VisibleForTesting
     53     public static final String SETTING_RESTORE_AGENT_TIMEOUT_MILLIS =
     54             "restore_agent_timeout_millis";
     55 
     56     @VisibleForTesting
     57     public static final String SETTING_RESTORE_AGENT_FINISHED_TIMEOUT_MILLIS =
     58             "restore_agent_finished_timeout_millis";
     59 
     60     // Default values
     61     @VisibleForTesting public static final long DEFAULT_KV_BACKUP_AGENT_TIMEOUT_MILLIS = 30 * 1000;
     62 
     63     @VisibleForTesting
     64     public static final long DEFAULT_FULL_BACKUP_AGENT_TIMEOUT_MILLIS = 5 * 60 * 1000;
     65 
     66     @VisibleForTesting
     67     public static final long DEFAULT_SHARED_BACKUP_AGENT_TIMEOUT_MILLIS = 30 * 60 * 1000;
     68 
     69     @VisibleForTesting public static final long DEFAULT_RESTORE_AGENT_TIMEOUT_MILLIS = 60 * 1000;
     70 
     71     @VisibleForTesting
     72     public static final long DEFAULT_RESTORE_AGENT_FINISHED_TIMEOUT_MILLIS = 30 * 1000;
     73 
     74     @GuardedBy("mLock")
     75     private long mKvBackupAgentTimeoutMillis;
     76 
     77     @GuardedBy("mLock")
     78     private long mFullBackupAgentTimeoutMillis;
     79 
     80     @GuardedBy("mLock")
     81     private long mSharedBackupAgentTimeoutMillis;
     82 
     83     @GuardedBy("mLock")
     84     private long mRestoreAgentTimeoutMillis;
     85 
     86     @GuardedBy("mLock")
     87     private long mRestoreAgentFinishedTimeoutMillis;
     88 
     89     private final Object mLock = new Object();
     90 
     91     public BackupAgentTimeoutParameters(Handler handler, ContentResolver resolver) {
     92         super(handler, resolver, Settings.Global.getUriFor(SETTING));
     93     }
     94 
     95     public String getSettingValue(ContentResolver resolver) {
     96         return Settings.Global.getString(resolver, SETTING);
     97     }
     98 
     99     public void update(KeyValueListParser parser) {
    100         synchronized (mLock) {
    101             mKvBackupAgentTimeoutMillis =
    102                     parser.getLong(
    103                             SETTING_KV_BACKUP_AGENT_TIMEOUT_MILLIS,
    104                             DEFAULT_KV_BACKUP_AGENT_TIMEOUT_MILLIS);
    105             mFullBackupAgentTimeoutMillis =
    106                     parser.getLong(
    107                             SETTING_FULL_BACKUP_AGENT_TIMEOUT_MILLIS,
    108                             DEFAULT_FULL_BACKUP_AGENT_TIMEOUT_MILLIS);
    109             mSharedBackupAgentTimeoutMillis =
    110                     parser.getLong(
    111                             SETTING_SHARED_BACKUP_AGENT_TIMEOUT_MILLIS,
    112                             DEFAULT_SHARED_BACKUP_AGENT_TIMEOUT_MILLIS);
    113             mRestoreAgentTimeoutMillis =
    114                     parser.getLong(
    115                             SETTING_RESTORE_AGENT_TIMEOUT_MILLIS,
    116                             DEFAULT_RESTORE_AGENT_TIMEOUT_MILLIS);
    117             mRestoreAgentFinishedTimeoutMillis =
    118                     parser.getLong(
    119                             SETTING_RESTORE_AGENT_FINISHED_TIMEOUT_MILLIS,
    120                             DEFAULT_RESTORE_AGENT_FINISHED_TIMEOUT_MILLIS);
    121         }
    122     }
    123 
    124     public long getKvBackupAgentTimeoutMillis() {
    125         synchronized (mLock) {
    126             if (BackupManagerService.DEBUG_SCHEDULING) {
    127                 Slog.v(TAG, "getKvBackupAgentTimeoutMillis(): " + mKvBackupAgentTimeoutMillis);
    128             }
    129             return mKvBackupAgentTimeoutMillis;
    130         }
    131     }
    132 
    133     public long getFullBackupAgentTimeoutMillis() {
    134         synchronized (mLock) {
    135             if (BackupManagerService.DEBUG_SCHEDULING) {
    136                 Slog.v(TAG, "getFullBackupAgentTimeoutMillis(): " + mFullBackupAgentTimeoutMillis);
    137             }
    138             return mFullBackupAgentTimeoutMillis;
    139         }
    140     }
    141 
    142     public long getSharedBackupAgentTimeoutMillis() {
    143         synchronized (mLock) {
    144             if (BackupManagerService.DEBUG_SCHEDULING) {
    145                 Slog.v(
    146                         TAG,
    147                         "getSharedBackupAgentTimeoutMillis(): " + mSharedBackupAgentTimeoutMillis);
    148             }
    149             return mSharedBackupAgentTimeoutMillis;
    150         }
    151     }
    152 
    153     public long getRestoreAgentTimeoutMillis() {
    154         synchronized (mLock) {
    155             if (BackupManagerService.DEBUG_SCHEDULING) {
    156                 Slog.v(TAG, "getRestoreAgentTimeoutMillis(): " + mRestoreAgentTimeoutMillis);
    157             }
    158             return mRestoreAgentTimeoutMillis;
    159         }
    160     }
    161 
    162     public long getRestoreAgentFinishedTimeoutMillis() {
    163         synchronized (mLock) {
    164             if (BackupManagerService.DEBUG_SCHEDULING) {
    165                 Slog.v(
    166                         TAG,
    167                         "getRestoreAgentFinishedTimeoutMillis(): "
    168                                 + mRestoreAgentFinishedTimeoutMillis);
    169             }
    170             return mRestoreAgentFinishedTimeoutMillis;
    171         }
    172     }
    173 }
    174