Thanks a lot for your summary Chesnay.
I agree with you that we have no consensus in the community for splitting
up the repository immediately, and I agree with you that we should have a
separate discussion about reducing the build time (which is already making
good progress).

Also, I will keep the thoughts about decentralising the Flink development
in the back of my head and bring it up again whenever I feel it's the right
time.


On Wed, Aug 14, 2019 at 2:26 PM Chesnay Schepler <ches...@apache.org> wrote:

> Let's recap a bit:
>
> Several people have raised the argument that build times can be kept in
> check via other means (mostly differential builds via some means, be it
> custom scripts or switching to gradle). I will start a separate
> discussion thread on this topic, since it is a useful discussion in any
> case.
> I agree with this, and believe it is feasible to update the CI process
> to behave as if the repository was split.
>
>
> The suggestion of a "project split" within a single repository was
> brought up.
> This approach is a mixed bag; it avoids the downsides to the development
> process that multiple repositories would incur, but also only has few
> upsides. It seems primarily relevant for local development, where one
> might want to skip certain modules when running tests.
>
> There's no benefit from the CI side: since we're still limited to 1
> .travis.yml, whatever rules we want to set up (e.g., "do not test core
> if only connectors are modified") have to be handled by the CI scripts
> regardless of whether the project is split or not.
>
> Overall, I'd like to put this item on ice for the time being; the
> subsequent item is related, vastly more impactful and may also render
> this item obsolete.
>
>
> A major topic of discussion is that of the development process. It was
> pointed how that having a split repository makes the dev process more
> complicated, since certain changes turn into a 2 step process (merge to
> core, then merge to connectors). Others have pointed out that this may
> actually be an advantage, as it (to some extent) enforces that changes
> to core are also tested in core.
>
> I find myself more in the latter camp; it is all to easy for people to
> make a change to the core while making whatever adjustments to
> connectors to make things fit. A recent change to the ClosureCleaner in
> 1.8.0 <https://issues.apache.org/jira/browse/FLINK-13586> comes to mind,
> which, with a split repo, may have resulted in build failures in the
> connectors project. (provided that the time-frame between the 2 merges
> is sufficiently large...) As Arvid pointed out, having to feel the pain
> that users have to go through may not be such a bad thing.
>
> This is a fundamental discussion as to whether we want to continue with
> a centralized development of all components.
>
> Robert also pointed out that such a split could result in us
> establishing entirely separate projects. We've had times in the past
> (like the first flink-ml library) where such a setup may have simplified
> things (back then we had lot's of contributors but no committer to
> shepherd the effort; a separate project could be more lenient when it
> comes to appointing new committers).
>
>
> @Robert We should have a SNAPSHOT dependency /somewhere/ in the
> connector repo, to detect issues (like the ClosureCleaner one) in a
> timely manner and to prepare for new features so that we can have a
> timely release after core, but not necessarily on the master branch.
>
> @Bowen I have implemented and deployed your suggestion to cancel Travis
> builds if the associated PR has been closed.
>
>
> On 07/08/2019 13:14, Chesnay Schepler wrote:
> > Hello everyone,
> >
> > The Flink project sees an ever-increasing amount of dev activity, both
> > in terms of reworked and new features.
> >
> > This is of course an excellent situation to be in, but we are getting
> > to a point where the associate downsides are becoming increasingly
> > troublesome.
> >
> > The ever increasing build times, in addition to unstable tests,
> > significantly slow down the develoment process.
> > Additionally, pull requests for smaller features frequently slip
> > through the crasks as they are being buried under a mountain of other
> > pull requests.
> >
> > As a result I'd like to start a discussion on splitting the Flink
> > repository.
> >
> > In this mail I will outline the core idea, and what problems I
> > currently envision.
> >
> > I'd specifically like to encourage those who were part of similar
> > initiatives in other projects to share the experiences and ideas.
> >
> >
> >        General Idea
> >
> > For starters, the idea is to create a new repository for
> > "flink-connectors".
> > For the remainder of this mail, the current Flink repository is
> > referred to as "flink-main".
> >
> > There are also other candidates that we could discuss in the future,
> > like flink-libraries (the next top-priority repo to ease flink-ml
> > development), metric reporters, filesystems and flink-formats.
> >
> > Moving out flink-connectors provides the most benefits, as we straight
> > away save at-least an hour of testing time, and not being included in
> > the binary distribution simplifies a few things.
> >
> >
> >        Problems to solve
> >
> > To make this a reality there's a number of questions we have to
> > discuss; some in the short-term, others in the long-term.
> >
> > 1) Git history
> >
> >    We have to decide whether we want to rewrite the history of sub
> >    repositories to only contain diffs/commits related to this part of
> >    Flink, or whether we just fork from some commit in flink-main and
> >    add a commit to the connector repo that "transforms" it from
> >    flink-main to flink-connectors (i.e., remove everything unrelated to
> >    connectors + update module structure etc.).
> >
> >    The latter option would have the advantage that our commit book
> >    keeping in JIRA would still be correct, but it would create a
> >    significant divide between the current and past state of the
> > repository.
> >
> > 2) Maven
> >
> >    We should look into whether there's a way to share dependency/plugin
> >    configurations and similar, so we don't have to keep them in sync
> >    manually across multiple repositories.
> >
> >    A new parent Flink pom that all repositories define as their parent
> >    could work; this would imply splicing out part of the current room
> >    pom.xml.
> >
> > 3) Documentation
> >
> >    Splitting the repository realistically also implies splitting the
> >    documentation source files (At the beginning we can get by with
> >    having it still in flink-main).
> >    We could just move the relevant files to the respective repository
> >    (while maintaining the directory structure), and merge them when
> >    building the docs.
> >
> >    We also have to look at how we can handle java-/scaladocs; e.g.
> >    whether it is possible to aggregate them across projects.
> >
> > 4) CI (end-to-end tests)
> >
> >    The very basic question we have to answer is whether we want E2E
> >    tests in the sub repositories. If so, we need to find a way to share
> >    e2e-tooling.
> >
> > 5) Releases
> >
> >    We have to discuss how our release process will look like. This may
> >    also have repercussions on how repositories may depend on each other
> >    (SNAPSHOT vs LATEST). Note that this should be discussed for each
> >    repo separately.
> >
> >    The current options I see are the following:
> >
> >    a) Single release
> >
> >        Release all repositories at once as a single product.
> >
> >        The source release would be a collection of repositories, like
> >        flink/
> >        |--flink-main/
> >            |--flink-core/
> >            |--flink-runtime/
> >            ...
> >        |--flink-connectors/
> >            ...
> >        |--flink-.../
> >        ...
> >
> >        This option requires a SNAPSHOT dependency between Flink
> >        repositories, but it is pretty much how things work at the moment.
> >
> >    b) Synced releases
> >
> >        Similar to a), except that each repository gets their own source
> >        release that they may released independent of other repositories.
> >        For a given release cycle each repo would produce exactly one
> >        release.
> >
> >        This option requires a SNAPSHOT dependency between Flink
> >        repositories. Once any repositories has created an RC or
> >        finished it's release, release-branches in other repos can
> >        switch to that version.
> >
> >        This approach is a tad more flexible than a), but requires more
> >        coordination between the repos.
> >
> >    c) Separate releases
> >
> >        Just like we handle flink-shaded; entirely separate release
> >        cycles; some repositories may have more releases in a given time
> >        period than others.
> >
> >        This option implies a LATEST dependency between Flink
> > repositories.
> >
> >    Note that hybrid approaches would also make sense, like doing b) for
> >    major versions and c) for bugfix releases.
> >
> >    For something like flink-libraries this question may also have
> >    repercussions on how/whether they are bundled in the distribution;
> >    options a)/b) would maintain the status-quo, c) and hybrid
> >    approaches will likely necessitate the exclusion from the
> > distribution.
> >
> >
>
>

Reply via email to