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