►
From YouTube: Day 4 - Pairing on spiking out a developer framework for adding data types to be replicated by Geo
Description
Working on issue titled "Geo: Spike Self-Service Framework with Package Files": https://gitlab.com/gitlab-org/gitlab/issues/197319
A
A
So
to
go
back
to
what
we
were
talking
about,
the
next
big
chunk
that
I
really
want
to
include
in
this
first
spike
is
the
registry
as
a
it
doesn't
exist
yet
I
just
added
a
migration
last
night
for
it,
but
I
didn't
add
a
class
yet
I,
basically
copied
the
data
structure
schema
from
from
design
registry
or
maybe
container
repository
registry,
because
design
registry
is
actually
a
repository.
Type
and
container
repository
registry
is
actually
a
blog
type.
A
A
I,
the
only
interface
that
we're
going
to
have
with
the
registry
at
the
moment
is
when
a
create
event
is
consumed,
or
rather,
when
a
like
download
is
started
from
the
secondary.
We
want
to
update
the
registry
until
to
change
the
state
to
say
we're,
syncing
this
and
then
let
me
finish.
We
want
to
update
it
to
say
what
happened
either
it
was
successful
or
it
failed.
B
C
C
E
B
B
We
think
we
will
have
like
two
information
later
and
then
we
should
be
like
a
separate
feud
and
because,
if
it's
part
of
the
payload
we
can
just
include
the
two,
there
are
something
like
that
and
then
we
don't
have.
We
don't
have
like
to
to
make
any
well
we're
not
replicating
the
payload
on
the
register,
then
does
it
make
sense
to
make
it
like
a
Jason.
F
F
A
B
Be
placed
there
like
I
know,
for
example,
if
we
are
using
AWS
API
for
s3,
they
use
a
specific
type
of
checksum
when
you
upload
things
to
there,
so
that
can
be
used
as
a
way
to
avoid
generating
the
checksum
later
on,
but
maybe
that's
not
exactly
what
we
weren't
so
to
have
the
flexibility
of
using
multiple
ones.
If
that's
the
case,
you
don't
have
to
decide
first
on,
but
we
can
assign
their
own
and
even
switch
from
one
to
the
other.
If
we're.
B
A
D
B
C
A
B
A
G
G
A
Sure
so
the
place
that
I
would
start
is
from
the
from
the
Gio's
from
Gio's
perspective,
like
we're
replicating
the
package
file
model
and
since
those
don't
you
know,
that's
all
one
table,
my
suggestion
would
be
to
keep
it
simple
and
it
has
a
corresponding
package
file.
Registry
I
mean
I.
Guess
it
is
possible
for
some
customer
to
end
up
with
millions
of
packages.
I
guess
it's
possible,
but.
G
C
A
G
C
B
A
A
B
A
C
B
B
B
B
A
A
B
B
B
A
A
A
So,
oh
by
the
way,
that's
right,
I,
don't
know
if
I
wrote
a
comment
about
it,
but
I
renamed
geo
event
to
geo
JSON
event,
because
I
was
fixing
it
spec
and
I
thought
that
there
was
somehow
a
name
collision
with
the
event
model,
which
is
a
namespace
that
wasn't
actually
the
case.
But
at
this
point,
I've
renamed
hit
the
JSON
goj
signing
event
and
I.
Think
that's
okay,
it's
kind
of
what
tone
initially
kind
of
what
he
wrote.
A
B
H
B
B
B
A
A
B
A
B
In
what
context
Fiasco?
Oh
yes,
cold,
so
there
are
I'm
just
taking
a
little
bit
longer,
because
it's
asking
like
for
permissions
on
the
file
system,
you,
okay,
this-
should
do
the
drink.
So
for
yes,
code,
okay,
allows
them
to
share
your
screen.
Yeah
right
did
that.
C
G
B
B
B
B
They
are
both
based
on
language
server.
It
is
like
an
abstraction
for
editors.
An
idea
is
to
communicate
with
a
language
server
provider,
but
is
something
usually
running
on
the
native
language
that
is
going
to
do
like
things
like
look
at
isin,
finding
symbols
and
evaluating
code.
So
this
is,
if
you
have
a
like
of
our
static
language,
it's
is
easier
for
you
to
build
something
that
extracts,
symbols
and
content
for
any
kind
of
limit,
for
example,
c
or
go,
but
if
you're
using
such
like
JavaScript
or
Python
or
Ruby,
it
has
like
this.
B
B
So
like
it's
language
service,
they
have
one
implementation.
That
is
very
simplistic
right
now,
that
is
shifted
by
the
right.
Editor
and
holograph
also
can
expose
itself
as
language
cyber
providers,
so
it
works,
but
it's
not
like
super
fast
yet,
but
I
think
it.
It
allows
you
to
do
like
go
to
the
physician
in
this
kind
of
stuff.
So
ok.
A
That
would
ya
I'm
remembering
now
I
think,
because
solar
graph
seemed
to
be
like
kind
of
the
normal
way
to
go,
but
I
do
I
remember
it
was
like
really
really
slow
at
some
point
and
it's
it's
not
it
like.
It
was
problematically
slow
at
some
point
and
I
think
that's
what
I
was
asking
about
it
before
yeah.
A
B
B
B
E
B
A
A
C
C
D
C
F
B
A
E
E
A
B
So
I
should
have:
let's
see
yeah
your
branches
is
up
to
date.
Let's
try
to
do.
C
B
I
A
B
E
B
B
A
B
B
A
G
B
B
G
B
G
C
C
C
A
A
A
B
G
G
Thought
I
fixed
that
okay,
okay,
sorry.
E
B
C
C
B
B
B
B
C
Sure
I
didn't
yeah:
okay,.
A
C
A
B
I
H
A
A
B
B
B
E
E
E
E
E
E
E
B
B
C
B
C
E
C
B
B
B
A
B
C
C
C
A
C
B
A
C
B
A
A
A
G
A
B
A
A
A
A
Have
a
conflict
but
anyways
I
need
to
$0.03.
E
A
A
A
B
A
B
A
B
B
B
A
B
B
B
A
G
G
H
A
B
C
B
C
E
H
A
A
C
B
B
A
B
A
A
B
H
D
B
A
B
A
G
C
A
H
B
Okay,
what
happens
is
that
we
don't
have
any
events
for
any
kind
of
fire
operation
it
sucks
for
the
leech
down,
but
I
think
we
do
something.
We've
I,
don't
remember
what
we
do
about
this,
but
I.
Remember
that
we
did
something
about
this
a
while,
and
we
need
to
to
to
look
at
this
again,
but
we
have
something
with
hash.
It's
starch
and
I
think
this
does
migrate,
attachments,
okay,.
B
A
I
guess
it's
fair
for
us
to
iterate
on
the
blob
strategy
by
saying:
first
blobs
are
assumed
to
be
immutable
and
we
we
don't
have
support
for
permutation
or
updates.
So
that's
what
we'll
start
with
and
then,
if
something
comes
up
where
it's
like,
oh
you
have
to
support
it.
Then
we
can
add
it
to
the
strategy
at
that
time.
Make.
A
A
B
H
B
A
B
Updating
we
did
what
I
think
makes
sense
here
in
like
let's
say
that
you
have
identified
that
file
is
corrupt.
Your
nature
is
sync,
so
I'm
late
at
all,
when
like
checksum
doesn't
match,
you
hope
you
have
to
do
it
again
or
you're
missing
a
file.
We
don't
have
like
the
missing
state.
So
it's
it
should
go
back
to
painting
and
yeah.
B
D
H
B
A
D
B
B
C
B
B
First,
you
need
to
create
three
posters,
so
you
don't
have
like
the
blank
screen
saying
there
is
no
reporter,
but
also
so
it's
a
two-step
when,
when
you
have
a
poster
for
projects
at
least
first
one
is
to
create
the
actual
repository
and
then
to
do
the
same,
because
if
you
don't
have
a
repost
or
you
get
the
different
screen,
so
you
gonna
have
every
poster.
It's
not
ideal.
B
D
A
B
A
B
B
B
A
I
B
A
A
A
A
B
E
B
So
we
can
probably
prioritize
by
like
in
queueing
it
right
away,
but
I,
don't
think
that
we
actually
need
to
just
to
save
that
as
a
state,
because
we
can,
let's
see
so
if
you
wanted
to
display
something
here.
What
we
could
use
is
like
never
is
whatever
is
painting,
but
has
the
last
sing
something
my
secret
move.
B
Displaying
it
because
it,
the
the
prioritization,
is
not
based
on
the
table
itself
or
shouldn't
be
based
on
the
table
all
right.
Well,
it
could
be
because
if
you
can
still
like
select
for
stews
together,
but
I,
don't
think
like.
We
have
like
to
actually
make
a
mutation
for
four
days
like
twice.
If
that
means,
and
for
example,
tastes
like
we've,
stayed
fainting.
A
B
B
It
will
be
nice
to
have
like
be
able
to
fight
the
same
event,
but
it
go
to
like
different
transition
based
on
where
you
come
from
like
never
it
should.
It
should
go
if
we're
keeping
ever
as
it
is
right
now,
whenever
we
start
syncing
it.
Okay
then
never
goes
to
just
yet
so
should
be.
Like
should
be
like
this
never
should
go
to
started.
B
D
B
A
C
B
B
A
G
A
G
A
A
E
B
A
A
B
A
B
C
C
G
A
A
B
A
B
C
B
B
F
B
A
B
B
Then
we
shouldn't
get
any
problem
because
it
the
transition
should
be
so
we
should
have
an
event
that
prevents
this
position
to
go
from
depending
again,
if
that
makes
sense,
so
hop
date,
it's
like
here
and
you
can.
You
can't
go
from
start
to
pending
yeah
because
remove
this
and
then
it's
fine
that
makes
sense.
B
B
I
I
B
If
it
fails
with
like
we
don't
throw
anything,
we
don't
reschedule.
It's
it's
lost,
I.
Think
the
assumption
here
is
that
only
one
can
do
it,
and
if
you
were
not
the
first
one,
then
the
other
one
is
already
doing
something,
except
when
that
fails
that
Christ,
but
then
again
it
gets
rescheduled
again,
but
only
after
eight
hours.
A
B
B
B
B
B
G
G
B
This
situation,
where,
like
your
schedule,
containers
sink
because
container
a
poster
event
dated
was
processed
during
the
sink.
This
is
called
by
the
Markus.
Successful
with
this
is
called
right
here,
which
is
called
my
sink.
It
is
like,
under
the
little
protected,
locking
situation
unless
exclusively
this.
What
I.
A
B
A
H
B
A
A
A
C
A
Gonna
die
if
they're
gonna
keep
dying
right
or
exiting,
but
then,
when
whatever
sync
is
running
finishes,
then
it
looks
at
the
registry
and
it
says:
oh,
this
registry
is
not
started
anymore.
It's
pending.
That
must
mean
that
an
update
event
came
in
while
I
was
sinking
so
I'm
going
to
reach
scheduled
one
more
sync
job
that.
E
A
B
B
Worker
to
process
a
specific
project
and
inside
that
worker
you
consume
from
the
separate
Redis
structure,
and
then
you
will
have
like
all
these
five
things
or
ten
things
or
20
updates
standing
and
like
everything
on
the
same
and
queue.
And
then
you
can
do
like
this
kind
of
control,
like
okay,
remove
the
next
15,
because
I'm
doing
right.
Now
again,
you
still
like,
if
you
still
have
updates
queuing
up
after
that,
you
still
have
like
that
huge
queue
of
things
that
you
you're
painting
doing.
B
B
G
H
B
C
B
B
E
E
B
G
B
But
let's
say
like
this:
we
finished
syncing
something
and
then
we
generated
the
checksum
and
we
upload
that
so
it
works
as
a
fashion
or
finger
printing
or
whatever
we
call
it
yeah
yeah.
We
reschedule
all
the
other
jobs
the
next
time.
Some
of
the
next
one
gets
the
lock.
The
first
thing
that
it
will
do
is
check
if
the
checksum
we
currently
have
matches
with
the
latest
version
the
other
table.
If
it's
a
match,
we
don't
need
to
do
anything.
B
So
we
deduplicate
by
using
the
checksum
because
that's
like
it
means
we
already
have
the
latest
version.
So
we
don't
need
to
do
anything
about
it.
It
is
to
cost
us
like
processing
for
other,
but
we're
not
like
trying
to
download,
like
gigabyte
of
fiber,
just
checking
a
table
like
two
values
in
two
different
tables
and
it's
fine.
A
A
A
B
B
And
maybe
maybe
telling
this
wrong
but
I
think
it's
like
the
the
sum
of
all
the
pieces.
If
you
combine
all
the
actions
with
I
think
it's
sharp
all
the
pieces,
it
should
get
the
whole
entire
fee.
Something
like
that.
I,
don't
remember
the
exact
details,
but
there
is
a
way
to
do
it
while
you're
uploading,
so
you
use
all
the
chunks,
but
then
you
combine
all
together
and
you
have
you
have
the
same
fee.
H
B
A
A
Okay,
is
this
there's
this
idea
of
work
for
repositories
to
you,
because
we
need
we
either
need
to
do
it
the
same
way
for
repositories
or
we
need
to
keep
this
race
condition.
You
know
mark
synced,
atomically
type
stuff
for
repositories
anyways.
If
we
can't,
let's
start
that,
we
always
have
the
chance
of
depositories.
I
think.
B
B
I
A
C
A
B
I
C
B
B
G
A
A
A
Land,
the
top
two
lines,
but.