@@ -12,8 +12,6 @@ use std::time::Duration;
1212use camino:: Utf8PathBuf ;
1313use chrono:: { DateTime , Utc } ;
1414use daft:: Diffable ;
15- use id_map:: IdMap ;
16- use id_map:: IdMappable ;
1715use iddqd:: IdOrdItem ;
1816use iddqd:: IdOrdMap ;
1917use iddqd:: id_upcast;
@@ -406,7 +404,7 @@ pub enum ConfigReconcilerInventoryStatus {
406404 NotYetRun ,
407405 /// The reconciler task is actively running.
408406 Running {
409- config : OmicronSledConfig ,
407+ config : Box < OmicronSledConfig > ,
410408 started_at : DateTime < Utc > ,
411409 running_for : Duration ,
412410 } ,
@@ -1030,9 +1028,16 @@ impl HostPhase2DesiredSlots {
10301028#[ derive( Clone , Debug , Deserialize , Serialize , JsonSchema , PartialEq , Eq ) ]
10311029pub struct OmicronSledConfig {
10321030 pub generation : Generation ,
1033- pub disks : IdMap < OmicronPhysicalDiskConfig > ,
1034- pub datasets : IdMap < DatasetConfig > ,
1035- pub zones : IdMap < OmicronZoneConfig > ,
1031+ // Serialize and deserialize disks, datasets, and zones as maps for
1032+ // backwards compatibility. Newer IdOrdMaps should not use IdOrdMapAsMap.
1033+ #[ serde(
1034+ with = "iddqd::id_ord_map::IdOrdMapAsMap::<OmicronPhysicalDiskConfig>"
1035+ ) ]
1036+ pub disks : IdOrdMap < OmicronPhysicalDiskConfig > ,
1037+ #[ serde( with = "iddqd::id_ord_map::IdOrdMapAsMap::<DatasetConfig>" ) ]
1038+ pub datasets : IdOrdMap < DatasetConfig > ,
1039+ #[ serde( with = "iddqd::id_ord_map::IdOrdMapAsMap::<OmicronZoneConfig>" ) ]
1040+ pub zones : IdOrdMap < OmicronZoneConfig > ,
10361041 pub remove_mupdate_override : Option < MupdateOverrideUuid > ,
10371042 #[ serde( default = "HostPhase2DesiredSlots::current_contents" ) ]
10381043 pub host_phase_2 : HostPhase2DesiredSlots ,
@@ -1042,9 +1047,9 @@ impl Default for OmicronSledConfig {
10421047 fn default ( ) -> Self {
10431048 Self {
10441049 generation : Generation :: new ( ) ,
1045- disks : IdMap :: default ( ) ,
1046- datasets : IdMap :: default ( ) ,
1047- zones : IdMap :: default ( ) ,
1050+ disks : IdOrdMap :: default ( ) ,
1051+ datasets : IdOrdMap :: default ( ) ,
1052+ zones : IdOrdMap :: default ( ) ,
10481053 remove_mupdate_override : None ,
10491054 host_phase_2 : HostPhase2DesiredSlots :: current_contents ( ) ,
10501055 }
@@ -1107,12 +1112,14 @@ pub struct OmicronZoneConfig {
11071112 pub image_source : OmicronZoneImageSource ,
11081113}
11091114
1110- impl IdMappable for OmicronZoneConfig {
1111- type Id = OmicronZoneUuid ;
1115+ impl IdOrdItem for OmicronZoneConfig {
1116+ type Key < ' a > = OmicronZoneUuid ;
11121117
1113- fn id ( & self ) -> Self :: Id {
1118+ fn key ( & self ) -> Self :: Key < ' _ > {
11141119 self . id
11151120 }
1121+
1122+ id_upcast ! ( ) ;
11161123}
11171124
11181125impl OmicronZoneConfig {
0 commit comments