Re-add the logging to track when a backup transport is used which hasn't been initialised.
Test: atest RunBackupFrameworksServicesRoboTests
Fixes: 110781477
Change-Id: I8645fb4eab24dc531b93e865003d894dc1877d99
diff --git a/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupReporter.java b/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupReporter.java
index 535c7cb..4632cb0 100644
--- a/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupReporter.java
+++ b/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupReporter.java
@@ -395,7 +395,8 @@
Slog.e(TAG, "Transport threw reporting restore set: " + e);
}
- void onTransportNotInitialized() {
+ void onTransportNotInitialized(@Nullable String transportName) {
+ EventLog.writeEvent(EventLogTags.BACKUP_RESET, transportName);
if (MORE_DEBUG) {
Slog.d(TAG, "Transport requires initialization, rerunning");
}
diff --git a/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupTask.java b/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupTask.java
index 294eb01..e5e11ea 100644
--- a/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupTask.java
+++ b/services/backup/java/com/android/server/backup/keyvalue/KeyValueBackupTask.java
@@ -535,6 +535,7 @@
}
String callerLogString = "KVBT.finishTask()";
+ String transportName = null;
// If the backup data was not empty, we succeeded and this is the first time
// we've done a backup, we can record the current backup dataset token.
@@ -542,6 +543,7 @@
if (mHasDataToBackup && (status == BackupTransport.TRANSPORT_OK) && (currentToken == 0)) {
try {
IBackupTransport transport = mTransportClient.connectOrThrow(callerLogString);
+ transportName = transport.name();
mBackupManagerService.setCurrentToken(transport.getCurrentRestoreSet());
mBackupManagerService.writeRestoreTokens();
} catch (Exception e) {
@@ -553,7 +555,7 @@
synchronized (mQueueLock) {
mBackupManagerService.setBackupRunning(false);
if (status == BackupTransport.TRANSPORT_NOT_INITIALIZED) {
- mReporter.onTransportNotInitialized();
+ mReporter.onTransportNotInitialized(transportName);
try {
triggerTransportInitializationLocked();
} catch (Exception e) {
@@ -861,6 +863,8 @@
status = transport.performBackup(packageInfo, backupData, flags);
if (status == BackupTransport.TRANSPORT_OK) {
status = transport.finishBackup();
+ } else if (status == BackupTransport.TRANSPORT_NOT_INITIALIZED) {
+ mReporter.onTransportNotInitialized(transport.name());
}
} catch (Exception e) {
mReporter.onPackageBackupTransportError(packageName, e);
diff --git a/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupReporterTest.java b/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupReporterTest.java
index a1b8a95..14b4dc3 100644
--- a/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupReporterTest.java
+++ b/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupReporterTest.java
@@ -77,4 +77,16 @@
assertThat(observer).isEqualTo(mObserver);
}
+
+ /**
+ * Ensure that EventLog is called when logging the transport uninitialised issue.
+ */
+ @Test
+ public void testOnTransportNotInitialized_callsEventLog() {
+ ShadowEventLog.setUp();
+
+ mReporter.onTransportNotInitialized("transport");
+
+ assertThat(ShadowEventLog.getEntries().size()).isEqualTo(1);
+ }
}
diff --git a/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupTaskTest.java b/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupTaskTest.java
index cc64323..43691e0 100644
--- a/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupTaskTest.java
+++ b/services/robotests/backup/src/com/android/server/backup/keyvalue/KeyValueBackupTaskTest.java
@@ -226,8 +226,9 @@
// Needed to be able to use a real BMS instead of a mock
setUpBinderCallerAndApplicationAsSystem(mApplication);
mBackupManagerService =
- spy(createUserBackupManagerServiceAndRunTasks(
- USER_ID, mContext, mBaseStateDir, mDataDir, mTransportManager));
+ spy(
+ createUserBackupManagerServiceAndRunTasks(
+ USER_ID, mContext, mBaseStateDir, mDataDir, mTransportManager));
setUpBackupManagerServiceBasics(
mBackupManagerService,
mApplication,
@@ -335,9 +336,7 @@
.isEqualTo("packageState".getBytes());
}
- /**
- * Do not update backup token if the backup queue was empty
- */
+ /** Do not update backup token if the backup queue was empty */
@Test
public void testRunTask_whenQueueEmptyOnFirstBackup_doesNotUpdateCurrentToken()
throws Exception {
@@ -725,8 +724,8 @@
}
/**
- * Agent unavailable means {@link UserBackupManagerService#bindToAgentSynchronous(ApplicationInfo,
- * int)} returns {@code null}.
+ * Agent unavailable means {@link
+ * UserBackupManagerService#bindToAgentSynchronous(ApplicationInfo, int)} returns {@code null}.
*
* @see #setUpAgent(PackageData)
*/
@@ -759,8 +758,8 @@
runTask(task);
- assertThat(Files.readAllBytes(getStateFile(mTransport, PACKAGE_1))).isEqualTo(
- "newState".getBytes());
+ assertThat(Files.readAllBytes(getStateFile(mTransport, PACKAGE_1)))
+ .isEqualTo("newState".getBytes());
}
@Test
@@ -795,7 +794,8 @@
}
@Test
- public void testRunTask_whenNonIncrementalAndBindToAgentThrowsSecurityException() throws Exception {
+ public void testRunTask_whenNonIncrementalAndBindToAgentThrowsSecurityException()
+ throws Exception {
TransportMock transportMock = setUpInitializedTransport(mTransport);
setUpAgent(PACKAGE_1);
doThrow(SecurityException.class)
@@ -1665,7 +1665,7 @@
runTask(task);
verify(mReporter).onPackageBackupTransportFailure(PACKAGE_1.packageName);
- verify(mReporter).onTransportNotInitialized();
+ verify(mReporter).onTransportNotInitialized(mTransport.transportName);
verify(mReporter).onBackupFinished(BackupManager.ERROR_TRANSPORT_ABORTED);
}
@@ -1682,7 +1682,7 @@
runTask(task);
verify(mReporter).onPackageBackupTransportFailure(PM_PACKAGE.packageName);
- verify(mReporter).onTransportNotInitialized();
+ verify(mReporter).onTransportNotInitialized(mTransport.transportName);
verify(mReporter).onBackupFinished(BackupManager.ERROR_TRANSPORT_ABORTED);
}
@@ -1771,9 +1771,10 @@
TransportMock transportMock = setUpInitializedTransport(mTransport);
when(transportMock.transport.performBackup(any(), any(), anyInt()))
.thenReturn(BackupTransport.TRANSPORT_NOT_INITIALIZED);
- // First one is in startTask(), second is the one we want.
+ // First one is in startTask(), second is in finishTask(), the third is the one we want.
when(transportMock.transport.name())
.thenReturn(mTransport.transportName)
+ .thenReturn(mTransport.transportName)
.thenThrow(DeadObjectException.class);
setUpAgentWithData(PACKAGE_1);
KeyValueBackupTask task = createKeyValueBackupTask(transportMock, PACKAGE_1);
@@ -2321,9 +2322,7 @@
expectThrows(IllegalArgumentException.class, () -> task.handleCancel(false));
}
- /**
- * Do not update backup token if no data was moved.
- */
+ /** Do not update backup token if no data was moved. */
@Test
public void testRunTask_whenNoDataToBackupOnFirstBackup_doesNotUpdateCurrentToken()
throws Exception {