grpc/grpc-java · error · IOException
Server instance already registered
Error message
Server instance already registered
What it means
An AnonymousInProcessSocketAddress can hold exactly one InProcessServer instance. setServer throws IOException if a server is already registered on the address, preventing two servers from silently sharing one anonymous address.
Solutions
- Create a fresh AnonymousInProcessSocketAddress for each server.
- Call clearServer(previousServer) on the address before registering a new server.
- Ensure each InProcessServerBuilder.forAddress(addr) is used for exactly one start()
Example fix
// before addr.setServer(server1); addr.setServer(server2); // IOException // after addr.setServer(server1); addr.clearServer(server1); addr.setServer(server2);
Defensive patterns
Strategy: validation
Validate before calling
if (addr.getServer() != null) throw new IllegalStateException("address already has a server; create a new AnonymousInProcessSocketAddress"); Try / catch
try { server.start(); } catch (IOException e) { if (e.getMessage().contains("Server instance already registered")) { addr = new AnonymousInProcessSocketAddress(); builder = InProcessServerBuilder.forAddress(addr); ... } } Prevention
- One server per anonymous address
- Call clearServer before re-registering
- Create fresh addresses per test/start
When it happens
Trigger: Calling setServer twice with different (or even repeated) server instances without clearing the first; starting a second InProcessServer on the same anonymous address.
Common situations: Reusing an anonymous address object for multiple server starts in tests; server restart logic that re-registers without clearServer; test helpers like setServerTwice.
Related errors
- AnonymousInProcessSocketAddress is not serializable
- call forName() instead
- call forName() instead
- name already registered:
- The transport factory is closed.
AI-assisted analysis of grpc/grpc-java@64daddc1f3 (2026-09-08).
Data as JSON: /api/errors/0da4c7e565ae85cb.
Report an issue: GitHub.
Appendix: source
Thrown at inprocess/src/main/java/io/grpc/inprocess/AnonymousInProcessSocketAddress.java:56
@GuardedBy("this")
@SuppressWarnings("serial")
private InProcessServer server;
private void writeObject(ObjectOutputStream out) throws IOException {
throw new NotSerializableException("AnonymousInProcessSocketAddress is not serializable");
}
/** Creates a new AnonymousInProcessSocketAddress. */
public AnonymousInProcessSocketAddress() { }
@Nullable
synchronized InProcessServer getServer() {
return server;
}
synchronized void setServer(InProcessServer server) throws IOException {
if (this.server != null) {
throw new IOException("Server instance already registered");
}
this.server = server;
}
synchronized void clearServer(InProcessServer server) {
checkState(this.server == server);
this.server = null;
}
}
View on GitHub (pinned to 64daddc1f3)