diff options
author | Vikram Gaur <vikramgaur@google.com> | 2023-09-08 01:18:21 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-09-08 01:18:21 +0000 |
commit | ea80ca65391efa7b6c9fc6b9ffc71247f249574e (patch) | |
tree | 601416b5625ae11f17c83809ef9d317276e31528 | |
parent | b7dacbb751d49ea0d77933a09d469a60bc23a520 (diff) | |
parent | 781f6d5d3b0f1b4070bb32eb1beefbdabd4b6fa5 (diff) | |
download | RemoteKeyProvisioning-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>
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 |