{"record":{"id":"c7ff1a3e12206cae","repo":"qishibo/AnotherRedisDesktopManager","slug":"e-message-c7ff1a","errorCode":null,"errorMessage":"e.message","messagePattern":"e\\.message","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/components/KeyHeader.vue","lineNumber":148,"sourceCode":"        { type: 'warning' },\n      )\n        .then(() => {\n          this.client.del(this.redisKey).then((reply) => {\n            if (reply == 1) {\n              this.$message.success({\n                message: this.$t('message.delete_success'),\n                duration: 1000,\n              });\n\n              this.$bus.$emit('removePreTab');\n              this.refreshKeyList(this.redisKey);\n            } else {\n              this.$message.error({\n                message: `${this.redisKey} ${this.$t('message.delete_failed')}`,\n                duration: 1000,\n              });\n            }\n          }).catch((e) => { this.$message.error(e.message); });\n        }).catch(() => {});\n    },\n    renameKey(e) {\n      // input blur to prevent trigger twice by enter\n      e && e.srcElement.blur();\n\n      if (this.keyName.equals(this.redisKey)) {\n        return;\n      }\n\n      const inputTxt = 'y';\n      const placeholder = this.$t('message.flushdb_prompt', { txt: inputTxt });\n\n      // force confirm rename operation\n      this.$prompt(\n        this.$t('message.confirm_to_rename_key', {\n          old: this.$util.bufToString(this.redisKey),\n          new: this.$util.bufToString(this.keyName),","sourceCodeStart":130,"sourceCodeEnd":166,"githubUrl":"https://github.com/qishibo/AnotherRedisDesktopManager/blob/c149855106628babcdfb7675a8e7ba9434d2492a/src/components/KeyHeader.vue#L130-L166","documentation":"The catch branch when DEL rejects in KeyHeader.vue's confirmed delete flow. DEL is in the app's writeCMD table, so a readonly connection rejects locally with the readonly message before reaching the server; otherwise the rejection is an ACL denial (NOPERM), a dropped connection, or a server error.","triggerScenarios":"Deleting from a key tab on a readonly-configured connection; ACL user without +del/@write; connection lost between the confirm dialog and execution.","commonSituations":"Readonly production connections; restricted ACL accounts; network transitions mid-action.","solutions":["If the readonly-mode message appears, disable Readonly in connection settings and reconnect.","If 'NOPERM', grant +del (or +@write) to the ACL user.","If connection-related, reconnect and retry from the key tab."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"import { writeCMD } from '@/commands.js';\nconst delBlocked = client.options.connectionReadOnly && writeCMD['DEL'];","typeGuard":"const isWriteDenied = (e) => /readonly mode|NOPERM|not allowed/i.test(e.message);","tryCatchPattern":"this.client.del(this.redisKey).catch((e) => {\n  if (isWriteDenied(e)) {\n    this.$message.error('Delete not permitted (readonly connection or ACL)');\n  } else {\n    this.$message.error(e.message); // transport: reconnect and retry\n  }\n});","preventionTips":["Hide/disable delete in key tabs on readonly connections.","Distinguish permission failures (fix config) from transport failures (reconnect) before retrying."],"tags":["del","readonly","acl","connection-loss"],"backgroundTag":"redis-write-command-denied","analyzedSha":"c149855106628babcdfb7675a8e7ba9434d2492a","analyzedAt":"2026-08-22T09:06:28.613Z","schemaVersion":2},"datasetVersion":"2026-08-22T09:17:25.309Z"}