(&self, before_ms: i64)
| 572 | } |
| 573 | |
| 574 | pub async fn cleanup_api_behavior_before(&self, before_ms: i64) -> Result<usize> { |
| 575 | let _guard = self.api_behavior_gate.write().await; |
| 576 | let _file_guard = |
| 577 | acquire_table_access_file_lock(&self.api_behavior_table, TableAccessMode::Exclusive) |
| 578 | .await?; |
| 579 | let table = self.api_behavior_table().await?; |
| 580 | let filter = |
| 581 | format!("occurred_at < arrow_cast({before_ms}, 'Timestamp(Millisecond, None)')"); |
| 582 | let deleted = table |
| 583 | .count_rows(Some(filter.clone())) |
| 584 | .await |
| 585 | .context("failed to count api behavior rows before cleanup")? |
| 586 | as usize; |
| 587 | if deleted == 0 { |
| 588 | return Ok(0); |
| 589 | } |
| 590 | |
| 591 | table |
| 592 | .delete(&filter) |
| 593 | .await |
| 594 | .context("failed to cleanup api behavior rows")?; |
| 595 | Ok(deleted) |
| 596 | } |
| 597 | |
| 598 | /// Compact the api_behavior_events table to merge small fragments. |
| 599 | /// This reduces the number of open file descriptors and improves query |
no test coverage detected