diff --git a/crates/ecstore/src/services/tier/tier.rs b/crates/ecstore/src/services/tier/tier.rs
index 80f192f2b..5e8f8a3b0 100644
--- a/crates/ecstore/src/services/tier/tier.rs
+++ b/crates/ecstore/src/services/tier/tier.rs
@@ -2515,6 +2515,11 @@ impl TierConfigMgr {
let _config_lock = config_lock;
let _update = update;
let mutation_kind = mutation.intent_kind();
+ if version.is_none() && !candidate.tiers.is_empty() && mutation_kind != TierMutationIntentKind::Add {
+ return Err(TierConfigUpdateError::Load(io::Error::other(
+ "tier configuration mutation requires an existing config ETag",
+ )));
+ }
let explicit_tier_name = mutation.explicit_tier_name().map(str::to_string);
let current_for_targets = TierConfigMgr {
driver_cache: HashMap::new(),
@@ -6061,6 +6066,7 @@ mod tests {
#[derive(Debug)]
struct CasConfigStore {
state: tokio::sync::Mutex