{"record":{"id":"f9b46b7b52ba0504","repo":"qishibo/AnotherRedisDesktopManager","slug":"e-message-f9b46b","errorCode":null,"errorMessage":"e.message","messagePattern":"e\\.message","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/components/contents/KeyContentStream.vue","lineNumber":272,"sourceCode":"\n        this.oneTimeListLength += lineData.length;\n        this.lineData = this.lineData.concat(lineData);\n\n        // enough rows, or Redis returned fewer than requested (no more data)\n        if (this.oneTimeListLength >= this.pageSize || reply.length < pageSize) {\n          this.loadingIcon = '';\n          this.oneTimeListLength = 0;\n          return;\n        }\n\n        if (this.cancelScanning) {\n          return;\n        }\n        // continue scanning until to pagesize\n        this.listScan();\n      }).catch((e) => {\n        this.loadingIcon = '';\n        this.$message.error(e.message);\n      });\n    },\n    initTotal() {\n      this.client.xlen(this.redisKey).then((reply) => {\n        this.total = reply;\n      });\n    },\n    formatIdTime(id) {\n      try {\n        const ts = Number(String(id).split('-')[0]);\n        if (!ts) {\n          return id;\n        }\n        return new Date(ts).toLocaleString();\n      } catch (e) {\n        return id;\n      }\n    },","sourceCodeStart":254,"sourceCodeEnd":290,"githubUrl":"https://github.com/qishibo/AnotherRedisDesktopManager/blob/c149855106628babcdfb7675a8e7ba9434d2492a/src/components/contents/KeyContentStream.vue#L254-L290","documentation":"Toast showing e.message when the paged XREVRANGE read fails in KeyContentStream.vue:272. listScan() drives pagination with xrevrangeBuffer([key, maxId, minId, 'COUNT', n]) and loops until pageSize rows accumulate (filtering client-side); any rejection in that loop stops loading and clears the spinner. Because the loop re-invokes listScan, one bad round-trip surfaces after several successful pages.","triggerScenarios":"XREVRANGE rejected when: the connection drops mid-pagination ('Connection is closed'); the key stops being a stream (WRONGTYPE) after being recreated; a manually typed minId/maxId in the toolbar is not a valid stream ID (\"ERR Invalid stream ID\"); replica READONLY during cluster failover.","commonSituations":"Paging a long stream over an unstable tunnel; a consumer compacting (XTRIM/XSETID) or deleting the stream while browsed; entering custom ID boundaries in the stream toolbar filter.","solutions":["Reconnect and press load-more — XREVRANGE is stateless, pagination restarts cleanly","Validate custom min/max ID fields use '<ms>-<seq>' or '-'/'+' before scanning","Reload the key if the type badge changed; WRONGTYPE means it is no longer a stream","For huge streams, raise page size or narrow the ID window to reduce round-trips"],"exampleFix":"// before\n}).catch((e) => {\n  this.loadingIcon = '';\n  this.$message.error(e.message);\n});\n\n// after: keep pagination alive for transient link errors\n}).catch((e) => {\n  this.loadingIcon = '';\n  this.loadMoreDisable = /WRONGTYPE|Invalid stream ID/i.test(e.message);\n  this.$message.error(e.message);\n});","handlingStrategy":"try-catch","validationCode":"// validate custom stream ID boundaries before scanning\nconst idOk = (v) => v === '' || v === '-' || v === '+' || /^\\d+-\\d+$/.test(v);\nif (!idOk(this.minId || '') || !idOk(this.maxId || '')) {\n  this.$message.error('stream id must be ms-seq, -, + or empty');\n  return;\n}","typeGuard":null,"tryCatchPattern":".catch((e) => {\n  this.loadingIcon = '';\n  this.loadMoreDisable = /WRONGTYPE|Invalid stream ID/i.test(e.message);\n  this.$message.error(e.message);\n})","preventionTips":["Format stream IDs strictly as <ms>-<seq> with non-negative integers","Reload the key if producers replace the stream while you page it","Reconnect and continue — XREVRANGE pagination is restartable"],"tags":["redis","stream","xrevrange","pagination","ardm"],"backgroundTag":"redis-reply-error","analyzedSha":"c149855106628babcdfb7675a8e7ba9434d2492a","analyzedAt":"2026-08-22T09:06:28.613Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}