redis/node-redis · error · Error
[Proxy] No node with no connections
Error message
[Proxy] No node with no connections
What it means
triggerMigrate requires a node with zero active connections when destination_type === 'new' (a hidden node to migrate slots onto). If every node has at least one connection, nodeWithoutConnections is undefined and this error throws. The source comment notes this also requires the cluster client NOT to use minimizeConnections, otherwise all nodes tend to have connections.
Source
Thrown at packages/test-utils/lib/fault-injector/proxied-fault-injector-cluster.ts:118
const migratingResult = await this.proxyController.sendToClient(
connections[sourceNode.id][0],
sMigratingNotification
);
if (!migratingResult.success) {
throw new Error(
`[Proxy] Failed to send SMIGRATING notification: ${migratingResult.error}`
);
}
// 2. Simulate maintenance delay
await setTimeout(2_000);
const isNewDestination = params.destination_type === "new";
if (isNewDestination && !nodeWithoutConnections) {
throw new Error(`[Proxy] No node with no connections`);
}
const destinationNode = isNewDestination
? nodeWithoutConnections!
: nodes.at(-1)!; // Get the last node as the destination
if (!destinationNode) {
throw new Error(`[Proxy] No destination node`);
}
const sMigratedNotification = buildSMigratedNotification([
{
targetNode: destinationNode,
slotRanges: slots,
},
]);
const migratedResult = await this.proxyController.sendToClient(View on GitHub (pinned to 90fd0652bc)
Solutions
- Ensure at least one cluster node has no active client connections before requesting a 'new' destination (the test must leave a hidden node available)
- Use destination_type: 'existing' instead, which targets the last visible node and does not need a connectionless node
- Confirm the cluster client is not using minimizeConnections=false connectivity that touches every node
Example fix
// before — no hidden node available
await proxiedFi.triggerAction({
type: 'migrate',
parameters: { slot_migration: 'all', destination_type: 'new' }
});
// Error: [Proxy] No node with no connections
// after — use an existing destination instead
await proxiedFi.triggerAction({
type: 'migrate',
parameters: { slot_migration: 'all', destination_type: 'existing' }
}); Defensive patterns
Strategy: validation
Validate before calling
async function findConnectionlessNode(proxyController: ProxyController): Promise<ProxyNode | undefined> {
const [nodes, connections] = await Promise.all([
proxyController.getNodes(),
proxyController.getConnections(),
]);
const parsed = nodes.ids.map(parseNodeId);
return parsed.find(n => {
const c = connections[n.id];
return !c || c.length === 0;
});
} Type guard
function canMigrateToNew(nodeWithoutConnections: ProxyNode | undefined): nodeWithoutConnections is ProxyNode {
return nodeWithoutConnections !== undefined;
} Try / catch
try {
await proxiedFi.triggerAction({ type: 'migrate', parameters: { destination_type: 'new', slot_migration: 'all' } });
} catch (e) {
if (e instanceof Error && /No node with no connections/.test(e.message)) {
}
throw e;
} Prevention
- Ensure the cluster client does not open connections to every node before a 'new' migration
- Validate that a connectionless node exists before requesting destination_type 'new'
- Fall back to destination_type 'existing' when no hidden node is available
When it happens
Trigger: Calling triggerMigrate with destination_type: 'new' when the cluster client has opened connections to every node (e.g., minimizeConnections is false so the client eagerly connects to all masters), leaving no candidate hidden node.
Common situations: Cluster client configured with full connectivity to all nodes; a prior migration left connections on the previously-hidden node; test setup connected the client before triggering the migration.
Related errors
- [Proxy] Failed to send SMIGRATING notification: ${migratingR
- [Proxy] No destination node
- [Proxy] Failed to send SMIGRATED notification: ${migratedRes
- No slots to migrate
- No endpoints found in database config
AI-assisted analysis of redis/node-redis@90fd0652bc (2026-08-11).
Data as JSON: /api/errors/43735878ae18e007.
Report an issue: GitHub.