{"record":{"id":"daebcbc772e92f39","repo":"qishibo/AnotherRedisDesktopManager","slug":"e-message-daebcb","errorCode":null,"errorMessage":"e.message","messagePattern":"e\\.message","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/components/Status.vue","lineNumber":266,"sourceCode":"\n        // init db keys info\n        if (this.isCluster) {\n          this.initClusterKeys();\n        }\n        else {\n          this.DBKeys = this.initDbKeys(this.connectionStatus);\n        }\n      }).catch((e) => {\n        // info command may be disabled\n        if (e.message.includes('unknown command')) {\n          this.$message.error({\n            message: this.$t('message.info_disabled'),\n            duration: 3000,\n          });\n        }\n        // no auth not show\n        else if (e.message.includes('NOAUTH')) {} else {\n          this.$message.error(e.message);\n        }\n      });\n    },\n    refreshInit() {\n      this.refreshTimer && clearInterval(this.refreshTimer);\n\n      if (this.autoRefresh) {\n        this.initShow();\n\n        this.refreshTimer = setInterval(() => {\n          this.initShow();\n        }, this.refreshInterval);\n      }\n    },\n    sortByKeys(a, b) {\n      return a.keys - b.keys;\n    },\n    sortByExpires(a, b) {","sourceCodeStart":248,"sourceCodeEnd":284,"githubUrl":"https://github.com/qishibo/AnotherRedisDesktopManager/blob/c149855106628babcdfb7675a8e7ba9434d2492a/src/components/Status.vue#L248-L284","documentation":"The fallback branch of the INFO catch in Status.vue: any INFO failure that is neither 'unknown command' (disabled) nor NOAUTH is surfaced raw. Realistic causes: ECONNRESET/EHOSTUNREACH because refreshInit() polls INFO on a setInterval, READONLY during a replica promotion window, NOPERM under Redis 6 ACLs, or LOADING while the server restarts and rehydrates its dataset. Because the timer keeps firing, one network blip can stack multiple toasts.","triggerScenarios":"Auto-refresh timer issuing INFO while the network/VPN drops; Redis failover in progress (LOADING or READONLY windows); ACL user without info; server reboot mid-poll.","commonSituations":"Flaky VPN or laptop sleep, ElastiCache failovers, k8s pod restarts of Redis, restrictive ACL app users.","solutions":["Stop or back off the auto-refresh timer after consecutive failures instead of letting it keep firing","Classify transient causes (ECONNRESET/LOADING/timeout) and retry silently with backoff","For NOPERM, grant info to the ACL user or hide the status panel","After failover, reconnect the client and refresh once manually"],"exampleFix":"// before\nelse {\n  this.$message.error(e.message);\n}\n\n// after\nelse {\n  if (++this.infoFailCount >= 3) {\n    clearInterval(this.refreshTimer);\n    this.refreshTimer = null;\n    this.$message.error(e.message);\n  }\n  // transient failures stay quiet; the next tick retries\n}","handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":".catch((e) => {\n  const m = String(e.message);\n  const transient = /ECONNRESET|ETIMEDOUT|LOADING|EAGAIN/i.test(m);\n  if (transient) {\n    this.scheduleRefreshBackoff(); // retry quietly\n  } else {\n    this.$message.error(m);\n  }\n})","preventionTips":["Pause the refresh interval while the client is reconnecting","Use exponential backoff for status polling","Debounce toasts so a burst of failures shows one message","Clear the interval in beforeDestroy to avoid post-close errors"],"tags":["redis","info","polling","connection-reset","failover"],"backgroundTag":"redis-command-failed","analyzedSha":"c149855106628babcdfb7675a8e7ba9434d2492a","analyzedAt":"2026-08-22T09:06:28.613Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}