qishibo/AnotherRedisDesktopManager · error
e.message
Error message
e.message
What it means
Toast fed by the 'error' event of the ioredis SSCAN stream (sscanBufferStream) in KeyContentSet.vue:177. Identical failure class to the hash scanner: a cursor round-trip failed. ioredis scan streams emit 'error' on connection loss mid-iteration, READONLY/WONGTYPE replies (key no longer a set), or cluster redirection storms. The component stops pagination (loadMoreDisable = true) and clears the loading icon.
Source
Thrown at src/components/contents/KeyContentSet.vue:177
this.oneTimeListLength += setData.length;
this.setData = this.setData.concat(setData);
if (this.oneTimeListLength >= this.pageSize) {
this.scanStream.pause();
this.loadingIcon = '';
}
});
this.scanStream.on('end', () => {
this.loadingIcon = '';
this.loadMoreDisable = true;
});
this.scanStream.on('error', (e) => {
this.loadingIcon = '';
this.loadMoreDisable = true;
this.$message.error(e.message);
});
},
getScanMatch() {
return this.filterValue ? `*${this.filterValue}*` : '*';
},
openDialog() {
this.$nextTick(() => {
this.$refs.formatViewer.autoFormat();
});
},
showEditDialog(row) {
this.editLineItem = this.$util.cloneObjWithBuff(row);
this.beforeEditItem = row;
this.editDialog = true;
},
dumpCommand(item) {
const lines = item ? [item] : this.setData;
const params = lines.map(line => this.$util.bufToQuotation(line.value));View on GitHub (pinned to c149855106)
Solutions
- Reconnect and press load-more again — SCAN starts a fresh cursor, no server state is harmed
- Confirm the key type still reads 'set'; if not, reload the key
- Use the member filter to shrink the result space before paging big sets
- Stabilize the transport (tunnel keepalive, larger timeouts) for very large keys
Example fix
// before
this.scanStream.on('error', (e) => {
this.loadingIcon = '';
this.loadMoreDisable = true;
this.$message.error(e.message);
});
// after: only permanently disable pagination on data-shape errors
this.scanStream.on('error', (e) => {
this.loadingIcon = '';
this.loadMoreDisable = /WRONGTYPE|READONLY/.test(e.message);
this.scanStream = null; // rebuild stream on next loadMore
this.$message.error(e.message);
}); Defensive patterns
Strategy: try-catch
Validate before calling
if (this.client.status !== 'ready') {
this.$message.error(`connection not ready (${this.client.status})`);
return;
} Try / catch
this.scanStream.on('error', (e) => {
this.loadingIcon = '';
this.scanStream = null;
this.loadMoreDisable = /WRONGTYPE/.test(e.message);
this.$message.error(e.message);
}); Prevention
- Retry pagination after reconnecting; SSCAN restarts cleanly
- Confirm the key type badge still says 'set' when scans start failing
- Stabilize tunnels for multi-page scans of large sets
When it happens
Trigger: sscanBufferStream errors when: the socket dies between cursor pages; the key is replaced with a non-set type so SSCAN replies WRONGTYPE; a replica rejects the read during failover; the SSH tunnel or sentinel connection resets during a long scan of a large set.
Common situations: Browsing a million-member set over a VPN that drops mid-pagination; containerized Redis restarted while the GUI paged; key schema swapped (set -> stream) by a deploy during inspection.
Related errors
- e.message
- Sentinel & Cluster cannot be checked together!
- message || this.$t('message.test_connection_failed')
- this.$t('message.test_connection_timeout')
- Exists Error: ${e.message}
AI-assisted analysis of qishibo/AnotherRedisDesktopManager@c149855106 (2026-08-22).
Data as JSON: /api/errors/b1814d1b3f683c78.
Report an issue: GitHub.