From b2e67d3aca49b44a02e39f77f5573f348e43c20b Mon Sep 17 00:00:00 2001 From: Paul Hu Date: Tue, 18 Apr 2023 05:50:14 +0000 Subject: [PATCH] Revert^2 "Put client logs into SharedLog and dump more logs" b8a3a634a76a15e7179efa62b5224d08d069fd30 Change-Id: I7fe4ef575208d0cddc343112b9478f5898fd714a --- .../src/com/android/server/NsdService.java | 81 +++++++++++++++---- 1 file changed, 67 insertions(+), 14 deletions(-) diff --git a/service-t/src/com/android/server/NsdService.java b/service-t/src/com/android/server/NsdService.java index c5104d8ef1..383ed2cf92 100644 --- a/service-t/src/com/android/server/NsdService.java +++ b/service-t/src/com/android/server/NsdService.java @@ -44,6 +44,7 @@ import android.net.nsd.INsdServiceConnector; import android.net.nsd.MDnsManager; import android.net.nsd.NsdManager; import android.net.nsd.NsdServiceInfo; +import android.os.Binder; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; @@ -56,10 +57,12 @@ import android.util.Log; import android.util.SparseArray; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.util.IndentingPrintWriter; import com.android.internal.util.State; import com.android.internal.util.StateMachine; import com.android.net.module.util.DeviceConfigUtils; import com.android.net.module.util.PermissionUtils; +import com.android.net.module.util.SharedLog; import com.android.server.connectivity.mdns.ExecutorProvider; import com.android.server.connectivity.mdns.MdnsAdvertiser; import com.android.server.connectivity.mdns.MdnsDiscoveryManager; @@ -159,6 +162,7 @@ public class NsdService extends INsdManager.Stub { private final MdnsSocketProvider mMdnsSocketProvider; @NonNull private final MdnsAdvertiser mAdvertiser; + private final SharedLog mServiceLogs = new SharedLog(TAG); // WARNING : Accessing these values in any thread is not safe, it must only be changed in the // state machine thread. If change this outside state machine, it will need to introduce // synchronization. @@ -179,6 +183,8 @@ public class NsdService extends INsdManager.Stub { private int mUniqueId = 1; // The count of the connected legacy clients. private int mLegacyClientCount = 0; + // The number of client that ever connected. + private int mClientNumberId = 1; private static class MdnsListener implements MdnsServiceBrowserListener { protected final int mClientId; @@ -332,6 +338,7 @@ public class NsdService extends INsdManager.Stub { mMDnsManager.startDaemon(); mIsDaemonStarted = true; maybeScheduleStop(); + mServiceLogs.log("Start mdns_responder daemon"); } private void maybeStopDaemon() { @@ -342,6 +349,7 @@ public class NsdService extends INsdManager.Stub { mMDnsManager.unregisterEventListener(mMDnsEventCallback); mMDnsManager.stopDaemon(); mIsDaemonStarted = false; + mServiceLogs.log("Stop mdns_responder daemon"); } private boolean isAnyRequestActive() { @@ -401,7 +409,9 @@ public class NsdService extends INsdManager.Stub { final INsdManagerCallback cb = arg.callback; try { cb.asBinder().linkToDeath(arg.connector, 0); - cInfo = new ClientInfo(cb, arg.useJavaBackend); + final String tag = "Client" + arg.uid + "-" + mClientNumberId++; + cInfo = new ClientInfo(cb, arg.useJavaBackend, + mServiceLogs.forSubComponent(tag)); mClients.put(arg.connector, cInfo); } catch (RemoteException e) { Log.w(TAG, "Client " + clientId + " has already died"); @@ -628,6 +638,8 @@ public class NsdService extends INsdManager.Stub { listenServiceType, listener, options); storeDiscoveryManagerRequestMap(clientId, id, listener, clientInfo); clientInfo.onDiscoverServicesStarted(clientId, info); + clientInfo.log("Register a DiscoveryListener " + id + + " for service type:" + listenServiceType); } else { maybeStartDaemon(); if (discoverServices(id, info)) { @@ -669,6 +681,7 @@ public class NsdService extends INsdManager.Stub { if (request instanceof DiscoveryManagerRequest) { stopDiscoveryManagerRequest(request, clientId, id, clientInfo); clientInfo.onStopDiscoverySucceeded(clientId); + clientInfo.log("Unregister the DiscoveryListener " + id); } else { removeRequestMap(clientId, id, clientInfo); if (stopServiceDiscovery(id)) { @@ -804,6 +817,8 @@ public class NsdService extends INsdManager.Stub { mMdnsDiscoveryManager.registerListener( resolveServiceType, listener, options); storeDiscoveryManagerRequestMap(clientId, id, listener, clientInfo); + clientInfo.log("Register a ResolutionListener " + id + + " for service type:" + resolveServiceType); } else { if (clientInfo.mResolvedService != null) { clientInfo.onResolveServiceFailed( @@ -846,6 +861,7 @@ public class NsdService extends INsdManager.Stub { if (request instanceof DiscoveryManagerRequest) { stopDiscoveryManagerRequest(request, clientId, id, clientInfo); clientInfo.onStopResolutionSucceeded(clientId); + clientInfo.log("Unregister the ResolutionListener " + id); } else { removeRequestMap(clientId, id, clientInfo); if (stopResolveService(id)) { @@ -891,6 +907,8 @@ public class NsdService extends INsdManager.Stub { mMdnsDiscoveryManager.registerListener( resolveServiceType, listener, options); storeDiscoveryManagerRequestMap(clientId, id, listener, clientInfo); + clientInfo.log("Register a ServiceInfoListener " + id + + " for service type:" + resolveServiceType); break; } case NsdManager.UNREGISTER_SERVICE_CALLBACK: { @@ -914,6 +932,7 @@ public class NsdService extends INsdManager.Stub { if (request instanceof DiscoveryManagerRequest) { stopDiscoveryManagerRequest(request, clientId, id, clientInfo); clientInfo.onServiceInfoCallbackUnregistered(clientId); + clientInfo.log("Unregister the ServiceInfoListener " + id); } else { loge("Unregister failed with non-DiscoveryManagerRequest."); } @@ -1545,12 +1564,14 @@ public class NsdService extends INsdManager.Stub { @NonNull public final NsdServiceConnector connector; @NonNull public final INsdManagerCallback callback; public final boolean useJavaBackend; + public final int uid; ConnectorArgs(@NonNull NsdServiceConnector connector, @NonNull INsdManagerCallback callback, - boolean useJavaBackend) { + boolean useJavaBackend, int uid) { this.connector = connector; this.callback = callback; this.useJavaBackend = useJavaBackend; + this.uid = uid; } } @@ -1559,9 +1580,9 @@ public class NsdService extends INsdManager.Stub { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INTERNET, "NsdService"); if (DBG) Log.d(TAG, "New client connect. useJavaBackend=" + useJavaBackend); final INsdServiceConnector connector = new NsdServiceConnector(); - mNsdStateMachine.sendMessage(mNsdStateMachine.obtainMessage( - NsdManager.REGISTER_CLIENT, - new ConnectorArgs((NsdServiceConnector) connector, cb, useJavaBackend))); + mNsdStateMachine.sendMessage(mNsdStateMachine.obtainMessage(NsdManager.REGISTER_CLIENT, + new ConnectorArgs((NsdServiceConnector) connector, cb, useJavaBackend, + Binder.getCallingUid()))); return connector; } @@ -1760,15 +1781,39 @@ public class NsdService extends INsdManager.Stub { } @Override - public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { - if (!PermissionUtils.checkDumpPermission(mContext, TAG, pw)) return; - - for (ClientInfo client : mClients.values()) { - pw.println("Client Info"); - pw.println(client); - } + public void dump(FileDescriptor fd, PrintWriter writer, String[] args) { + if (!PermissionUtils.checkDumpPermission(mContext, TAG, writer)) return; + final IndentingPrintWriter pw = new IndentingPrintWriter(writer, " "); + // Dump state machine logs mNsdStateMachine.dump(fd, pw, args); + + // Dump service and clients logs + pw.println(); + pw.increaseIndent(); + mServiceLogs.reverseDump(pw); + pw.decreaseIndent(); + + // Dump advertiser related logs + pw.println(); + pw.println("Advertiser:"); + pw.increaseIndent(); + mAdvertiser.dump(pw); + pw.decreaseIndent(); + + // Dump discoverymanager related logs + pw.println(); + pw.println("DiscoveryManager:"); + pw.increaseIndent(); + mMdnsDiscoveryManager.dump(pw); + pw.decreaseIndent(); + + // Dump socketprovider related logs + pw.println(); + pw.println("SocketProvider:"); + pw.increaseIndent(); + mMdnsSocketProvider.dump(pw); + pw.decreaseIndent(); } private abstract static class ClientRequest { @@ -1819,11 +1864,14 @@ public class NsdService extends INsdManager.Stub { private boolean mIsPreSClient = false; // The flag of using java backend if the client's target SDK >= U private final boolean mUseJavaBackend; + // Store client logs + private final SharedLog mClientLogs; - private ClientInfo(INsdManagerCallback cb, boolean useJavaBackend) { + private ClientInfo(INsdManagerCallback cb, boolean useJavaBackend, SharedLog sharedLog) { mCb = cb; mUseJavaBackend = useJavaBackend; - if (DBG) Log.d(TAG, "New client"); + mClientLogs = sharedLog; + mClientLogs.log("New client. useJavaBackend=" + useJavaBackend); } @Override @@ -1861,6 +1909,7 @@ public class NsdService extends INsdManager.Stub { // Remove any pending requests from the global map when we get rid of a client, // and send cancellations to the daemon. private void expungeAllRequests() { + mClientLogs.log("Client unregistered. expungeAllRequests!"); // TODO: to keep handler responsive, do not clean all requests for that client at once. for (int i = 0; i < mClientRequests.size(); i++) { final int clientId = mClientRequests.keyAt(i); @@ -1915,6 +1964,10 @@ public class NsdService extends INsdManager.Stub { return -1; } + private void log(String message) { + mClientLogs.log(message); + } + void onDiscoverServicesStarted(int listenerKey, NsdServiceInfo info) { try { mCb.onDiscoverServicesStarted(listenerKey, info);