JMAP Registry API implementation - part 11

This commit is contained in:
mdecimus
2026-03-07 21:08:23 +01:00
parent d15efc6fb9
commit 455d3e3beb
41 changed files with 661 additions and 577 deletions

View File

@@ -109,7 +109,7 @@ async fn send_email_alarm(
.caused_by(trc::location!())?
.build();
if !access_token.has_permission(Permission::CalendarAlarms) {
if !access_token.has_permission(Permission::CalendarAlarmsSend) {
trc::event!(
Calendar(trc::CalendarEvent::AlarmSkipped),
Reason = "Account does not have permission to send calendar alarms",

View File

@@ -127,7 +127,7 @@ async fn store_maintenance(
let todo =
"make sure spam samples with their indexes and undelete items are purged as well";
let mut started = Instant::now();
let started = Instant::now();
server
.store()

View File

@@ -24,7 +24,7 @@ use registry::{
types::EnumImpl,
};
use store::write::{BatchBuilder, now};
use trc::{Collector, MetricType, TaskManagerEvent, TelemetryEvent};
use trc::{ClusterEvent, Collector, MetricType, TaskManagerEvent, TelemetryEvent};
#[derive(PartialEq, Eq)]
struct Action {
@@ -40,6 +40,7 @@ enum Event {
OtelMetrics,
CalculateMetrics,
TrainSpamClassifier,
RenewNodeIdLease,
// SPDX-SnippetBegin
// SPDX-FileCopyrightText: 2020 Stalwart Labs LLC <hello@stalw.art>
// SPDX-License-Identifier: LicenseRef-SEL
@@ -88,6 +89,14 @@ pub fn spawn_task_scheduler(inner: Arc<Inner>) {
Event::PurgeBlobStore,
);
// Node ID lease renewal
if server.core.storage.coordinator.is_enabled() {
queue.schedule(
Instant::now() + server.registry().refresh_node_id_interval(),
Event::RenewNodeIdLease,
);
}
// Spam classifier training
if let Some(train_frequency) = server
.core
@@ -218,6 +227,24 @@ pub fn spawn_task_scheduler(inner: Arc<Inner>) {
}));
}
}
Event::RenewNodeIdLease => {
queue.schedule(
Instant::now() + server.registry().refresh_node_id_interval(),
Event::RenewNodeIdLease,
);
trc::event!(
Cluster(ClusterEvent::NodeIdRenewed),
Id = server.registry().node_id()
);
let server = server.clone();
tokio::spawn(async move {
if let Err(err) = server.registry().refresh_node_id_lease().await {
trc::error!(err.details("Failed to renew node ID lease"));
}
});
}
Event::OtelMetrics => {
if let Some(otel) = &server.core.metrics.otel {
queue.schedule(Instant::now() + otel.interval, Event::OtelMetrics);
@@ -546,7 +573,7 @@ impl Event {
Event::OtelMetrics => "otelMetrics",
Event::CalculateMetrics => "calculateMetrics",
Event::TrainSpamClassifier => "trainSpamClassifier",
Event::RenewNodeIdLease => "renewNodeIdLease",
// SPDX-SnippetBegin
// SPDX-FileCopyrightText: 2020 Stalwart Labs LLC <info@stalwartlabs.com>
// SPDX-License-Identifier: LicenseRef-SEL