Skip to content
This repository was archived by the owner on Aug 1, 2023. It is now read-only.
This repository was archived by the owner on Aug 1, 2023. It is now read-only.

util function WaitFor (and depending function servers.WaitForStatus) do not properly / never timeout  #625

Description

@HeikoOnnebrink

I had issues that servers.WaitForStatus does not timeout when I pass timeouts > 60 seconds
I debugged and found that at the end the timeout is implemented in gophercloud package
func WaitFor.
As it looks like the code has bug as var start is of type int and can have a range 1..60
If I pass timeout > 60 it will never terminate, if I pass values <= 60 wait time is random

Go lang spec: func (t Time) Second() int
Second returns the second offset within the minute specified by t, in the range [0, 59].

package gophercloud

func WaitFor(timeout int, predicate func() (bool, error)) error {
start := time.Now().Second()
for {
// Force a 1s sleep
time.Sleep(1 * time.Second)
// If a timeout is set, and that's been exceeded, shut it down
if timeout >= 0 && time.Now().Second()-start >= timeout {
return errors.New("A timeout occurred")
}
// Execute the function
satisfied, err := predicate()
if err != nil {
return err
}
if satisfied {
return nil
}
}
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions