Fix how analytics writes are serialized (#5926)

This commit is contained in:
aecsocket
2026-04-27 13:25:57 +01:00
committed by GitHub
parent 548357c92c
commit e8be67d41f
7 changed files with 74 additions and 32 deletions

View File

@@ -9,6 +9,7 @@ use crate::routes::analytics::MINECRAFT_SERVER_PLAYS;
use dashmap::{DashMap, DashSet};
use redis::cmd;
use std::collections::HashMap;
use tracing::trace;
pub mod cache;
@@ -262,6 +263,7 @@ impl AnalyticsQueue {
}
if !downloads_queue.is_empty() {
let downloads_count = downloads_queue.len();
let mut downloads_keys = Vec::new();
let raw_downloads = DashMap::new();
@@ -319,6 +321,11 @@ impl AnalyticsQueue {
let mut version_downloads: HashMap<i64, i32> = HashMap::new();
let mut project_downloads: HashMap<i64, i32> = HashMap::new();
trace!(
"inserting {} raw downloads out of {downloads_count} downloads",
raw_downloads.len()
);
for (_, download) in raw_downloads {
*version_downloads
.entry(download.version_id as i64)
@@ -327,6 +334,8 @@ impl AnalyticsQueue {
.entry(download.project_id as i64)
.or_default() += 1;
trace!("writing download {download:?}");
downloads.write(&download).await?;
}