qishibo/AnotherRedisDesktopManager · error

e.message

Error message

e.message

What it means

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.

Source

Thrown at src/components/contents/KeyContentStream.vue:272

        this.oneTimeListLength += lineData.length;
        this.lineData = this.lineData.concat(lineData);

        // enough rows, or Redis returned fewer than requested (no more data)
        if (this.oneTimeListLength >= this.pageSize || reply.length < pageSize) {
          this.loadingIcon = '';
          this.oneTimeListLength = 0;
          return;
        }

        if (this.cancelScanning) {
          return;
        }
        // continue scanning until to pagesize
        this.listScan();
      }).catch((e) => {
        this.loadingIcon = '';
        this.$message.error(e.message);
      });
    },
    initTotal() {
      this.client.xlen(this.redisKey).then((reply) => {
        this.total = reply;
      });
    },
    formatIdTime(id) {
      try {
        const ts = Number(String(id).split('-')[0]);
        if (!ts) {
          return id;
        }
        return new Date(ts).toLocaleString();
      } catch (e) {
        return id;
      }
    },

View on GitHub (pinned to c149855106)

Solutions

  1. Reconnect and press load-more — XREVRANGE is stateless, pagination restarts cleanly
  2. Validate custom min/max ID fields use '<ms>-<seq>' or '-'/'+' before scanning
  3. Reload the key if the type badge changed; WRONGTYPE means it is no longer a stream
  4. For huge streams, raise page size or narrow the ID window to reduce round-trips

Example fix

// before
}).catch((e) => {
  this.loadingIcon = '';
  this.$message.error(e.message);
});

// after: keep pagination alive for transient link errors
}).catch((e) => {
  this.loadingIcon = '';
  this.loadMoreDisable = /WRONGTYPE|Invalid stream ID/i.test(e.message);
  this.$message.error(e.message);
});
Defensive patterns

Strategy: try-catch

Validate before calling

// validate custom stream ID boundaries before scanning
const idOk = (v) => v === '' || v === '-' || v === '+' || /^\d+-\d+$/.test(v);
if (!idOk(this.minId || '') || !idOk(this.maxId || '')) {
  this.$message.error('stream id must be ms-seq, -, + or empty');
  return;
}

Try / catch

.catch((e) => {
  this.loadingIcon = '';
  this.loadMoreDisable = /WRONGTYPE|Invalid stream ID/i.test(e.message);
  this.$message.error(e.message);
})

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of qishibo/AnotherRedisDesktopManager@c149855106 (2026-08-22). Data as JSON: /api/errors/f9b46b7b52ba0504. Report an issue: GitHub.