Skip to content

Commit d25b102

Browse files
authored
Add a new ClickhouseServer Omicron Zone (#6297)
The new zone type reflects the zone with which we'll deploy clickhouse server nodes in a replicated setup. We decided on using a new zone type rather than adding a boolean field to the existing `Clickhouse` zone type that is used for single server deployments in last Tuesday's (Aug 6, 2024) update huddle. This is the fist part of the work to be done for replicated clickhouse deployments that are automated via reconfigurator. As such, the actual zone deployment is left as a `todo`.
1 parent 33ab24f commit d25b102

File tree

28 files changed

+256
-10
lines changed

28 files changed

+256
-10
lines changed

common/src/api/internal/shared.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -710,8 +710,12 @@ pub struct ResolvedVpcRouteSet {
710710
pub enum DatasetKind {
711711
Crucible,
712712
Cockroach,
713+
/// Used for single-node clickhouse deployments
713714
Clickhouse,
715+
/// Used for replicated clickhouse deployments
714716
ClickhouseKeeper,
717+
/// Used for replicated clickhouse deployments
718+
ClickhouseServer,
715719
ExternalDns,
716720
InternalDns,
717721
}
@@ -724,6 +728,7 @@ impl fmt::Display for DatasetKind {
724728
Cockroach => "cockroach",
725729
Clickhouse => "clickhouse",
726730
ClickhouseKeeper => "clickhouse_keeper",
731+
ClickhouseServer => "clickhouse_server",
727732
ExternalDns => "external_dns",
728733
InternalDns => "internal_dns",
729734
};

dev-tools/omdb/src/bin/omdb/db.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1106,6 +1106,7 @@ async fn lookup_service_info(
11061106
| BlueprintZoneType::InternalNtp(_) => ServiceKind::Ntp,
11071107
BlueprintZoneType::Clickhouse(_) => ServiceKind::Clickhouse,
11081108
BlueprintZoneType::ClickhouseKeeper(_) => ServiceKind::ClickhouseKeeper,
1109+
BlueprintZoneType::ClickhouseServer(_) => ServiceKind::ClickhouseServer,
11091110
BlueprintZoneType::CockroachDb(_) => ServiceKind::Cockroach,
11101111
BlueprintZoneType::Crucible(_) => ServiceKind::Crucible,
11111112
BlueprintZoneType::CruciblePantry(_) => ServiceKind::CruciblePantry,

internal-dns/src/names.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ pub const DNS_ZONE_EXTERNAL_TESTING: &str = "oxide-dev.test";
2525
pub enum ServiceName {
2626
Clickhouse,
2727
ClickhouseKeeper,
28+
ClickhouseServer,
2829
Cockroach,
2930
InternalDns,
3031
ExternalDns,
@@ -48,6 +49,7 @@ impl ServiceName {
4849
match self {
4950
ServiceName::Clickhouse => "clickhouse",
5051
ServiceName::ClickhouseKeeper => "clickhouse-keeper",
52+
ServiceName::ClickhouseServer => "clickhouse-server",
5153
ServiceName::Cockroach => "cockroach",
5254
ServiceName::ExternalDns => "external-dns",
5355
ServiceName::InternalDns => "nameservice",
@@ -73,6 +75,7 @@ impl ServiceName {
7375
match self {
7476
ServiceName::Clickhouse
7577
| ServiceName::ClickhouseKeeper
78+
| ServiceName::ClickhouseServer
7679
| ServiceName::Cockroach
7780
| ServiceName::InternalDns
7881
| ServiceName::ExternalDns

nexus-sled-agent-shared/src/inventory.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,15 +134,26 @@ pub enum OmicronZoneType {
134134
snat_cfg: SourceNatConfig,
135135
},
136136

137+
/// Type of clickhouse zone used for a single node clickhouse deployment
137138
Clickhouse {
138139
address: SocketAddrV6,
139140
dataset: OmicronZoneDataset,
140141
},
141142

143+
/// A zone used to run a Clickhouse Keeper node
144+
///
145+
/// Keepers are only used in replicated clickhouse setups
142146
ClickhouseKeeper {
143147
address: SocketAddrV6,
144148
dataset: OmicronZoneDataset,
145149
},
150+
151+
/// A zone used to run a Clickhouse Server in a replicated deployment
152+
ClickhouseServer {
153+
address: SocketAddrV6,
154+
dataset: OmicronZoneDataset,
155+
},
156+
146157
CockroachDb {
147158
address: SocketAddrV6,
148159
dataset: OmicronZoneDataset,
@@ -212,6 +223,9 @@ impl OmicronZoneType {
212223
OmicronZoneType::ClickhouseKeeper { .. } => {
213224
ZoneKind::ClickhouseKeeper
214225
}
226+
OmicronZoneType::ClickhouseServer { .. } => {
227+
ZoneKind::ClickhouseServer
228+
}
215229
OmicronZoneType::CockroachDb { .. } => ZoneKind::CockroachDb,
216230
OmicronZoneType::Crucible { .. } => ZoneKind::Crucible,
217231
OmicronZoneType::CruciblePantry { .. } => ZoneKind::CruciblePantry,
@@ -252,6 +266,7 @@ impl OmicronZoneType {
252266

253267
OmicronZoneType::Clickhouse { .. }
254268
| OmicronZoneType::ClickhouseKeeper { .. }
269+
| OmicronZoneType::ClickhouseServer { .. }
255270
| OmicronZoneType::CockroachDb { .. }
256271
| OmicronZoneType::Crucible { .. }
257272
| OmicronZoneType::CruciblePantry { .. }
@@ -271,6 +286,7 @@ impl OmicronZoneType {
271286
| OmicronZoneType::InternalNtp { .. }
272287
| OmicronZoneType::Clickhouse { .. }
273288
| OmicronZoneType::ClickhouseKeeper { .. }
289+
| OmicronZoneType::ClickhouseServer { .. }
274290
| OmicronZoneType::CockroachDb { .. }
275291
| OmicronZoneType::Crucible { .. }
276292
| OmicronZoneType::CruciblePantry { .. }
@@ -289,6 +305,7 @@ impl OmicronZoneType {
289305
| OmicronZoneType::InternalNtp { .. }
290306
| OmicronZoneType::Clickhouse { .. }
291307
| OmicronZoneType::ClickhouseKeeper { .. }
308+
| OmicronZoneType::ClickhouseServer { .. }
292309
| OmicronZoneType::CockroachDb { .. }
293310
| OmicronZoneType::CruciblePantry { .. }
294311
| OmicronZoneType::ExternalDns { .. }
@@ -310,6 +327,7 @@ impl OmicronZoneType {
310327
OmicronZoneType::InternalNtp { .. }
311328
| OmicronZoneType::Clickhouse { .. }
312329
| OmicronZoneType::ClickhouseKeeper { .. }
330+
| OmicronZoneType::ClickhouseServer { .. }
313331
| OmicronZoneType::CockroachDb { .. }
314332
| OmicronZoneType::Crucible { .. }
315333
| OmicronZoneType::CruciblePantry { .. }
@@ -328,6 +346,7 @@ impl OmicronZoneType {
328346
OmicronZoneType::InternalNtp { .. }
329347
| OmicronZoneType::Clickhouse { .. }
330348
| OmicronZoneType::ClickhouseKeeper { .. }
349+
| OmicronZoneType::ClickhouseServer { .. }
331350
| OmicronZoneType::CockroachDb { .. }
332351
| OmicronZoneType::Crucible { .. }
333352
| OmicronZoneType::CruciblePantry { .. }
@@ -367,6 +386,7 @@ pub enum ZoneKind {
367386
BoundaryNtp,
368387
Clickhouse,
369388
ClickhouseKeeper,
389+
ClickhouseServer,
370390
CockroachDb,
371391
Crucible,
372392
CruciblePantry,
@@ -390,6 +410,7 @@ impl ZoneKind {
390410
ZoneKind::BoundaryNtp | ZoneKind::InternalNtp => Self::NTP_PREFIX,
391411
ZoneKind::Clickhouse => "clickhouse",
392412
ZoneKind::ClickhouseKeeper => "clickhouse_keeper",
413+
ZoneKind::ClickhouseServer => "clickhouse_server",
393414
// Note "cockroachdb" for historical reasons.
394415
ZoneKind::CockroachDb => "cockroachdb",
395416
ZoneKind::Crucible => "crucible",
@@ -409,6 +430,7 @@ impl ZoneKind {
409430
ZoneKind::BoundaryNtp | ZoneKind::InternalNtp => Self::NTP_PREFIX,
410431
ZoneKind::Clickhouse => "clickhouse",
411432
ZoneKind::ClickhouseKeeper => "clickhouse_keeper",
433+
ZoneKind::ClickhouseServer => "clickhouse_server",
412434
// Note "cockroachdb" for historical reasons.
413435
ZoneKind::CockroachDb => "cockroachdb",
414436
ZoneKind::Crucible => "crucible",
@@ -431,6 +453,7 @@ impl ZoneKind {
431453
ZoneKind::BoundaryNtp | ZoneKind::InternalNtp => Self::NTP_PREFIX,
432454
ZoneKind::Clickhouse => "clickhouse",
433455
ZoneKind::ClickhouseKeeper => "clickhouse-keeper",
456+
ZoneKind::ClickhouseServer => "clickhouse_server",
434457
// Note "cockroach" for historical reasons.
435458
ZoneKind::CockroachDb => "cockroach",
436459
ZoneKind::Crucible => "crucible",
@@ -451,6 +474,7 @@ impl ZoneKind {
451474
ZoneKind::BoundaryNtp => "boundary_ntp",
452475
ZoneKind::Clickhouse => "clickhouse",
453476
ZoneKind::ClickhouseKeeper => "clickhouse_keeper",
477+
ZoneKind::ClickhouseServer => "clickhouse_server",
454478
ZoneKind::CockroachDb => "cockroach_db",
455479
ZoneKind::Crucible => "crucible",
456480
ZoneKind::CruciblePantry => "crucible_pantry",

nexus/db-model/src/dataset_kind.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ impl_enum_type!(
2020
Cockroach => b"cockroach"
2121
Clickhouse => b"clickhouse"
2222
ClickhouseKeeper => b"clickhouse_keeper"
23+
ClickhouseServer => b"clickhouse_server"
2324
ExternalDns => b"external_dns"
2425
InternalDns => b"internal_dns"
2526
);
@@ -35,6 +36,9 @@ impl From<internal::shared::DatasetKind> for DatasetKind {
3536
internal::shared::DatasetKind::ClickhouseKeeper => {
3637
DatasetKind::ClickhouseKeeper
3738
}
39+
internal::shared::DatasetKind::ClickhouseServer => {
40+
DatasetKind::ClickhouseServer
41+
}
3842
internal::shared::DatasetKind::ExternalDns => {
3943
DatasetKind::ExternalDns
4044
}

nexus/db-model/src/inventory.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -985,6 +985,7 @@ impl_enum_type!(
985985
BoundaryNtp => b"boundary_ntp"
986986
Clickhouse => b"clickhouse"
987987
ClickhouseKeeper => b"clickhouse_keeper"
988+
ClickhouseServer => b"clickhouse_server"
988989
CockroachDb => b"cockroach_db"
989990
Crucible => b"crucible"
990991
CruciblePantry => b"crucible_pantry"
@@ -1001,6 +1002,7 @@ impl From<ZoneType> for ServiceKind {
10011002
ZoneType::BoundaryNtp | ZoneType::InternalNtp => Self::Ntp,
10021003
ZoneType::Clickhouse => Self::Clickhouse,
10031004
ZoneType::ClickhouseKeeper => Self::ClickhouseKeeper,
1005+
ZoneType::ClickhouseServer => Self::ClickhouseServer,
10041006
ZoneType::CockroachDb => Self::Cockroach,
10051007
ZoneType::Crucible => Self::Crucible,
10061008
ZoneType::CruciblePantry => Self::CruciblePantry,
@@ -1020,6 +1022,7 @@ impl From<ZoneType> for nexus_sled_agent_shared::inventory::ZoneKind {
10201022
ZoneType::BoundaryNtp => BoundaryNtp,
10211023
ZoneType::Clickhouse => Clickhouse,
10221024
ZoneType::ClickhouseKeeper => ClickhouseKeeper,
1025+
ZoneType::ClickhouseServer => ClickhouseServer,
10231026
ZoneType::CockroachDb => CockroachDb,
10241027
ZoneType::Crucible => Crucible,
10251028
ZoneType::CruciblePantry => CruciblePantry,
@@ -1040,6 +1043,7 @@ impl From<nexus_sled_agent_shared::inventory::ZoneKind> for ZoneType {
10401043
BoundaryNtp => ZoneType::BoundaryNtp,
10411044
Clickhouse => ZoneType::Clickhouse,
10421045
ClickhouseKeeper => ZoneType::ClickhouseKeeper,
1046+
ClickhouseServer => ZoneType::ClickhouseServer,
10431047
CockroachDb => ZoneType::CockroachDb,
10441048
Crucible => ZoneType::Crucible,
10451049
CruciblePantry => ZoneType::CruciblePantry,

nexus/db-model/src/omicron_zone_config.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ impl OmicronZone {
109109
OmicronZoneType::ClickhouseKeeper { address, dataset } => {
110110
(ZoneType::ClickhouseKeeper, address, Some(dataset))
111111
}
112+
OmicronZoneType::ClickhouseServer { address, dataset } => {
113+
(ZoneType::ClickhouseServer, address, Some(dataset))
114+
}
112115
OmicronZoneType::CockroachDb { address, dataset } => {
113116
(ZoneType::CockroachDb, address, Some(dataset))
114117
}
@@ -258,6 +261,12 @@ impl OmicronZone {
258261
dataset: common.dataset?,
259262
},
260263
),
264+
ZoneType::ClickhouseServer => BlueprintZoneType::ClickhouseServer(
265+
blueprint_zone_type::ClickhouseServer {
266+
address,
267+
dataset: common.dataset?,
268+
},
269+
),
261270
ZoneType::CockroachDb => BlueprintZoneType::CockroachDb(
262271
blueprint_zone_type::CockroachDb {
263272
address,
@@ -392,6 +401,10 @@ impl OmicronZone {
392401
address,
393402
dataset: common.dataset?,
394403
},
404+
ZoneType::ClickhouseServer => OmicronZoneType::ClickhouseServer {
405+
address,
406+
dataset: common.dataset?,
407+
},
395408
ZoneType::CockroachDb => OmicronZoneType::CockroachDb {
396409
address,
397410
dataset: common.dataset?,

nexus/db-model/src/schema_versions.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use std::collections::BTreeMap;
1717
///
1818
/// This must be updated when you change the database schema. Refer to
1919
/// schema/crdb/README.adoc in the root of this repository for details.
20-
pub const SCHEMA_VERSION: SemverVersion = SemverVersion::new(86, 0, 0);
20+
pub const SCHEMA_VERSION: SemverVersion = SemverVersion::new(87, 0, 0);
2121

2222
/// List of all past database schema versions, in *reverse* order
2323
///
@@ -29,6 +29,7 @@ static KNOWN_VERSIONS: Lazy<Vec<KnownVersion>> = Lazy::new(|| {
2929
// | leaving the first copy as an example for the next person.
3030
// v
3131
// KnownVersion::new(next_int, "unique-dirname-with-the-sql-files"),
32+
KnownVersion::new(87, "add-clickhouse-server-enum-variants"),
3233
KnownVersion::new(86, "snapshot-replacement"),
3334
KnownVersion::new(85, "add-migrations-by-time-created-index"),
3435
KnownVersion::new(84, "region-read-only"),

nexus/db-model/src/service_kind.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ impl_enum_type!(
2020
// Enum values
2121
Clickhouse => b"clickhouse"
2222
ClickhouseKeeper => b"clickhouse_keeper"
23+
ClickhouseServer => b"clickhouse_server"
2324
Cockroach => b"cockroach"
2425
Crucible => b"crucible"
2526
CruciblePantry => b"crucible_pantry"

nexus/db-queries/src/db/datastore/deployment/external_networking.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,7 @@ impl DataStore {
327327
ZoneKind::Nexus => &*NEXUS_VPC_SUBNET,
328328
ZoneKind::Clickhouse
329329
| ZoneKind::ClickhouseKeeper
330+
| ZoneKind::ClickhouseServer
330331
| ZoneKind::CockroachDb
331332
| ZoneKind::Crucible
332333
| ZoneKind::CruciblePantry

0 commit comments

Comments
 (0)