Retry initializing TTY size a bit more

I some cases, for example if there is a heavy load, the initialization of the TTY size
would fail. This change makes the cli retry 10 times instead of 5 and we wait
incrementally from 10ms to 100ms

Relates to #3554

Signed-off-by: Djordje Lukic <djordje.lukic@docker.com>
This commit is contained in:
Djordje Lukic 2022-04-28 14:55:01 +02:00
parent 6c9eb708fa
commit 9598c4c905
2 changed files with 4 additions and 4 deletions

View File

@ -45,7 +45,7 @@ func resizeTty(ctx context.Context, cli command.Cli, id string, isExec bool) err
return resizeTtyTo(ctx, cli.Client(), id, height, width, isExec) return resizeTtyTo(ctx, cli.Client(), id, height, width, isExec)
} }
// initTtySize is to init the tty's size to the same as the window, if there is an error, it will retry 5 times. // initTtySize is to init the tty's size to the same as the window, if there is an error, it will retry 10 times.
func initTtySize(ctx context.Context, cli command.Cli, id string, isExec bool, resizeTtyFunc func(ctx context.Context, cli command.Cli, id string, isExec bool) error) { func initTtySize(ctx context.Context, cli command.Cli, id string, isExec bool, resizeTtyFunc func(ctx context.Context, cli command.Cli, id string, isExec bool) error) {
rttyFunc := resizeTtyFunc rttyFunc := resizeTtyFunc
if rttyFunc == nil { if rttyFunc == nil {
@ -54,8 +54,8 @@ func initTtySize(ctx context.Context, cli command.Cli, id string, isExec bool, r
if err := rttyFunc(ctx, cli, id, isExec); err != nil { if err := rttyFunc(ctx, cli, id, isExec); err != nil {
go func() { go func() {
var err error var err error
for retry := 0; retry < 5; retry++ { for retry := 0; retry < 10; retry++ {
time.Sleep(10 * time.Millisecond) time.Sleep(time.Duration(retry+1) * 10 * time.Millisecond)
if err = rttyFunc(ctx, cli, id, isExec); err == nil { if err = rttyFunc(ctx, cli, id, isExec); err == nil {
break break
} }

View File

@ -25,6 +25,6 @@ func TestInitTtySizeErrors(t *testing.T) {
ctx := context.Background() ctx := context.Background()
cli := test.NewFakeCli(&fakeClient{containerExecResizeFunc: fakeContainerExecResizeFunc}) cli := test.NewFakeCli(&fakeClient{containerExecResizeFunc: fakeContainerExecResizeFunc})
initTtySize(ctx, cli, "8mm8nn8tt8bb", true, fakeResizeTtyFunc) initTtySize(ctx, cli, "8mm8nn8tt8bb", true, fakeResizeTtyFunc)
time.Sleep(100 * time.Millisecond) time.Sleep(750 * time.Millisecond)
assert.Check(t, is.Equal(expectedError, cli.ErrBuffer().String())) assert.Check(t, is.Equal(expectedError, cli.ErrBuffer().String()))
} }