Merge "Add local log" into sc-dev am: 61b618aa7d

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14702007

Change-Id: I5ec5924057809312d47a77598bf235617fabd613
This commit is contained in:
Benedict Wong
2021-05-25 23:01:43 +00:00
committed by Automerger Merge Worker
6 changed files with 100 additions and 25 deletions

View File

@@ -64,6 +64,7 @@ import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.util.ArrayMap; import android.util.ArrayMap;
import android.util.LocalLog;
import android.util.Log; import android.util.Log;
import android.util.Slog; import android.util.Slog;
@@ -149,6 +150,10 @@ import java.util.concurrent.TimeUnit;
public class VcnManagementService extends IVcnManagementService.Stub { public class VcnManagementService extends IVcnManagementService.Stub {
@NonNull private static final String TAG = VcnManagementService.class.getSimpleName(); @NonNull private static final String TAG = VcnManagementService.class.getSimpleName();
private static final long DUMP_TIMEOUT_MILLIS = TimeUnit.SECONDS.toMillis(5); private static final long DUMP_TIMEOUT_MILLIS = TimeUnit.SECONDS.toMillis(5);
private static final int LOCAL_LOG_LINE_COUNT = 128;
// Public for use in all other VCN classes
@NonNull public static final LocalLog LOCAL_LOG = new LocalLog(LOCAL_LOG_LINE_COUNT);
public static final boolean VDBG = false; // STOPSHIP: if true public static final boolean VDBG = false; // STOPSHIP: if true
@@ -242,13 +247,13 @@ public class VcnManagementService extends IVcnManagementService.Stub {
try { try {
configBundle = mConfigDiskRwHelper.readFromDisk(); configBundle = mConfigDiskRwHelper.readFromDisk();
} catch (IOException e1) { } catch (IOException e1) {
Slog.e(TAG, "Failed to read configs from disk; retrying", e1); logErr("Failed to read configs from disk; retrying", e1);
// Retry immediately. The IOException may have been transient. // Retry immediately. The IOException may have been transient.
try { try {
configBundle = mConfigDiskRwHelper.readFromDisk(); configBundle = mConfigDiskRwHelper.readFromDisk();
} catch (IOException e2) { } catch (IOException e2) {
Slog.wtf(TAG, "Failed to read configs from disk", e2); logWtf("Failed to read configs from disk", e2);
return; return;
} }
} }
@@ -440,7 +445,7 @@ public class VcnManagementService extends IVcnManagementService.Stub {
synchronized (mLock) { synchronized (mLock) {
final TelephonySubscriptionSnapshot oldSnapshot = mLastSnapshot; final TelephonySubscriptionSnapshot oldSnapshot = mLastSnapshot;
mLastSnapshot = snapshot; mLastSnapshot = snapshot;
Slog.d(TAG, "new snapshot: " + mLastSnapshot); logDbg("new snapshot: " + mLastSnapshot);
// Start any VCN instances as necessary // Start any VCN instances as necessary
for (Entry<ParcelUuid, VcnConfig> entry : mConfigs.entrySet()) { for (Entry<ParcelUuid, VcnConfig> entry : mConfigs.entrySet()) {
@@ -543,7 +548,7 @@ public class VcnManagementService extends IVcnManagementService.Stub {
@GuardedBy("mLock") @GuardedBy("mLock")
private void startVcnLocked(@NonNull ParcelUuid subscriptionGroup, @NonNull VcnConfig config) { private void startVcnLocked(@NonNull ParcelUuid subscriptionGroup, @NonNull VcnConfig config) {
Slog.d(TAG, "Starting VCN config for subGrp: " + subscriptionGroup); logDbg("Starting VCN config for subGrp: " + subscriptionGroup);
// TODO(b/176939047): Support multiple VCNs active at the same time, or limit to one active // TODO(b/176939047): Support multiple VCNs active at the same time, or limit to one active
// VCN. // VCN.
@@ -568,7 +573,7 @@ public class VcnManagementService extends IVcnManagementService.Stub {
@GuardedBy("mLock") @GuardedBy("mLock")
private void startOrUpdateVcnLocked( private void startOrUpdateVcnLocked(
@NonNull ParcelUuid subscriptionGroup, @NonNull VcnConfig config) { @NonNull ParcelUuid subscriptionGroup, @NonNull VcnConfig config) {
Slog.d(TAG, "Starting or updating VCN config for subGrp: " + subscriptionGroup); logDbg("Starting or updating VCN config for subGrp: " + subscriptionGroup);
if (mVcns.containsKey(subscriptionGroup)) { if (mVcns.containsKey(subscriptionGroup)) {
final Vcn vcn = mVcns.get(subscriptionGroup); final Vcn vcn = mVcns.get(subscriptionGroup);
@@ -594,7 +599,7 @@ public class VcnManagementService extends IVcnManagementService.Stub {
if (!config.getProvisioningPackageName().equals(opPkgName)) { if (!config.getProvisioningPackageName().equals(opPkgName)) {
throw new IllegalArgumentException("Mismatched caller and VcnConfig creator"); throw new IllegalArgumentException("Mismatched caller and VcnConfig creator");
} }
Slog.d(TAG, "VCN config updated for subGrp: " + subscriptionGroup); logDbg("VCN config updated for subGrp: " + subscriptionGroup);
mContext.getSystemService(AppOpsManager.class) mContext.getSystemService(AppOpsManager.class)
.checkPackage(mDeps.getBinderCallingUid(), config.getProvisioningPackageName()); .checkPackage(mDeps.getBinderCallingUid(), config.getProvisioningPackageName());
@@ -620,7 +625,7 @@ public class VcnManagementService extends IVcnManagementService.Stub {
public void clearVcnConfig(@NonNull ParcelUuid subscriptionGroup, @NonNull String opPkgName) { public void clearVcnConfig(@NonNull ParcelUuid subscriptionGroup, @NonNull String opPkgName) {
requireNonNull(subscriptionGroup, "subscriptionGroup was null"); requireNonNull(subscriptionGroup, "subscriptionGroup was null");
requireNonNull(opPkgName, "opPkgName was null"); requireNonNull(opPkgName, "opPkgName was null");
Slog.d(TAG, "VCN config cleared for subGrp: " + subscriptionGroup); logDbg("VCN config cleared for subGrp: " + subscriptionGroup);
mContext.getSystemService(AppOpsManager.class) mContext.getSystemService(AppOpsManager.class)
.checkPackage(mDeps.getBinderCallingUid(), opPkgName); .checkPackage(mDeps.getBinderCallingUid(), opPkgName);
@@ -683,7 +688,7 @@ public class VcnManagementService extends IVcnManagementService.Stub {
VcnConfig::toPersistableBundle); VcnConfig::toPersistableBundle);
mConfigDiskRwHelper.writeToDisk(bundle); mConfigDiskRwHelper.writeToDisk(bundle);
} catch (IOException e) { } catch (IOException e) {
Slog.e(TAG, "Failed to save configs to disk", e); logErr("Failed to save configs to disk", e);
throw new ServiceSpecificException(0, "Failed to save configs"); throw new ServiceSpecificException(0, "Failed to save configs");
} }
} }
@@ -793,7 +798,7 @@ public class VcnManagementService extends IVcnManagementService.Stub {
for (int subId : networkCapabilities.getSubscriptionIds()) { for (int subId : networkCapabilities.getSubscriptionIds()) {
// Verify that all subscriptions point to the same group // Verify that all subscriptions point to the same group
if (subGrp != null && !subGrp.equals(snapshot.getGroupForSubId(subId))) { if (subGrp != null && !subGrp.equals(snapshot.getGroupForSubId(subId))) {
Slog.wtf(TAG, "Got multiple subscription groups for a single network"); logWtf("Got multiple subscription groups for a single network");
} }
subGrp = snapshot.getGroupForSubId(subId); subGrp = snapshot.getGroupForSubId(subId);
@@ -859,10 +864,8 @@ public class VcnManagementService extends IVcnManagementService.Stub {
final VcnUnderlyingNetworkPolicy policy = new VcnUnderlyingNetworkPolicy( final VcnUnderlyingNetworkPolicy policy = new VcnUnderlyingNetworkPolicy(
mTrackingNetworkCallback.requiresRestartForCarrierWifi(result), result); mTrackingNetworkCallback.requiresRestartForCarrierWifi(result), result);
if (VDBG) { logVdbg("getUnderlyingNetworkPolicy() called for caps: " + networkCapabilities
Slog.d(TAG, "getUnderlyingNetworkPolicy() called for caps: " + networkCapabilities
+ "; and lp: " + linkProperties + "; result = " + policy); + "; and lp: " + linkProperties + "; result = " + policy);
}
return policy; return policy;
}); });
} }
@@ -954,14 +957,14 @@ public class VcnManagementService extends IVcnManagementService.Stub {
|| vcnStatus == VCN_STATUS_CODE_SAFE_MODE) { || vcnStatus == VCN_STATUS_CODE_SAFE_MODE) {
resultStatus = vcnStatus; resultStatus = vcnStatus;
} else { } else {
Slog.wtf(TAG, "Unknown VCN status: " + vcnStatus); logWtf("Unknown VCN status: " + vcnStatus);
resultStatus = VCN_STATUS_CODE_NOT_CONFIGURED; resultStatus = VCN_STATUS_CODE_NOT_CONFIGURED;
} }
try { try {
cbInfo.mCallback.onVcnStatusChanged(resultStatus); cbInfo.mCallback.onVcnStatusChanged(resultStatus);
} catch (RemoteException e) { } catch (RemoteException e) {
Slog.d(TAG, "VcnStatusCallback threw on VCN status change", e); logDbg("VcnStatusCallback threw on VCN status change", e);
} }
} }
} finally { } finally {
@@ -989,6 +992,43 @@ public class VcnManagementService extends IVcnManagementService.Stub {
} }
} }
private void logVdbg(String msg) {
if (VDBG) {
Slog.v(TAG, msg);
LOCAL_LOG.log(TAG + " VDBG: " + msg);
}
}
private void logDbg(String msg) {
Slog.d(TAG, msg);
LOCAL_LOG.log(TAG + " DBG: " + msg);
}
private void logDbg(String msg, Throwable tr) {
Slog.d(TAG, msg, tr);
LOCAL_LOG.log(TAG + " DBG: " + msg + tr);
}
private void logErr(String msg) {
Slog.e(TAG, msg);
LOCAL_LOG.log(TAG + " ERR: " + msg);
}
private void logErr(String msg, Throwable tr) {
Slog.e(TAG, msg, tr);
LOCAL_LOG.log(TAG + " ERR: " + msg + tr);
}
private void logWtf(String msg) {
Slog.wtf(TAG, msg);
LOCAL_LOG.log(TAG + " WTF: " + msg);
}
private void logWtf(String msg, Throwable tr) {
Slog.wtf(TAG, msg, tr);
LOCAL_LOG.log(TAG + " WTF: " + msg + tr);
}
/** /**
* Dumps the state of the VcnManagementService for logging and debugging purposes. * Dumps the state of the VcnManagementService for logging and debugging purposes.
* *
@@ -1029,6 +1069,12 @@ public class VcnManagementService extends IVcnManagementService.Stub {
pw.decreaseIndent(); pw.decreaseIndent();
pw.println(); pw.println();
} }
pw.println("Local log:");
pw.increaseIndent();
LOCAL_LOG.dump(pw);
pw.decreaseIndent();
pw.println();
}, DUMP_TIMEOUT_MILLIS); }, DUMP_TIMEOUT_MILLIS);
} }

View File

@@ -39,7 +39,6 @@ import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.util.ArrayMap; import android.util.ArrayMap;
import android.util.ArraySet; import android.util.ArraySet;
import android.util.Slog;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting.Visibility; import com.android.internal.annotations.VisibleForTesting.Visibility;
@@ -222,12 +221,10 @@ public class TelephonySubscriptionTracker extends BroadcastReceiver {
if (SubscriptionManager.isValidSubscriptionId(subId)) { if (SubscriptionManager.isValidSubscriptionId(subId)) {
final PersistableBundle carrierConfigs = mCarrierConfigManager.getConfigForSubId(subId); final PersistableBundle carrierConfigs = mCarrierConfigManager.getConfigForSubId(subId);
if (mDeps.isConfigForIdentifiedCarrier(carrierConfigs)) { if (mDeps.isConfigForIdentifiedCarrier(carrierConfigs)) {
Slog.v(TAG, String.format("SubId %s ready for SlotId %s", subId, slotId));
mReadySubIdsBySlotId.put(slotId, subId); mReadySubIdsBySlotId.put(slotId, subId);
handleSubscriptionsChanged(); handleSubscriptionsChanged();
} }
} else { } else {
Slog.v(TAG, "Slot unloaded: " + slotId);
mReadySubIdsBySlotId.remove(slotId); mReadySubIdsBySlotId.remove(slotId);
handleSubscriptionsChanged(); handleSubscriptionsChanged();
} }

View File

@@ -20,6 +20,8 @@ import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI; import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
import static android.telephony.TelephonyCallback.ActiveDataSubscriptionIdListener; import static android.telephony.TelephonyCallback.ActiveDataSubscriptionIdListener;
import static com.android.server.VcnManagementService.LOCAL_LOG;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.annotation.Nullable; import android.annotation.Nullable;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
@@ -433,7 +435,7 @@ public class UnderlyingNetworkTracker {
private static boolean isOpportunistic( private static boolean isOpportunistic(
@NonNull TelephonySubscriptionSnapshot snapshot, Set<Integer> subIds) { @NonNull TelephonySubscriptionSnapshot snapshot, Set<Integer> subIds) {
if (snapshot == null) { if (snapshot == null) {
Slog.wtf(TAG, "Got null snapshot"); logWtf("Got null snapshot");
return false; return false;
} }
@@ -504,7 +506,7 @@ public class UnderlyingNetworkTracker {
final UnderlyingNetworkRecord.Builder builder = final UnderlyingNetworkRecord.Builder builder =
mUnderlyingNetworkRecordBuilders.get(network); mUnderlyingNetworkRecordBuilders.get(network);
if (builder == null) { if (builder == null) {
Slog.wtf(TAG, "Got capabilities change for unknown key: " + network); logWtf("Got capabilities change for unknown key: " + network);
return; return;
} }
@@ -520,7 +522,7 @@ public class UnderlyingNetworkTracker {
final UnderlyingNetworkRecord.Builder builder = final UnderlyingNetworkRecord.Builder builder =
mUnderlyingNetworkRecordBuilders.get(network); mUnderlyingNetworkRecordBuilders.get(network);
if (builder == null) { if (builder == null) {
Slog.wtf(TAG, "Got link properties change for unknown key: " + network); logWtf("Got link properties change for unknown key: " + network);
return; return;
} }
@@ -535,7 +537,7 @@ public class UnderlyingNetworkTracker {
final UnderlyingNetworkRecord.Builder builder = final UnderlyingNetworkRecord.Builder builder =
mUnderlyingNetworkRecordBuilders.get(network); mUnderlyingNetworkRecordBuilders.get(network);
if (builder == null) { if (builder == null) {
Slog.wtf(TAG, "Got blocked status change for unknown key: " + network); logWtf("Got blocked status change for unknown key: " + network);
return; return;
} }
@@ -623,7 +625,7 @@ public class UnderlyingNetworkTracker {
// mRouteSelectionNetworkRequest requires a network be both VALIDATED and NOT_SUSPENDED // mRouteSelectionNetworkRequest requires a network be both VALIDATED and NOT_SUSPENDED
if (isBlocked) { if (isBlocked) {
Slog.wtf(TAG, "Network blocked for System Server: " + network); logWtf("Network blocked for System Server: " + network);
return PRIORITY_ANY; return PRIORITY_ANY;
} }
@@ -770,6 +772,16 @@ public class UnderlyingNetworkTracker {
} }
} }
private static void logWtf(String msg) {
Slog.wtf(TAG, msg);
LOCAL_LOG.log(TAG + " WTF: " + msg);
}
private static void logWtf(String msg, Throwable tr) {
Slog.wtf(TAG, msg, tr);
LOCAL_LOG.log(TAG + " WTF: " + msg + tr);
}
/** Dumps the state of this record for logging and debugging purposes. */ /** Dumps the state of this record for logging and debugging purposes. */
public void dump(IndentingPrintWriter pw) { public void dump(IndentingPrintWriter pw) {
pw.println("UnderlyingNetworkTracker:"); pw.println("UnderlyingNetworkTracker:");

View File

@@ -24,6 +24,7 @@ import static android.net.vcn.VcnManager.VCN_STATUS_CODE_ACTIVE;
import static android.net.vcn.VcnManager.VCN_STATUS_CODE_INACTIVE; import static android.net.vcn.VcnManager.VCN_STATUS_CODE_INACTIVE;
import static android.net.vcn.VcnManager.VCN_STATUS_CODE_SAFE_MODE; import static android.net.vcn.VcnManager.VCN_STATUS_CODE_SAFE_MODE;
import static com.android.server.VcnManagementService.LOCAL_LOG;
import static com.android.server.VcnManagementService.VDBG; import static com.android.server.VcnManagementService.VDBG;
import android.annotation.NonNull; import android.annotation.NonNull;
@@ -513,37 +514,44 @@ public class Vcn extends Handler {
} }
private String getLogPrefix() { private String getLogPrefix() {
return "[" + LogUtils.getHashedSubscriptionGroup(mSubscriptionGroup) + "]: "; return "[" + LogUtils.getHashedSubscriptionGroup(mSubscriptionGroup) + "] ";
} }
private void logVdbg(String msg) { private void logVdbg(String msg) {
if (VDBG) { if (VDBG) {
Slog.v(TAG, getLogPrefix() + msg); Slog.v(TAG, getLogPrefix() + msg);
LOCAL_LOG.log(getLogPrefix() + "VDBG: " + msg);
} }
} }
private void logDbg(String msg) { private void logDbg(String msg) {
Slog.d(TAG, getLogPrefix() + msg); Slog.d(TAG, getLogPrefix() + msg);
LOCAL_LOG.log(getLogPrefix() + "DBG: " + msg);
} }
private void logDbg(String msg, Throwable tr) { private void logDbg(String msg, Throwable tr) {
Slog.d(TAG, getLogPrefix() + msg, tr); Slog.d(TAG, getLogPrefix() + msg, tr);
LOCAL_LOG.log(getLogPrefix() + "DBG: " + msg + tr);
} }
private void logErr(String msg) { private void logErr(String msg) {
Slog.e(TAG, getLogPrefix() + msg); Slog.e(TAG, getLogPrefix() + msg);
LOCAL_LOG.log(getLogPrefix() + "ERR: " + msg);
} }
private void logErr(String msg, Throwable tr) { private void logErr(String msg, Throwable tr) {
Slog.e(TAG, getLogPrefix() + msg, tr); Slog.e(TAG, getLogPrefix() + msg, tr);
LOCAL_LOG.log(getLogPrefix() + "ERR: " + msg + tr);
} }
private void logWtf(String msg) { private void logWtf(String msg) {
Slog.wtf(TAG, getLogPrefix() + msg); Slog.wtf(TAG, getLogPrefix() + msg);
LOCAL_LOG.log(getLogPrefix() + "WTF: " + msg);
} }
private void logWtf(String msg, Throwable tr) { private void logWtf(String msg, Throwable tr) {
Slog.wtf(TAG, getLogPrefix() + msg, tr); Slog.wtf(TAG, getLogPrefix() + msg, tr);
LOCAL_LOG.log(getLogPrefix() + "WTF: " + msg + tr);
} }
/** /**

View File

@@ -30,6 +30,7 @@ import static android.net.vcn.VcnManager.VCN_ERROR_CODE_CONFIG_ERROR;
import static android.net.vcn.VcnManager.VCN_ERROR_CODE_INTERNAL_ERROR; import static android.net.vcn.VcnManager.VCN_ERROR_CODE_INTERNAL_ERROR;
import static android.net.vcn.VcnManager.VCN_ERROR_CODE_NETWORK_ERROR; import static android.net.vcn.VcnManager.VCN_ERROR_CODE_NETWORK_ERROR;
import static com.android.server.VcnManagementService.LOCAL_LOG;
import static com.android.server.VcnManagementService.VDBG; import static com.android.server.VcnManagementService.VDBG;
import android.annotation.NonNull; import android.annotation.NonNull;
@@ -1645,7 +1646,7 @@ public class VcnGatewayConnection extends StateMachine {
@NonNull IpSecTransform transform, @NonNull IpSecTransform transform,
int direction) { int direction) {
if (direction != IpSecManager.DIRECTION_IN && direction != IpSecManager.DIRECTION_OUT) { if (direction != IpSecManager.DIRECTION_IN && direction != IpSecManager.DIRECTION_OUT) {
Slog.wtf(TAG, "Applying transform for unexpected direction: " + direction); logWtf("Applying transform for unexpected direction: " + direction);
} }
try { try {
@@ -2134,37 +2135,44 @@ public class VcnGatewayConnection extends StateMachine {
+ LogUtils.getHashedSubscriptionGroup(mSubscriptionGroup) + LogUtils.getHashedSubscriptionGroup(mSubscriptionGroup)
+ "-" + "-"
+ mConnectionConfig.getGatewayConnectionName() + mConnectionConfig.getGatewayConnectionName()
+ "]: "; + "] ";
} }
private void logVdbg(String msg) { private void logVdbg(String msg) {
if (VDBG) { if (VDBG) {
Slog.v(TAG, getLogPrefix() + msg); Slog.v(TAG, getLogPrefix() + msg);
LOCAL_LOG.log(getLogPrefix() + "VDBG: " + msg);
} }
} }
private void logDbg(String msg) { private void logDbg(String msg) {
Slog.d(TAG, getLogPrefix() + msg); Slog.d(TAG, getLogPrefix() + msg);
LOCAL_LOG.log(getLogPrefix() + "DBG: " + msg);
} }
private void logDbg(String msg, Throwable tr) { private void logDbg(String msg, Throwable tr) {
Slog.d(TAG, getLogPrefix() + msg, tr); Slog.d(TAG, getLogPrefix() + msg, tr);
LOCAL_LOG.log(getLogPrefix() + "DBG: " + msg + tr);
} }
private void logErr(String msg) { private void logErr(String msg) {
Slog.e(TAG, getLogPrefix() + msg); Slog.e(TAG, getLogPrefix() + msg);
LOCAL_LOG.log(getLogPrefix() + "ERR: " + msg);
} }
private void logErr(String msg, Throwable tr) { private void logErr(String msg, Throwable tr) {
Slog.e(TAG, getLogPrefix() + msg, tr); Slog.e(TAG, getLogPrefix() + msg, tr);
LOCAL_LOG.log(getLogPrefix() + "ERR: " + msg + tr);
} }
private void logWtf(String msg) { private void logWtf(String msg) {
Slog.wtf(TAG, getLogPrefix() + msg); Slog.wtf(TAG, getLogPrefix() + msg);
LOCAL_LOG.log(getLogPrefix() + "WTF: " + msg);
} }
private void logWtf(String msg, Throwable tr) { private void logWtf(String msg, Throwable tr) {
Slog.wtf(TAG, getLogPrefix() + msg, tr); Slog.wtf(TAG, getLogPrefix() + msg, tr);
LOCAL_LOG.log(getLogPrefix() + "WTF: " + msg + tr);
} }
/** /**

View File

@@ -172,6 +172,10 @@ public class VcnNetworkProvider extends NetworkProvider {
} }
private void handleNetworkRequestWithdrawn(@NonNull NetworkRequest request) { private void handleNetworkRequestWithdrawn(@NonNull NetworkRequest request) {
if (VDBG) {
Slog.v(TAG, "Network request withdrawn: Request = " + request);
}
mRequests.remove(request); mRequests.remove(request);
} }