{"record":{"id":"06f2d1ba6682d15a","repo":"grpc/grpc-java","slug":"unsupported-operation-setperformancepreferences","errorCode":null,"errorMessage":"Unsupported operation setPerformancePreferences()","messagePattern":"Unsupported operation setPerformancePreferences\\(\\)","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"info","filePath":"android/src/main/java/io/grpc/android/UdsSocket.java","lineNumber":245,"sourceCode":"\n  @Override\n  public void sendUrgentData(int data) {\n    throw new UnsupportedOperationException(\"Unsupported operation sendUrgentData()\");\n  }\n\n  @Override\n  public void setKeepAlive(boolean on) {\n    throw new UnsupportedOperationException(\"Unsupported operation setKeepAlive()\");\n  }\n\n  @Override\n  public void setOOBInline(boolean on) {\n    throw new UnsupportedOperationException(\"Unsupported operation setOOBInline()\");\n  }\n\n  @Override\n  public void setPerformancePreferences(int connectionTime, int latency, int bandwidth) {\n    throw new UnsupportedOperationException(\"Unsupported operation setPerformancePreferences()\");\n  }\n\n  @Override\n  public void setReceiveBufferSize(int size) throws SocketException {\n    try {\n      localSocket.setReceiveBufferSize(size);\n    } catch (IOException e) {\n      throw toSocketException(e);\n    }\n  }\n\n  @Override\n  public void setReuseAddress(boolean on) {\n    throw new UnsupportedOperationException(\"Unsupported operation setReuseAddress()\");\n  }\n\n  @Override\n  public void setSendBufferSize(int size) throws SocketException {","sourceCodeStart":227,"sourceCodeEnd":263,"githubUrl":"https://github.com/grpc/grpc-java/blob/64daddc1f3d1975670f769f3e97bde8b2ba32d25/android/src/main/java/io/grpc/android/UdsSocket.java#L227-L263","documentation":"setPerformancePreferences() hints at TCP connection parameters (connection time vs latency vs bandwidth); the JVM/Android never fully implemented it and it is meaningless for a Unix domain socket. UdsSocket throws UnsupportedOperationException unconditionally.","triggerScenarios":"Direct call to UdsSocket.setPerformancePreferences(int,int,int), or legacy socket-tuning code migrated alongside a UDS gRPC channel.","commonSituations":"Copying old TCP tuning snippets into UDS channel setup; performance-profiling frameworks that apply preference hints to every socket.","solutions":["Drop the call for UDS channels — performance preferences are a no-op hint even on TCP and are unsupported here","Tune performance at the gRPC level (message sizes, compression, executor threads) instead of socket hints","Remove setPerformancePreferences from shared socket setup utilities"],"exampleFix":"// before\nsocket.setPerformancePreferences(0, 2, 1);\n// after\n// no socket-level hint for UDS; tune at channel level instead","handlingStrategy":"validation","validationCode":"if (socket instanceof io.grpc.android.UdsSocket) return; // skip performance preferences","typeGuard":"static boolean acceptsPerfPreferences(java.net.Socket s) { return !(s instanceof io.grpc.android.UdsSocket); }","tryCatchPattern":null,"preventionTips":["Drop setPerformancePreferences entirely — it is a no-op hint even on TCP","Tune performance via gRPC channel options instead of socket hints"],"tags":["grpc","android","unix-domain-socket","performance"],"backgroundTag":"unsupported-operation","analyzedSha":"64daddc1f3d1975670f769f3e97bde8b2ba32d25","analyzedAt":"2026-09-08T06:14:57.704Z","contentChangedAt":"2026-09-08T06:14:57.704Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}