theonedev/onedev · error · ExplicitException

Token already used by another agent

Error message

Token already used by another agent

What it means

When an agent connects, its token is used to identify a unique agent; if the token is already registered to a different agent record, the connection is refused to prevent two agents sharing one identity.

Source

Thrown at server-core/src/main/java/io/onedev/server/service/impl/DefaultAgentService.java:206

			agent.setName(data.getName());
			agent.setCpuCount(data.getCpus());
			agent.setIpAddress(data.getIpAddress());

			AgentLastUsedDate lastUsedDate = new AgentLastUsedDate();
			agent.setLastUsedDate(lastUsedDate);
			dao.persist(lastUsedDate);
			dao.persist(agent);
			
			for (Map.Entry<String, String> entry: data.getAttributes().entrySet()) {
				AgentAttribute attribute = new AgentAttribute();
				attribute.setAgent(agent);
				attribute.setName(entry.getKey());
				attribute.setValue(entry.getValue());
				attributeManager.create(attribute);
				agent.getAttributes().add(attribute);
			}
		} else if (agentSessions.containsKey(agent.getId())) {
			throw new ExplicitException("Token already used by another agent");
		} else {
			agent.setName(data.getName());
			agent.setOsName(data.getOsInfo().getOsName());
			agent.setOsVersion(data.getOsInfo().getOsVersion());
			agent.setOsArch(data.getOsInfo().getOsArch());
			agent.setIpAddress(data.getIpAddress());
			agent.setCpuCount(data.getCpus());
			dao.persist(agent);
			attributeManager.syncAttributes(agent, data.getAttributes());
		}

		agentServers.put(agent.getId(), clusterService.getLocalServerAddress());
		Session prevSession = agentSessions.put(agent.getId(), session);
		if (prevSession != null) {
			try {
				prevSession.disconnect();
			} catch (IOException ignored) {
			}

View on GitHub (pinned to d44925c47c)

Solutions

  1. Regenerate a distinct token for this agent and update the agent's config.
  2. Check for cloned agent containers/VMs reusing the same token.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at server-core/src/main/java/io/onedev/server/service/impl/DefaultAgentService.java:206 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of theonedev/onedev@d44925c47c (2026-09-06). Data as JSON: /api/errors/57d45aaa35fa0702. Report an issue: GitHub.