Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 44 additions & 70 deletions out/openapi.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 17 additions & 5 deletions packages/common/api-types/src/namespaces/runner_configs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,18 @@ use std::collections::HashMap;
use gas::prelude::*;
use utoipa::ToSchema;

#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct RunnerConfig {
#[serde(flatten)]
pub kind: RunnerConfigKind,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metadata: Option<serde_json::Value>,
}

#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum RunnerConfig {
pub enum RunnerConfigKind {
Normal {},
Serverless {
url: String,
headers: Option<HashMap<String, String>>,
Expand All @@ -20,16 +29,18 @@ pub enum RunnerConfig {

impl Into<rivet_types::runner_configs::RunnerConfig> for RunnerConfig {
fn into(self) -> rivet_types::runner_configs::RunnerConfig {
match self {
RunnerConfig::Serverless {
let RunnerConfig { kind, metadata } = self;
let kind = match kind {
RunnerConfigKind::Normal {} => rivet_types::runner_configs::RunnerConfigKind::Normal {},
RunnerConfigKind::Serverless {
url,
headers,
request_lifespan,
slots_per_runner,
min_runners,
max_runners,
runners_margin,
} => rivet_types::runner_configs::RunnerConfig::Serverless {
} => rivet_types::runner_configs::RunnerConfigKind::Serverless {
url,
headers: headers.unwrap_or_default(),
request_lifespan,
Expand All @@ -38,6 +49,7 @@ impl Into<rivet_types::runner_configs::RunnerConfig> for RunnerConfig {
max_runners,
runners_margin: runners_margin.unwrap_or_default(),
},
}
};
rivet_types::runner_configs::RunnerConfig { kind, metadata }
}
}
3 changes: 3 additions & 0 deletions packages/common/types/src/keys/namespace/runner_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@ use utoipa::ToSchema;
#[serde(rename_all = "snake_case")]
pub enum RunnerConfigVariant {
Serverless = 0,
Normal = 1,
}

impl RunnerConfigVariant {
pub fn parse(v: &str) -> Option<Self> {
match v {
"serverless" => Some(RunnerConfigVariant::Serverless),
"normal" => Some(RunnerConfigVariant::Normal),
_ => None,
}
}
Expand All @@ -20,6 +22,7 @@ impl std::fmt::Display for RunnerConfigVariant {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
RunnerConfigVariant::Serverless => write!(f, "serverless"),
RunnerConfigVariant::Normal => write!(f, "normal"),
}
}
}
79 changes: 56 additions & 23 deletions packages/common/types/src/runner_configs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,18 @@ use std::collections::HashMap;
use gas::prelude::*;
use utoipa::ToSchema;

#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct RunnerConfig {
#[serde(flatten)]
pub kind: RunnerConfigKind,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metadata: Option<serde_json::Value>,
}

#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum RunnerConfig {
pub enum RunnerConfigKind {
Normal {},
Serverless {
url: String,
headers: HashMap<String, String>,
Expand All @@ -18,46 +27,70 @@ pub enum RunnerConfig {
},
}

impl From<RunnerConfig> for rivet_data::generated::namespace_runner_config_v1::Data {
impl From<RunnerConfig> for rivet_data::generated::namespace_runner_config_v2::RunnerConfig {
fn from(value: RunnerConfig) -> Self {
match value {
RunnerConfig::Serverless {
url,
headers,
request_lifespan,
slots_per_runner,
min_runners,
max_runners,
runners_margin,
} => rivet_data::generated::namespace_runner_config_v1::Data::Serverless(
rivet_data::generated::namespace_runner_config_v1::Serverless {
let RunnerConfig { kind, metadata } = value;
rivet_data::generated::namespace_runner_config_v2::RunnerConfig {
metadata: metadata.and_then(|value| serde_json::to_string(&value).ok()),
kind: match kind {
RunnerConfigKind::Normal {} => {
rivet_data::generated::namespace_runner_config_v2::RunnerConfigKind::Normal
}
RunnerConfigKind::Serverless {
url,
headers: headers.into(),
headers,
request_lifespan,
slots_per_runner,
min_runners,
max_runners,
runners_margin,
},
),
} => {
rivet_data::generated::namespace_runner_config_v2::RunnerConfigKind::Serverless(
rivet_data::generated::namespace_runner_config_v2::Serverless {
url,
headers: headers.into(),
request_lifespan,
slots_per_runner,
min_runners,
max_runners,
runners_margin,
},
)
}
},
}
}
}

impl From<rivet_data::generated::namespace_runner_config_v1::Data> for RunnerConfig {
fn from(value: rivet_data::generated::namespace_runner_config_v1::Data) -> Self {
match value {
rivet_data::generated::namespace_runner_config_v1::Data::Serverless(o) => {
RunnerConfig::Serverless {
impl From<rivet_data::generated::namespace_runner_config_v2::RunnerConfig> for RunnerConfig {
fn from(value: rivet_data::generated::namespace_runner_config_v2::RunnerConfig) -> Self {
let rivet_data::generated::namespace_runner_config_v2::RunnerConfig { metadata, kind } =
value;
RunnerConfig {
metadata: metadata.and_then(|raw| serde_json::from_str(&raw).ok()),
kind: match kind {
rivet_data::generated::namespace_runner_config_v2::RunnerConfigKind::Normal => {
RunnerConfigKind::Normal {}
}
rivet_data::generated::namespace_runner_config_v2::RunnerConfigKind::Serverless(
o,
) => RunnerConfigKind::Serverless {
url: o.url,
headers: o.headers.into(),
request_lifespan: o.request_lifespan,
slots_per_runner: o.slots_per_runner,
min_runners: o.min_runners,
max_runners: o.max_runners,
runners_margin: o.runners_margin,
}
}
},
},
}
}
}

impl RunnerConfig {
/// If updates to this run config affects the autoscaler.
pub fn affects_autoscaler(&self) -> bool {
matches!(self.kind, RunnerConfigKind::Serverless { .. })
}
}
6 changes: 3 additions & 3 deletions packages/core/pegboard-serverless/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ use pegboard::keys;
use reqwest::header::{HeaderName, HeaderValue};
use reqwest_eventsource as sse;
use rivet_runner_protocol as protocol;
use rivet_types::runner_configs::RunnerConfig;
use rivet_types::runner_configs::{RunnerConfig, RunnerConfigKind};
use tokio::{sync::oneshot, task::JoinHandle, time::Duration};
use universaldb::options::StreamingMode;
use universaldb::utils::IsolationLevel::*;
Expand Down Expand Up @@ -119,15 +119,15 @@ async fn tick(
let namespace = namespace.first().context("runner namespace not found")?;
let namespace_name = &namespace.name;

let RunnerConfig::Serverless {
let RunnerConfigKind::Serverless {
url,
headers,
request_lifespan,
slots_per_runner,
min_runners,
max_runners,
runners_margin,
} = &runner_config.config
} = &runner_config.config.kind
else {
tracing::warn!(
?ns_id,
Expand Down
Loading
Loading