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