Unavailable DataLoader status.
This is a temporary failure, does not fail the session, but requires
caller to re-commit. E.g. there are connectivity issues which can be
fixed later.
Bug: b/153874006
Test: atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest IncrementalServiceTest
Change-Id: I02791a2963130dbecb510c4a7cafcf04f6245761
diff --git a/services/incremental/IncrementalService.cpp b/services/incremental/IncrementalService.cpp
index 1036858..992a4ef 100644
--- a/services/incremental/IncrementalService.cpp
+++ b/services/incremental/IncrementalService.cpp
@@ -1708,15 +1708,19 @@
{
std::unique_lock lock(mStatusMutex);
oldStatus = mTargetStatus;
- mTargetStatus = newStatus;
- mTargetStatusTs = Clock::now();
curStatus = mCurrentStatus;
+ setTargetStatusLocked(newStatus);
}
LOG(DEBUG) << "Target status update for DataLoader " << mId << ": " << oldStatus << " -> "
<< newStatus << " (current " << curStatus << ")";
return fsmStep();
}
+void IncrementalService::DataLoaderStub::setTargetStatusLocked(int status) {
+ mTargetStatus = status;
+ mTargetStatusTs = Clock::now();
+}
+
bool IncrementalService::DataLoaderStub::waitForStatus(int status, Clock::duration duration) {
auto now = Clock::now();
std::unique_lock lock(mStatusMutex);
@@ -1782,6 +1786,9 @@
}
switch (targetStatus) {
+ case IDataLoaderStatusListener::DATA_LOADER_UNAVAILABLE:
+ // Do nothing, this is a reset state.
+ break;
case IDataLoaderStatusListener::DATA_LOADER_DESTROYED: {
return destroy();
}
@@ -1796,6 +1803,7 @@
case IDataLoaderStatusListener::DATA_LOADER_CREATED:
switch (currentStatus) {
case IDataLoaderStatusListener::DATA_LOADER_DESTROYED:
+ case IDataLoaderStatusListener::DATA_LOADER_UNAVAILABLE:
return bind();
case IDataLoaderStatusListener::DATA_LOADER_BOUND:
return create();
@@ -1825,9 +1833,15 @@
if (mCurrentStatus == newStatus) {
return binder::Status::ok();
}
+
oldStatus = mCurrentStatus;
mCurrentStatus = newStatus;
targetStatus = mTargetStatus;
+
+ if (mCurrentStatus == IDataLoaderStatusListener::DATA_LOADER_UNAVAILABLE) {
+ // For unavailable, reset target status.
+ setTargetStatusLocked(IDataLoaderStatusListener::DATA_LOADER_UNAVAILABLE);
+ }
}
LOG(DEBUG) << "Current status update for DataLoader " << mId << ": " << oldStatus << " -> "