From d49d816cd12624e192f6910bad5ac0623c029419 Mon Sep 17 00:00:00 2001 From: Yan Yan Date: Wed, 26 Feb 2025 13:55:32 -0800 Subject: [PATCH] Prevent VCN service from being registered twice This patch is for migrating VCN registration from platform to Tethering module. Becuase the system image has switched to use mainline prebuilts, the mainline change cannot merged together with the platform change. The plan is to update the mainline prebuilt first and then merge the platform change. Thus there will be a short window where ConnectivityServiceInitializerB will be called twice to register VCN. This patch allows ConnectivityServiceInitializerB to prevent the duplicate registration. This patch allows Tethering module to know whether VCN is moved to mainline at runtime. If VCN is in mainline, Tethering module (instead of SystemServer) will register the VCN service. Bug: 385203616 Test: atest CtsVcnTestCases && FrameworksVcnTests Test: verified registration on Android B and Android V Flag: EXEMPT; no functional code change Change-Id: If551167f4bafc39a592d8b325be3ceecf16f0b6e --- Vcn/service-b/Android.bp | 5 ++++- .../ConnectivityServiceInitializerB.java | 20 ++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/Vcn/service-b/Android.bp b/Vcn/service-b/Android.bp index 97574e6e35..aad534c328 100644 --- a/Vcn/service-b/Android.bp +++ b/Vcn/service-b/Android.bp @@ -29,7 +29,10 @@ filegroup { "vcn-location-flag/platform/com/android/server/vcn/VcnLocation.java", ], }), - visibility: ["//frameworks/base/services/core"], + visibility: [ + "//frameworks/base/services/core", + "//packages/modules/Connectivity/service-t", + ], } // TODO: b/374174952 This library is only used in "service-connectivity-b-platform" diff --git a/Vcn/service-b/src/com/android/server/ConnectivityServiceInitializerB.java b/Vcn/service-b/src/com/android/server/ConnectivityServiceInitializerB.java index 81c7edf4ad..b3f7eb5590 100644 --- a/Vcn/service-b/src/com/android/server/ConnectivityServiceInitializerB.java +++ b/Vcn/service-b/src/com/android/server/ConnectivityServiceInitializerB.java @@ -38,9 +38,27 @@ public final class ConnectivityServiceInitializerB extends SystemService { private static final String TAG = ConnectivityServiceInitializerB.class.getSimpleName(); private final VcnManagementService mVcnManagementService; + // STOPSHIP: b/385203616 This static flag is for handling a temporary case when the mainline + // module prebuilt has updated to register the VCN but the platform change to remove + // registration is not merged. After mainline prebuilt is updated, we should merge the platform + // ASAP and remove this static check. This check is safe because both mainline and platform + // registration are triggered from the same method on the same thread. + private static boolean sIsRegistered = false; + public ConnectivityServiceInitializerB(Context context) { super(context); - mVcnManagementService = VcnManagementService.create(context); + + if (!sIsRegistered) { + mVcnManagementService = VcnManagementService.create(context); + sIsRegistered = true; + } else { + mVcnManagementService = null; + Log.e( + TAG, + "Ignore this registration since VCN is already registered. It will happen when" + + " the mainline module prebuilt has updated to register the VCN but the" + + " platform change to remove registration is not merged."); + } } @Override