I agree. It's very well thought out. One change to consider is splitting
the extensions further into two separate repos. One that would serve as a
standard library of sorts for other component developers and another that
would include everything else. Things like the Record API would go into the
former so that we could have a more conservative release schedule going
forward with those components.

On Wed, Jul 10, 2019 at 4:17 PM Andy LoPresto <alopre...@apache.org> wrote:

> Thanks Kevin, this looks really promising.
>
> Updating the link here as I think the page may have moved:
> https://cwiki.apache.org/confluence/display/NIFI/NiFi+Project+and+Repository+Restructuring
> <
> https://cwiki.apache.org/confluence/display/NIFI/NiFi+Project+and+Repository+Restructuring
> >
>
> Andy LoPresto
> alopre...@apache.org
> alopresto.apa...@gmail.com
> PGP Fingerprint: 70EC B3E5 98A6 5A3F D3C4  BACE 3C6E F65B 2F7D EF69
>
> > On Jul 10, 2019, at 12:08 PM, Kevin Doran <kdo...@apache.org> wrote:
> >
> > Hi NiFi Dev Community,
> >
> > Jeff Storck, Bryan Bende, and I have been collaborating back and forth
> > on a proposal for how to restructure the NiFi source code into smaller
> > Maven projects and repositories based on the discussion that took
> > place awhile back on this thread. I'm reviving this older thread in
> > order to share that proposal with the community and generate farther
> > discussion about at solidifying a destination and a plan for how to
> > get there.
> >
> > Specifically, the proposal we've started working on has three parts:
> >
> > 1. Goals (more or less a summary of the earlier discussion that took
> > place on this thread)
> > 2. Proposed end state of the new Maven project and repository structure
> > 3. Proposed approach for how to get from where we are today to the
> > desired end state
> >
> > The proposal is on the Apache NiFi Wiki [1], so that we can all
> > collaborate on it or leave comments there.
> >
> > [1]
> https://cwiki.apache.org/confluence/display/NIFIREG/NiFi+Project+and+Repository+Restructuring
> >
> > Thanks,
> > Kevin, Jeff, and Bryan
> >
> > On Thu, May 30, 2019 at 1:31 PM Kevin Doran <kdo...@apache.org> wrote:
> >>
> >> I am also in favor of splitting the nifi maven project up into smaller
> >> projects with independent release cycles in order to decouple
> >> development at well defined boundaries/interfaces and also to
> >> facilitate code reuse.
> >>
> >> In anticipation of eventually working towards a NiFi 2.0 that
> >> introduces bigger changes for developers and users, I've started work
> >> on a nifi-commons project in which I've extracted out some of the code
> >> that originally got ported from NiFi -> NiFi Registry, and now exists
> >> as similar code in both projects, into a standalone modular library.
> >> That premilinary work is here on my personal github account for now
> >> [1].
> >>
> >> So far, it only contains some security code in a submodule, and is a
> >> WIP (more work coming when I have time), but the idea is nifi-commons
> >> could have several libraries/modules and would be released
> >> periodically to use across nifi and registry. If we are talking about
> >> spliting the nifi project into framework and extensions, then
> >> nifi-commons might be a good home for code that needs to be shared
> >> across those two sub projects as well, such as the nifi-api bits Joe
> >> mentioned.
> >>
> >> As part of this larger effort, I would be happy to help get a
> >> nifi-commons repository started in Apache where we can move shared
> >> code such as nifi-api to prepare for splitting nifi-framework and
> >> nifi-extensions. It also occurs to me that if nifi-framework and
> >> nifi-extensions are being released independently, nifi-assembly should
> >> probably just become a project that pulls in and assembles the latest
> >> releases of framework and extensions.
> >>
> >> Overall, I think this would be beneficial for most of the work going
> >> on in Apache NiFi, which would not have to cut across these different
> >> project and therefore would be easier to code, test, build, and
> >> release. However, the level of difficulty will increase for changes
> >> that will need to span multiple projects, though those are fewer in
> >> number, so overall I think it would be a net win for the dev
> >> community.
> >>
> >> [1] https://github.com/kevdoran/nifi-commons
> >>
> >> Thanks,
> >> Kevin
> >>
> >> On Thu, May 30, 2019 at 12:17 PM Andy LoPresto <alopre...@apache.org>
> wrote:
> >>>
> >>> I am a strong +1 on the separation and reducing the build time. With
> that in mind, I think the process I brought up yesterday [1] of signing our
> artifacts with GPG as part of the Maven build is paramount, because we
> would now be consuming core code across multiple projects/repositories, so
> there is even less guarantee the code is coming from “us”.
> >>>
> >>> [1]
> https://lists.apache.org/thread.html/5974971939c539c34148d494f11e8bcf0640c440ce5e7a768ee9db01@%3Cdev.nifi.apache.org%3E
> <
> https://lists.apache.org/thread.html/5974971939c539c34148d494f11e8bcf0640c440ce5e7a768ee9db01@%3Cdev.nifi.apache.org%3E
> >
> >>>
> >>> Andy LoPresto
> >>> alopre...@apache.org
> >>> alopresto.apa...@gmail.com
> >>> PGP Fingerprint: 70EC B3E5 98A6 5A3F D3C4  BACE 3C6E F65B 2F7D EF69
> >>>
> >>>> On May 30, 2019, at 9:15 AM, Brandon DeVries <b...@jhu.edu> wrote:
> >>>>
> >>>> In regards to "We 'could' also split out the 'nifi-api'...", NiFi 2.0
> would
> >>>> also be a good time to look at more clearly defining the separation
> between
> >>>> the UI and the framework.  Where nifi-api is the contract between the
> >>>> extensions and the framework, the NiFi Rest api is the contract
> between the
> >>>> UI and framework...  These pieces could potentially be built  /
> deployed /
> >>>> updated independently.
> >>>>
> >>>> On Thu, May 30, 2019 at 11:39 AM Jeff <jtsw...@gmail.com> wrote:
> >>>>
> >>>>> In the same category of challenges that Peter pointed out, it might
> be
> >>>>> difficult for Travis to build the "framework" and "extensions"
> projects if
> >>>>> there are changes in a PR that affect both projects.
> >>>>>
> >>>>> Is there a good way in Travis to have the workspace/maven repo shared
> >>>>> between projects in a single build?
> >>>>>
> >>>>> It's probably always in the direction of the extensions project
> needing
> >>>>> something new to be added to the framework project rather than the
> other
> >>>>> way around, but it'll be tricky to get that working right in Travis
> if it's
> >>>>> not possible to set up the Travis build to know it needs to deploy
> the
> >>>>> framework project artifacts into a maven repo that the extension
> project
> >>>>> will use.
> >>>>>
> >>>>> One way might be to make sure that changes to the framework project
> must be
> >>>>> in master before the extensions project can make use of them, but
> that
> >>>>> would require a "default master" build for the framework project
> which
> >>>>> builds master after each commit, and deploys the build artifacts to a
> >>>>> persistent maven repo that the extension project builds can access.
> It
> >>>>> also makes project-spanning change-sets take longer to review and
> get fully
> >>>>> committed to master.
> >>>>>
> >>>>> On Thu, May 30, 2019 at 11:23 AM Peter Wicks (pwicks) <
> pwi...@micron.com>
> >>>>> wrote:
> >>>>>
> >>>>>> One more "not awesome" would be that core changes that affect
> extensions
> >>>>>> will be a little harder to test. If I make a core change that
> changes the
> >>>>>> signature of an interface/etc... I'll need to do some extra work to
> make
> >>>>>> sure I don't break extensions that use it.
> >>>>>>
> >>>>>> Still worth it, just one more thing to mention.
> >>>>>>
> >>>>>> -----Original Message-----
> >>>>>> From: Joe Witt <joew...@apache.org>
> >>>>>> Sent: Thursday, May 30, 2019 9:19 AM
> >>>>>> To: dev@nifi.apache.org
> >>>>>> Subject: [EXT] [discuss] Splitting NiFi framework and extension
> repos and
> >>>>>> releases
> >>>>>>
> >>>>>> Team,
> >>>>>>
> >>>>>> We've discussed this a bit over the years in various forms but it
> again
> >>>>>> seems time to progress this topic and enough has changed I think to
> >>>>> warrant
> >>>>>> it.
> >>>>>>
> >>>>>> Tensions:
> >>>>>> 1) Our build times take too long.  In travis-ci for instance it
> takes 40
> >>>>>> minutes when it works.
> >>>>>> 2) The number of builds we do has increased.  We do us/jp/fr builds
> on
> >>>>>> open and oracle JDKs.  That is 6 builds.
> >>>>>> 3) We want to add Java 11 support such that one could build with 8
> or 11
> >>>>>> and the above still apply.  The becomes 6 builds.
> >>>>>> 4) With the progress in NiFi registry we can now load artifacts
> there and
> >>>>>> could pull them into NiFi.  And this integration will only get
> better.
> >>>>>> 5) The NiFi build is too huge and cannot grow any longer or else we
> >>>>> cannot
> >>>>>> upload convenience binaries.
> >>>>>>
> >>>>>> We cannot solve all the things just yet but we can make progress.  I
> >>>>>> suggest we split apart the NiFi 'framework/application' in its own
> >>>>> release
> >>>>>> cycle and code repository from the 'nifi extensions' into its own
> >>>>>> repository and release cycle.  The NiFi release would still pull in
> a
> >>>>>> specific set of extension bundles so to our end users at this time
> there
> >>>>> is
> >>>>>> no change. In the future we could also just stop including the
> extensions
> >>>>>> in nifi the application and they could be sourced at runtime as
> needed
> >>>>> from
> >>>>>> the registry (call that a NiFi 2.x thing).
> >>>>>>
> >>>>>> Why does this help?
> >>>>>> - Builds would only take as long as just extensions take or just
> core/app
> >>>>>> takes.  This reduces time for each change cycle and reduces load on
> >>>>>> travis-ci which runs the same tests over and over and over for each
> pull
> >>>>>> request/push regardless of whether it was an extension or core.
> >>>>>>
> >>>>>> - It moves us toward the direction we're heading anyway whereby
> >>>>> extensions
> >>>>>> can have their own lifecycle from the framework/app itself.
> >>>>>>
> >>>>>> How is this not awesome:
> >>>>>> - Doesn't yet solve for the large builds problem.  I think we'll get
> >>>>> there
> >>>>>> with a NiFi 2.x release which fully leverages nifi-registry for
> retrieval
> >>>>>> of all extensions.
> >>>>>> - Adds another 'thing we need to do a release cycle for'.  This is
> >>>>>> generally unpleasant but it is paid for once a release cycle and it
> does
> >>>>>> allow us to release independently for new cool extensions/fixes
> apart
> >>>>> from
> >>>>>> the framework itself.
> >>>>>>
> >>>>>> Would be great to hear others thoughts if they too feel it is time
> to
> >>>>> make
> >>>>>> this happen.
> >>>>>>
> >>>>>> Thanks
> >>>>>> Joe
> >>>>>>
> >>>>>
> >>>
>
>

Reply via email to