Skip to content

[reconfigurator] blueprint builder: backfill filesystem_pool#7450

Merged
jgallagher merged 5 commits into
mainfrom
john/backfill-filesystem-pool-2
Feb 5, 2025
Merged

[reconfigurator] blueprint builder: backfill filesystem_pool#7450
jgallagher merged 5 commits into
mainfrom
john/backfill-filesystem-pool-2

Conversation

@jgallagher

Copy link
Copy Markdown
Contributor

This builds on #7449 and, in combination with it, fixes #7229.

When planning a new blueprint, one of the first things we now do is loop over all in-service zones on all active sleds and check that their filesystem_pool is consistent with the latest inventory collection from that sled. The expectation here is that we'll be filling in filesystem_pool: None values from older systems (i.e., #7229). There's also an edge case where we might need to correct our own incorrect backfills, if a sled-agent has restarted since the inventory collection was taken and has chosen a different zpool for some zone.

If we can't find what the correct filesystem pool should be (e.g., if the sled isn't present in inventory at all, or none of its zpool/dataset combinations match the zone), we leave the filesystem_pool value untouched.

I'll put testing notes from a4x2 in a comment below.

@jgallagher

Copy link
Copy Markdown
Contributor Author

To test on a4x2, I built a patch on top of this branch that forced RSS to fill in filesystem_pool: None for all the zone configs it creates (and therefore its initial blueprint as well). After deploying that and enabling blueprint execution, sled-agent logged that no zones configs were changing, as expected:

21:13:30.782Z INFO SledAgent (ServiceManager): ensure_all_omicron_zones: request reconciliation done
    file = sled-agent/src/services.rs:4829
    num_zones_to_be_added = 0
    num_zones_to_be_removed = 0

Then, I used omdb to generate a new blueprint. It showed changes to all sleds consistent with setting filesystem_pool values and creating those datasets. Example from one such modified sled:

  sled e0c06b89-4ca9-45aa-9dd9-3e06760282df (active):

    physical disks at generation 2:
    -------------------------------------------------------------
    vendor             model                serial
    -------------------------------------------------------------
    synthetic-vendor   synthetic-model-U2   synthetic-serial-g3_0
    synthetic-vendor   synthetic-model-U2   synthetic-serial-g3_1
    synthetic-vendor   synthetic-model-U2   synthetic-serial-g3_2
    synthetic-vendor   synthetic-model-U2   synthetic-serial-g3_3
    synthetic-vendor   synthetic-model-U2   synthetic-serial-g3_4


    datasets generation 1 -> 2:
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    dataset name                                                                                                   dataset uuid                           quota     reservation   compression
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    oxp_dd9319dd-833d-4efb-9471-bbb88ff79f62/crypt/cockroachdb                                                     fe211af8-2e2f-4ab7-9641-93f0bf18456e   none      none          off
    oxp_515398da-e9a1-4452-ab92-0cf05a6186a9/crucible                                                              a43934fb-d4ec-4709-81cc-507d23b6d6a8   none      none          off
    oxp_53439e8d-d796-40a1-ac36-05d0b2b201cd/crucible                                                              0e2131af-afaa-404f-a379-e0cd5bcb1d8e   none      none          off
    oxp_b1dede5e-b3ec-48c4-9610-5ae90a0c7f61/crucible                                                              784c4fb0-86c2-4ad3-8679-0e4c7373efbc   none      none          off
    oxp_c21a7ece-f899-4e63-9320-c596657bee2d/crucible                                                              9a118cbe-11d6-42b5-9412-f1943362670d   none      none          off
    oxp_dd9319dd-833d-4efb-9471-bbb88ff79f62/crucible                                                              b9b5d333-77d4-497c-97d3-1486dd7c3c1b   none      none          off
    oxp_dd9319dd-833d-4efb-9471-bbb88ff79f62/crypt/clickhouse                                                      ba4280e1-34c7-4bb2-8aec-74f72a43b86c   none      none          off
    oxp_dd9319dd-833d-4efb-9471-bbb88ff79f62/crypt/external_dns                                                    896b76e4-4878-4d66-aaec-ccbaee0057de   none      none          off
    oxp_dd9319dd-833d-4efb-9471-bbb88ff79f62/crypt/internal_dns                                                    9ff02e04-5f88-4316-89d2-5b180cfe0340   none      none          off
    oxp_515398da-e9a1-4452-ab92-0cf05a6186a9/crypt/zone                                                            b211dbad-d096-4d52-9d72-93951d95b280   none      none          off
    oxp_53439e8d-d796-40a1-ac36-05d0b2b201cd/crypt/zone                                                            9f380c5e-d00f-4827-90d6-57652f1d4ce9   none      none          off
    oxp_b1dede5e-b3ec-48c4-9610-5ae90a0c7f61/crypt/zone                                                            91f7cbf9-f4b2-4b89-b0e6-724328542b06   none      none          off
    oxp_c21a7ece-f899-4e63-9320-c596657bee2d/crypt/zone                                                            40055fb3-9d19-45d1-b6dc-e824dddc1b79   none      none          off
    oxp_dd9319dd-833d-4efb-9471-bbb88ff79f62/crypt/zone                                                            d7b173b7-b918-4b36-8841-f4618e35f5ad   none      none          off
    oxp_515398da-e9a1-4452-ab92-0cf05a6186a9/crypt/debug                                                           7fb4e94e-127b-4c4a-b3eb-d3274ffc9ea8   100 GiB   none          gzip-9
    oxp_53439e8d-d796-40a1-ac36-05d0b2b201cd/crypt/debug                                                           9627a380-5e3c-488f-b784-08c1a415b618   100 GiB   none          gzip-9
    oxp_b1dede5e-b3ec-48c4-9610-5ae90a0c7f61/crypt/debug                                                           f8fb9105-6bb0-46f0-b7da-b81a42e1af80   100 GiB   none          gzip-9
    oxp_c21a7ece-f899-4e63-9320-c596657bee2d/crypt/debug                                                           f75d7a83-d30c-4c6a-889f-3a9a4c098b66   100 GiB   none          gzip-9
    oxp_dd9319dd-833d-4efb-9471-bbb88ff79f62/crypt/debug                                                           635c5bdb-2070-422c-bc94-c2b499aa3982   100 GiB   none          gzip-9
+   oxp_dd9319dd-833d-4efb-9471-bbb88ff79f62/crypt/zone/oxz_clickhouse_46355b7b-8000-42e6-947f-c9c9836ffe5c        af5cf628-919b-42d8-bc7d-d3c76cd8b4de   none      none          off
+   oxp_dd9319dd-833d-4efb-9471-bbb88ff79f62/crypt/zone/oxz_cockroachdb_f5c4b6cd-bb5c-460d-b3ce-0832581f9451       a4db9dc0-f111-41cf-8588-17ae4d68f15a   none      none          off
+   oxp_dd9319dd-833d-4efb-9471-bbb88ff79f62/crypt/zone/oxz_crucible_03829f43-ba14-4de6-bc37-84ced42a51b3          62b1e4f0-1806-418b-99cd-6e3489408e43   none      none          off
+   oxp_b1dede5e-b3ec-48c4-9610-5ae90a0c7f61/crypt/zone/oxz_crucible_0ad74d87-d407-4ca0-bfc1-2da2f28b1b61          8cfcc4b0-74ca-4ea6-92a9-552a6ce7853e   none      none          off
+   oxp_53439e8d-d796-40a1-ac36-05d0b2b201cd/crypt/zone/oxz_crucible_831c3fc4-9ee3-4bed-b8a5-0a504fce3799          9955378e-c24a-49ce-99d7-6f325b253c63   none      none          off
+   oxp_515398da-e9a1-4452-ab92-0cf05a6186a9/crypt/zone/oxz_crucible_b05c275a-2dc4-433e-bd49-887565154c26          909fcf0a-4ca1-4029-8863-9737d30a285c   none      none          off
+   oxp_c21a7ece-f899-4e63-9320-c596657bee2d/crypt/zone/oxz_crucible_c12a80bc-e300-4aea-a311-bbe620b80787          96e9ff61-6cf1-4436-aa5c-d27bbd1a4e43   none      none          off
+   oxp_b1dede5e-b3ec-48c4-9610-5ae90a0c7f61/crypt/zone/oxz_crucible_pantry_83bdbb6b-f202-4859-ab8c-da15865885ed   a7cf1957-f534-4c0c-9be0-0ec104406861   none      none          off
+   oxp_dd9319dd-833d-4efb-9471-bbb88ff79f62/crypt/zone/oxz_external_dns_0181051b-3c57-481f-b2cb-217a5f7b964c      bbd117fc-a297-4bc5-b2e7-fb0e325e5f86   none      none          off
+   oxp_dd9319dd-833d-4efb-9471-bbb88ff79f62/crypt/zone/oxz_internal_dns_306685e3-eca1-4959-858a-4ae872c9ae57      84b7eaa7-516c-4d6d-a123-f12a3ffd8eca   none      none          off
+   oxp_c21a7ece-f899-4e63-9320-c596657bee2d/crypt/zone/oxz_nexus_6a87d047-8938-424d-b3af-c1d34ef3cc04             6a45eb07-51c1-464d-84ce-a13af83da946   none      none          off
+   oxp_515398da-e9a1-4452-ab92-0cf05a6186a9/crypt/zone/oxz_ntp_efb7450f-bc99-4b59-9b2c-09fa55497480               c23828ce-323f-4bce-82ed-f6957e9ae888   none      none          off


    omicron zones generation 5 -> 6:
    ---------------------------------------------------------------------------------------------
    zone type         zone id                                disposition    underlay IP
    ---------------------------------------------------------------------------------------------
*   clickhouse        46355b7b-8000-42e6-947f-c9c9836ffe5c   - in service   fd00:1122:3344:103::6
     └─                                                      + in service
*   cockroach_db      f5c4b6cd-bb5c-460d-b3ce-0832581f9451   - in service   fd00:1122:3344:103::3
     └─                                                      + in service
*   crucible          03829f43-ba14-4de6-bc37-84ced42a51b3   - in service   fd00:1122:3344:103::8
     └─                                                      + in service
*   crucible          0ad74d87-d407-4ca0-bfc1-2da2f28b1b61   - in service   fd00:1122:3344:103::c
     └─                                                      + in service
*   crucible          831c3fc4-9ee3-4bed-b8a5-0a504fce3799   - in service   fd00:1122:3344:103::9
     └─                                                      + in service
*   crucible          b05c275a-2dc4-433e-bd49-887565154c26   - in service   fd00:1122:3344:103::a
     └─                                                      + in service
*   crucible          c12a80bc-e300-4aea-a311-bbe620b80787   - in service   fd00:1122:3344:103::b
     └─                                                      + in service
*   crucible_pantry   83bdbb6b-f202-4859-ab8c-da15865885ed   - in service   fd00:1122:3344:103::7
     └─                                                      + in service
*   external_dns      0181051b-3c57-481f-b2cb-217a5f7b964c   - in service   fd00:1122:3344:103::4
     └─                                                      + in service
*   internal_dns      306685e3-eca1-4959-858a-4ae872c9ae57   - in service   fd00:1122:3344:3::1
     └─                                                      + in service
*   internal_ntp      efb7450f-bc99-4b59-9b2c-09fa55497480   - in service   fd00:1122:3344:103::d
     └─                                                      + in service
*   nexus             6a87d047-8938-424d-b3af-c1d34ef3cc04   - in service   fd00:1122:3344:103::5
     └─                                                      + in service

(The zone diff here is not particularly useful! The only field that changed is filesystem_pool. cc @andrewjstone)

I did not make this new blueprint the target. Instead, I created a different blueprint by manually editing this one, and changed the filesystem_pool (and the corresponding dataset) for one Crucible Pantry zone on one sled to be the wrong pool, to emulate the sled having restarted since the inventory collection was taken and placing the pantry zone on a different pool. I then imported this edited blueprint and made it the target.

omdb reported the expected error from the blueprint execution task:

      caused by:      Error Response: status: 400 Bad Request; headers: {"content-type": "application/json", "x-request-id": "fb369152-64d6-4899-8802-62d903d47b85", "content-length": "303", "date": "Thu, 30 Jan 2025 21:17:38 GMT"}; value: Error { error_code: Some("InvalidRequest"), message: "Invalid filesystem_pool in new zone config: for zone 046bd1f3-f821-41bf-b87c-86987a24b13e, expected pool oxp_486f8961-df15-4df3-9b37-200d596a27cd but got oxp_c12fe7b4-a981-410e-bef1-13fd4308af31", request_id: "fb369152-64d6-4899-8802-62d903d47b85" }

and the sled-agent logs from that sled confirm it:

21:17:38.403Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: 019a05e3-65f7-4127-9947-4f66f2a869a2 (service), filesystem_pool: Some(ZpoolName { id: c12fe7b4-a981-410e-bef1-13fd4308af31 (zpool), kind: External }), zone_type: Crucible { address: [fd00:1122:3344:102::c]:32345, dataset: OmicronZoneDataset { pool_name: ZpoolName { id: c12fe7b4-a981-410e-bef1-13fd4308af31 (zpool), kind: External } } } }
21:17:38.403Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: 031e99c5-82ca-4a31-8ea7-d62c15c4a32a (service), filesystem_pool: Some(ZpoolName { id: d78be107-07b9-4b86-b862-f96aa7758079 (zpool), kind: External }), zone_type: Crucible { address: [fd00:1122:3344:102::8]:32345, dataset: OmicronZoneDataset { pool_name: ZpoolName { id: d78be107-07b9-4b86-b862-f96aa7758079 (zpool), kind: External } } } }
21:17:38.403Z ERRO SledAgent (ServiceManager): fix-7229: rejected new zone config that changes only filesystem_pool (incorrect pool)
    expected_pool = oxp_486f8961-df15-4df3-9b37-200d596a27cd
    file = sled-agent/src/services.rs:4796
    new_config = OmicronZoneConfig { id: 046bd1f3-f821-41bf-b87c-86987a24b13e (service), filesystem_pool: Some(ZpoolName { id: c12fe7b4-a981-410e-bef1-13fd4308af31 (zpool), kind: External }), zone_type: CruciblePantry { address: [fd00:1122:3344:102::7]:17000 } }

Execution succeeded in sending the new zone configs to the other sleds. On each of them, the first PUT /omicron-zones containing the new filesystem_pools produced a spate of logs for each of the corrected zones; e.g.,

21:17:38.667Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: 0181051b-3c57-481f-b2cb-217a5f7b964c (service), filesystem_pool: Some(ZpoolName { id: dd9319dd-833d-4efb-9471-bbb88ff79f62 (zpool), kind: External }), zone_type: ExternalDns { dataset: OmicronZoneDataset { pool_name: ZpoolName { id: dd9319dd-833d-4efb-9471-bbb88ff79f62 (zpool), kind: External } }, http_address: [fd00:1122:3344:103::4]:5353, dns_address: 198.51.100.20:53, nic: NetworkInterface { id: d8f4cae8-8c07-4e60-a2f1-1ccdb3545a4c, kind: Service { id: 0181051b-3c57-481f-b2cb-217a5f7b964c }, name: Name("external-dns-0181051b-3c57-481f-b2cb-217a5f7b964c"), ip: 172.30.1.5, mac: MacAddr(MacAddr6([168, 64, 37, 255, 155, 32])), subnet: V4(Ipv4Net { addr: 172.30.1.0, width: 24 }), vni: Vni(100), primary: true, slot: 0, transit_ips: [] } } }
21:17:38.668Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: 03829f43-ba14-4de6-bc37-84ced42a51b3 (service), filesystem_pool: Some(ZpoolName { id: dd9319dd-833d-4efb-9471-bbb88ff79f62 (zpool), kind: External }), zone_type: Crucible { address: [fd00:1122:3344:103::8]:32345, dataset: OmicronZoneDataset { pool_name: ZpoolName { id: dd9319dd-833d-4efb-9471-bbb88ff79f62 (zpool), kind: External } } } }
21:17:38.668Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: 0ad74d87-d407-4ca0-bfc1-2da2f28b1b61 (service), filesystem_pool: Some(ZpoolName { id: b1dede5e-b3ec-48c4-9610-5ae90a0c7f61 (zpool), kind: External }), zone_type: Crucible { address: [fd00:1122:3344:103::c]:32345, dataset: OmicronZoneDataset { pool_name: ZpoolName { id: b1dede5e-b3ec-48c4-9610-5ae90a0c7f61 (zpool), kind: External } } } }
21:17:38.668Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: 306685e3-eca1-4959-858a-4ae872c9ae57 (service), filesystem_pool: Some(ZpoolName { id: dd9319dd-833d-4efb-9471-bbb88ff79f62 (zpool), kind: External }), zone_type: InternalDns { dataset: OmicronZoneDataset { pool_name: ZpoolName { id: dd9319dd-833d-4efb-9471-bbb88ff79f62 (zpool), kind: External } }, http_address: [fd00:1122:3344:3::1]:5353, dns_address: [fd00:1122:3344:3::1]:53, gz_address: fd00:1122:3344:3::2, gz_address_index: 2 } }
21:17:38.668Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: 46355b7b-8000-42e6-947f-c9c9836ffe5c (service), filesystem_pool: Some(ZpoolName { id: dd9319dd-833d-4efb-9471-bbb88ff79f62 (zpool), kind: External }), zone_type: Clickhouse { address: [fd00:1122:3344:103::6]:8123, dataset: OmicronZoneDataset { pool_name: ZpoolName { id: dd9319dd-833d-4efb-9471-bbb88ff79f62 (zpool), kind: External } } } }
21:17:38.668Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: 6a87d047-8938-424d-b3af-c1d34ef3cc04 (service), filesystem_pool: Some(ZpoolName { id: c21a7ece-f899-4e63-9320-c596657bee2d (zpool), kind: External }), zone_type: Nexus { internal_address: [fd00:1122:3344:103::5]:12221, external_ip: 198.51.100.23, nic: NetworkInterface { id: 5f47f08d-ad1b-484d-8928-56e75ade0ace, kind: Service { id: 6a87d047-8938-424d-b3af-c1d34ef3cc04 }, name: Name("nexus-6a87d047-8938-424d-b3af-c1d34ef3cc04"), ip: 172.30.2.6, mac: MacAddr(MacAddr6([168, 64, 37, 255, 187, 126])), subnet: V4(Ipv4Net { addr: 172.30.2.0, width: 24 }), vni: Vni(100), primary: true, slot: 0, transit_ips: [] }, external_tls: false, external_dns_servers: [1.1.1.1, 9.9.9.9] } }
21:17:38.668Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: 831c3fc4-9ee3-4bed-b8a5-0a504fce3799 (service), filesystem_pool: Some(ZpoolName { id: 53439e8d-d796-40a1-ac36-05d0b2b201cd (zpool), kind: External }), zone_type: Crucible { address: [fd00:1122:3344:103::9]:32345, dataset: OmicronZoneDataset { pool_name: ZpoolName { id: 53439e8d-d796-40a1-ac36-05d0b2b201cd (zpool), kind: External } } } }
21:17:38.668Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: 83bdbb6b-f202-4859-ab8c-da15865885ed (service), filesystem_pool: Some(ZpoolName { id: b1dede5e-b3ec-48c4-9610-5ae90a0c7f61 (zpool), kind: External }), zone_type: CruciblePantry { address: [fd00:1122:3344:103::7]:17000 } }
21:17:38.668Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: b05c275a-2dc4-433e-bd49-887565154c26 (service), filesystem_pool: Some(ZpoolName { id: 515398da-e9a1-4452-ab92-0cf05a6186a9 (zpool), kind: External }), zone_type: Crucible { address: [fd00:1122:3344:103::a]:32345, dataset: OmicronZoneDataset { pool_name: ZpoolName { id: 515398da-e9a1-4452-ab92-0cf05a6186a9 (zpool), kind: External } } } }
21:17:38.668Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: c12a80bc-e300-4aea-a311-bbe620b80787 (service), filesystem_pool: Some(ZpoolName { id: c21a7ece-f899-4e63-9320-c596657bee2d (zpool), kind: External }), zone_type: Crucible { address: [fd00:1122:3344:103::b]:32345, dataset: OmicronZoneDataset { pool_name: ZpoolName { id: c21a7ece-f899-4e63-9320-c596657bee2d (zpool), kind: External } } } }
21:17:38.668Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: efb7450f-bc99-4b59-9b2c-09fa55497480 (service), filesystem_pool: Some(ZpoolName { id: 515398da-e9a1-4452-ab92-0cf05a6186a9 (zpool), kind: External }), zone_type: InternalNtp { address: [fd00:1122:3344:103::d]:123 } }
21:17:38.668Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: f5c4b6cd-bb5c-460d-b3ce-0832581f9451 (service), filesystem_pool: Some(ZpoolName { id: dd9319dd-833d-4efb-9471-bbb88ff79f62 (zpool), kind: External }), zone_type: CockroachDb { address: [fd00:1122:3344:103::3]:32221, dataset: OmicronZoneDataset { pool_name: ZpoolName { id: dd9319dd-833d-4efb-9471-bbb88ff79f62 (zpool), kind: External } } } }
21:17:38.668Z INFO SledAgent (ServiceManager): ensure_all_omicron_zones: request reconciliation done
    file = sled-agent/src/services.rs:4829
    num_zones_to_be_added = 0
    num_zones_to_be_removed = 0

and all subsequent PUT /omicron-zones reported no changes as expected:

21:17:39.876Z INFO SledAgent (ServiceManager): ensure_all_omicron_zones: request reconciliation done
    file = sled-agent/src/services.rs:4829
    num_zones_to_be_added = 0
    num_zones_to_be_removed = 0

I then used omdb to generate a new blueprint. It corrected the one pantry zone I had manually made incorrect, although the diff is nearly useless (again cc @andrewjstone :)):

 MODIFIED SLEDS:

  sled 92eecbea-6c64-4a1b-9d8d-d8c646847533 (active):

    physical disks at generation 2:
    -------------------------------------------------------------
    vendor             model                serial
    -------------------------------------------------------------
    synthetic-vendor   synthetic-model-U2   synthetic-serial-g1_0
    synthetic-vendor   synthetic-model-U2   synthetic-serial-g1_1
    synthetic-vendor   synthetic-model-U2   synthetic-serial-g1_2
    synthetic-vendor   synthetic-model-U2   synthetic-serial-g1_3
    synthetic-vendor   synthetic-model-U2   synthetic-serial-g1_4


    datasets generation 2 -> 3:
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    dataset name                                                                                                   dataset uuid                           quota     reservation   compression
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    oxp_486f8961-df15-4df3-9b37-200d596a27cd/crypt/cockroachdb                                                     0aa3189a-40f0-4787-b88b-640f18e9e6a5   none      none          off
    oxp_d78be107-07b9-4b86-b862-f96aa7758079/crypt/cockroachdb                                                     6dfdca14-a07d-4764-8076-882be88692be   none      none          off
    oxp_486f8961-df15-4df3-9b37-200d596a27cd/crucible                                                              a19522e0-fe92-4868-acdb-69b118422fc7   none      none          off
    oxp_a6302368-44f5-43c3-930e-ec7da69f08e9/crucible                                                              06ba2976-a1d7-4c5a-9480-e7c5aad0bca8   none      none          off
    oxp_c12fe7b4-a981-410e-bef1-13fd4308af31/crucible                                                              7ee9af90-d023-48cf-924e-ab026e988091   none      none          off
    oxp_c17bf0a0-c3ed-4394-8753-9f6f25daba1c/crucible                                                              04547f37-9536-4cca-bc25-39f984fe259c   none      none          off
    oxp_d78be107-07b9-4b86-b862-f96aa7758079/crucible                                                              c1451811-2004-4c5e-a820-90172d67d65b   none      none          off
    oxp_d78be107-07b9-4b86-b862-f96aa7758079/crypt/internal_dns                                                    9c319d21-ae81-4c92-afe8-1ca068af7534   none      none          off
    oxp_486f8961-df15-4df3-9b37-200d596a27cd/crypt/zone                                                            30c4207b-cba7-4349-be91-abc669b69c0c   none      none          off
    oxp_a6302368-44f5-43c3-930e-ec7da69f08e9/crypt/zone                                                            a2dd55b0-de2b-46d0-b595-2058d130e939   none      none          off
    oxp_c12fe7b4-a981-410e-bef1-13fd4308af31/crypt/zone                                                            561e9ae4-06b6-4926-bfb4-c55cbf5b8133   none      none          off
    oxp_c17bf0a0-c3ed-4394-8753-9f6f25daba1c/crypt/zone                                                            cf34aa89-c529-4375-9bf1-a86869cf29b7   none      none          off
    oxp_d78be107-07b9-4b86-b862-f96aa7758079/crypt/zone                                                            6577bbaa-1d9d-44ae-8946-5edc45143fdc   none      none          off
    oxp_d78be107-07b9-4b86-b862-f96aa7758079/crypt/zone/oxz_cockroachdb_9775d2b4-974c-4c4f-8a33-84980dd51309       29f524cb-5d0b-40f3-8282-95eadfea9813   none      none          off
    oxp_486f8961-df15-4df3-9b37-200d596a27cd/crypt/zone/oxz_cockroachdb_9f03c1e9-e845-497e-939c-efe368fda93f       32178f9b-d802-4128-89b4-f69a24347838   none      none          off
    oxp_c12fe7b4-a981-410e-bef1-13fd4308af31/crypt/zone/oxz_crucible_019a05e3-65f7-4127-9947-4f66f2a869a2          243c1684-2b91-4e9f-9c21-b0ada532773d   none      none          off
    oxp_d78be107-07b9-4b86-b862-f96aa7758079/crypt/zone/oxz_crucible_031e99c5-82ca-4a31-8ea7-d62c15c4a32a          fc552588-7e8e-49d2-b0b5-50935222f1d7   none      none          off
    oxp_a6302368-44f5-43c3-930e-ec7da69f08e9/crypt/zone/oxz_crucible_44cbf396-7765-47c1-bdc4-ce12dc2c2ad8          a3ad8d01-7b89-470e-9eb9-ff8758078420   none      none          off
    oxp_486f8961-df15-4df3-9b37-200d596a27cd/crypt/zone/oxz_crucible_639f876a-fe21-441d-96b2-376f121d5574          f892233d-9ed6-478a-b833-9fea622177e5   none      none          off
    oxp_c17bf0a0-c3ed-4394-8753-9f6f25daba1c/crypt/zone/oxz_crucible_b08c8e76-e224-440e-ae7e-a395d6dea1b0          42c484ba-d2ac-4c2e-9ce8-9bfbf0652ab7   none      none          off
    oxp_d78be107-07b9-4b86-b862-f96aa7758079/crypt/zone/oxz_internal_dns_d68e6567-ab09-4ddb-bb58-9f07ed1542f8      64457c9c-9566-4b50-9eaa-7d3d37f8c513   none      none          off
    oxp_c12fe7b4-a981-410e-bef1-13fd4308af31/crypt/zone/oxz_nexus_db531863-1b75-4000-8293-0b688299e7dd             cedbbcf3-bef9-4ba7-9032-c98854d32a47   none      none          off
    oxp_486f8961-df15-4df3-9b37-200d596a27cd/crypt/zone/oxz_ntp_534aa003-a164-4696-b2ed-11f206d20c0d               a34cd8b9-60e9-487c-88ea-60f67f0b28ca   none      none          off
    oxp_c12fe7b4-a981-410e-bef1-13fd4308af31/crypt/zone/oxz_oximeter_16e46495-f9af-4945-a6ec-2d19ada84c03          5fffb220-7f2d-45d2-b62d-7a434b5a307b   none      none          off
    oxp_486f8961-df15-4df3-9b37-200d596a27cd/crypt/debug                                                           127dfb31-8edb-4aea-ab84-822b6d916aac   100 GiB   none          gzip-9
    oxp_a6302368-44f5-43c3-930e-ec7da69f08e9/crypt/debug                                                           8b5c9564-6583-4128-9d8f-eed2e7b54ff4   100 GiB   none          gzip-9
    oxp_c12fe7b4-a981-410e-bef1-13fd4308af31/crypt/debug                                                           0088a11d-144d-48bc-851e-6577cbe7a127   100 GiB   none          gzip-9
    oxp_c17bf0a0-c3ed-4394-8753-9f6f25daba1c/crypt/debug                                                           ab3beaee-5241-4228-8d4b-0850f33a8466   100 GiB   none          gzip-9
    oxp_d78be107-07b9-4b86-b862-f96aa7758079/crypt/debug                                                           6a944048-b043-4ff4-b9b2-be305464baed   100 GiB   none          gzip-9
*   oxp_c12fe7b4-a981-410e-bef1-13fd4308af31/crypt/zone/oxz_crucible_pantry_046bd1f3-f821-41bf-b87c-86987a24b13e   b97ea26e-7178-4c8d-b2eb-0179ca9ea721   none      none          off
+   oxp_486f8961-df15-4df3-9b37-200d596a27cd/crypt/zone/oxz_crucible_pantry_046bd1f3-f821-41bf-b87c-86987a24b13e   4f8a4e15-34d3-4ec0-b8a9-9c5bfc5ea138   none      none          off


    omicron zones generation 6 -> 7:
    ---------------------------------------------------------------------------------------------
    zone type         zone id                                disposition    underlay IP
    ---------------------------------------------------------------------------------------------
    boundary_ntp      534aa003-a164-4696-b2ed-11f206d20c0d   in service     fd00:1122:3344:102::d
    cockroach_db      9775d2b4-974c-4c4f-8a33-84980dd51309   in service     fd00:1122:3344:102::3
    cockroach_db      9f03c1e9-e845-497e-939c-efe368fda93f   in service     fd00:1122:3344:102::4
    crucible          019a05e3-65f7-4127-9947-4f66f2a869a2   in service     fd00:1122:3344:102::c
    crucible          031e99c5-82ca-4a31-8ea7-d62c15c4a32a   in service     fd00:1122:3344:102::8
    crucible          44cbf396-7765-47c1-bdc4-ce12dc2c2ad8   in service     fd00:1122:3344:102::b
    crucible          639f876a-fe21-441d-96b2-376f121d5574   in service     fd00:1122:3344:102::9
    crucible          b08c8e76-e224-440e-ae7e-a395d6dea1b0   in service     fd00:1122:3344:102::a
    internal_dns      d68e6567-ab09-4ddb-bb58-9f07ed1542f8   in service     fd00:1122:3344:2::1
    nexus             db531863-1b75-4000-8293-0b688299e7dd   in service     fd00:1122:3344:102::5
    oximeter          16e46495-f9af-4945-a6ec-2d19ada84c03   in service     fd00:1122:3344:102::6
*   crucible_pantry   046bd1f3-f821-41bf-b87c-86987a24b13e   - in service   fd00:1122:3344:102::7
     └─                                                      + in service

The new dataset addition is correct; for the other two, I compared the raw blueprints side by side to confirm things looked as expected.

The dataset b97ea26e-7178-4c8d-b2eb-0179ca9ea721 change was that it went from in_service to expunged:

"b97ea26e-7178-4c8d-b2eb-0179ca9ea721": {                                  |            "b97ea26e-7178-4c8d-b2eb-0179ca9ea721": {
  "disposition": "in_service",                                             |              "disposition": "expunged",
  "id": "b97ea26e-7178-4c8d-b2eb-0179ca9ea721",                            |              "id": "b97ea26e-7178-4c8d-b2eb-0179ca9ea721",
  "pool": "oxp_c12fe7b4-a981-410e-bef1-13fd4308af31",                      |              "pool": "oxp_c12fe7b4-a981-410e-bef1-13fd4308af31",
  "kind": "zone/oxz_crucible_pantry_046bd1f3-f821-41bf-b87c-86987a24b13e", |              "kind": "zone/oxz_crucible_pantry_046bd1f3-f821-41bf-b87c-86987a24b13e",
  "address": null,                                                         |              "address": null,
  "quota": null,                                                           |              "quota": null,
  "reservation": null,                                                     |              "reservation": null,
  "compression": {                                                         |              "compression": {
    "type": "off"                                                          |                "type": "off"
  }                                                                        |              }
},                                                                         |            },

and the zone 046bd1f3-f821-41bf-b87c-86987a24b13e change is that the filesystem_pool property was corrected (and the before/after values match the error logs above):

"046bd1f3-f821-41bf-b87c-86987a24b13e": {                        |            "046bd1f3-f821-41bf-b87c-86987a24b13e": {
  "disposition": "in_service",                                   |              "disposition": "in_service",
  "id": "046bd1f3-f821-41bf-b87c-86987a24b13e",                  |              "id": "046bd1f3-f821-41bf-b87c-86987a24b13e",
  "filesystem_pool": "oxp_c12fe7b4-a981-410e-bef1-13fd4308af31", |              "filesystem_pool": "oxp_486f8961-df15-4df3-9b37-200d596a27cd",
  "zone_type": {                                                 |              "zone_type": {
    "type": "crucible_pantry",                                   |                "type": "crucible_pantry",
    "address": "[fd00:1122:3344:102::7]:17000"                   |                "address": "[fd00:1122:3344:102::7]:17000"
  }                                                              |              }
},                                                               |            },

Making this blueprint the target resulted in successful execution, and we saw the same spate of "accepting new config" sled-agent logs on this sled:

21:24:05.190Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: 019a05e3-65f7-4127-9947-4f66f2a869a2 (service), filesystem_pool: Some(ZpoolName { id: c12fe7b4-a981-410e-bef1-13fd4308af31 (zpool), kind: External }), zone_type: Crucible { address: [fd00:1122:3344:102::c]:32345, dataset: OmicronZoneDataset { pool_name: ZpoolName { id: c12fe7b4-a981-410e-bef1-13fd4308af31 (zpool), kind: External } } } }
21:24:05.190Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: 031e99c5-82ca-4a31-8ea7-d62c15c4a32a (service), filesystem_pool: Some(ZpoolName { id: d78be107-07b9-4b86-b862-f96aa7758079 (zpool), kind: External }), zone_type: Crucible { address: [fd00:1122:3344:102::8]:32345, dataset: OmicronZoneDataset { pool_name: ZpoolName { id: d78be107-07b9-4b86-b862-f96aa7758079 (zpool), kind: External } } } }
21:24:05.190Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: 046bd1f3-f821-41bf-b87c-86987a24b13e (service), filesystem_pool: Some(ZpoolName { id: 486f8961-df15-4df3-9b37-200d596a27cd (zpool), kind: External }), zone_type: CruciblePantry { address: [fd00:1122:3344:102::7]:17000 } }
21:24:05.190Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: 16e46495-f9af-4945-a6ec-2d19ada84c03 (service), filesystem_pool: Some(ZpoolName { id: c12fe7b4-a981-410e-bef1-13fd4308af31 (zpool), kind: External }), zone_type: Oximeter { address: [fd00:1122:3344:102::6]:12223 } }
21:24:05.190Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: 44cbf396-7765-47c1-bdc4-ce12dc2c2ad8 (service), filesystem_pool: Some(ZpoolName { id: a6302368-44f5-43c3-930e-ec7da69f08e9 (zpool), kind: External }), zone_type: Crucible { address: [fd00:1122:3344:102::b]:32345, dataset: OmicronZoneDataset { pool_name: ZpoolName { id: a6302368-44f5-43c3-930e-ec7da69f08e9 (zpool), kind: External } } } }
21:24:05.190Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: 534aa003-a164-4696-b2ed-11f206d20c0d (service), filesystem_pool: Some(ZpoolName { id: 486f8961-df15-4df3-9b37-200d596a27cd (zpool), kind: External }), zone_type: BoundaryNtp { address: [fd00:1122:3344:102::d]:123, ntp_servers: ["time.cloudflare.com"], dns_servers: [1.1.1.1, 9.9.9.9], domain: None, nic: NetworkInterface { id: 41782335-6408-4f5c-bea8-dbc5e5a44880, kind: Service { id: 534aa003-a164-4696-b2ed-11f206d20c0d }, name: Name("ntp-534aa003-a164-4696-b2ed-11f206d20c0d"), ip: 172.30.3.6, mac: MacAddr(MacAddr6([168, 64, 37, 255, 171, 109])), subnet: V4(Ipv4Net { addr: 172.30.3.0, width: 24 }), vni: Vni(100), primary: true, slot: 0, transit_ips: [] }, snat_cfg: SourceNatConfig { ip: 198.51.100.25, first_port: 16384, last_port: 32767 } } }
21:24:05.190Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: 639f876a-fe21-441d-96b2-376f121d5574 (service), filesystem_pool: Some(ZpoolName { id: 486f8961-df15-4df3-9b37-200d596a27cd (zpool), kind: External }), zone_type: Crucible { address: [fd00:1122:3344:102::9]:32345, dataset: OmicronZoneDataset { pool_name: ZpoolName { id: 486f8961-df15-4df3-9b37-200d596a27cd (zpool), kind: External } } } }
21:24:05.190Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: 9775d2b4-974c-4c4f-8a33-84980dd51309 (service), filesystem_pool: Some(ZpoolName { id: d78be107-07b9-4b86-b862-f96aa7758079 (zpool), kind: External }), zone_type: CockroachDb { address: [fd00:1122:3344:102::3]:32221, dataset: OmicronZoneDataset { pool_name: ZpoolName { id: d78be107-07b9-4b86-b862-f96aa7758079 (zpool), kind: External } } } }
21:24:05.190Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: 9f03c1e9-e845-497e-939c-efe368fda93f (service), filesystem_pool: Some(ZpoolName { id: 486f8961-df15-4df3-9b37-200d596a27cd (zpool), kind: External }), zone_type: CockroachDb { address: [fd00:1122:3344:102::4]:32221, dataset: OmicronZoneDataset { pool_name: ZpoolName { id: 486f8961-df15-4df3-9b37-200d596a27cd (zpool), kind: External } } } }
21:24:05.190Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: b08c8e76-e224-440e-ae7e-a395d6dea1b0 (service), filesystem_pool: Some(ZpoolName { id: c17bf0a0-c3ed-4394-8753-9f6f25daba1c (zpool), kind: External }), zone_type: Crucible { address: [fd00:1122:3344:102::a]:32345, dataset: OmicronZoneDataset { pool_name: ZpoolName { id: c17bf0a0-c3ed-4394-8753-9f6f25daba1c (zpool), kind: External } } } }
21:24:05.190Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: d68e6567-ab09-4ddb-bb58-9f07ed1542f8 (service), filesystem_pool: Some(ZpoolName { id: d78be107-07b9-4b86-b862-f96aa7758079 (zpool), kind: External }), zone_type: InternalDns { dataset: OmicronZoneDataset { pool_name: ZpoolName { id: d78be107-07b9-4b86-b862-f96aa7758079 (zpool), kind: External } }, http_address: [fd00:1122:3344:2::1]:5353, dns_address: [fd00:1122:3344:2::1]:53, gz_address: fd00:1122:3344:2::2, gz_address_index: 1 } }
21:24:05.190Z INFO SledAgent (ServiceManager): fix-7229: accepted new zone config that changes only filesystem_pool
    file = sled-agent/src/services.rs:4782
    new_config = OmicronZoneConfig { id: db531863-1b75-4000-8293-0b688299e7dd (service), filesystem_pool: Some(ZpoolName { id: c12fe7b4-a981-410e-bef1-13fd4308af31 (zpool), kind: External }), zone_type: Nexus { internal_address: [fd00:1122:3344:102::5]:12221, external_ip: 198.51.100.22, nic: NetworkInterface { id: 14af2029-4b4e-4625-96e4-0eef7c3ecb8e, kind: Service { id: db531863-1b75-4000-8293-0b688299e7dd }, name: Name("nexus-db531863-1b75-4000-8293-0b688299e7dd"), ip: 172.30.2.5, mac: MacAddr(MacAddr6([168, 64, 37, 255, 131, 5])), subnet: V4(Ipv4Net { addr: 172.30.2.0, width: 24 }), vni: Vni(100), primary: true, slot: 0, transit_ips: [] }, external_tls: false, external_dns_servers: [1.1.1.1, 9.9.9.9] } }
21:24:05.191Z INFO SledAgent (ServiceManager): ensure_all_omicron_zones: request reconciliation done
    file = sled-agent/src/services.rs:4829
    num_zones_to_be_added = 0
    num_zones_to_be_removed = 0

Also as expected, that sled still has the now-expunged dataset on disk:

root@g1:~# zfs list | grep pantry
oxp_486f8961-df15-4df3-9b37-200d596a27cd/crypt/zone/oxz_crucible_pantry_046bd1f3-f821-41bf-b87c-86987a24b13e   619M  14.9G      619M  /pool/ext/486f8961-df15-4df3-9b37-200d596a27cd/crypt/zone/oxz_crucible_pantry_046bd1f3-f821-41bf-b87c-86987a24b13e
oxp_c12fe7b4-a981-410e-bef1-13fd4308af31/crypt/zone/oxz_crucible_pantry_046bd1f3-f821-41bf-b87c-86987a24b13e   200K  16.8G      200K  /pool/ext/c12fe7b4-a981-410e-bef1-13fd4308af31/crypt/zone/oxz_crucible_pantry_046bd1f3-f821-41bf-b87c-86987a24b13e

Comment thread nexus/reconfigurator/planning/src/blueprint_builder/builder.rs Outdated
Comment thread nexus/reconfigurator/planning/src/blueprint_editor/sled_editor.rs Outdated
Comment on lines +2844 to +2972
// It's possible a sled-agent could restart in between when the
// inventory collection we used for backfilling was created and when we
// try to send it the new zone configs, and in doing so it could have
// changed the zpool it chose for any zone type that doesn't have a
// durable dataset (e.g., Nexus). To emulate this, mutate our collection
// and change the zpool for sled 2's Nexus to a different zpool; our
// backfilling should correct this again, even though the parent
// blueprint has a non-`None` filesystem pool for this Nexus.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice job with this test; I know this was a bad "hypothetical", it's great to see it being covered so explicitly.

Comment thread nexus/reconfigurator/planning/src/blueprint_editor/sled_editor.rs Outdated
}
}

/// Temporary method to backfill `filesystem_pool` properties for existing

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(This doesn't need to hold up this PR, just wondering)

Given that this is a "one-time" fix, and we're labeling some of this code as "temporary", do we have a way to identify when it's removable? Presumably, we'd want to delete basically all the code in this PR at some point in the future, as clean-up. But it also seems hard to know when that'll be the case, and harder to remember as we get further away from this merging.

I bring this up partially because it seems hard - we basically need to know that inventory has been successfully collected, that a new blueprint gets created, and that blueprint execution succeeds for at least one release containing this PR. If we miss any of those requirements, it's possible that we still have filesystems needing back-filling. And even if we do back-to-back updates, it's possible that we miss one of those steps.

As I said, I don't want this discussion to hold up this PR, which does look good - but I'm curious what we could do elsewhere in the reconfigurator / as part of the release + update process to help us know when it would be "safe" to delete this code. I know historically we've done stuff like the "release scripts" to "peek into the system state before applying an update", which we could do (e.g., ensure all filesystem pools are backfilled before upgrading to a release that removes this code). Do you think we'll do something similar here?

As said, feel free to push back on me, but I'm wondering if it's worth considering this question now, while the context is still fresh in our minds.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I bring this up partially because it seems hard - we basically need to know that inventory has been successfully collected, that a new blueprint gets created, and that blueprint execution succeeds for at least one release containing this PR. If we miss any of those requirements, it's possible that we still have filesystems needing back-filling. And even if we do back-to-back updates, it's possible that we miss one of those steps.

I think we can codify this in the R13 runbook, and we can confirm it before removing this code via the reconfigurator state collected during those update windows, right? Similarly to how we confirmed #7350 was okay via the reconfigurator states collected during the R12 updates.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, seems viable. I suppose having the human-in-the-loop step is still necessary as a part of update for now, and probably the most cost-effective path forward here.

Base automatically changed from john/backfill-filesystem-pool-1 to main February 4, 2025 21:15
@jgallagher jgallagher force-pushed the john/backfill-filesystem-pool-2 branch from 466bfb1 to cba6d0e Compare February 4, 2025 21:26
@jgallagher jgallagher merged commit e036c80 into main Feb 5, 2025
@jgallagher jgallagher deleted the john/backfill-filesystem-pool-2 branch February 5, 2025 00:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

rack2: Dataset ledger and blueprint are missing zone filesystem roots

3 participants