►
From YouTube: GitLab Runner Open Office Hours - April 15th 2020
Description
Senior Backend Enginer, Tomasz, reviews and MR from our wider community that is attempting to fix a bug with how the runner handles autoscaled VMs when using the docker-machine executor
The MR reviewed is https://gitlab.com/gitlab-org/gitlab-runner/-/merge_requests/1549
A
If
there's
any
questions,
if
anyone
has
any
questions
about
open,
em,
arms
or
open
issues
or
and
they
on
grab
for,
we
can
prioritize
talk
about
those.
Otherwise,
what
we'll
do
is
we'll
have
one
of
our
back-end
engineers
go
through
a
code
review
of
some
existing
open
hours,
so
at
any
point
neither
be
chat
or
speak
up,
you're,
comfortable
and
and
asking
questions
as
you'll
note
from
the
recording?
No,
it's
like
what
this
is
recorded,
we'll
post
it
to
our
YouTube
channel
later
on
once
the
recordings
process.
A
So
on
the
call
there's
myself
I'm
the
engineering
manager
for
the
runner
team.
We
have
Steve
Tomas,
Pedro
and
Luke
Amir,
who
are
back-end
engineers
on
the
runner,
team
and
Ray
part
of
our
community
relations
game,
and
it
looks
like
we've
got
a
couple
key
members
on
the
call,
and
so
hello
welcome,
feel
free
to
go
in
and
jump
in
with
any
questions
you
have
at
any
point,
and
otherwise,
unless
we're
you
have
anything.
B
D
C
Proper
sculpture
in
zoom,
oh
I,
think
this
is
the
one
okay
I
I
was
looking
through.
Some
met,
requests
that
we
have
created
from
the
contributors
and
one
of
the
metrics
that
they
found
is
related
to
dr.
machine,
not
scaling
and
the
proposition
to
change
how
this
is
done,
which
is
which
is
related
to
one
of
the
one
of
the
problems
that
we've
seen
in
the
past.
C
Okay,
get
LeBron,
tries
to
create
one
machine
crates,
a
lot
of
machines
that
was
because
acquire
cause,
multiple
items
in
short
period
of
time
and
machine
created
by
previous
calls
are
not
immediately
shown
visuals
and
some
of
next
course
not
properly
account
number
of
creating
machines.
So
we
are,
we
are
facing
here
some
race
condition,
problem.
C
A
C
C
C
C
Okay,
we
will
have
to
change.
Luckily
executors,
it's
my
ID
right
now.
Leo.
Are
you
still?
Okay,
let's
close,
what's
not
important
right
now,
executors
poker
machine
here
we
can
see
how
much
things
we
have
inside
of
the
doctor
executors,
and
for
that
we
need
to
look
on
the
provider
and
provider
first
five-star,
the
only
one.
D
C
A
C
A
C
Don't
necessarily
need
to
remember
well
where
everything
is
created.
Okay,
so
at
this
moment,
I
can
already
say
that
that
this
is.
This
is
definitely
something
that
we
need
to
need
to
change
from
now.
I,
don't
think
we
have.
We
have
the
code
directly
fused
anywhere
in
the
code
anyway,
the
best
we
just
state
without
it.
C
Let's
try
to.
Let's
try
to
understand
what
what
the
problem
we
have
here
in
the
in
the
meticulous
description
we
have.
We
have
information
that,
because
of
some
some
time,
concurrency
problems,
the
machines
that
we
accounting
are
not
always
counted
properly
and,
let's
first
look
we're
update
machines
called
job.
The
Pershing's
is
called
inside.
C
Acquire
acquire
is
called
by
the
club
runner
before
we
ask
for
a
job
when,
when
runner
finds
that
within
the
concurrent
and
limit
settings
it
has
some
free
slot,
it
first
asks
the
executor
with
the
acquire
call
if
there
is
really
the
capacity
on
the
executor.
So
in
case
of
doctor
machine
we
can
have
two
options.
We
either
have
machines
treatment
on
demand
and,
in
that
case,
acquire
almost
always
return
positive
response.
C
Unless
we
hit
the
total
limit
of
machines,
if
we
have
idle
machines
setting
configure,
then
the
machines
are
created
in
the
background,
and
this
call
will
try
to
figure
out
if
we
have
any
other
idle
machines
waiting
for
a
new
job.
If
we
have
something
like
that,
and
I
acquired
returns,
positive
positive
response,
we
we
didn't
know
that
we
can
really
ask
guitar
for
a
new
job,
because
we
have
a
capacity
for
this
so
going
quickly
through
what
we
have
here.
C
C
Machines
machine
is
data.
This
is
one
of
the
things
that
we
started
recently.
Refactoring
and
big
refactor
for
this
file
is
waiting
good
comments,
describing
what
is
happening
where
from
now,
let's
just
work
with
what
we
have,
okay,
so
in
the
update
machines,
the
machine
slice
is
the
result
of
what
machine
so
from
what
I
remember,
all
machines
applicable
to
certain
run
or
worker
in
conflict.
We
have
config,
ok
and
what
we
want
to
get
from.
It
is
the
machines
data
structure.
C
The
machine
is
data
which
implements
some
counting,
and
this
is
this
is
what
gives
us
information.
How
many
machines
in
different
states
will
have
for
this
specific
runner,
walker?
My
runner
Walker
here
I
mean
the
thing
that
we
in
conflict
on
file,
recognized
by
the
two
prices
and
runners
directory,
which
the
fiends
defines
the
bulimia.
The
connection
to
get
lab
lot.
Executor
is
used
and
in
context
of
this,
this
met
up
done,
operates.
D
C
C
C
C
It's
within
the
machines
and
then
we
try
to
add
it
again.
This
really
strange
part
of
the
code.
Let's
maybe
take
a
quick
look
on
the
test.
Maybe
the
test
will
be
some
light.
Was
was
mistrust
to
resolve.
C
C
C
C
What
we
try
to
assert
here
so
at
this
moment
at
this
moment,
what
we,
what
we
definitely
can
do
with
this
miss
request,
is
first,
we
need
to
ask
need
to
ask
for
a
way
to
read
description
of
how
we
can
reproduce
this
work
in
few
steps,
step
by
step.
What
is
happening
because
there
is
a
clearly
have
a
problem,
and
he
already
knows
what
is
the
problem,
but
the
description
here
is
not
as
clear
to
understand
what
we
should
what
we
should
look
on.
C
C
C
Don't
have
too
many
idle
machines.
The
machine
that
we
now
try
to
handle
is
is
being
removed
from
the
list.
So
at
this
moment
we
are
removing
it
from
the
list
of
machines
handled
by
the
run,
but
we
are
adding
information
about
this
machine
to
the
counter.
At
this
moment
it
should
have
the
state,
yes
removing.
C
This
is
not
changed
because
this
was
passed
by
the
function
argument,
so
we
have
neither
stable
list
of
the
machine
names.
What
can
be
changed
is
this
one,
because
this
could
get
a
new
created
machine,
so
it
looks
like
it
tries
to
find
a
machine
that
is
already
on
this
list,
but
was
not
here
at
the
call
of
this
moment,
which
is
again.
C
At
least
for
now,
for
me,
it
looks
like
just
waiting
for
luck
that
it
was
not
here,
but
a
magnetic
moment
later,
it
will
be
here,
but
we
we
are
still
trying
to
fight
here
with
some
risk
conditions,
so
may
be
possible
that
something
is
not
yet
created
here
and
will
be
created
after
we
will
remove.
We
will
exit
from
this
machine.
This
lock
will
be
unlocked.
C
D
C
Think
not
understanding
what
is
the
problem,
the
exact
problem
and
fixing.
This
are
the
only
things
that
this
moment
I
can
I
can
talk
about
having
having
the
information,
how
we
can
reproduce
the
problem
or
how
it
works.
We
can.
We
can
then
start
so
looking
on
what
exactly
this
exchange,
try
stretching.
C
C
C
C
B
C
C
C
C
Get
machine
details
is
machine,
redundant,
schedule
machine.
We
know
how
so
at
this
place
here
in
the
update
machine
is
called,
which
next
is
which
next
is
handled
here.
We
are
not
handing
creation
of
machines
at
all.
We
are
just
looking
for
machines
that
are
not
needed
anymore
because
of
too
many
machines
too
many
area
machines
too
many
jobs
executed
on
the
machine.
So
this
part
of
code
doesn't
touch
creation
at
all.
C
Because
a
choir
require
where
we
have
the
choir
call
here.
This
is
the
code
that
we
that
we
use
now
here
we
are
here.
We
are
calling
create
machines
which
I
did
not
fully
sureit's
responsible
for
really
creating
the
machines.
I
remember
there
was
something
strange
in
the
in
the
calls
here,
but
let's
look:
what
the
create
machines
does.
B
C
B
C
B
This
create
machine
is
just
marking
my
sink
machines
as
needed,
right
and
memory,
and,
like
imagine
that
the
interval
is
every
5,
what
every
1.
Second
right,
so
a
5
seconds,
we
ask
cudlip
api
for
a
job
every
1
second,
so
in
that
case
we
end
up
calling
acquire
5
times
and
5
seconds
and
we
end
up
creating
an
idle
machine
per
acquire.
Imagining
that
the
idle
machine
sucks
to
1.
So
we
end
up
creating
5
machines
and
a
span
of
5
seconds,
because
the
first
machine
hasn't
been
hadn't
finished.
Yet.
C
C
Triggered
here,
so
the
request
interval
that
we
have
is
divided
by
the
number
that
both
of
runners
sections,
that
we
have
in
the
config
file
and
in
each
such
interval.
We
are
scheduling
one
call,
but
should,
at
the
end
finish
with
requesting
the
job
which
is
here,
but
before
we
do
this,
we
check
if
we
have
even
the
capacity
and
I'm
sure
not
not
not
here,
not
request
quest
rest
request
request.
C
This
is
this
is
dumb
down
here
we
first
check
if
we
have
capacity
on
the
provider
and
then
we
try
to
fetch
the
job
from
the
plug.
So
yes,
this
call
is
executed.
Each
check
interval
divided
by
the
number
of
runs
so
going
down
from
from
that
call,
we
have
the
provider
require,
call
which,
in
case
of
doctor,
machine
was
closest
files
in
case
of
doctor
machine
ends
here.
So
if
we
don't
have
the
cream
machine
configuration,
we
don't
do
nothing
and
then
for
each
acquire
call.
C
We
call
the
load
machines,
the
load
machines,
uses
machines
list
and
machines
list.
Remember
just
this
one
implementation,
it
reads
the
configuration
directory
and
lists
all
of
them.
Machine
directories
that
we
have
because
then
the
directors
have
exactly
the
same
names
as
as
the
machines,
so
here
we
get
all
of
the
machines
existing
on
this
host,
and
then
we
are
using
filter.
Machine
list
function
to
limit
this,
to
only
machines
belonging
to
this
Runner
section.
C
C
By
rather
then,
at
some
moment
it
should
be
added
to
the
end
details.
So
what
we
really
need
to
find
is
is
when,
and
details
is
being
is
being
fitted,
because
this
is
how
the
Machine
creation
is
ended.
So,
let's
get
back
from
this
call
here,
we
call
create
machines,
and
this
should
be
done
only
when
the
data,
so
what
we,
what
we
got
from
here,
data
available
is
greater
or
equal
of
get
idle
count.
So
we
have
already
the
number
of
idle
machines
that
we
want.
C
C
Which
then,
should
somewhere
called
machine
provider
machine
create
machine
provisional
fails.
So
at
this
moment
we
trigger
creation
of
the
machine
which
is
done
here
and
the
data
machines
data
structure
is
the
only
thing
that
that
can
stop
us
from
from
doing
and
then
we
are
logging,
logging
machine
details
and
we
are
looking
if
we
have
any
free
machine.
We
should
just
check
if
we
have
any
machine
in
the
idle
side
and
at
some
place
check
the
state
required,
so
it
is
reserved
for
the
rather.
C
If
we
have
zero
idle
machines
and
idle
count
is
non
zero,
then
it
means
that
we
don't
have
don't
replace
two
to
execute
the
job,
and
this
is
where
the
acquire
also
prevents
this.
So
so,
basically,
what
we
are
interested
in
is
create
machine
data
available
and
data
to
eval.
If
these
numbers
are
not
updated,
then
it
means
that
we
will
try
to
create
a
new
machine.
C
C
This
is
the
only
place
where
the
M
details
is
updated.
I
don't
see,
I,
don't
see
any
other
any
other
write
to
this
to
this
field,
because
here
we
have
initialization
that
that
creates
the
create
structure
and
everything.
But
this
one
reads
from
so
in
details
is
updated
only
when
we
already
found
a
machine
on
this
machine
directory
and.
C
C
C
C
Mm-Hmm,
okay,
I
will
I
will
redact
the
comment
that
he
was
writing.
I,
I
think
I
start
seeing
the
problem,
however,
still
having
having
the
help
from
the
customer
that
sees
this
life
would
be
really
helpful,
especially
that
that
that
the
user
wrote
that
the
fix
works
for
his
situation
and
it
works.
So
why
I'm
not
saying
fully
how
how
this,
how
this
helps
us?