I am a bit confused by the split in the CompletedJobStore / JobDetailsStore.
Seems like JobDetailsStore is simply a view on top of CompletedJobStore:
 - Maybe we should not call it a store? Is it storing anything?
 - Why couldn't the cleanup triggering be the responsibility of the
CompletedJobStore, wouldn't it make it simpler to have the storage/cleanup
related logic in a simple place?
 - Ideally the JobDetailsStore / JobDetailsProvider could be a very thin
interface exposed by the CompletedJobStore

Gyula

On Sat, Sep 30, 2023 at 2:18 AM Matthias Pohl
<matthias.p...@aiven.io.invalid> wrote:

> Thanks for sharing your thoughts, Shammon FY. I kind of see your point.
>
> Initially, I didn't put much thought into splitting up the interface into
> two because the dispatcher would have been the only component dealing with
> the two interfaces. Having two interfaces wouldn't have added much value
> (in terms of testability and readability, I thought).
>
> But I iterated over the idea once more and came up with a new proposal that
> involves the two components CompletedJobStore and JobDetailsStore. It's not
> 100% what you suggested (because the retrieval of the ExecutionGraphInfo
> still lives in the CompletedJobStore) but the separation makes sense in my
> opinion:
> - The CompletedJobStore deals with the big data that might require
> accessing the disk.
> - The JobDetailsStore handles the small-footprint data that lives in memory
> all the time. Additionally, it takes care of actually deleting the metadata
> of the completed job in both stores if a TTL is configured.
>
> See FLIP-360 [1] with the newly added class and sequence diagrams and
> additional content. I only updated the Interfaces & Methods section (see
> diff [2]).
>
> I'm looking forward to feedback.
>
> Best,
> Matthias
>
> [1]
>
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-360%3A+merging+the+executiongraphinfostore+and+the+jobresultstore+into+a+single+component+completedjobstore
> [2]
>
> https://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=263428420&selectedPageVersions=14&selectedPageVersions=13
>
> On Mon, Sep 18, 2023 at 1:20 AM Shammon FY <zjur...@gmail.com> wrote:
>
> > Hi Matthias,
> >
> > Thanks for initiating this discussion, and +1 for overall from my side.
> > It's really strange to have two different places to store completed jobs,
> > this also brings about the complexity of Flink. I agree with using a
> > unified instance to store the completed job information.
> >
> > In terms of ability, `ExecutionGraphInfoStore` and `JobResultStore` are
> > different: one is mainly used for information display, and the other is
> for
> > failover. So after unifying storage, can we use different interfaces to
> > meet the different requirements for jobs? Adding all these methods for
> > different components into one interface such as `CompletedJobStore` may
> be
> > a little strange. What do you think?
> >
> > Best,
> > Shammon FY
> >
> >
> >
> > On Fri, Sep 8, 2023 at 8:08 PM Gyula Fóra <gyula.f...@gmail.com> wrote:
> >
> > > Hi Matthias!
> > >
> > > Thank you for the detailed proposal, overall I am in favor of making
> this
> > > unification to simplify the logic and make the integration for external
> > > components more straightforward.
> > > I will try to read through the proposal more carefully next week and
> > > provide some detailed feedback.
> > >
> > > +1
> > >
> > > Thanks
> > > Gyula
> > >
> > > On Fri, Sep 8, 2023 at 8:36 AM Matthias Pohl <matthias.p...@aiven.io
> > > .invalid>
> > > wrote:
> > >
> > > > Just a bit more elaboration on the question that we need to answer
> > here:
> > > Do
> > > > we want to expose the internal ArchivedExecutionGraph data structure
> > > > through JSON?
> > > >
> > > > - The JSON approach allows the user to have (almost) full access to
> the
> > > > information (that would be otherwise derived from the REST API).
> > > Therefore,
> > > > there's no need to spin up a cluster to access this information.
> > > > Any information that shall be exposed through the REST API needs to
> be
> > > > well-defined in this JSON structure, though. Large parts of the
> > > > ArchivedExecutionGraph data structure (essentially anything that
> shall
> > be
> > > > used to populate the REST API) become public domain, though, which
> puts
> > > > more constraints on this data structure and makes it harder to change
> > it
> > > in
> > > > the future.
> > > >
> > > > - The binary data approach allows us to keep the data structure
> itself
> > > > internal. We have more control over what we want to expose by
> providing
> > > > access points in the ClusterClient (e.g. just add a command to
> extract
> > > the
> > > > external storage path from the file).
> > > >
> > > > - The compromise (i.e. keeping ExecutionGraphInfoStore and
> > JobResultStore
> > > > separate and just expose the checkpoint information next to the
> > JobResult
> > > > in the JobResultStore file) would keep us the closest to the current
> > > state,
> > > > requires the least code changes and the least exposure of internal
> data
> > > > structures. It would allow any system (like the Kubernetes Operator)
> to
> > > > extract the checkpoint's external storage path. But we would still be
> > > stuck
> > > > with kind-of redundant components.
> > > >
> > > > From a user's perspective, I feel like the JSON approach is the best
> > one
> > > > because it gives him/her the most freedom to be independent of Flink
> > > > binaries when handling completed jobs. But I see benefits from a
> Flink
> > > > developer's perspective to not expose the entire data structure but
> use
> > > the
> > > > ClusterClient as an access point.
> > > >
> > > > The last option is my least favorite one: Moving the
> ExecutionGraphInfo
> > > out
> > > > of the JobManager seems to be the right thing to do when thinking
> about
> > > > Flink's vision to become cloud-native.
> > > >
> > > > Just my 2cts on that topic.
> > > > Matthias
> > > >
> > > > On Mon, Sep 4, 2023 at 1:11 PM Matthias Pohl <matthias.p...@aiven.io
> >
> > > > wrote:
> > > >
> > > > > Hi everyone,
> > > > > I want to open the discussion on FLIP-360 [1]. The goal of this
> FLIP
> > is
> > > > to
> > > > > combine the two very similar components ExecutionGraphInfoStore and
> > > > > JobResultStore into a single component.
> > > > >
> > > > > The benefit of this effort would be to expose the metadata of a
> > > > > globally-terminated job even in cases where the JobManager fails
> > > shortly
> > > > > after the job finished. This is relevant for external checkpoint
> > > > management
> > > > > (like it's done in the Kubernetes Operator) which relies on the
> > > > checkpoint
> > > > > information to be available.
> > > > >
> > > > > More generally, it would allow completed jobs to be listed as part
> of
> > > the
> > > > > Flink cluster even after a JM failover. This would allow users to
> > gain
> > > > more
> > > > > control over finished jobs.
> > > > >
> > > > > The current state of the FLIP doesn't come up with a final
> conclusion
> > > on
> > > > > the serialization format of the data (JSON vs binary). I want to
> > > > emphasize
> > > > > that there's also a third option which keeps both components
> separate
> > > and
> > > > > only exposes the additional checkpoint information through the
> > > > > JobResultStore.
> > > > >
> > > > > I'm looking forward to feedback.
> > > > > Best,
> > > > > Matthias
> > > > >
> > > > > PS: I might be less responsive in the next 2-3 weeks but want to
> > > initiate
> > > > > the discussion, anyway.
> > > > >
> > > > > [1]
> > > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-360%3A+Merging+the+ExecutionGraphInfoStore+and+the+JobResultStore+into+a+single+component+CompletedJobStore
> > > > >
> > > >
> > >
> >
>

Reply via email to