use super::types::{
GatewayInstanceLease, GatewayRegistryResult, GatewayRequestFence, GatewaySessionRecord,
GatewayWorkerRecord, GatewayWorkerRegistration,
};
use appcore_types::{CapabilityName, ClusterId, CoreId, InstanceId, TenantId};
use std::future::Future;
use std::pin::Pin;
pub type GatewayRegistryFuture<'a, T> =
Pin<Box<dyn Future<Output = GatewayRegistryResult<T>> + Send + 'a>>;
pub trait GatewayRegistryProvider: Send + Sync {
fn acquire_instance<'a>(
&'a self,
tenant_id: &'a TenantId,
cluster_id: &'a ClusterId,
instance_id: &'a InstanceId,
federation_url: &'a super::types::GatewayFederationUrl,
ttl_ms: u64,
now_ms: u64,
) -> GatewayRegistryFuture<'a, GatewayInstanceLease>;
fn renew_instance<'a>(
&'a self,
lease: &'a GatewayInstanceLease,
ttl_ms: u64,
now_ms: u64,
) -> GatewayRegistryFuture<'a, GatewayInstanceLease>;
fn release_instance<'a>(
&'a self,
lease: &'a GatewayInstanceLease,
) -> GatewayRegistryFuture<'a, ()>;
fn check_instance<'a>(
&'a self,
lease: &'a GatewayInstanceLease,
now_ms: u64,
) -> GatewayRegistryFuture<'a, ()>;
fn register_worker<'a>(
&'a self,
lease: &'a GatewayInstanceLease,
registration: GatewayWorkerRegistration,
ttl_ms: u64,
now_ms: u64,
) -> GatewayRegistryFuture<'a, GatewayWorkerRecord>;
fn renew_worker<'a>(
&'a self,
lease: &'a GatewayInstanceLease,
worker: &'a GatewayWorkerRecord,
ttl_ms: u64,
now_ms: u64,
) -> GatewayRegistryFuture<'a, GatewayWorkerRecord>;
fn remove_worker<'a>(
&'a self,
lease: &'a GatewayInstanceLease,
worker: &'a GatewayWorkerRecord,
) -> GatewayRegistryFuture<'a, ()>;
fn resolve_worker<'a>(
&'a self,
tenant_id: &'a TenantId,
cluster_id: &'a ClusterId,
core_id: &'a CoreId,
now_ms: u64,
) -> GatewayRegistryFuture<'a, Option<GatewayWorkerRecord>>;
fn resolve_capability<'a>(
&'a self,
tenant_id: &'a TenantId,
capability: &'a CapabilityName,
limit: usize,
now_ms: u64,
) -> GatewayRegistryFuture<'a, Vec<GatewayWorkerRecord>>;
fn register_session<'a>(
&'a self,
lease: &'a GatewayInstanceLease,
session: GatewaySessionRecord,
now_ms: u64,
) -> GatewayRegistryFuture<'a, GatewaySessionRecord>;
fn remove_session<'a>(
&'a self,
lease: &'a GatewayInstanceLease,
session: &'a GatewaySessionRecord,
) -> GatewayRegistryFuture<'a, ()>;
fn claim_request<'a>(
&'a self,
origin: &'a GatewayInstanceLease,
target: &'a GatewayWorkerRecord,
request_id: &'a str,
expires_at_ms: u64,
now_ms: u64,
) -> GatewayRegistryFuture<'a, GatewayRequestFence>;
fn check_request<'a>(
&'a self,
request: &'a GatewayRequestFence,
now_ms: u64,
) -> GatewayRegistryFuture<'a, ()>;
fn complete_request<'a>(
&'a self,
request: &'a GatewayRequestFence,
now_ms: u64,
) -> GatewayRegistryFuture<'a, ()>;
fn cancel_request<'a>(
&'a self,
request: &'a GatewayRequestFence,
) -> GatewayRegistryFuture<'a, ()>;
}