Improve name generation on concurrent requests
Fixes #2586 This fixes a few races where the name generator asks if a name is free but another container takes the name before it can be reserved. This solves this by generating the name and setting it. If the set fails with a non unique error then we try again. Docker-DCO-1.1-Signed-off-by: Michael Crosby <michael@crosbymichael.com> (github: crosbymichael)
This commit is contained in:
parent
1c07f75e6f
commit
47b9bba5e1
2 changed files with 10 additions and 39 deletions
|
@ -4,35 +4,9 @@ import (
|
|||
"testing"
|
||||
)
|
||||
|
||||
type FalseChecker struct{}
|
||||
|
||||
func (n *FalseChecker) Exists(name string) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
type TrueChecker struct{}
|
||||
|
||||
func (n *TrueChecker) Exists(name string) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func TestGenerateRandomName(t *testing.T) {
|
||||
if _, err := GenerateRandomName(&FalseChecker{}); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
if _, err := GenerateRandomName(&TrueChecker{}); err == nil {
|
||||
t.Error("An error was expected")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Make sure the generated names are awesome
|
||||
func TestGenerateAwesomeNames(t *testing.T) {
|
||||
name, err := GenerateRandomName(&FalseChecker{})
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
name := GetRandomName(0)
|
||||
if !isAwesome(name) {
|
||||
t.Fatalf("Generated name '%s' is not awesome.", name)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue