►
From YouTube: 2022 08 24 Git Cache Maintenance
Description
Google Summer of Code project for automatic git cache maintenance in the Jenkins git plugin.
A
B
We
have
a
lot
of
topics
to
discuss
today.
So,
okay
mark.
Can
you
like
share
your
screen
and
you
know
open
the
detail.
The
plugin.
Can
you
run
the
git
plugin.
B
A
We
go
share,
okay,
good,
so
first,
let's
go
to
get
the
latest
build
and
I
assume
no
changes
in
the
get
client
plug-in,
but
I'd
better
double
check
that
I've
got
no
further
changes.
You've
that
the
changes
you
had
made
were
already
enough.
Let's
see
and
the
pull
request.
Do
you
remember
the
pull
request
number
one.
A
That's
okay!
I
I
can.
I
can
certainly
find
it.
I
was
just
let's
guess,
1310
and
we'll
go
to
github
and
find
it
nope.
I.
A
A
A
C
What
was
the
security
fix
concerned
about?
Mark.
A
B
So
I've
added
tests
in
the
you
know
get
client
plugin,
so
the
detail,
I've
tested
all
the
maintenance
tasks
created.
B
Okay
for
maintenance
tasks,
less
than
2.30.
I
was
able
to
write
test
because
the
way
they
work
is
completely
different
from
how
it
works
and
versions
greater
than
zero,
because
if
you
look
into
gc
for
versions
less
than
2.30,
we
are
using
the
gc
auto
command,
okay,
which
you
know
works
based
on.
You
know
if
I
need
to
like
it,
works
based
on
the
status
okay
of
whether
it
needs
to
execute
or
not
so
it
is
internally
it's
an
internal
logic
of
whether
it
needs
to
run
or
not.
B
A
A
A
B
A
B
Behind
the
scenes,
this
isn't
very
optimized
because
I
don't
know
how
exactly
to
read
files
so
basically
what's
happening
is
whenever
I
try
to
add
a
record
into
a
file
into
the
file.
What
I
am
doing
is
I'm
loading
the
entire
file,
adding
this
record
to
that
linked
list
and
then
writing
that
language
back
into
that
file.
So
I'm.
C
A
And
I'm
not
aware
of
a
way
to
append
to
jenkins
serialized
xml
files.
I
think
you
have
to
completely
overwrite
so
the
technique
you're
using
as
far
as
I
know,
because
an
xml
file
commonly
has
a
beginning
tag
and
an
ending
tag,
and
if
you
were
to
append
you've
now
somehow
added
something
after
the
end
tag.
A
A
B
Yeah,
you
can
add
another
one:
okay,
what
a
task
schedule.
A
Let's
check
that
they
have
some
whoops.
B
So
what
was
the
log
scene
right
now.
B
B
But
then
this
isn't
running,
I'm
not
sure.
Why
can
can
we.
B
B
B
Yeah
because
the
maintenance
tasks
are
running
here
on
the
screen,
it
is
showing
its
running,
but
then
I'm
not
sure.
Why
is
it
not
writing
to
a
file.
A
B
Because
I
feel
the
file
path
is,
you
know
the
location
of
where
the
file
is,
you
know,
is
having
an
impact
here.
C
A
B
A
B
B
Yeah,
that's
what
I
I
didn't
store
it
in
that
directory,
because
I
wanted
to
ask
which
path.
Where
do
I
store
it?
So
I
just
stored
it
in
the
kit
plug-ins
directory,
so.
B
A
A
B
A
So
using
the
incremental
build
that's
on
that
branch,
rc
3100,
which
is,
I
suspect,
out
of
date,
yeah
we're
now
at
32,
32
42,
and
it's
it's
now
building,
because
it's
probably
not
publishing
that
one
to
the
to
the
incrementals,
because
it
wasn't
up
to
date
with
the
master
branch,
so
will
be
a
while
before
that's
ready
for
an
incremental.
So
what
I'm
not
sure
how
to
go,
find
an
incremental,
maybe
hang
on,
and
I
may
be
able
to
find
one.
A
A
A
A
A
B
A
B
A
A
A
A
A
B
You
know
you
can
fake,
I
think
it's
cashes,
oh,
is
it
yeah
yeah.
A
B
B
A
Yes
and
there's
an
entry
finally.
B
So
very
good
yeah,
so
this
is
how
data
is
appended
into
you
know
into
that
fight.
So
the
thing,
the
reason
why
didn't
work
is
because
I
think
the
path
for
where
I
am
writing
like
to
where
I
am
writing
is
you
know
different
like
if
you
go
into
that
folder
right
you'll
find
a
maintenance
report
file
like
in
the
gift
line
in
the
plugin
directory.
A
A
A
B
B
The
thing
is
when
you
clone
it
right,
the
repository
is
already
optimized
when
you
clone
it
from
the
top.
So.
A
A
A
A
B
The
thing
about
it
is
now
what
what
exactly
is
happening
right
now
is
I'm
going
and
loading
the
entire
data,
like
I'm
reading
that
xml
file
creating
a
list
and
then
displaying
it
there's
no
way
of
you
know,
lazy
loading.
It
like
you
know
not
getting
like
only
five
chunks
of
file
it
out
and
each
other
assume.
A
B
And
the
reason
why
the
other
caches
aren't
coming,
I
figured
it
out
because
you
remember,
we
have
a
static
hash
set.
You
know
a
hash
set
in
the
abstract,
get
scm
plugin
that
you
know
reads
all
the
caches
when
we
start
the
champions
controller,
okay
and-
and
we
only
add
the
caches
from
the
ui.
So
if
we
restart
this,
you
know
jenkins
instance,
then
only
we
will
be
able
to
see
those
caching.
C
B
A
B
Think
I
think
the
reason
behind
this
could
be.
Can
you
scroll
up
come
on
because
every
first
minute
we
are
adding
a
comment
graph
and
every
third
minute?
We
are
adding
a
gc,
so
I
think
there's
a
clash
and
only
the
comment
graph
is
being
added
into
the
queue
because
of
our
front
syntax,
because
if
you
think
about
it,
the
gc
also
is
added
into
the
queue.
But
you
know
only
the
comment
graph
is
getting
the
chance
of
executing
it.
B
Yeah,
because
what
exactly
is
happening
here,
this
comic
graph
is
also
being
added
every
minute
into
the
original
queue
right
and
gc
also
is
added.
So
first,
the
comment
graph
only
is
being
entered,
even
though
the
gc
is
present.
So
I
think
it
is
not
getting
an
execution.
It's
you
know,
other
than
starvation
states.
B
C
Now
this
is
saying
that
let's
say
I
have
four
depositories
and
commit
graph,
while
the
third
commit
graph
is
running.
Operation
is
running.
My
first
gc
for
the
first
repository
has
come
into
the
queue
now
once
these
commit
graphs
are
over,
should
not
the
gc
start
to
run,
and
then
the
other
comment
graphs
get
into
the
queue.
B
But
it
depends
on
the
way
you
know
the
you
know.
Data
is
added
into
the
queue.
So
basically,
what
I
am
doing
is
I'm
just
iterating
through
all
the
you
know,
caches
or
like
iterating
to
all
the
maintenance
tasks
and
then
adding
them.
So
if
you
think
about
it
first,
the
comment
graph
is
added
at
the
first
minute,
then
an
incremental
repack
is
added.
Then
again
a
common
graph
is
added,
okay
and
then
again
a
gc
also
is
added.
B
So
you
know,
if
you
think
about
it,
every
you,
if
I'm
adding
it
every
alternate
minute.
I
feel
the
comment
graph.
A
A
C
A
A
A
B
B
A
B
I
think
if
we
refresh
the
page
right,
you
get
the
first
five
things
as
the
latest
ones,
like
the
latest.
A
B
Here
I
was
thinking
yes,
if
you
look
at
this
example,
only
the
rate
at
which
the
file
is
very
very
fast.
So
is
there
any
way
of
me
cleaning
this
file
because
I
didn't
add
any
mechanism
of
cleaning
you
know,
or
you
know,
having
a
fixed
size,
because
data
would
only
be
added
into
the
file,
but
there's
no
way
of
you
know
restricting
it.
A
B
Yeah
but
then
how
many
records
do
I
store?
That
was
my
question
like
I
assume,
if
there
are
many
many
gentiles
or
caches
okay
and
then,
if
we
have
a
fixed
amount
of
size
of,
like
you,
know,
100,
I
think
we
wouldn't
even
display
data
of
other
caches
present,
because
you
know
all
of
them
would
cross
100,
for
example.
So
what
would
be
a
fixed
amount
or
what
would
be
the
fictional.
A
C
Is
there
a
way
for
us
to
to
not
show
each?
I
mean
to
club
these
to
only
publish
the
record
for
a
repository
when
whatever
tasks
were
designated
for
them
once
the
first
batch
of
that
has
been
executed,
then
we
publish
that
instead
of
publishing
each
entry
of
the
repository
with
each
task.
C
So
my
question
is
that
let's
say
I
have
a
repository,
the
git
plugin
repository
and
I
have
I
have
commit
graph
and
I
have
gc
so
once
the
first
commit
graph
in
first
gc,
and
that
is
the
batch
of
tasks
that
I'm
going
to
run.
You
know
that
is,
that
is
the
first.
I
mean
series
of
sequence
of
tasks
that
are
going
to
be
done
for
this
repository,
so
once
that
is
done,
is
it
possible
for
us
to
then
show
the
result
instead
of
showing
each
record?
C
Because,
with
this
approach
we
will
have,
I
mean
we
can't
we
don't
have
the
control
there
of
what
rushikesh
is
trying
to
say
right
if
you're
going
to
delete
if
you're
going
to
delete
entries
after
a
fixed
amount
of
rows
have
been
created,
you
cannot
make
sure
that
each
repository
which
was
present
within
the
cache
is
going
to
be
displayed
on
the
table,
because
it
is
very
well
possible
that,
since
comment
graph
was
running
every
minute
and
there
are,
let's
say,
20
repositories.
It
would
only
I
mean
the
table
would
be
filled.
C
You
know
within
let's
say
10
minutes
with
100
entries,
and
then
you
have
to
make
a
delete,
because
that
is
how
your
optimization
strategy,
or
whatever
the
disposal
strategy
has
been
said,
so
so
go
ahead.
My
my
question
is:
how
does
user
make
sense
of
this
data
in
the
sense
that
if
we,
if
we
are
able
to
batch,
I
mean
if
I'm
able
to
see
for
a
repository?
C
What
is
the
task
that
has
been
run
and
it
can
be
multiple
tasks
and,
along
that
the
count
of
the
number
of
times
the
task
has
been
run,
that
what
I
mean
still
I
mean
it
would
only
it
would
consume
less
I
mean
space
within
the
table
is
what
I'm
trying
to
say
within
a
row
f,
I
might
be
able
to
show
more
data.
C
I
don't
know
if
that's
possible
or
not,
but
I
I
guess
that
would
make
it
more.
You
know
easy
for
us
and
easy
for
the
user,
because,
right
now,
when
we
have
collected-
let's
say
67
entries,
how
do
I?
How
do
I
make
sense
of
this
data.
A
B
A
That's
his
previous
execution
or
something
else
that
might,
I
think,
help
people
comprehend
what
the
sequence
was,
but
in
terms
of
the
shell,
we
limit
to
a
fixed
number
of
records.
What
if
we?
What?
If
we
used
a
different
limiting
algorithm
and
said
we
will
limit
to
not
more
than
n
records
per
the
combination
of
repository
name
and
task,
so
think
of
the
repository
name
and
task
as
a
job
in
jenkins.
A
A
A
B
A
Is
there
a
way
with
these,
this
very
elegant
data
table
to
do
some
form
of
parent-to-child
collapse
where
all
commit
graphs
for
a
single
for
a
single
repository
are
grouped
together
automatically
as
parent.
You
know,
I
I
don't
know
you,
you
can
look
at
the
data
data
tables
and
see
what
what
uli
has
has
made
available.
I'm
not
sure
if
it's
got
a
grouping
concept
or
not.
B
It
does
so
like.
Can
you
explain
like
what
was
that
feature
about
the
collapse
thing
like
grouping.
A
All
I
was
thinking
was
okay.
Today
I
see
at
the
moment
I
see
many
rows
with
elastic
axis
plug-in
gc
and
for
visualization
purposes.
It
might
help
me
if
those
were
an
expandable
thing
where
this
shows
up
as
one
and
older
copies
of
older
results
of
the
same
thing
are
hidden
under
it
as
a
collapse
and
expand.
A
B
A
Yeah
now
now
perfectly
understood,
if,
if
the
ultimate
is
hey
that
doesn't
work,
yeah,
it's
or
or
gee
that
just
doesn't
make
sense,
that's
a
bad
user
experience.
Don't
do
that,
then
I
I
completely
understand
that
as
well.
This
is
this
is
actually
really
quite
impressive.
I
mean
look
at
this.
I
can
sit
here
and
search
and
there
it
is,
and
now
the
the
25
applies
to
my
search.
C
B
Right
yeah:
oh
there
are
few
things
like.
If
you
go
into
that
terminal
right,
I
think
you
would
find
like
if
you
open
the
terminal
from
which
you
have
started,
this
you'll
find
it
you
will
find
get
versions.
No,
can
you
open
that
dominant
yeah
yeah?
You
will
find
these
okay.
This
is
something
I'm
not
sure.
This
thing
keeps
happening
because
this
thing
actually,
when
I
want
to
get
the
get
version
of
the
underlying
computer
right
to
check
whether
it
is
or
should
I
run
legacy
maintenance
or
the
normal
maintenance.
B
A
A
B
The
thing
why
I
didn't
you
know
create
a
field
to
remember.
It
is
because
in
jenkins
we
have
a
way
of
changing
the
you
know,
get
executable
right,
the
underlying
so
assume
on
the
next
cache.
When
I
want
to
run
the
next
dash,
which
is
running
like
the
get
maintenance
task.
So
then
I
would
be
using
the
version
set
in
the
you
know:
ui
global
configuration.
A
And
and
that
that
that
makes
sense,
at
least
at
some
level,
because
I
could
on
my
controller,
I
don't
know
why
I
would,
but
I
could,
on
my
controller,
have
multiple
command
line.
Get
versions
installed
right
where
I'm
and
I've
got
several
different
command
line.
Get
tools
for
some
specific
need:
okay,
one
two,
three,
four,
five:
six,
so
it
just!
I
think
it
just
completed
more,
and
here
we
go
112
records.
B
A
A
B
Regarding
you
know
documenting
the
code,
do
I
do
that
as
well
or
oh,
you
know
the
methods
and
the
parameters
of
method
takes.
A
So
java
javadoc
for
javadoc
is
highly
recommended
for
public
public
methods.
So
yes,
otherwise
somebody
else
has
to
do
it
and
if
it's
me
I'll
just
make
wild
guesses
as
what
your
intent
was
and
I'll
write.
Those
wild,
guesses
and
people
will
then
complain.
Mark
you
made
a
wild
guess
and
you
were
wrong.
A
I
don't
have
any,
I
I
find
the
cron
syntax
a
little
bit
challenging,
but
it's
very
much.
The
way
jenkins
does
things
so
you're.
Absolutely
consistent
with
the
rest
of
jenkins,
cron
syntax
is
how
it's
done.
I
just
I'd
love
to
have
a
calendar
picker.
You
know
all
sorts
of
exotic
things
like
that,
but
the
problem
is,
none
of
them
are
functionally
rich
enough
to
replace
cron
syntax
because
kron
I
can
say
at
daily,
I
can
say
at
hourly.
A
A
Could
we
get
an
online
help
available
that
would
coach
them
on
the
cron
syntax,
because
we
don't
have
help
icons
here
and,
and
that
may
or
a
help,
help
icon
even
for
the
commit
graph?
What
is
a
commit
graph
and
how
does
it
help
them?
What
is
prefetch
and
how
does
it
help,
because
we
can
certainly
describe
that
in
the
online
documentation
in
the
readme
here?
B
B
A
B
Taxes,
because
the
underlying
architecture
of
our
layers,
assume,
if
I
put
common
graph
hourly
and
gc,
also
already
both
of
them,
don't
run
at
the
same
time.
You
know
there's
a
random
and
you
know:
there's
a
random.
You
know
time
selected
at
each
hour
and
both
of
them
are
scheduled
in
such
a
way
that
you
know
jenkins
is
not
overloaded.
A
A
B
A
A
So
so
well,
so
maybe
what
the
answer
then
is?
Is
we
just
skip
prefetch?
If
it
fails
due
to
credentials,
because
we
cannot,
we
can't
do
a
pre-fit
prefetch
without
authentication
and
in
order
to
have
authentication,
we
would
have
to
somewhere
record
the
credentials
that
were
used
to
access
that
cache.
B
A
A
B
Okay,
that
kind
of
makes
sense,
then,
using
that
method,
I
think
I
can,
you
know,
skip
the
maintenance.
You
know
for
private
repositories
and
run
the
prefetch.
A
A
A
C
B
Other
things
which
you
know
can
get
better,
so
I
think
I
would
be
working
on
those
the
test
for
the
get
client
plug-in
also
has
been
written
only
for
the
legacy.
I
think
the
legacy
commands
those
are
not
working.
I
didn't
write
the
test
for
those
okay,
yeah
I'll
I'll
I'll.
Look
into
that
as
well,
and.
A
A
A
So
so,
for
me,
I'd
prefer
tuesday,
and
then
let's
see
if
we
need
it
or
sorry
for
you
what
is
wednesday
I
I
must
talk
in
your
time
zone,
so
the
wednesday
morning
meeting
actually
works
quite
well.
Just
if
we
find
wednesday
when
you,
when
we're
meeting
that
I'm
not
not
useful,
then
I
may
say:
okay,
let's
try
for
another
day.