Skip to content

SCAN Command Infinite Loop - Cursor has Non-Zero Value for Empty Keys in the Response #2879

Open
@sivakumar-74

Description

@sivakumar-74

Description

I encountered an infinite loop while using the SCAN command with pattern matching in Redis via AWS ElastiCache.
The issue arises when querying Redis for keys using a pattern (users:*). The loop keeps executing even when no more keys match the given pattern.

Below code to reproduce the issue

async function getActiveUsers(redisClient) {
  const activeUserQueryPattern = `users:*`;
  let cursor = 0;
  let activeUsers = [];

  console.log("Querying Redis for Active Users pattern :: ", activeUserQueryPattern);
  do {
    const userQueryData = await redisClient.scan(cursor, {
      MATCH: activeUserQueryPattern,
      COUNT: 100,
    });
    console.log("User Query Data :: ", userQueryData); 
    activeUsers = activeUsers.concat(userQueryData.keys);
    cursor = userQueryData.cursor;
  } while (cursor !== 0);

  console.log('Active Users :: ', activeUsers);
  return activeUsers;
}

I have fixed with checking keys length for now, but actually the cursor will return with zero, if there is not keys.

async function getActiveUsers(redisClient) {
  const activeUserQueryPattern = `users:*`;
  let keyLen = 1;
  let activeUsers = [];

  console.log("Querying Redis for Active Users pattern :: ", activeUserQueryPattern);
  do {
    const userQueryData = await redisClient.scan(cursor, {
      MATCH: activeUserQueryPattern,
      COUNT: 100,
    });
    console.log("User Query Data :: ", userQueryData); 
    activeUsers = activeUsers.concat(userQueryData.keys);
    keyLen = userQueryData.keys.length;
  } while (keyLen !== 0);

  console.log('Active Users :: ', activeUsers);
  return activeUsers;
}

Node.js Version

node v18.18.0

Redis Server Version

ElasticCache (Redis Version 7.1)

Node Redis Version

4.7.0

Platform

Windows

Logs

2024-12-07T15:33:22.237+05:30
2024-12-07T10:03:22.237Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.247+05:30
2024-12-07T10:03:22.247Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.249+05:30
2024-12-07T10:03:22.249Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.252+05:30
2024-12-07T10:03:22.252Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.255+05:30
2024-12-07T10:03:22.255Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.267+05:30
2024-12-07T10:03:22.267Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.270+05:30
2024-12-07T10:03:22.270Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.272+05:30
2024-12-07T10:03:22.272Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.275+05:30
2024-12-07T10:03:22.275Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.290+05:30
2024-12-07T10:03:22.290Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.292+05:30
2024-12-07T10:03:22.292Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.294+05:30
2024-12-07T10:03:22.294Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.307+05:30
2024-12-07T10:03:22.307Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.310+05:30
2024-12-07T10:03:22.310Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }
2024-12-07T15:33:22.312+05:30
2024-12-07T10:03:22.312Z 1cb6467a-63e1-41ce-8378-b57b1c365069 INFO User Query Data :: { cursor: 9283678325492940000, keys: [] }

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions