qishibo/AnotherRedisDesktopManager · warning
this.$t('message.delete_failed')
Error message
this.$t('message.delete_failed') What it means
Application-level toast ('Deletion Failed') when TS.DEL key ts ts resolves with reply <= 0 in KeyContentTimeSeries.vue:377. TS.DEL returns the count of deleted samples; 0 means no sample exists at exactly that timestamp in the closed range [ts, ts]. The command succeeded — the sample is simply absent, usually because it was already deleted or a compaction rule collapsed it.
Source
Thrown at src/components/contents/KeyContentTimeSeries.vue:377
}).catch((e) => { this.$message.error(e.message); });
}
},
deleteLine(row) {
this.$confirm(
this.$t('message.confirm_to_delete_row_data'),
{ type: 'warning' },
).then(() => {
this.client.call('TS.DEL', this.redisKey, row.timestamp, row.timestamp).then((reply) => {
if (reply > 0) {
this.$message.success({
message: this.$t('message.delete_success'),
duration: 1000,
});
this.tsData.splice(this.tsData.indexOf(row), 1);
this.total--;
} else {
this.$message.error({
message: this.$t('message.delete_failed'),
duration: 1000,
});
}
}).catch((e) => { this.$message.error(e.message); });
}).catch(() => {});
},
},
mounted() {
this.initShow();
},
};
</script>
<style type="text/css">
.key-content-series .ts-toolbar .el-form-item {
margin-bottom: 10px;
}View on GitHub (pinned to c149855106)
Solutions
- Reload the key view; if the row disappeared, the earlier delete or compaction already handled it
- Open the series info dialog and check the compaction rules — source samples may not exist individually
- Delete from the refreshed page so row timestamps match stored samples
- If a specific sample must go, confirm its exact ts via TS.RANGE key ts ts first
Example fix
// before
this.client.call('TS.DEL', this.redisKey, row.timestamp, row.timestamp).then((reply) => {
if (reply > 0) { /* success */ } else { this.$message.error(this.$t('message.delete_failed')); }
});
// after: verify existence first and refresh the stale row instead of erroring
this.client.call('TS.RANGE', this.redisKey, row.timestamp, row.timestamp, 'COUNT', 1).then((found) => {
if (!found || !found.length) {
this.tsData.splice(this.tsData.indexOf(row), 1);
return this.$message.warning(this.$t('message.delete_failed'));
}
return this.client.call('TS.DEL', this.redisKey, row.timestamp, row.timestamp);
}); Defensive patterns
Strategy: validation
Validate before calling
// confirm the sample exists at exactly that ts before TS.DEL ts ts
const found = await this.client.call('TS.RANGE', this.redisKey, row.timestamp, row.timestamp, 'COUNT', 1);
if (!found || !found.length) {
this.tsData.splice(this.tsData.indexOf(row), 1); // drop the stale row
this.$message.warning(this.$t('message.delete_failed'));
return;
}
await this.client.call('TS.DEL', this.redisKey, row.timestamp, row.timestamp); Prevention
- Check TS.INFO 'rules' — compaction removes raw samples, making per-sample deletes impossible
- Delete from a freshly loaded page so displayed timestamps match stored ones
- Treat reply==0 as stale-row signal: resync instead of retrying the same delete
When it happens
Trigger: TS.DEL returns 0 when: the row is stale — another operator or the app itself already removed the sample; a compaction rule (TS.CREATERULE, shown in the key's info as 'rules') aggregated 1h-max style buckets so raw samples were dropped; retention expired the sample; the timestamp cell was edited to a ts that never existed.
Common situations: Deleting rows in a series with downsampling rules configured (source samples compacted away); double-delete from a stale page; editing the timestamp then deleting; clock-precision mismatches (sample stored at different ms).
Related errors
- this.$t('message.delete_failed')
- e.message
- Sentinel & Cluster cannot be checked together!
- message || this.$t('message.test_connection_failed')
- this.$t('message.test_connection_timeout')
AI-assisted analysis of qishibo/AnotherRedisDesktopManager@c149855106 (2026-08-22).
Data as JSON: /api/errors/3eac9b7f6b8ed3c7.
Report an issue: GitHub.