qishibo/AnotherRedisDesktopManager · error
e.message
Error message
e.message
What it means
The chunked DEL itself rejected in the non-cluster branch. DEL rarely fails for data reasons; a rejection means the command could not complete: connection lost, NOAUTH/NOPERM, READONLY replica, or a timeout on very large batches. The app routes the raw message to deleteFailed, which also resets the loading flags.
Source
Thrown at src/components/DeleteBatch.vue:162
// del 5000 keys one time
if (chunked.length >= 5000) {
delPromise = this.client.del(chunked);
chunked = [];
}
}
if (chunked.length) {
delPromise = this.client.del(chunked);
}
// use final promise
delPromise.then((reply) => {
if (reply > 0) {
this.afterDelete();
} else {
this.deleteFailed(this.$t('message.delete_failed'));
}
}).catch((e) => {
this.deleteFailed(e.message);
});
}
// cluster, one key per time instead of batch
else {
for (let i = 0; i < total; i++) {
delPromise = this.client.del(keys[i].key);
delPromise.catch((e) => {});
}
// use final promise
delPromise.then((reply) => {
if (reply == 1) {
this.afterDelete();
} else {
this.deleteFailed(this.$t('message.delete_failed'));
}
}).catch((e) => {View on GitHub (pinned to c149855106)
Solutions
- Reconnect and retry the delete; the scanned list is still available
- Verify the target is a writable primary and the user has +del
- Reduce the chunk size passed to DEL so single batches stay under timeouts
- On repeated failures, fall back to per-key deletes to isolate the bad key
Example fix
// before
delPromise.then((reply) => { /* ... */ }).catch((e) => {
this.deleteFailed(e.message);
});
// after
delPromise.then((reply) => { /* ... */ }).catch((e) => {
const m = String(e.message);
if (/NOPERM/i.test(m)) { this.deleteFailed(this.$t('message.no_permission_del')); }
else if (/READONLY/i.test(m)) { this.deleteFailed(this.$t('message.readonly_replica')); }
else { this.deleteFailed(e.message); }
}); Defensive patterns
Strategy: try-catch
Try / catch
.catch((e) => {
const m = String(e.message);
if (/NOPERM|no permissions/i.test(m)) { /* ACL: request +del */ }
else if (/READONLY/i.test(m)) { /* route to primary */ }
else if (/ECONNRESET|closed/i.test(m)) { /* reconnect and retry once */ }
else { this.deleteFailed(m); }
}) Prevention
- Grant the GUI user +del (and +scan) in ACL setups
- Delete against primaries only
- Chunk DEL batches to a few hundred keys
- Always route through deleteFailed so loading flags reset
When it happens
Trigger: Connection dropping between scan and delete; batch DEL on a replica with replica-read-only yes; ACL user without del permission; huge chunks hitting server or client timeouts.
Common situations: VPN blips during long cleanup, deleting against read replicas, least-privilege ACL users missing +del, chunk sizes in the thousands.
Related errors
- e.message
- e.message
- this.$t('message.delete_failed')
- msg
- You are in readonly mode! Unable to execute write command!
AI-assisted analysis of qishibo/AnotherRedisDesktopManager@c149855106 (2026-08-22).
Data as JSON: /api/errors/2fb2cfb9a4d83b66.
Report an issue: GitHub.