Revert^2 "Put client logs into SharedLog and dump more logs"

b8a3a634a7

Change-Id: I7fe4ef575208d0cddc343112b9478f5898fd714a
This commit is contained in:
Paul Hu
2023-04-18 05:50:14 +00:00
parent 51ff70d98e
commit b2e67d3aca

View File

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