Skip to content

Commit 99d0d4a

Browse files
authored
Merge pull request #500 from NillionNetwork/chore/rename-heartbeats
chore: rename `heartbeats` to `heartbeat`
2 parents 704b1f9 + 85063d8 commit 99d0d4a

File tree

7 files changed

+42
-39
lines changed

7 files changed

+42
-39
lines changed

crates/nilcc-agent-models/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,12 +193,12 @@ pub mod workloads {
193193
#[validate(regex(path = DOMAIN_REGEX))]
194194
pub domain: String,
195195

196-
pub heartbeats: Option<CreateWorkloadHeartbeats>,
196+
pub heartbeat: Option<CreateWorkloadHeartbeat>,
197197
}
198198

199199
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
200200
#[serde(rename_all = "camelCase")]
201-
pub struct CreateWorkloadHeartbeats {
201+
pub struct CreateWorkloadHeartbeat {
202202
pub measurement_hash_url: String,
203203
}
204204

nilcc-agent-cli/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use nilcc_agent_models::system::InstallArtifactVersionRequest;
2626
use nilcc_agent_models::system::LastUpgrade;
2727
use nilcc_agent_models::system::UpgradeState;
2828
use nilcc_agent_models::system::VerifierKey;
29-
use nilcc_agent_models::workloads::create::CreateWorkloadHeartbeats;
29+
use nilcc_agent_models::workloads::create::CreateWorkloadHeartbeat;
3030
use nilcc_agent_models::workloads::restart::RestartWorkloadRequest;
3131
use nilcc_agent_models::workloads::start::StartWorkloadRequest;
3232
use nilcc_agent_models::workloads::stop::StopWorkloadRequest;
@@ -442,7 +442,7 @@ fn launch(client: ApiClient, args: LaunchArgs) -> anyhow::Result<()> {
442442
gpus,
443443
disk_space_gb,
444444
domain,
445-
heartbeats: measurement_hash_url.map(|measurement_hash_url| CreateWorkloadHeartbeats { measurement_hash_url }),
445+
heartbeat: measurement_hash_url.map(|measurement_hash_url| CreateWorkloadHeartbeat { measurement_hash_url }),
446446
};
447447
let response: CreateWorkloadResponse = client.post("/api/v1/workloads/create", &request)?;
448448
let CreateWorkloadResponse { id } = response;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
-- Rename `workloads.hearbeats` to `heartbeat`
2+
3+
ALTER TABLE workloads RENAME COLUMN heartbeats TO heartbeat;

nilcc-agent/src/repositories/workload.rs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ pub struct Workload {
3737
pub domain: String,
3838
pub last_reported_event: Option<String>,
3939
#[sqlx(json)]
40-
pub heartbeats: Option<WorkloadHeartbeats>,
40+
pub heartbeat: Option<WorkloadHeartbeat>,
4141
}
4242

4343
impl Workload {
@@ -73,7 +73,7 @@ impl fmt::Debug for Workload {
7373
enabled: running,
7474
docker_credentials,
7575
last_reported_event,
76-
heartbeats,
76+
heartbeat,
7777
} = self;
7878
// Hide this one since it can have sensitive data
7979
let environment_variables: BTreeMap<_, _> = env_vars.keys().map(|key| (key, "...")).collect();
@@ -94,14 +94,14 @@ impl fmt::Debug for Workload {
9494
.field("running", running)
9595
.field("docker_credentials", docker_credentials)
9696
.field("last_reported_event", last_reported_event)
97-
.field("heartbeats", heartbeats)
97+
.field("heartbeat", heartbeat)
9898
.finish()
9999
}
100100
}
101101

102102
#[serde_as]
103103
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
104-
pub struct WorkloadHeartbeats {
104+
pub struct WorkloadHeartbeat {
105105
#[serde_as(as = "Option<Hex>")]
106106
pub wallet_public_key: Option<Vec<u8>>,
107107

@@ -135,10 +135,10 @@ pub trait WorkloadRepository: Send + Sync {
135135
async fn set_enabled(&mut self, id: Uuid, value: bool) -> Result<(), WorkloadRepositoryError>;
136136

137137
/// Set the `heartbeats` column for a workload.
138-
async fn set_heartbeats(
138+
async fn set_heartbeat(
139139
&mut self,
140140
id: Uuid,
141-
heartbeats: Option<WorkloadHeartbeats>,
141+
heartbeats: Option<WorkloadHeartbeat>,
142142
) -> Result<(), WorkloadRepositoryError>;
143143

144144
/// Set the `gpus` column for a workload.
@@ -221,7 +221,7 @@ INSERT INTO workloads (
221221
ports,
222222
domain,
223223
last_reported_event,
224-
heartbeats,
224+
heartbeat,
225225
enabled,
226226
created_at
227227
)
@@ -244,7 +244,7 @@ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $
244244
domain,
245245
last_reported_event,
246246
enabled,
247-
heartbeats,
247+
heartbeat,
248248
} = workload;
249249

250250
sqlx::query(query)
@@ -263,7 +263,7 @@ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $
263263
.bind(sqlx::types::Json(ports))
264264
.bind(domain)
265265
.bind(last_reported_event)
266-
.bind(sqlx::types::Json(heartbeats))
266+
.bind(sqlx::types::Json(heartbeat))
267267
.bind(enabled)
268268
.bind(Utc::now())
269269
.execute(&mut *self.ctx)
@@ -299,13 +299,13 @@ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $
299299
Ok(())
300300
}
301301

302-
async fn set_heartbeats(
302+
async fn set_heartbeat(
303303
&mut self,
304304
id: Uuid,
305-
heartbeats: Option<WorkloadHeartbeats>,
305+
heartbeat: Option<WorkloadHeartbeat>,
306306
) -> Result<(), WorkloadRepositoryError> {
307-
let query = "UPDATE workloads SET heartbeats = ? WHERE id = ?";
308-
sqlx::query(query).bind(sqlx::types::Json(heartbeats)).bind(id).execute(&mut *self.ctx).await?;
307+
let query = "UPDATE workloads SET heartbeat = ? WHERE id = ?";
308+
sqlx::query(query).bind(sqlx::types::Json(heartbeat)).bind(id).execute(&mut *self.ctx).await?;
309309
Ok(())
310310
}
311311

@@ -368,7 +368,7 @@ mod tests {
368368
domain: "example.com".into(),
369369
last_reported_event: None,
370370
enabled: true,
371-
heartbeats: None,
371+
heartbeat: None,
372372
};
373373
repo.create(&workload).await.expect("failed to insert");
374374

@@ -385,15 +385,15 @@ mod tests {
385385
repo.set_enabled(workload.id, false).await.expect("failed to update");
386386
assert_eq!(repo.find(workload.id).await.expect("failed to find").enabled, false);
387387

388-
repo.set_heartbeats(
388+
repo.set_heartbeat(
389389
workload.id,
390-
Some(WorkloadHeartbeats { wallet_public_key: Some(vec![1, 2, 3]), measurement_hash_url: "a".into() }),
390+
Some(WorkloadHeartbeat { wallet_public_key: Some(vec![1, 2, 3]), measurement_hash_url: "a".into() }),
391391
)
392392
.await
393393
.expect("failed to update");
394394
assert_eq!(
395-
repo.find(workload.id).await.expect("failed to find").heartbeats,
396-
Some(WorkloadHeartbeats { wallet_public_key: Some(vec![1, 2, 3]), measurement_hash_url: "a".into() })
395+
repo.find(workload.id).await.expect("failed to find").heartbeat,
396+
Some(WorkloadHeartbeat { wallet_public_key: Some(vec![1, 2, 3]), measurement_hash_url: "a".into() })
397397
);
398398

399399
repo.set_gpus(workload.id, &["cc:dd".into()]).await.expect("failed to update");

nilcc-agent/src/resources.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ mod tests {
318318
domain: domain.into(),
319319
last_reported_event: None,
320320
enabled: true,
321-
heartbeats: None,
321+
heartbeat: None,
322322
}
323323
}
324324

nilcc-agent/src/services/vm.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ mod tests {
477477
domain: "example.com".into(),
478478
last_reported_event: None,
479479
enabled: true,
480-
heartbeats: None,
480+
heartbeat: None,
481481
};
482482
let mut builder = Builder::default();
483483
let base_disk_contents = b"totally a disk";

nilcc-agent/src/services/workload.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::{
33
repositories::{
44
artifacts::ArtifactsRepositoryError,
55
sqlite::{ProviderError, ProviderMode, RepositoryProvider},
6-
workload::{Workload, WorkloadHeartbeats, WorkloadRepositoryError},
6+
workload::{Workload, WorkloadHeartbeat, WorkloadRepositoryError},
77
},
88
resources::{GpuAddress, SystemResources},
99
services::{
@@ -227,7 +227,7 @@ impl DefaultWorkloadService {
227227
request: CreateWorkloadRequest,
228228
resources: &AvailableResources,
229229
artifacts_version: String,
230-
heartbeats: Option<WorkloadHeartbeats>,
230+
heartbeat: Option<WorkloadHeartbeat>,
231231
) -> Workload {
232232
let CreateWorkloadRequest {
233233
id,
@@ -265,13 +265,13 @@ impl DefaultWorkloadService {
265265
domain,
266266
last_reported_event: None,
267267
enabled: true,
268-
heartbeats,
268+
heartbeat,
269269
}
270270
}
271271

272272
fn workload_key(&self, workload: &Workload) -> anyhow::Result<Option<VerifierKey>> {
273273
let id = workload.id;
274-
let key = match &workload.heartbeats {
274+
let key = match &workload.heartbeat {
275275
Some(config) => {
276276
// Lookup the existing key if one is already set. This will only happen during the
277277
// transition period where this is still null for some workloads.
@@ -339,12 +339,12 @@ impl WorkloadService for DefaultWorkloadService {
339339
return Err(InsufficientResources("open ports"));
340340
}
341341

342-
let (heartbeats, wallet_key) = match &request.heartbeats {
342+
let (heartbeat, wallet_key) = match &request.heartbeat {
343343
Some(config) => {
344344
let wallet_key = self.verifier_keys.next_key().map_err(|_| NotEnoughKeys)?;
345345
let wallet_public_key = Some(wallet_key.public_key().to_vec());
346346
(
347-
Some(WorkloadHeartbeats {
347+
Some(WorkloadHeartbeat {
348348
wallet_public_key,
349349
measurement_hash_url: config.measurement_hash_url.clone(),
350350
}),
@@ -353,7 +353,7 @@ impl WorkloadService for DefaultWorkloadService {
353353
}
354354
None => (None, None),
355355
};
356-
let workload = self.build_workload(request, &resources, artifacts.version.clone(), heartbeats);
356+
let workload = self.build_workload(request, &resources, artifacts.version.clone(), heartbeat);
357357
let id = workload.id;
358358
info!("Storing workload {id} in database");
359359
let mut repo = self.repository_provider.workloads(ProviderMode::Transactional).await?;
@@ -433,13 +433,13 @@ impl WorkloadService for DefaultWorkloadService {
433433
return Ok(());
434434
}
435435
// The workload key is going back to the pool
436-
let mut heartbeats = workload.heartbeats;
436+
let mut heartbeats = workload.heartbeat;
437437
if let Some(config) = &mut heartbeats {
438438
config.wallet_public_key = None;
439439
}
440440
info!("Disabling workload {id}");
441441
repo.set_enabled(id, false).await?;
442-
repo.set_heartbeats(id, heartbeats).await?;
442+
repo.set_heartbeat(id, heartbeats).await?;
443443
repo.commit().await?;
444444
self.vm_service.delete_vm(id).await;
445445
Ok(())
@@ -453,12 +453,12 @@ impl WorkloadService for DefaultWorkloadService {
453453
return Ok(());
454454
}
455455
let key = self.verifier_keys.next_key().map_err(|e| WorkloadLookupError::Internal(e.to_string()))?;
456-
if let Some(config) = &mut workload.heartbeats {
456+
if let Some(config) = &mut workload.heartbeat {
457457
config.wallet_public_key = Some(key.public_key().to_vec());
458458
}
459459
info!("Starting workload {id} using wallet key {}", hex::encode(key.public_key()));
460460
repo.set_enabled(id, true).await?;
461-
repo.set_heartbeats(id, workload.heartbeats.clone()).await?;
461+
repo.set_heartbeat(id, workload.heartbeat.clone()).await?;
462462
repo.commit().await?;
463463
self.vm_service
464464
.create_vm(workload, Some(key))
@@ -490,7 +490,7 @@ mod tests {
490490
},
491491
};
492492
use mockall::predicate::{always, eq};
493-
use nilcc_agent_models::workloads::create::CreateWorkloadHeartbeats;
493+
use nilcc_agent_models::workloads::create::CreateWorkloadHeartbeat;
494494
use rstest::rstest;
495495
use uuid::Uuid;
496496

@@ -586,7 +586,7 @@ mod tests {
586586
domain: "example.com".into(),
587587
last_reported_event: None,
588588
enabled: true,
589-
heartbeats: None,
589+
heartbeat: None,
590590
}
591591
}
592592

@@ -687,7 +687,7 @@ mod tests {
687687
gpus: 1,
688688
disk_space_gb: 1.try_into().unwrap(),
689689
domain: "example.com".into(),
690-
heartbeats: Some(CreateWorkloadHeartbeats { measurement_hash_url: "url".into() }),
690+
heartbeat: Some(CreateWorkloadHeartbeat { measurement_hash_url: "url".into() }),
691691
};
692692
let expected_key = VerifierKeys::dummy().next_key().unwrap().public_key().to_vec();
693693
let workload = Workload {
@@ -707,7 +707,7 @@ mod tests {
707707
domain: request.domain.clone(),
708708
last_reported_event: None,
709709
enabled: true,
710-
heartbeats: Some(WorkloadHeartbeats {
710+
heartbeat: Some(WorkloadHeartbeat {
711711
wallet_public_key: Some(expected_key),
712712
measurement_hash_url: "url".into(),
713713
}),

0 commit comments

Comments
 (0)