{"record":{"id":"b1814d1b3f683c78","repo":"qishibo/AnotherRedisDesktopManager","slug":"e-message-b1814d","errorCode":null,"errorMessage":"e.message","messagePattern":"e\\.message","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/components/contents/KeyContentSet.vue","lineNumber":177,"sourceCode":"\n        this.oneTimeListLength += setData.length;\n        this.setData = this.setData.concat(setData);\n\n        if (this.oneTimeListLength >= this.pageSize) {\n          this.scanStream.pause();\n          this.loadingIcon = '';\n        }\n      });\n\n      this.scanStream.on('end', () => {\n        this.loadingIcon = '';\n        this.loadMoreDisable = true;\n      });\n\n      this.scanStream.on('error', (e) => {\n        this.loadingIcon = '';\n        this.loadMoreDisable = true;\n        this.$message.error(e.message);\n      });\n    },\n    getScanMatch() {\n      return this.filterValue ? `*${this.filterValue}*` : '*';\n    },\n    openDialog() {\n      this.$nextTick(() => {\n        this.$refs.formatViewer.autoFormat();\n      });\n    },\n    showEditDialog(row) {\n      this.editLineItem = this.$util.cloneObjWithBuff(row);\n      this.beforeEditItem = row;\n      this.editDialog = true;\n    },\n    dumpCommand(item) {\n      const lines = item ? [item] : this.setData;\n      const params = lines.map(line => this.$util.bufToQuotation(line.value));","sourceCodeStart":159,"sourceCodeEnd":195,"githubUrl":"https://github.com/qishibo/AnotherRedisDesktopManager/blob/c149855106628babcdfb7675a8e7ba9434d2492a/src/components/contents/KeyContentSet.vue#L159-L195","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\nthis.scanStream.on('error', (e) => {\n  this.loadingIcon = '';\n  this.loadMoreDisable = true;\n  this.$message.error(e.message);\n});\n\n// after: only permanently disable pagination on data-shape errors\nthis.scanStream.on('error', (e) => {\n  this.loadingIcon = '';\n  this.loadMoreDisable = /WRONGTYPE|READONLY/.test(e.message);\n  this.scanStream = null; // rebuild stream on next loadMore\n  this.$message.error(e.message);\n});","handlingStrategy":"try-catch","validationCode":"if (this.client.status !== 'ready') {\n  this.$message.error(`connection not ready (${this.client.status})`);\n  return;\n}","typeGuard":null,"tryCatchPattern":"this.scanStream.on('error', (e) => {\n  this.loadingIcon = '';\n  this.scanStream = null;\n  this.loadMoreDisable = /WRONGTYPE/.test(e.message);\n  this.$message.error(e.message);\n});","preventionTips":["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"],"tags":["redis","ioredis","scan-stream","connection-drop","ardm"],"backgroundTag":"redis-scan-stream-error","analyzedSha":"c149855106628babcdfb7675a8e7ba9434d2492a","analyzedAt":"2026-08-22T09:06:28.613Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}