dynamo_runtime/
instances.rs1use std::sync::Arc;
11
12use crate::component::{INSTANCE_ROOT_PATH, Instance};
13use crate::storage::key_value_store::KeyValueStore;
14use crate::transports::etcd::Client as EtcdClient;
15
16pub async fn list_all_instances(client: Arc<dyn KeyValueStore>) -> anyhow::Result<Vec<Instance>> {
17 let Some(bucket) = client.get_bucket(INSTANCE_ROOT_PATH).await? else {
18 return Ok(vec![]);
19 };
20
21 let entries = bucket.entries().await?;
22 let mut instances = Vec::with_capacity(entries.len());
23 for (name, bytes) in entries.into_iter() {
24 match serde_json::from_slice::<Instance>(&bytes) {
25 Ok(instance) => instances.push(instance),
26 Err(err) => {
27 tracing::warn!(%err, key = name, "Failed to parse instance from storage");
28 }
29 }
30 }
31 instances.sort();
32
33 Ok(instances)
34}