Skip to content

Commit b3e65af

Browse files
NathanFlurryjog1t
authored andcommitted
feat(pegboard): add metadata to runner configs
1 parent acc0d9a commit b3e65af

File tree

18 files changed

+335
-247
lines changed

18 files changed

+335
-247
lines changed

out/openapi.json

Lines changed: 44 additions & 70 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/common/api-types/src/namespaces/runner_configs.rs

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,17 @@ use std::collections::HashMap;
33
use gas::prelude::*;
44
use utoipa::ToSchema;
55

6+
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
7+
pub struct RunnerConfig {
8+
#[serde(flatten)]
9+
pub kind: RunnerConfigKind,
10+
#[serde(default, skip_serializing_if = "Option::is_none")]
11+
pub metadata: Option<serde_json::Value>,
12+
}
13+
614
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
715
#[serde(rename_all = "snake_case")]
8-
pub enum RunnerConfig {
16+
pub enum RunnerConfigKind {
917
Normal {},
1018
Serverless {
1119
url: String,
@@ -21,17 +29,18 @@ pub enum RunnerConfig {
2129

2230
impl Into<rivet_types::runner_configs::RunnerConfig> for RunnerConfig {
2331
fn into(self) -> rivet_types::runner_configs::RunnerConfig {
24-
match self {
25-
RunnerConfig::Normal {} => rivet_types::runner_configs::RunnerConfig::Normal {},
26-
RunnerConfig::Serverless {
32+
let RunnerConfig { kind, metadata } = self;
33+
let kind = match kind {
34+
RunnerConfigKind::Normal {} => rivet_types::runner_configs::RunnerConfigKind::Normal {},
35+
RunnerConfigKind::Serverless {
2736
url,
2837
headers,
2938
request_lifespan,
3039
slots_per_runner,
3140
min_runners,
3241
max_runners,
3342
runners_margin,
34-
} => rivet_types::runner_configs::RunnerConfig::Serverless {
43+
} => rivet_types::runner_configs::RunnerConfigKind::Serverless {
3544
url,
3645
headers: headers.unwrap_or_default(),
3746
request_lifespan,
@@ -40,6 +49,7 @@ impl Into<rivet_types::runner_configs::RunnerConfig> for RunnerConfig {
4049
max_runners,
4150
runners_margin: runners_margin.unwrap_or_default(),
4251
},
43-
}
52+
};
53+
rivet_types::runner_configs::RunnerConfig { kind, metadata }
4454
}
4555
}

packages/common/types/src/runner_configs.rs

Lines changed: 49 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,17 @@ use std::collections::HashMap;
33
use gas::prelude::*;
44
use utoipa::ToSchema;
55

6+
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
7+
pub struct RunnerConfig {
8+
#[serde(flatten)]
9+
pub kind: RunnerConfigKind,
10+
#[serde(default, skip_serializing_if = "Option::is_none")]
11+
pub metadata: Option<serde_json::Value>,
12+
}
13+
614
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
715
#[serde(rename_all = "snake_case")]
8-
pub enum RunnerConfig {
16+
pub enum RunnerConfigKind {
917
Normal {},
1018
Serverless {
1119
url: String,
@@ -19,64 +27,70 @@ pub enum RunnerConfig {
1927
},
2028
}
2129

22-
impl From<RunnerConfig> for rivet_data::generated::namespace_runner_config_v1::Data {
30+
impl From<RunnerConfig> for rivet_data::generated::namespace_runner_config_v2::RunnerConfig {
2331
fn from(value: RunnerConfig) -> Self {
24-
match value {
25-
RunnerConfig::Normal {} => {
26-
rivet_data::generated::namespace_runner_config_v1::Data::Normal(
27-
rivet_data::generated::namespace_runner_config_v1::Normal {},
28-
)
29-
}
30-
RunnerConfig::Serverless {
31-
url,
32-
headers,
33-
request_lifespan,
34-
slots_per_runner,
35-
min_runners,
36-
max_runners,
37-
runners_margin,
38-
} => rivet_data::generated::namespace_runner_config_v1::Data::Serverless(
39-
rivet_data::generated::namespace_runner_config_v1::Serverless {
32+
let RunnerConfig { kind, metadata } = value;
33+
rivet_data::generated::namespace_runner_config_v2::RunnerConfig {
34+
metadata: metadata.and_then(|value| serde_json::to_string(&value).ok()),
35+
kind: match kind {
36+
RunnerConfigKind::Normal {} => {
37+
rivet_data::generated::namespace_runner_config_v2::RunnerConfigKind::Normal
38+
}
39+
RunnerConfigKind::Serverless {
4040
url,
41-
headers: headers.into(),
41+
headers,
4242
request_lifespan,
4343
slots_per_runner,
4444
min_runners,
4545
max_runners,
4646
runners_margin,
47-
},
48-
),
47+
} => {
48+
rivet_data::generated::namespace_runner_config_v2::RunnerConfigKind::Serverless(
49+
rivet_data::generated::namespace_runner_config_v2::Serverless {
50+
url,
51+
headers: headers.into(),
52+
request_lifespan,
53+
slots_per_runner,
54+
min_runners,
55+
max_runners,
56+
runners_margin,
57+
},
58+
)
59+
}
60+
},
4961
}
5062
}
5163
}
5264

53-
impl From<rivet_data::generated::namespace_runner_config_v1::Data> for RunnerConfig {
54-
fn from(value: rivet_data::generated::namespace_runner_config_v1::Data) -> Self {
55-
match value {
56-
rivet_data::generated::namespace_runner_config_v1::Data::Normal(_) => {
57-
RunnerConfig::Normal {}
58-
}
59-
rivet_data::generated::namespace_runner_config_v1::Data::Serverless(o) => {
60-
RunnerConfig::Serverless {
65+
impl From<rivet_data::generated::namespace_runner_config_v2::RunnerConfig> for RunnerConfig {
66+
fn from(value: rivet_data::generated::namespace_runner_config_v2::RunnerConfig) -> Self {
67+
let rivet_data::generated::namespace_runner_config_v2::RunnerConfig { metadata, kind } =
68+
value;
69+
RunnerConfig {
70+
metadata: metadata.and_then(|raw| serde_json::from_str(&raw).ok()),
71+
kind: match kind {
72+
rivet_data::generated::namespace_runner_config_v2::RunnerConfigKind::Normal => {
73+
RunnerConfigKind::Normal {}
74+
}
75+
rivet_data::generated::namespace_runner_config_v2::RunnerConfigKind::Serverless(
76+
o,
77+
) => RunnerConfigKind::Serverless {
6178
url: o.url,
6279
headers: o.headers.into(),
6380
request_lifespan: o.request_lifespan,
6481
slots_per_runner: o.slots_per_runner,
6582
min_runners: o.min_runners,
6683
max_runners: o.max_runners,
6784
runners_margin: o.runners_margin,
68-
}
69-
}
85+
},
86+
},
7087
}
7188
}
7289
}
7390

7491
impl RunnerConfig {
7592
/// If updates to this run config affects the autoscaler.
7693
pub fn affects_autoscaler(&self) -> bool {
77-
match self {
78-
Self::Serverless { .. } => true,
79-
Self::Normal { .. } => false,
80-
}
94+
matches!(self.kind, RunnerConfigKind::Serverless { .. })
8195
}
8296
}

packages/core/pegboard-serverless/src/lib.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use pegboard::keys;
1515
use reqwest::header::{HeaderName, HeaderValue};
1616
use reqwest_eventsource as sse;
1717
use rivet_runner_protocol as protocol;
18-
use rivet_types::runner_configs::RunnerConfig;
18+
use rivet_types::runner_configs::{RunnerConfig, RunnerConfigKind};
1919
use tokio::{sync::oneshot, task::JoinHandle, time::Duration};
2020
use universaldb::options::StreamingMode;
2121
use universaldb::utils::IsolationLevel::*;
@@ -119,15 +119,15 @@ async fn tick(
119119
let namespace = namespace.first().context("runner namespace not found")?;
120120
let namespace_name = &namespace.name;
121121

122-
let RunnerConfig::Serverless {
122+
let RunnerConfigKind::Serverless {
123123
url,
124124
headers,
125125
request_lifespan,
126126
slots_per_runner,
127127
min_runners,
128128
max_runners,
129129
runners_margin,
130-
} = &runner_config.config
130+
} = &runner_config.config.kind
131131
else {
132132
tracing::warn!(
133133
?ns_id,

packages/services/namespace/src/keys/runner_config.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,7 @@ impl FormalKey for DataKey {
3232

3333
fn serialize(&self, value: Self::Value) -> Result<Vec<u8>> {
3434
rivet_data::versioned::NamespaceRunnerConfig::latest(value.into())
35-
.serialize_with_embedded_version(
36-
rivet_data::PEGBOARD_NAMESPACE_RUNNER_ALLOC_IDX_VERSION,
37-
)
35+
.serialize_with_embedded_version(rivet_data::PEGBOARD_NAMESPACE_RUNNER_CONFIG_VERSION)
3836
}
3937
}
4038

@@ -125,9 +123,7 @@ impl FormalKey for ByVariantKey {
125123

126124
fn serialize(&self, value: Self::Value) -> Result<Vec<u8>> {
127125
rivet_data::versioned::NamespaceRunnerConfig::latest(value.into())
128-
.serialize_with_embedded_version(
129-
rivet_data::PEGBOARD_NAMESPACE_RUNNER_ALLOC_IDX_VERSION,
130-
)
126+
.serialize_with_embedded_version(rivet_data::PEGBOARD_NAMESPACE_RUNNER_CONFIG_VERSION)
131127
}
132128
}
133129

0 commit comments

Comments
 (0)