qishibo/AnotherRedisDesktopManager · error
this.$t('message.modify_failed')
Error message
this.$t('message.modify_failed') What it means
Defensive branch: JSON.SET completed without an exception but the reply was not the literal 'OK' (usually a nil). With the '$' root path and a string value, RedisJSON replies OK on success, so this toast means the set may not have taken effect — most plausibly an old RedisJSON build or an intermediate proxy returning null instead of an error. The displayed text is the translated 'modify_failed' message.
Source
Thrown at src/components/contents/KeyContentReJson.vue:62
if (content === false) {
return;
}
if (!this.$util.isJson(content)) {
return this.$message.error(this.$t('message.json_format_failed'));
}
this.client.call('JSON.SET', [this.redisKey, '$', content]).then((reply) => {
if (reply === 'OK') {
this.setTTL();
this.initShow();
this.$message.success({
message: this.$t('message.modify_success'),
duration: 1000,
});
} else {
this.$message.error({
message: this.$t('message.modify_failed'),
duration: 1000,
});
}
}).catch((e) => {
this.$message.error(e.message);
});
},
setTTL() {
const ttl = parseInt(this.$parent.$parent.$refs.keyHeader.keyTTL);
if (ttl > 0) {
this.client.expire(this.redisKey, ttl).catch((e) => {
this.$message.error(`Expire Error: ${e.message}`);
}).then((reply) => {});
}
},
initShortcut() {View on GitHub (pinned to c149855106)
Solutions
- Verify what actually landed: run JSON.GET key '$' and compare with what you saved — the toast can be a false negative
- Upgrade the RedisJSON module to a current release if nil replies on success are observed
- Remove or inspect any proxy between client and Redis that could mangle replies
Defensive patterns
Strategy: validation
Validate before calling
const reply = await client.call('JSON.SET', key, '$', content);
if (reply !== 'OK') {
// verify before declaring failure — some proxies/old modules reply nil on success
const stored = await client.call('JSON.GET', key, '$').catch(() => null);
if (stored !== content) throw new Error('JSON.SET returned ' + reply);
} Type guard
const isOkReply = (r) => r === 'OK' || r === null; // null needs read-back confirmation
Prevention
- Treat a non-OK reply as 'unverified', not 'failed' — confirm with JSON.GET before showing a failure toast
- Keep RedisJSON current; very old builds and reply-mangling proxies are the known sources of nil replies
- Log the raw reply in bug reports so false negatives can be separated from real write failures
When it happens
Trigger: Old RedisJSON module versions or managed services that reply nil for root-path sets; proxies (envoy redis filter, twemproxy) rewriting or dropping replies; RESP2/RESP3 translation bugs between client and server.
Common situations: Self-hosted Redis with a year-old RedisJSON SO; unusual network middleboxes in front of Redis; confusion after the toast appears even though the document was actually written.
Related errors
- e.message
- this.$t('message.json_format_failed')
- Expire Error: ${e.message}
- Something wrong with your vector
- e.message
AI-assisted analysis of qishibo/AnotherRedisDesktopManager@c149855106 (2026-08-22).
Data as JSON: /api/errors/b642030fb877c06b.
Report an issue: GitHub.