{"record":{"id":"d313d27ebca18040","repo":"grpc/grpc-java","slug":"name-already-registered","errorCode":null,"errorMessage":"name already registered: ","messagePattern":"name already registered: ","errorType":"exception","errorClass":"IOException","httpStatus":null,"severity":"error","filePath":"inprocess/src/main/java/io/grpc/inprocess/InProcessServer.java","lineNumber":89,"sourceCode":"    this.streamTracerFactories =\n        Collections.unmodifiableList(checkNotNull(streamTracerFactories, \"streamTracerFactories\"));\n  }\n\n  @Override\n  public void start(ServerListener serverListener) throws IOException {\n    this.listener = serverListener;\n    this.scheduler = schedulerPool.getObject();\n    // Must be last, as channels can start connecting after this point.\n    registerInstance();\n  }\n\n  private void registerInstance() throws IOException {\n    if (listenAddress instanceof AnonymousInProcessSocketAddress) {\n      ((AnonymousInProcessSocketAddress) listenAddress).setServer(this);\n    } else if (listenAddress instanceof InProcessSocketAddress) {\n      String name = ((InProcessSocketAddress) listenAddress).getName();\n      if (registry.putIfAbsent(name, this) != null) {\n        throw new IOException(\"name already registered: \" + name);\n      }\n    } else {\n      throw new AssertionError();\n    }\n  }\n\n  @Override\n  public SocketAddress getListenSocketAddress() {\n    return listenAddress;\n  }\n\n  @Override\n  public List<? extends SocketAddress> getListenSocketAddresses() {\n    return Collections.singletonList(getListenSocketAddress());\n  }\n\n  @Override\n  public InternalInstrumented<SocketStats> getListenSocketStats() {","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/grpc/grpc-java/blob/64daddc1f3d1975670f769f3e97bde8b2ba32d25/inprocess/src/main/java/io/grpc/inprocess/InProcessServer.java#L71-L107","documentation":"InProcessServer.registerInstance places the server into the global in-process registry keyed by name; if the name is already taken by another running server it throws IOException 'name already registered: <name>'. Only one server can own a given in-process name at a time.","triggerScenarios":"Starting a second InProcessServer with InProcessServerBuilder.forName(\"same-name\") while a server with that name is still registered (not shut down).","commonSituations":"Test suites starting servers per test without shutting them down or deregistering; duplicate server startup in the same JVM after a failed teardown; two app modules registering the same service name.","solutions":["Shut down the existing server with that name before starting a new one.","Use InProcessServerBuilder.generateName() for a unique name per server instance.","Catch IOException from server.start() and fall back to another name, or use a directExecutor-free retry with a fresh name."],"exampleFix":"// before\n// two servers, same name\nServer s1 = InProcessServerBuilder.forName(\"svc\").addService(...).build().start();\nServer s2 = InProcessServerBuilder.forName(\"svc\").addService(...).build().start(); // IOException\n// after\nServer s1 = InProcessServerBuilder.forName(\"svc\").addService(...).build().start();\ns1.shutdownNow();\nServer s2 = InProcessServerBuilder.forName(\"svc\").addService(...).build().start();","handlingStrategy":"try-catch","validationCode":"if (InProcessServerRegistry as seen by a prior server still has the name) prefer generateName() or shut down the old server first;","typeGuard":null,"tryCatchPattern":"try { server.start(); } catch (IOException e) { if (e.getMessage().startsWith(\"name already registered\")) { priorServer.shutdownNow(); server.start(); } else { throw e; } }","preventionTips":["Always shut down servers in test teardown (@After)","Use InProcessServerBuilder.generateName() for unique names","Avoid hardcoding shared in-process names across modules"],"tags":["grpc","inprocess","name-conflict"],"backgroundTag":"address-already-in-use","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"}