Promote VPN pressure action to snapshot
This commit is contained in:
@@ -236,38 +236,7 @@ func smokeVPNFlowSchedulerBulkPressure() (bool, int, int, int, int, string, int,
|
||||
snapshot.PressureLevel,
|
||||
snapshot.PressureScore,
|
||||
snapshot.PressureReasons,
|
||||
smokeVPNPressureAction(snapshot)
|
||||
}
|
||||
|
||||
func smokeVPNPressureAction(snapshot vpnruntime.FabricFlowSchedulerSnapshot) string {
|
||||
if containsSmokeString(snapshot.PressureReasons, "drops") || snapshot.QualityWindowDropCount > 0 {
|
||||
return "shed_or_reroute"
|
||||
}
|
||||
if containsSmokeString(snapshot.PressureReasons, "route_failures") || snapshot.QualityWindowFailureCount > 0 || snapshot.FailingChannelCount > 0 {
|
||||
return "rebuild_or_reroute"
|
||||
}
|
||||
if containsSmokeString(snapshot.PressureReasons, "route_recovery") || snapshot.RouteSwitchCount > 0 {
|
||||
return "observe_recovery"
|
||||
}
|
||||
if containsSmokeString(snapshot.PressureReasons, "slow_channels") || snapshot.SlowChannelCount > 0 || snapshot.QualityWindowSlowCount > 0 {
|
||||
return "prefer_faster_route"
|
||||
}
|
||||
if containsSmokeString(snapshot.PressureReasons, "bulk_pressure") || snapshot.BulkPressureActive {
|
||||
return "throttle_bulk"
|
||||
}
|
||||
if snapshot.AdaptiveBackpressureActive || snapshot.BackpressureActive {
|
||||
return "reduce_parallelism"
|
||||
}
|
||||
return "observe"
|
||||
}
|
||||
|
||||
func containsSmokeString(values []string, needle string) bool {
|
||||
for _, value := range values {
|
||||
if value == needle {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
snapshot.RecommendedAction
|
||||
}
|
||||
|
||||
func smokeVPNFlowSchedulerRouteRecovery() (bool, uint64, int64, int64, int64, string) {
|
||||
|
||||
@@ -909,7 +909,7 @@ func vpnFabricFlowPressureReport(snapshot vpnruntime.FabricFlowSchedulerSnapshot
|
||||
"pressure_level": snapshot.PressureLevel,
|
||||
"pressure_score": snapshot.PressureScore,
|
||||
"pressure_reasons": append([]string{}, snapshot.PressureReasons...),
|
||||
"recommended_action": vpnFabricFlowPressureAction(snapshot),
|
||||
"recommended_action": snapshot.RecommendedAction,
|
||||
"backpressure_active": snapshot.BackpressureActive,
|
||||
"bulk_pressure_active": snapshot.BulkPressureActive,
|
||||
"bulk_pressure_channel_count": snapshot.BulkPressureChannelCount,
|
||||
@@ -930,35 +930,12 @@ func vpnFabricFlowPressureReport(snapshot vpnruntime.FabricFlowSchedulerSnapshot
|
||||
if report["pressure_level"] == "" {
|
||||
report["pressure_level"] = "nominal"
|
||||
}
|
||||
if report["recommended_action"] == "" {
|
||||
report["recommended_action"] = "observe"
|
||||
}
|
||||
return report
|
||||
}
|
||||
|
||||
func vpnFabricFlowPressureAction(snapshot vpnruntime.FabricFlowSchedulerSnapshot) string {
|
||||
reasons := map[string]struct{}{}
|
||||
for _, reason := range snapshot.PressureReasons {
|
||||
reasons[strings.TrimSpace(reason)] = struct{}{}
|
||||
}
|
||||
if _, ok := reasons["drops"]; ok || snapshot.QualityWindowDropCount > 0 {
|
||||
return "shed_or_reroute"
|
||||
}
|
||||
if _, ok := reasons["route_failures"]; ok || snapshot.QualityWindowFailureCount > 0 || snapshot.FailingChannelCount > 0 {
|
||||
return "rebuild_or_reroute"
|
||||
}
|
||||
if _, ok := reasons["route_recovery"]; ok || snapshot.RouteSwitchCount > 0 {
|
||||
return "observe_recovery"
|
||||
}
|
||||
if _, ok := reasons["slow_channels"]; ok || snapshot.SlowChannelCount > 0 || snapshot.QualityWindowSlowCount > 0 {
|
||||
return "prefer_faster_route"
|
||||
}
|
||||
if _, ok := reasons["bulk_pressure"]; ok || snapshot.BulkPressureActive {
|
||||
return "throttle_bulk"
|
||||
}
|
||||
if snapshot.AdaptiveBackpressureActive || snapshot.BackpressureActive {
|
||||
return "reduce_parallelism"
|
||||
}
|
||||
return "observe"
|
||||
}
|
||||
|
||||
func copyStringIntMap(in map[string]int) map[string]int {
|
||||
if len(in) == 0 {
|
||||
return map[string]int{}
|
||||
|
||||
@@ -1239,32 +1239,12 @@ func TestVPNFabricQUICPressureReportRanksBusyConnections(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestVPNFabricFlowPressureActionPrioritizesAutomation(t *testing.T) {
|
||||
cases := []struct {
|
||||
name string
|
||||
snapshot vpnruntime.FabricFlowSchedulerSnapshot
|
||||
want string
|
||||
}{
|
||||
{name: "drops", snapshot: vpnruntime.FabricFlowSchedulerSnapshot{PressureReasons: []string{"drops"}}, want: "shed_or_reroute"},
|
||||
{name: "failures", snapshot: vpnruntime.FabricFlowSchedulerSnapshot{PressureReasons: []string{"route_failures"}}, want: "rebuild_or_reroute"},
|
||||
{name: "recovery", snapshot: vpnruntime.FabricFlowSchedulerSnapshot{RouteSwitchCount: 1}, want: "observe_recovery"},
|
||||
{name: "slow", snapshot: vpnruntime.FabricFlowSchedulerSnapshot{PressureReasons: []string{"slow_channels"}}, want: "prefer_faster_route"},
|
||||
{name: "bulk", snapshot: vpnruntime.FabricFlowSchedulerSnapshot{BulkPressureActive: true}, want: "throttle_bulk"},
|
||||
{name: "backpressure", snapshot: vpnruntime.FabricFlowSchedulerSnapshot{BackpressureActive: true}, want: "reduce_parallelism"},
|
||||
{name: "nominal", snapshot: vpnruntime.FabricFlowSchedulerSnapshot{}, want: "observe"},
|
||||
}
|
||||
for _, tc := range cases {
|
||||
if got := vpnFabricFlowPressureAction(tc.snapshot); got != tc.want {
|
||||
t.Fatalf("%s action = %q, want %q", tc.name, got, tc.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestVPNFabricFlowPressureReportIncludesRecommendedAction(t *testing.T) {
|
||||
report := vpnFabricFlowPressureReport(vpnruntime.FabricFlowSchedulerSnapshot{
|
||||
PressureLevel: "warning",
|
||||
PressureScore: 35,
|
||||
PressureReasons: []string{"bulk_pressure", "backpressure"},
|
||||
RecommendedAction: "throttle_bulk",
|
||||
BackpressureActive: true,
|
||||
BulkPressureActive: true,
|
||||
BulkPressureChannelCount: 16,
|
||||
|
||||
Reference in New Issue
Block a user