►
From YouTube: 2022 06 21 Git Cache Maintenance
Description
No description was provided for this meeting.
If this is YOUR meeting, an easy way to fix this is to add a description to your video, wherever mtngs.io found it (probably YouTube).
A
B
First
thing:
I
have
again
a
failing
test
on
get
plug-in
and
get
a
client
plug-in
it's
specific
to
a
version
of
java.
So.
B
A
A
The
agent
died
unexpectedly,
so,
let's
see,
if
that's
what
it
says.
Oh
okay,
yeah
in
this
case
it's
saying
hey:
it's
attempt
to
launch
the
java
17
agent
failed
completely,
okay,
so
so
the
the
easy
solution
for
you
in
those
cases
close
and
reopen
the
pull
request,
and
that
will
relaunch
the
job.
If
you
don't
have
a
rerun
option
on
the
checks
page
of
the
of
the
github
pull
request,
page.
Let's,
let's
do
a
comparison
here
of
what
my
page
has
on
it
and
what
your
page
has
on
it.
A
So
this
is
the
pull
request,
and
here
let's
look
at
it.
Let's
look
at
a
different
pull
request
so
on
my
pull
request,
page,
for
instance,
with
this
one
we'll
see
in
the
checks
tab,
there
is
under
ci.jenkins.org
a
rerun
link,
but
I
bet,
if
you
check
your
page,
you
may
not
have
that
rerun
link.
Okay,.
A
Right
so
so
the
solution
for
you,
then
it's
not
a
particularly
attractive
solution.
I
wish
github
allowed
us
an
easy
way
to
let
to
grant
a
permission
that
would
let
you
have
the
rerun
flag,
but
not
give
you
full
merge
permission,
but
they
don't.
So
what
you
do
is
you
close
the
pull
request
and
reopen
it
immediately.
B
Okay,
I
I
I'll
do
that.
I
think
the
get
client
plug-in
is,
you
know
running
again,
I'm
not.
A
A
B
Okay,
I've
added
the
maintenance
commands
in
the
getline
plugin,
but
I'm
not
able
to
use
it
in
the
git
line
and
I'll
get
plug-in
okay.
Because
of
that
incremental
thing,
because
the
tests
were
failing,
I
couldn't
try
that.
Can
we
try
that
once.
A
A
A
Correct
right
this
would
this
would
only
let
you
do
very
short-term
development,
because
as
soon
as
you
share
it
with
somebody
else,
it
would
require
that
they
had
to
have
built
the
plug-in
as
well
and
built
that
built
the
dependency
as
well.
And
you
don't
you
don't
want
to
put
that
on
other
people,
so
so
this
is
just
a
very
short-term
stop
gap,
while
you're
waiting
for
ci.jenkins.io
to
successfully
build
your
pull
request.
B
A
A
A
A
A
I
actually
I'm
pretty
sure
that
if
I
look
at
get
client
plug,
if
I
look
at
its
jenkins
file,
it's
running
it
every
time.
Here
it
is.
Oh,
oh,
oh
of
course
I'm
foolish
right
so
well
now
wait
a
sec
in
your
palm.xml
file.
Jenkins.Version
is
oh!
No!
It's
outdated,
okay,
hit
branch.
A
A
A
Now,
we're
going
to
say
me
even
clean
minus
d,
four
count
equals
one
c.
Okay,
sorry
about
that.
Little
mistake
on
my
part,
of
course,
I
should
remember
that
full
java
17
support
in
the
tooling
is
not
ready
until
at
least
jenkins
2.34342.
A
A
A
A
I
want
to
deliver
this
to
to
the
repot
jenkins.io
or
repo.jenkins.ci.org,
and
I
don't
really
want
to
run
tests
again.
A
A
This,
okay,
I'm
this
is
him
describing.
A
A
Nope,
okay,
so
maybe
it's
the
newest
one!
Oh
there.
It
is
still
running
okay,
good
all
right,
so
we're
still
in
process.
Did
we
get
a
java,
17
machine
running?
We
do
okay,
so
we're
waiting
for
windows,
the
slow
one,
the
other
two
have
been
successful
and
we,
unfortunately
don't
have
artifacts
yet
so
we've
still
got
to
wait.
Okay,
so
this
is
continuing.
I
still
think.
A
A
A
We'll
check
out
this
one
well
we'll
check
out
that
one.
A
A
A
A
Now
I
don't
know
why
it
does
that
so
that'll
need
some
investigation,
but
whoever
in
the
test
is
writing
to
slash
temp,
slash
dot,
git,
that's
fundamentally
not
allowed
nope.
It's
still
got
something:
oh
no,
wait
a
sec.
There
was
this
other
mistake.
I
was
making
wasn't
minus
d
jenkins.version
equals
2.346
like
that.
A
B
A
A
A
D
B
If
you
do
it
to
the
you
know,
get
you
know
this
cli
get
a
thing
or
like
the
class,
then
you
can
even
run
the
maintenance
command,
because
I
added
the
code
for
that.
A
A
A
B
B
B
Version
not
sure
what
you
mean
like
the
pom.xml
file
may
do.
I
need
to
update
the
gridline
plugins
version
every
time
I
push
it
like.
A
If
there
is
an
imp,
if
there
is
a
relevant
change
in
the
get
client
plug-in
pull
request
that
you're
that's
being
evaluated,
then
you
want
to
update
to
that.
If
you,
if
it's,
if
the
change
you
made
was
cosmetic
or
not
relevant
to
the
thing
you're
working,
you
don't
have
to
increment,
you
don't
have
to
change.
This
version.
Number
does.
Did
that
answer
your
question.
I'm
not
sure
that
did.
A
A
A
And
I
hope
it
will
just
compile
for
you
directly,
because
the
this
incremental
version
that
I
pushed
is
visit
should
be
visible
to
you
from
repo.jenkinci.org.
A
A
B
A
Yeah
yeah,
okay,
now
now
you
need
to
do
the
next
step,
which
is
open
up
the
pull
request,
I'll
paste,
a
link
to
the
pull
request,
ci
job
and
we'll
have
you
download.
Let's
see,
where
is
the
chat
window
here?
It
is
okay,
so
here's
the
ci
job
and
on
that
page
you'll
find
five
different
artifacts
listed
four
three
jar
files,
an
hpi
and
a
palm.
You
want
to
grab
the
basically.
A
B
B
A
Correct
so
you
modify
the
palm.xml
file
build
it
again.
We
know
that
it
succeeded
with
the
incremental
that
I
did.
All
you're
doing
is
changing
to
use
the
incremental
that
ci
jenkinson
io
did.
A
A
B
D
A
C
Is
it
possible
for
me
to
have
two
controllers
for
a
jenkins
instead
for
a
particular
jenkins
instance?
Is
it
possible
for
me
to
have
two
controllers
and
multiple
agents.
C
Yes,
yeah
in
a
distributed
environment,
can
I
have
separate
instances
of
controllers
running
in
separate
machines,
but
for
the
same
for
the
same
thing,.
A
No
so
jenkins
doesn't
have,
doesn't
have
a
way
to
do.
Concurrent
execution
you
can
do
you
can
do
rapid
failover,
where
you
store
the
jenkins
home
directory
to
a
shared
file
system
to
a
shared
high
availability
file
system
and
then
when,
when
server
a
dies,
you
switch
to
server
b,
but
you
have
to
start
server
b
after
the
death
of
server
a
did.
Did
that
answer
your
question.
Rashad.
B
Sure,
oh,
the
error
which
I
get
here
is
the
failure,
was
cashed
in
the
local
repository
and
resolution
was
not
re-attempted.
A
A
C
A
A
A
So
fushakesh
when
you
did
your
your
build
on
the
git
client,
your
base
branch
was
quite
a
bit
out
of
date.
A
A
The
okay
so
get
revert.
A
A
A
B
Yeah
so
basically
about
the
locks,
I'm
not
able
to
add
locks
to
the
caches,
because
I
don't
have
the
you
know,
url
of
the
string.
The
concurrent
hash
maps
takes
url
as
the
key
and
the
lock
as
the
value.
So
if
a
repository
doesn't
has
if
the
repository
is
not
present
in
the
hash
map,
the
the
cache
is
added
to
the
hash
map
and
then
it's
logged.
So
is
there
a
way
to
you
know
get
the
url
so
that
I
can
add
it.
B
A
B
Yeah,
I
even
added
the
code
to
get
all
the
you
know
caches
on
the
controller,
so
I
need
a
way
to
you
know,
add
log
to
it.
A
A
Okay,
okay,
so
you
haven't
yet
provided
you
haven't
yet
pushed
anything
that
that
iterates
over
the
over
the
list
of
caches.
B
Oh
that
I
added
the
way
you
know,
because
I
I
just
needed
a
list
of
you
know
caches
so
that
I
literated
you
know
in
the
task
executor
class,
where
everything
where
I
create
a
new
thread
and
iterate
through
them
and
run
the
maintenance
stars.
A
A
A
Yeah,
so
so
the
idea
is
okay.
We
need
we're
you're
going
to
you're,
going
to
call
a
method
on
abstract,
get
a
cm
source
that
returns
to
the
list
of
caches.
Okay
list
of
cache
directories
right
yeah
actually!
Does
it
why
why
not?
Okay,
so
could
could
it
return
to
you
instead
of
a
list
of
cache
directories?
A
Could
it
return
to
you
a
list
of
of
repository
remote
repository
urls
that
then
you
use
that
as
the
argument
to
the
locking
and
it
will
figure
out
where
the
what
the
directory
name
is
so
keep
the
knowledge
of
what
the
directory
name
of
the
cache
is
entirely
inside.
Abstract
get
a
cm
source.
A
Right
and
so
let's
what?
If
what?
If
the
url
were,
the
thing
you
returned
to
the
to
the
to
the
caller,
so
okay,
so
I
I
had
initially
thought:
oh,
let's
give
the
directory
to
the
caller
and
let
them
iterate
on,
but
in
order
for
someone
to
in
order
for
you
to
lock
the
cache
directory,
as
you
said,
you
need
the
url
of
the
of
the
remote
for
that
cache
directory
right,
yeah,
okay,
so
remote.
A
A
A
A
A
B
A
B
B
B
C
But
if
we
look
at
how,
if
abstract
data
source
is
initializing,
this
cache
entry,
you'll
see
it's
it's
trying
to
access
the
get
remote
function
on
line
183
and
get
removed
function.
Is
this
method
is
an
abstract
method
which
places
the
responsibility
on
the
implementation
to
get
this
remote
url.
So
under
my
so
my
impression
was
that
you
could,
as
a
caller,
could
have
one
remote
url
for
one
scm
right.
A
C
Because
abstract
get
scm
source,
first
of
all,
one
of
the
reasons
why
I
think
is
that
abstract
data
source
is
providing
a
contract
which
is
get
removed
and
what
we
see
there
is
not
a
list
of
urls
for
us
to
possibly
get
it's
just
one
name
that
we
can
get.
The
implementer
can
implement
how
they
want
to
get
that
right.
They
haven't
themselves
given
the
option
for
us
to
within
the
context
of
abstractgate
scam
source.
You
don't
have
the
name
of
those.
C
The
implementation
of
abstracted
scm
source
would
have
it
or
have
the
custom
logic
to
get
that,
but
I
don't
see
it
as
a
the
methods.
Signature
doesn't
give
me
the
impression
that
you
can
have
a
list
of
rewards
there.
You
can
get
the
list
of
remote
urls.
C
C
C
A
And
that
I
certainly
agree
with
the
the
relationship
between
a
remote
url
and
a
cache
directory
is
it
should
be
one
to
one
right?
If
there
is,
if
we've
taken
in
a
remote,
then
it
should
have
that
that
name
plus
its
hash,
should
give
us
that
directory.
A
C
I
mean
so,
I
remember
they
didn't
get
to
choose
where
we
actually
make
a
decision
based
on
a
cache.
What
we
were
doing
was
that
we
had,
we
always
had
the
remote
name
and
basically
we
were
able
to
get
the
exact
caching
that
we
wanted
and
we
could
work
upon
that.
But,
right
now,
when
we
say
that
we
want
all
of
the
entries
we
can
get
all
of
the
entries,
but
we
want
to
remove
url
and
from
what
I
understand
is
that
from
the
design
perspective
the
implementer
is
supposed
to
know
about
the
remote.
C
It's
not
the
abstract
gate,
scm
source.
That
is
what
is
my
assumption
here.
A
The
the
abstract
git
scm
source
it
receives,
receives
the
the
remote
as
an
argument
as
it's
constructing
that
cash
and
then
it
relies
on
the
caller
to
continue
passing
in
that
remote.
But
why
can't
we
record
the
association
between
remote
and
directory
and
add
a
new
method
to
abstract,
git
scm
source?
That
will
let
us
return
the
list
of
all
remotes
that
are
cached.
C
A
A
A
B
The
whole
point
of
me
asking
the
url
is
so
that
you
know
I
can
add
the
cash
into
the
you
know.
You
know
I
can
add
that
cash
into
that
concurrent
hash
map
and
lock
it
so
that
whenever
any
other
plugin
tries
to
access
it,
they
don't
have
access
to
it.
That's
the
whole
point
of
it.
So
why
is
it
necessary
for
you
to
have
the
remote
url
as
the
key
for
that,
so
that
that
thing
gets
converted
to
a
cache
entry
and
all
the
other
plugins
also
use?
You
know
cache
entry
as
the
key.
A
A
So
conceptually,
okay,
it
would
be
something
like
hey
what
there
is
a
data
structure
that
allows
only
one
of
a
thing
set.
Thank
you
very
good.
Thank
you
and.
A
B
Oh,
but
then
one
so
if
anything
is
added
to
the
cache
remotes
that
isn't
that
like,
isn't
it
like
a
lot,
isn't
it
like
you
know
some
other
plug-in
is
using
it.
A
D
A
B
Yeah,
whenever
I
add
a
cash
entry
as
in
this,
like
you
know,
to
get
whenever
I
create
a
new
cache
on
the
jenkins
controller,
then
only
it
would
be
added,
or
would
it
be
added
like
when
I
get
any
of
the
caches
like
which
are
already
present
those
caches
also,
can
I
will
those
also
be
added
into
the
cache
remotes?
That's
for
them.
A
A
A
B
Oh,
I
I
tried
printing,
you
know
the
concurrent
hash
map
thinking
I
get
something
in
it,
but
that
always
returns
an
empty
object,
so
that
also
like,
I
feel,
whenever
a
plug-in
is
using
it
it.
It
adds
the
you
know,
a
cache
entry
into
the
concurrent
hash
map
and
then
it
adds
the
lock
to
it
until
and
unless
any
other
plugin
is
not
using
it.
I
don't
think
anything
is
going
to
be
added
to
the
concurrent
hashmap.
A
C
A
And
I
would
think
I
think
we
want
both
right,
I
think,
during
during
initialization
of
this
class.
We
want
it
to
check
the
disk
once
at
least
for
all
existing
caches
and
then
any
call
to
get
cache
entry.
If
it's
not
already
in
the
cache,
we
want
it
added
to
the
cache
or
added
to
the
list
of
cached
remotes.
C
A
I'm
not
sure
I
understand
why
the
answer
I
don't
know
the
answer,
but
I'm
not
sure
why
the
answer
would
be
would
would
be
tricky
particularly
crucial
right.
Any
access,
any
access
to
any
access
to
the
cash
has
to
go
through
this
get
cash
entry.
Doesn't
it
it's
got
to
convert
a
a
remote
into
a
cash
entry,
and
so,
if
we
record
it
here,
isn't
that
already
a
good
way
to
know?
Oh,
here's,
a
here's,
another
somebody
requests
a
a
a
cashed,
a
cache
directory.
A
A
C
Because
I
I
yes,
I
need
to
run
the
instrument
and
see
how
this
is
working.
That
is
one
of
the
easiest
way
to
understand.
So
the
way,
if
you
look
at
the
line,
one
two,
five,
two,
the
way
we
use
the
cache
entry
to
create
a
new
file.
A
A
C
A
C
B
I
I
think
we
wouldn't
need
a
url
anymore.
If
we
get
you
know
all
the
cache
remotes
in
that
hash
set,
because
once
we
have
the
cached
entries,
like
the
cache
remorse,
contains
all
the
cash
entries
right.
So
once
we
have
all
the
cash
entries
we
can
just
iterate
over,
because
we
can
just
iterate
over
them,
get
the
file
directory,
get
the
lock
add
the
log
run.
The
maintenance
task
unlock
it
and
go
to
the
next
cache.
A
Well,
but,
and
that's
where
I
think
that
the
cash
entry
is
a
deri,
a
value
derived
from
the
list
of
remotes,
isn't
it,
and
since
it's
derived
from
the
list
of
remotes,
we
could
either
make
the
interface
use
we
it
could
either
use
remotes
as
it's
doing
right
now.
Right,
it's
locking
is
all
based
on
remotes
fushakesh.
I
think
that's
what
you
said
is
the
locks
here
are
cache.
Entries
are
computed
from
a
remote
and
callers
interface
with
this
through
a
remote.
B
I
have
a
way
so
can
we
do
it
like
this?
Can't
we
read
the
cache
director
like
cache
directory
like
under
jenkins
or
get
through
cache
directory,
and
then
it
you
know,
read
all
the
you
know
read
all
the
directories
present
in
it
and
you
know:
split
the
or
split
the
folder
like
the
folder
name,
that
is
it's
appended
using,
get
dot,
get
dash
and
then
some
hash.
Okay.
So
if
we
get
that
hash
and
then
add
that
hash
into
the
high
set
can't
we
do
that.
A
A
So
if
we're
willing
to
allow
access
to,
if
we're
willing,
for
instance,
to
allow
the
acquisition
of
a
lock
based
on
cache
entry,
in
addition
to
being
based
on
remote
yeah,
that
would
work
just
fine,
because
then
we
just
use
the
cache
entries.
So
if,
if
there
were
another,
let's
say
there
were
another:
get
cash
lock
method
that,
instead
of
taking
a
string,
cache
entry,
it
took
a
file
and
when
it
takes
a
file,
the
thing
we
pass
is
the
directory.
A
Wouldn't
that
give
the
effect
that
you're
describing
and
then
and
you
or
any
any
caller
can
can
iterate
over
the
list
of
of
directories
in
the
caches
folder
and
those
are
the
keys
to
be
used.
Now,
that's
that's
putting
knowledge
about
the
caches
contents
outside
of
this
abstract,
git
scm
source
class,
but
I
think
I
think
that
could
work
as
well.
Couldn't
it.
B
A
So
so
my
thought
was:
if
we,
if,
if
you're
uncomfortable
using
the
concept,
cached
remotes
this
idea,
we
could
also
in
we
could
instead
of
using
cached
remotes,
we
could
return
a
list
of
all
the
all
the
cache
entries.
B
C
So
mark
the
thing
that
you're
worried
about,
isn't
that
already
possible
for
me?
If
I
have
the
signature
jenkins
instance,
and
if
I
can
access
a
folder
called
caches
by
calling
a
method
from
that
instance,
then
I
can
essentially
reverse
engineer
the
list
of
cache
entries
right.
Yes,
yes,.
C
D
A
Yeah,
so
so
it's
it's
it's
not
that
this
is
a
security
thing.
I
was
just
worried
about
an
and
kept
an
information
caps
information
hiding
thing,
but
I
think
absolutely
if,
if
it's
easier
to
access
this
thing
as
directories
and
and
pass
the
cash
entry
into
this
method,
say
I'd
like
to
lock
based
on
cache
entry
yeah.
Now,
that's
that's
a
little
complicated,
because
the
get
cache
lock
method
right.
Well,
no,
actually,
it's
not
because
it's
exactly
using
a
cache
entry
yeah!
A
A
B
A
C
But
mark
I
think,
if
we
think
about
the
choice
between
providing
the
list
of
remotes
and
list
of
entries,
I
believe
providing
the
list
of
remotes
is
what
we
should
do,
because
the
user
should
not
be
concerned.
The
user
of
an
abstract
kid
scm
should
be
concerned
with
the
remote
url
and
cache
entry.
Is
an
internal
system
detail
that
it
doesn't
need
to
be
concerned
with.
A
And-
and
I'm
I'm
fine
with
that
logic
as
well-
that
that's
that
that
would
work
just
as
well
for
me,
either
in
either
case
we're
creating
a
list,
a
set
of
something
and
then
the
the
caller.
The
maintenance
task
uses
that
list
of
something
and
walks
through
the
list
acquiring
a
lock
for
each
entry
in
the
list
performing
the
maintenance
test,
then
acquiring
a
lock
performing
the
maintenance
test
either.
One
is
fine
with
me,
I
I
think
you're
right
it
could.
A
It
could
be
the
thing
that
we
store
in
this
list
in
this
set
could
be
the
remote
or
it
could
be
the
cache
entry
and-
and
I
I
think,
you're
right-
that
remote
is
the
one
that's
currently
used
as
the
external
interface
rushikesh.
I
think
that's
what
you
had
told
us
as
well
right
is
remote
is
the
external
interface
so
that,
but
that
just
means
store
the
remote.
A
Okay,
yeah,
and-
and
that's
why
I
don't
object
to
declaring
that
there
is
a
there-
is
an
abstract.
There
is
a
a
concept
here
called
a
cache
entry
and
that
concept
is
to
be
treated
as
opaque
by
the
caller.
You,
you
receive
a
cash
entry
back
as
the
maintenance
task
and
the
cash
entry.
You
don't
know
what
the
meaning
of
the
thing
is.
A
You
don't
know
that
it's
a
directory
and
we're
not
going
to
tell
you
that
it's
a
directory,
it's
just
a
cache
entry
and-
and
so
in
that
sense
I
think,
that's
as
that
is
as
obfuscated
or
as
as
as
effective
information
hiding
almost
as
the
remote
url
rishabh.
What
do
you
think
of
my
logic?
Does
that
sound
fair?
That.
C
Yes,
mark,
I
I
believe
it
does,
because
if
you
think
more
about
a
cache
entry
and
the
remote
name,
both
are
interchangeable.
In
some
sense,
if
you
know
what
how
the
cache
entry
is
being
made,
anyone
could
go
and
see
how
it
is
being
made
and
abstractly
listening
source.
So
those
two
definition,
essentially,
those
two
entities
are
same
in
terms
of
their
value
and
since
abstracted
same
source,
does
provide
an
explicit
method
to
get
the
cash
entry
based
on
the
remote
url.
C
A
B
A
B
A
A
Right
yeah
because
maintenance
operations
seem
like
they
fit
really
well
with
the
description
here.
They
are
lengthy
operations
that
has
a
chance
of
failure.
There
could
be
a
a
concurrency
problem.
There
could
be
a
data,
corruption
problem
in
a
cache,
and
so
so
we'll
want.
So
I
think
a
task
listener
is
a
good
choice
of
a
way
to
record
what
the,
how
the,
how
the
maintenance
task
is
proceeding.