🟠 Alto | Resiliência | Engine/API/Disk
Problema
Quando o disco enche, write_record() no WAL retorna Err(IoError). O erro propaga para a API, que retorna 500. O engine não entra em modo ReadOnly automaticamente — writes continuam sendo tentados e falhando. O DegradationManager existe mas não é verificado nos handlers da API.
Impacto
- Escrita em disco cheio pode causar corrupção de SSTable
- Perda de dados por gravação parcial
- IOError repetitivo sem degradação graceful
- WAL pode ficar em estado inconsistente
Evidência
src/storage/wal.rs:214-221: erro de sync_all() propaga via ?
src/infra/degradation.rs: implementado mas handlers put_key, post_key, delete_key, batch_keys não chamam check_write_allowed()
src/infra/disk_monitor.rs: on_critical callback não conectado ao engine
src/api/mod.rs:46-123: handlers de mutação sem verificação de degradação
Fluxo de correção necessário
DiskMonitor::on_critical → DegradationManager::set_mode(ReadOnly)
- Em todos os handlers de mutação, verificar
degradation_manager.check_write_allowed()
- Em vez de 500, retornar
503 Service Unavailable com corpo JSON explicativo
- Health check
/health/readiness deve refletir modo degradado
// Em start_server:
let deg = DegradationManager::normal();
let deg_data = web::Data::new(deg.clone());
let mut disk_monitor = DiskMonitor::default(config.dir_path.clone());
disk_monitor.on_critical(move || {
deg.set_mode(DegradationMode::ReadOnly);
tracing::error!("Disk critically low — entering READ ONLY mode");
});
// Em cada handler de mutação:
fn put_key(..., deg: web::Data<DegradationManager>, ...) {
deg.check_write_allowed().map_err(|_| {
HttpResponse::ServiceUnavailable().json(json!({
"error": "engine is in read-only mode",
"reason": "disk critically low"
}))
})?;
}
Esforço: Médio (6h)
🟠 Alto | Resiliência | Engine/API/Disk
Problema
Quando o disco enche,
write_record()no WAL retornaErr(IoError). O erro propaga para a API, que retorna 500. O engine não entra em modo ReadOnly automaticamente — writes continuam sendo tentados e falhando. ODegradationManagerexiste mas não é verificado nos handlers da API.Impacto
Evidência
src/storage/wal.rs:214-221: erro desync_all()propaga via?src/infra/degradation.rs: implementado mas handlersput_key,post_key,delete_key,batch_keysnão chamamcheck_write_allowed()src/infra/disk_monitor.rs:on_criticalcallback não conectado ao enginesrc/api/mod.rs:46-123: handlers de mutação sem verificação de degradaçãoFluxo de correção necessário
DiskMonitor::on_critical→DegradationManager::set_mode(ReadOnly)degradation_manager.check_write_allowed()503 Service Unavailablecom corpo JSON explicativo/health/readinessdeve refletir modo degradadoEsforço: Médio (6h)