summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVikram Gaur <vikramgaur@google.com>2023-09-08 01:18:21 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-09-08 01:18:21 +0000
commitea80ca65391efa7b6c9fc6b9ffc71247f249574e (patch)
tree601416b5625ae11f17c83809ef9d317276e31528
parentb7dacbb751d49ea0d77933a09d469a60bc23a520 (diff)
parent781f6d5d3b0f1b4070bb32eb1beefbdabd4b6fa5 (diff)
downloadRemoteKeyProvisioning-ea80ca65391efa7b6c9fc6b9ffc71247f249574e.tar.gz
Use small timeouts for synchronous calls. am: 781f6d5d3b
Original change: https://android-review.googlesource.com/c/platform/packages/modules/RemoteKeyProvisioning/+/2746123 Change-Id: I86bff4bbc37f8a7cfd21c1ec368f38cab5a2893f Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--app/src/com/android/rkpdapp/interfaces/ServerInterface.java15
-rw-r--r--app/src/com/android/rkpdapp/provisioner/PeriodicProvisioner.java5
-rw-r--r--app/src/com/android/rkpdapp/provisioner/Provisioner.java7
-rw-r--r--app/src/com/android/rkpdapp/service/RemoteProvisioningService.java5
-rw-r--r--app/tests/stress/src/com/android/rkpdapp/stress/RegistrationBinderStressTest.java4
-rw-r--r--app/tests/unit/src/com/android/rkpdapp/unittest/ProvisionerTest.java2
-rw-r--r--app/tests/unit/src/com/android/rkpdapp/unittest/ServerInterfaceTest.java2
7 files changed, 27 insertions, 13 deletions
diff --git a/app/src/com/android/rkpdapp/interfaces/ServerInterface.java b/app/src/com/android/rkpdapp/interfaces/ServerInterface.java
index 173a2a8..ae2b3f8 100644
--- a/app/src/com/android/rkpdapp/interfaces/ServerInterface.java
+++ b/app/src/com/android/rkpdapp/interfaces/ServerInterface.java
@@ -55,7 +55,8 @@ import java.util.UUID;
*/
public class ServerInterface {
- private static final int TIMEOUT_MS = 20000;
+ private static final int ASYNC_TIMEOUT_MS = 20000;
+ private static final int SYNC_TIMEOUT_MS = 2000;
private static final int BACKOFF_TIME_MS = 100;
private static final int SHORT_RETRY_COUNT = 2;
@@ -65,6 +66,7 @@ public class ServerInterface {
private static final String CHALLENGE_PARAMETER = "challenge";
private static final String REQUEST_ID_PARAMETER = "request_id";
private final Context mContext;
+ private final boolean mIsAsync;
private enum Operation {
FETCH_GEEK(1),
@@ -108,8 +110,13 @@ public class ServerInterface {
}
}
- public ServerInterface(Context context) {
+ public ServerInterface(Context context, boolean isAsync) {
this.mContext = context;
+ this.mIsAsync = isAsync;
+ }
+
+ private int getTimeoutMs() {
+ return mIsAsync ? ASYNC_TIMEOUT_MS : SYNC_TIMEOUT_MS;
}
/**
@@ -381,8 +388,8 @@ public class ServerInterface {
try (StopWatch serverWaitTimer = metrics.startServerWait()) {
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
- con.setConnectTimeout(TIMEOUT_MS);
- con.setReadTimeout(TIMEOUT_MS);
+ con.setConnectTimeout(getTimeoutMs());
+ con.setReadTimeout(getTimeoutMs());
con.setDoOutput(true);
try (OutputStream os = con.getOutputStream()) {
diff --git a/app/src/com/android/rkpdapp/provisioner/PeriodicProvisioner.java b/app/src/com/android/rkpdapp/provisioner/PeriodicProvisioner.java
index 8c7179f..f3da031 100644
--- a/app/src/com/android/rkpdapp/provisioner/PeriodicProvisioner.java
+++ b/app/src/com/android/rkpdapp/provisioner/PeriodicProvisioner.java
@@ -49,6 +49,7 @@ import co.nstant.in.cbor.CborException;
public class PeriodicProvisioner extends Worker {
public static final String UNIQUE_WORK_NAME = "ProvisioningJob";
private static final String TAG = "RkpdPeriodicProvisioner";
+ private static final boolean IS_ASYNC = true;
private final Context mContext;
private final ProvisionedKeyDao mKeyDao;
@@ -87,7 +88,7 @@ public class PeriodicProvisioner extends Worker {
// Fetch geek from the server and figure out whether provisioning needs to be stopped.
GeekResponse response;
try {
- response = new ServerInterface(mContext).fetchGeekAndUpdate(metrics);
+ response = new ServerInterface(mContext, IS_ASYNC).fetchGeekAndUpdate(metrics);
} catch (InterruptedException | RkpdException e) {
Log.e(TAG, "Error fetching configuration from the RKP server", e);
return Result.failure();
@@ -104,7 +105,7 @@ public class PeriodicProvisioner extends Worker {
}
Log.i(TAG, "Total services found implementing IRPC: " + irpcs.length);
- Provisioner provisioner = new Provisioner(mContext, mKeyDao);
+ Provisioner provisioner = new Provisioner(mContext, mKeyDao, IS_ASYNC);
final AtomicBoolean result = new AtomicBoolean(true);
Arrays.stream(irpcs).parallel().forEach(irpc -> {
Log.i(TAG, "Starting provisioning for " + irpc);
diff --git a/app/src/com/android/rkpdapp/provisioner/Provisioner.java b/app/src/com/android/rkpdapp/provisioner/Provisioner.java
index b8f6057..19db3a7 100644
--- a/app/src/com/android/rkpdapp/provisioner/Provisioner.java
+++ b/app/src/com/android/rkpdapp/provisioner/Provisioner.java
@@ -53,10 +53,13 @@ public class Provisioner {
private final Context mContext;
private final ProvisionedKeyDao mKeyDao;
+ private final boolean mIsAsync;
- public Provisioner(final Context applicationContext, ProvisionedKeyDao keyDao) {
+ public Provisioner(final Context applicationContext, ProvisionedKeyDao keyDao,
+ boolean isAsync) {
mContext = applicationContext;
mKeyDao = keyDao;
+ mIsAsync = isAsync;
}
/**
@@ -154,7 +157,7 @@ public class Provisioner {
throw new RkpdException(RkpdException.ErrorCode.INTERNAL_ERROR,
"Failed to serialize payload");
}
- return new ServerInterface(mContext).requestSignedCertificates(certRequest,
+ return new ServerInterface(mContext, mIsAsync).requestSignedCertificates(certRequest,
response.getChallenge(), metrics);
}
diff --git a/app/src/com/android/rkpdapp/service/RemoteProvisioningService.java b/app/src/com/android/rkpdapp/service/RemoteProvisioningService.java
index c95bf7f..c92cbd7 100644
--- a/app/src/com/android/rkpdapp/service/RemoteProvisioningService.java
+++ b/app/src/com/android/rkpdapp/service/RemoteProvisioningService.java
@@ -39,6 +39,7 @@ import com.android.rkpdapp.utils.Settings;
/** Provides the implementation for IRemoteProvisioning.aidl */
public class RemoteProvisioningService extends Service {
public static final String TAG = "com.android.rkpdapp";
+ private static final boolean IS_ASYNC = false;
private final IRemoteProvisioning.Stub mBinder = new RemoteProvisioningBinder();
@Override
@@ -75,9 +76,9 @@ public class RemoteProvisioningService extends Service {
}
ProvisionedKeyDao dao = RkpdDatabase.getDatabase(context).provisionedKeyDao();
- Provisioner provisioner = new Provisioner(context, dao);
+ Provisioner provisioner = new Provisioner(context, dao, IS_ASYNC);
IRegistration.Stub registration = new RegistrationBinder(context, callerUid,
- systemInterface, dao, new ServerInterface(context), provisioner,
+ systemInterface, dao, new ServerInterface(context, IS_ASYNC), provisioner,
ThreadPool.EXECUTOR);
metric.setResult(RkpdClientOperation.Result.SUCCESS);
callback.onSuccess(registration);
diff --git a/app/tests/stress/src/com/android/rkpdapp/stress/RegistrationBinderStressTest.java b/app/tests/stress/src/com/android/rkpdapp/stress/RegistrationBinderStressTest.java
index ce64d91..4ab5438 100644
--- a/app/tests/stress/src/com/android/rkpdapp/stress/RegistrationBinderStressTest.java
+++ b/app/tests/stress/src/com/android/rkpdapp/stress/RegistrationBinderStressTest.java
@@ -82,8 +82,10 @@ public class RegistrationBinderStressTest {
}
private RegistrationBinder createRegistrationBinder() {
+ boolean isAsync = false;
return new RegistrationBinder(mContext, Process.myUid(), mIrpcHal, mKeyDao,
- new ServerInterface(mContext), new Provisioner(mContext, mKeyDao), mExecutor);
+ new ServerInterface(mContext, isAsync), new Provisioner(mContext, mKeyDao, isAsync),
+ mExecutor);
}
private void getKeyHelper(int keyId) {
diff --git a/app/tests/unit/src/com/android/rkpdapp/unittest/ProvisionerTest.java b/app/tests/unit/src/com/android/rkpdapp/unittest/ProvisionerTest.java
index 24a48f1..384b172 100644
--- a/app/tests/unit/src/com/android/rkpdapp/unittest/ProvisionerTest.java
+++ b/app/tests/unit/src/com/android/rkpdapp/unittest/ProvisionerTest.java
@@ -73,7 +73,7 @@ public class ProvisionerTest {
ProvisionedKeyDao keyDao = RkpdDatabase.getDatabase(sContext).provisionedKeyDao();
keyDao.deleteAllKeys();
- mProvisioner = new Provisioner(sContext, keyDao);
+ mProvisioner = new Provisioner(sContext, keyDao, false);
}
@After
diff --git a/app/tests/unit/src/com/android/rkpdapp/unittest/ServerInterfaceTest.java b/app/tests/unit/src/com/android/rkpdapp/unittest/ServerInterfaceTest.java
index 725b1a6..896a4b3 100644
--- a/app/tests/unit/src/com/android/rkpdapp/unittest/ServerInterfaceTest.java
+++ b/app/tests/unit/src/com/android/rkpdapp/unittest/ServerInterfaceTest.java
@@ -61,7 +61,7 @@ public class ServerInterfaceTest {
@Before
public void setUp() {
Settings.clearPreferences(sContext);
- mServerInterface = new ServerInterface(sContext);
+ mServerInterface = new ServerInterface(sContext, false);
}
@After