Skip to content

Commit fe4cfdb

Browse files
[multicast] Bump dendrite to dendrite-232 and remove recovery path
1 parent 56b8e64 commit fe4cfdb

6 files changed

Lines changed: 40 additions & 136 deletions

File tree

Cargo.lock

Lines changed: 15 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ digest = "0.10.7"
477477
dns-server = { path = "dns-server" }
478478
dns-server-api = { path = "dns-server-api" }
479479
dns-service-client = { path = "clients/dns-service-client" }
480-
dpd-client = { git = "https://github.com/oxidecomputer/dendrite", rev = "f20f786e67c86388dfaaf0ef3aa9d2693dfe1da4" }
480+
dpd-client = { git = "https://github.com/oxidecomputer/dendrite", rev = "5a4f56eede22d9a4484b6b28864306b1e4759f37" }
481481
dropshot = { version = "0.16.6", features = [ "usdt-probes" ] }
482482
dropshot-api-manager = "0.5.2"
483483
dropshot-api-manager-types = "0.5.2"

nexus/src/app/multicast/dataplane.rs

Lines changed: 15 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ use std::net::IpAddr;
4343

4444
use futures::future::try_join_all;
4545
use oxnet::MulticastMac;
46-
use slog::{Logger, debug, error, info, warn};
46+
use slog::{Logger, debug, error, info};
4747

4848
use dpd_client::Error as DpdError;
4949
use dpd_client::types::{
@@ -927,116 +927,20 @@ impl MulticastDataplaneClient {
927927
&underlay_ip_admin, &tag, &update_entry)
928928
.await;
929929

930-
match update_res {
931-
Ok(_) => {}
932-
Err(DpdError::ErrorResponse(ref resp))
933-
if resp.status() == reqwest::StatusCode::NOT_FOUND
934-
|| resp.status()
935-
== reqwest::StatusCode::INTERNAL_SERVER_ERROR =>
936-
{
937-
// 404: Group disappeared (race or external cleanup)
938-
// 500: ASIC state inconsistent with DPD DB
939-
//
940-
// In both cases, delete and recreate with the updated members.
941-
info!(
942-
log,
943-
"underlay update failed, attempting delete+recreate";
944-
"underlay_ip" => %underlay_ip,
945-
"switch" => %location,
946-
"operation" => %operation_name,
947-
"status" => %resp.status(),
948-
"dpd_operation" => "modify_group_membership_recreate"
949-
);
950-
951-
// TODO: this `reset_by_tag` fallback can be removed
952-
// once DPD's `modify_group_internal` calls
953-
// `process_membership_changes` in the
954-
// empty-transition arm, preventing the 500 that
955-
// triggers this recovery path.
956-
// See https://github.com/oxidecomputer/dendrite/pull/232
957-
//
958-
// Try to delete the stale underlay group. If this
959-
// fails because the underlay group is still
960-
// referenced by an external group via NAT target,
961-
// fall back to `reset_by_tag`, which deletes
962-
// external groups first so the ASIC state is clean
963-
// for the next reconciler pass.
964-
if let Err(del_err) = client
965-
.multicast_group_delete(&underlay_ip, &tag)
966-
.await
967-
{
968-
warn!(
969-
log,
970-
"underlay delete failed, resetting all \
971-
groups by tag for clean ASIC state";
972-
"underlay_ip" => %underlay_ip,
973-
"switch" => %location,
974-
"delete_error" => %del_err,
975-
"dpd_operation" => "modify_group_membership_recreate"
976-
);
977-
978-
if let Err(reset_err) = client
979-
.multicast_reset_by_tag(&tag)
980-
.await
981-
{
982-
error!(
983-
log,
984-
"tag reset also failed during recovery";
985-
"underlay_ip" => %underlay_ip,
986-
"switch" => %location,
987-
"error" => %reset_err,
988-
"dpd_operation" => "modify_group_membership_recreate"
989-
);
990-
}
991-
992-
// Return error so the reconciler retries.
993-
// Drift correction will recreate the groups
994-
// with clean ASIC state on the next pass.
995-
return Err(Error::internal_error(&format!(
996-
"underlay group recovery on {location}: \
997-
reset by tag after delete failed ({del_err})"
998-
)));
999-
}
1000-
1001-
// Recreate with the updated members
1002-
let create_entry = MulticastGroupCreateUnderlayEntry {
1003-
group_ip: underlay_ip_admin.clone(),
1004-
members: update_entry.members,
1005-
tag: underlay_group.tag.clone(),
1006-
};
1007-
1008-
client
1009-
.multicast_group_create_underlay(&create_entry)
1010-
.await
1011-
.map_err(|e| {
1012-
error!(
1013-
log,
1014-
"underlay recreate with members failed";
1015-
"underlay_ip" => %underlay_ip,
1016-
"switch" => %location,
1017-
"error" => %e,
1018-
"dpd_operation" => "modify_group_membership_recreate"
1019-
);
1020-
Error::internal_error(&format!(
1021-
"underlay recreate with members failed on {location}: {e}"
1022-
))
1023-
})?;
1024-
}
1025-
Err(e) => {
1026-
error!(
1027-
log,
1028-
"underlay member modify failed";
1029-
"operation_name" => %operation_name,
1030-
"underlay_ip" => %underlay_ip,
1031-
"switch" => %location,
1032-
"error" => %e,
1033-
"dpd_operation" => "modify_group_membership_update"
1034-
);
1035-
return Err(Error::internal_error(&format!(
1036-
"underlay member modify failed on {location}: {e}"
1037-
)));
1038-
}
1039-
}
930+
update_res.map_err(|e| {
931+
error!(
932+
log,
933+
"underlay member modify failed";
934+
"operation_name" => %operation_name,
935+
"underlay_ip" => %underlay_ip,
936+
"switch" => %location,
937+
"error" => %e,
938+
"dpd_operation" => "modify_group_membership_update"
939+
);
940+
Error::internal_error(&format!(
941+
"underlay member modify failed on {location}: {e}"
942+
))
943+
})?;
1040944

1041945
info!(
1042946
log,

package-manifest.toml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -748,8 +748,8 @@ only_for_targets.image = "standard"
748748
# the other `source.*` keys.
749749
source.type = "prebuilt"
750750
source.repo = "dendrite"
751-
source.commit = "f20f786e67c86388dfaaf0ef3aa9d2693dfe1da4"
752-
source.sha256 = "877bb1cf5050825254befb9c259de7e362178613f1bacc8970af8c0a1f2f5fa5"
751+
source.commit = "5a4f56eede22d9a4484b6b28864306b1e4759f37"
752+
source.sha256 = "d5ffbf943805a3a72cd7a954b0ca2aec6530d21555ab5e7fcb3c75d8da7f5142"
753753
output.type = "zone"
754754
output.intermediate_only = true
755755

@@ -775,8 +775,8 @@ only_for_targets.image = "standard"
775775
# the other `source.*` keys.
776776
source.type = "prebuilt"
777777
source.repo = "dendrite"
778-
source.commit = "f20f786e67c86388dfaaf0ef3aa9d2693dfe1da4"
779-
source.sha256 = "f30deb7c2989027ee0a3a9d67250b6ed107b7d1740fddfc81f97900c92bc7520"
778+
source.commit = "5a4f56eede22d9a4484b6b28864306b1e4759f37"
779+
source.sha256 = "85e2e2c6cc5e3daa346c20d5641cf9c8dc7dc9d15eaf61073e5002cf307b85f9"
780780
output.type = "zone"
781781
output.intermediate_only = true
782782

@@ -795,8 +795,8 @@ only_for_targets.image = "standard"
795795
# the other `source.*` keys.
796796
source.type = "prebuilt"
797797
source.repo = "dendrite"
798-
source.commit = "f20f786e67c86388dfaaf0ef3aa9d2693dfe1da4"
799-
source.sha256 = "3f89230b0220e1e4e2797a00c202f5fae32dfba875cc7570f3f3681ea353d40b"
798+
source.commit = "5a4f56eede22d9a4484b6b28864306b1e4759f37"
799+
source.sha256 = "91217466293c47f6d964e55a9b54bac6c3a1a9d5580fa6a59eb218b850b2ade1"
800800
output.type = "zone"
801801
output.intermediate_only = true
802802

tools/dendrite_stub_checksums

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
CIDL_SHA256_ILLUMOS="877bb1cf5050825254befb9c259de7e362178613f1bacc8970af8c0a1f2f5fa5"
2-
CIDL_SHA256_LINUX_DPD="87a0bd1dd16e33a095bddd713006a9de70c6444525e796c0c066a87d6284cd0d"
1+
CIDL_SHA256_ILLUMOS="d5ffbf943805a3a72cd7a954b0ca2aec6530d21555ab5e7fcb3c75d8da7f5142"
2+
CIDL_SHA256_LINUX_DPD="cc3f34b9e85cd73b1563abbe9506c5589c1cf6d7aed0dccf5de38e9fb565dd3d"
33
CIDL_SHA256_LINUX_SWADM="b059fde4e6859b2f7aaf2b3ade268a0cdbd5b696a0c8552e1c7d22e59680dbef"

tools/dendrite_version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
COMMIT="f20f786e67c86388dfaaf0ef3aa9d2693dfe1da4"
1+
COMMIT="5a4f56eede22d9a4484b6b28864306b1e4759f37"

0 commit comments

Comments
 (0)