Skip to content

Add pre-create duplicate check and reduce sleep - #58

Open
mweibel wants to merge 2 commits into
fix/duplicate-lb-mutexfrom
fix/eliminate-sleep-precheck
Open

Add pre-create duplicate check and reduce sleep#58
mweibel wants to merge 2 commits into
fix/duplicate-lb-mutexfrom
fix/eliminate-sleep-precheck

Conversation

@mweibel

@mweibel mweibel commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator

Before creating a load balancer, list existing ones and skip creation if a LB with the same name already exists. This prevents duplicate creation even if the race window is hit.

Reduce the reconciliation sleep from 5-7.5s to 500ms. With the pre-check in place, the long delay is no longer required for correctness.

@mweibel
mweibel force-pushed the fix/eliminate-sleep-precheck branch from b3d37ea to 61ca492 Compare August 28, 2026 15:26
@mweibel
mweibel force-pushed the fix/duplicate-lb-mutex branch from 12a02c9 to 98b6400 Compare August 28, 2026 15:45
@mweibel
mweibel force-pushed the fix/eliminate-sleep-precheck branch from 61ca492 to ecb5f5d Compare August 28, 2026 15:48
@mweibel
mweibel force-pushed the fix/duplicate-lb-mutex branch from 98b6400 to 137ebee Compare August 31, 2026 06:20
@mweibel
mweibel force-pushed the fix/eliminate-sleep-precheck branch from ecb5f5d to 4ac07c2 Compare August 31, 2026 06:20
// Wait between 5-7.5 seconds between state fetches
// #nosec G404
wait := time.Duration(5000+rand.Intn(2500)) * time.Millisecond
wait := 500 * time.Millisecond

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

IMHO this is too aggressive. Open to discuss and test going form 5-7.5s to lets say 2-4s, but I'd recommend against 500ms.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

given that we had more integration test failures with this: I'll revert this change.

Comment on lines +54 to +65
existing, err := client.LoadBalancers.List(ctx)
if err == nil {
for _, lb := range existing {
if lb.Name == a.lb.Name {
klog.InfoS("lb already exists, skipping create",
"name", a.lb.Name, "uuid", lb.UUID)

return Refresh, nil
}
}
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

if the mutex in the other PR works correctly, when would you expected that this case is still relevant?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

it's more of a safety check. We can also remove it.

@mweibel
mweibel force-pushed the fix/duplicate-lb-mutex branch from 137ebee to 66acf8a Compare September 1, 2026 09:07
Prevents duplicate LB creation when multiple goroutines process
the same service concurrently (e.g. EnsureLoadBalancer +
UpdateLoadBalancer triggered by node sync).

Uses sync.Map keyed by service UID. Locks are not cleaned up
on service deletion to avoid issues with late-arriving goroutines.

Includes a failing unit test that reproduces the concurrent
creation race.
@mweibel
mweibel force-pushed the fix/duplicate-lb-mutex branch from 66acf8a to 519158d Compare September 1, 2026 09:08
Before creating a load balancer, list existing ones and skip
creation if a LB with the same name already exists. This
prevents duplicate creation even if the race window is hit.

Reduce the reconciliation sleep from 5-7.5s to 500ms. With the
pre-check in place, the long delay is no longer required for correctness.
@mweibel
mweibel force-pushed the fix/eliminate-sleep-precheck branch from 4ac07c2 to ef4e6cc Compare September 1, 2026 10:08
@mweibel
mweibel force-pushed the fix/duplicate-lb-mutex branch from 519158d to c9e310e Compare September 1, 2026 13:19
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.

2 participants