I think by definition, a contribution _must_ fit into a single repository. This 
will force developers to carefully consider the boundaries between modules and 
build clean abstractions. If you are a new contributor, I would be surprised if 
you are making a single (logical) contribution that would span multiple 
repositories on the first go. I think enforcing clear divisions is good for 
both new and experienced contributors. I also think a change that requires 
contributions to multiple repositories should be subdivided into atomic tasks. 

For example, if someone wants to contribute a new feature to nifi-registry 
which also requires changes to nifi-commons for the security piece and adds new 
behavior to the nifi-framework component to consume new changes from Registry, 
in my mind those are actually 3 atomic changes which, while related and 
interdependent, can all be contributed as standalone code to their respective 
repositories in an ordered fashion. I would prefer this over one large commit 
to a single repository which influences behavior in all three modules and 
requires one or more reviewers with comprehensive knowledge over all aspects of 
the project. 


Andy LoPresto
alopre...@apache.org
alopresto.apa...@gmail.com
PGP Fingerprint: 70EC B3E5 98A6 5A3F D3C4  BACE 3C6E F65B 2F7D EF69

> On Jul 12, 2019, at 10:49 AM, Adam Taft <a...@adamtaft.com> wrote:
> 
> Bryan,
> 
> I think both of your points are actually closely related, and they somewhat
> speak to my thoughts/concerns about splitting the repository.
> 
> I would argue that one PR that affects multiple modules in a single
> repository is _easier_ to review than multiple PRs that affect single
> modules.  In the split repository model, if a change affects several
> repositories, individual PRs would be issued against each repository.  A
> reviewer would not as easily see the context of the changes and may even
> consider them out of order.
> 
> In the single repository model, a PR is atomic. There is no race condition,
> ordering or loss of context across multiple repositories.
> 
> This is the concern I was making for new contributors.  If your
> contribution doesn't fit neatly into a single repository, then it's quite
> the tough process to communicate and deal with changes. It will discourage
> new folks from being involved, because the contribution barrier is raised.
> 
> It's ideal that changesets are atomic, but you definitely lose this
> property in a multi-repo scenario.  Imagine rolling back a change, for
> example, that spans multiple repositories.
> 
> Adam
> 
> On Fri, Jul 12, 2019 at 11:27 AM Bryan Bende <bbe...@gmail.com> wrote:
> 
>> Two other points to throw out there...
>> 
>> 1) I think something to consider is how the management of pull
>> requests would be impacted, since that is the main form of
>> contribution.
>> 
>> Separate repos forces pull requests to stay scoped to a given module,
>> making for more straight forward reviews. It also makes it easier to
>> look at a repo and see what work/contributions are still open,
>> although I suppose all the PRs in the nifi repo could be labeled by
>> module and then filtered, but it seems a little more tedious. Just
>> something to think about.
>> 
>> 
>> 2) We should also consider how we plan to handle changes across modules.
>> 
>> As an example, currently we have nifi and nifi-registry in separate
>> repos, and nifi depends on nifi-registry, but nifi master always stays
>> on the last release version of nifi-registry.
>> 
>> So if you are working on a change across both projects, the process is
>> something like the following...
>> 
>> - Make change in nifi-registry and run a Maven install locally
>> - Change nifi pom to the snapshot version of nifi-registry
>> - Make changes in nifi and stage them in a branch, possibly a draft PR
>> that can't be merged yet
>> - nifi-registry gets released
>> - Put up a PR for the nifi work, bumping the nifi-registry version to
>> released version
>> 
>> I have no issue continuing to work like this, as long as we accept
>> that the complexity of these scenarios will increase with more
>> modules.
>> 
>> An alternative approach would be to allow master of each module to
>> depend on a snapshot of a dependent module. For example, the nifi PR
>> above could be merged before nifi-registry is ever released. It lets
>> the work proceed instead of letting these draft changes build up, and
>> it forces the dependency chain of releases to occur since now you
>> can't release nifi master until nifi-registry is released. The
>> downside is it requires everyone to locally build all the snapshot
>> modules to get the latest changes, even if they aren't working on
>> those other modules, unless there is a way for them to be provided
>> through an apache infra build process.
>> 
>> This second point is less about mono vs multi repo, and more about how
>> to manage development of a change that requires modifying several
>> dependent modules.
>> 
>> On Fri, Jul 12, 2019 at 1:05 PM Kevin Doran <kdo...@apache.org> wrote:
>>> 
>>> Thanks Adam and Edward! This is exactly the type of discussion I was
>>> hoping a detailed and specific proposal would generate, so thanks for
>>> the input. I'll reply to each of you in turn:
>>> 
>>> Adam,
>>> 
>>> It is true that a repo-per-project approach is not required. I've
>>> worked on projects that do it both ways and there are advantages to
>>> both.
>>> 
>>> Single-repo was considered, but as one of the primary goals is to cut
>>> down on Travis / CI build times, the mutli-repo approach seemed to
>>> have a big advantage. Personally, I've never found a reliable, stable
>>> way to introduce CI builds to a repository with multiple projects that
>>> did not require building all the projects in the repository. It's
>>> possible to try to use commands to determine which files have changed
>>> and infer which project(s) to build from that, but maintaining that
>>> logic can get messy. If the logic is wrong, it's possible a project
>>> that is not built is broken by a PR. Building everything is not an
>>> option for a project our size, as our build already time out today.
>>> Fast, reliable Travis builds with no false positives / negatives is
>>> definitely something NiFi needs, and I think it will be simplest to
>>> get there with a multi-repo approach.
>>> 
>>> That said, I agree that the *biggest* win comes from splitting
>>> projects, and that splitting repos is a smaller step. I don't feel
>>> strongly about it and could live with a single repo with multiple
>>> projects (though, for what it's worth, the NiFi umbrella already has
>>> several repositories and I personally don't feel it has been
>>> burdensome).
>>> 
>>> And I agree - let's not start splitting JIRA projects. Let's use
>>> components or labels or something to differentiate issues under the
>>> existing NIFI Jira project.
>>> 
>>> 
>>> Edward,
>>> 
>>> Thanks. I totally agree and I know others who feel the same way.
>>> Better defined boundaries and loosely coupled modules is 100% a
>>> long-term goal. I think this project restructuring won't solve the
>>> problem completely (in fact, to your point, it may uncover some
>>> unfortunate tight-coupling that needs to be reworked on the current
>>> master before the split can happen), but I do think it will encourage
>>> developers to more faithfully build to APIs and avoid leaky
>>> abstractions as there will be more hard division points in the code
>>> base. Some of those issues might be able to be addressed immediately.
>>> Others might have to wait for a major version change.
>>> 
>>> Thanks,
>>> Kevin
>>> 
>>> On Fri, Jul 12, 2019 at 1:04 PM Adam Taft <a...@adamtaft.com> wrote:
>>>> 
>>>> To be honest and to your point Joe, the thing that optimizes the RM
>> duties
>>>> should probably be preferred in all of this.  There is so much
>> overhead for
>>>> the release manager, that lubricating the RM process probably trumps a
>> lot
>>>> of my concerns.  I think there's real concern for making the project
>> harder
>>>> for new contributors. But likewise, that concern should be balanced
>> with
>>>> making the project harder for longtime contributors who have pulled the
>>>> cart the most.
>>>> 
>>>> I was just at least hoping for a discussion on the concept.  Thanks as
>>>> always for your leadership and contributions to the nifi community.
>>>> 
>>>> On Fri, Jul 12, 2019 at 10:48 AM Joe Witt <joe.w...@gmail.com> wrote:
>>>> 
>>>>> Ah I agree the JIRA thing would be too heavy handed.  A single JIRA
>> with
>>>>> well defined components tied to 'repos' is good.
>>>>> 
>>>>> As far as separate code repos we're talking about different
>> releasable
>>>>> artifacts for which we as a PMC are responsible for the
>> meaning/etc..  As a
>>>>> many time RM I definitely dislike the mono repo construct as I
>> understand
>>>>> it to function.  I prefer repos per source release artifact where all
>>>>> source in that artifact is a function of the release. I am ok with
>>>>> different convenience binaries resulting from a single source release
>>>>> artifact though.
>>>>> 
>>>>> Thanks
>>>>> 
>>>>> On Fri, Jul 12, 2019 at 12:26 PM Adam Taft <a...@adamtaft.com>
>> wrote:
>>>>> 
>>>>>> I think the concerns around user management are valid, are they
>> not?
>>>>>> Overhead in JIRA goes up (assigning rights to users in JIRA is
>>>>>> multiplied).  Risk to new contributors is high, because each
>> isolated
>>>>>> repository has its own life and code contribution styles.  Maybe
>> the
>>>>> actual
>>>>>> apache infra involvement is low, but the negative effects of
>> community
>>>>> and
>>>>>> source code bifurcation goes up.
>>>>>> 
>>>>>> Tagging in mono-repos is done by prefixing the name of the
>> component in
>>>>> the
>>>>>> tag name.  Your release sources are still generated from the
>> component
>>>>>> folder (not from the root).
>>>>>> 
>>>>>> Modularization (as being proposed) is a good thing, but can be
>> done in a
>>>>>> single repository. It's not a requirement to split up the git
>> project to
>>>>>> get the benefits of modularization.  That's the point I'm hoping
>> is seen
>>>>> in
>>>>>> this.
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> On Fri, Jul 12, 2019 at 10:08 AM Joe Witt <joe.w...@gmail.com>
>> wrote:
>>>>>> 
>>>>>>> to clarify user management for infra is not a prob.  it is an
>> ldap
>>>>> group.
>>>>>>> 
>>>>>>> repo creation is self service as well amd group access is tied
>> to that.
>>>>>>> 
>>>>>>> release artifact is the source we produce.  this is typically
>>>>> correlated
>>>>>> to
>>>>>>> a tag of the repo.  if we have all source in one repo it isnt
>> clear to
>>>>> me
>>>>>>> how we can maintain that.
>>>>>>> 
>>>>>>> in any event im not making a statement of whether to do many
>> repos or
>>>>>> not.
>>>>>>> just correcting some potentially misleading claims.
>>>>>>> 
>>>>>>> thanks
>>>>>>> 
>>>>>>> On Fri, Jul 12, 2019, 12:01 PM Adam Taft <a...@adamtaft.com>
>> wrote:
>>>>>>> 
>>>>>>>> Just as a point of discussion, I'm not entirely sure that
>> splitting
>>>>>> into
>>>>>>>> multiple physical git repositories is actually adding any
>> value.  I
>>>>>> think
>>>>>>>> it's worth consideration that all the (good) changes being
>> proposed
>>>>> are
>>>>>>>> done under a single mono-repository model.
>>>>>>>> 
>>>>>>>> If we split into multiple repositories, you have substantially
>>>>>> increased
>>>>>>>> the infra surface area. User account management overhead goes
>> up.
>>>>>> Support
>>>>>>>> from the infra team goes up. JIRA issue management goes up,
>>>>>>>> misfiled/miscategorized issues become common. It becomes
>> harder for
>>>>>>>> community members to interact and engage with the project,
>> steeper
>>>>>>> learning
>>>>>>>> curve for new contributors. There are more "side channel"
>>>>> conversations
>>>>>>> and
>>>>>>>> less transparency into the project as a whole. Git history is
>> much
>>>>>> harder
>>>>>>>> (or impossible) to follow across the entire project. Tracking
>> down
>>>>> bugs
>>>>>>> and
>>>>>>>> performing git blame or git bisect becomes hard.
>>>>>>>> 
>>>>>>>> There's nothing really stopping all of these changes from
>> occurring
>>>>> in
>>>>>>> the
>>>>>>>> existing repo, we don't have to have a maven pom.xml in the
>> root of
>>>>> the
>>>>>>>> project repository. It's much easier for contributors to just
>> clone a
>>>>>>>> single repository, read the README at the root, and get
>> oriented to
>>>>> the
>>>>>>>> project layout.  Output artifacts can still be versioned
>> differently
>>>>>> (api
>>>>>>>> can have a different version from extensions).  "Splitting out"
>>>>> modules
>>>>>>> can
>>>>>>>> still happen in the mono-repository.  Jenkins and friends can
>> be
>>>>> taught
>>>>>>> the
>>>>>>>> project layout.
>>>>>>>> 
>>>>>>>> tl;dr - The changes being proposed can be done in a single
>>>>> repository.
>>>>>>>> Splitting into multiple repositories is adding overhead on
>> multiple
>>>>>>> levels,
>>>>>>>> which might be a sneaky form of muda. [1]
>>>>>>>> 
>>>>>>>> Thanks for reading,
>>>>>>>> Adam
>>>>>>>> 
>>>>>>>> [1] https://dzone.com/articles/seven-wastes-software
>>>>>>>> 
>>>>>>>> 
>>>>>>>> On Thu, Jul 11, 2019 at 11:01 AM Otto Fowler <
>>>>> ottobackwa...@gmail.com>
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>>> I agree that this looks great. I think Mike’s idea is worth
>>>>>> considering
>>>>>>>> as
>>>>>>>>> well. I would hope, that as part of this effort some thought
>> will
>>>>> be
>>>>>>>> given
>>>>>>>>> to enhancing the developer documentation around the modules
>> would
>>>>> be
>>>>>>>> given
>>>>>>>>> as well.
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> On July 10, 2019 at 18:15:21, Mike Thomsen (
>> mikerthom...@gmail.com
>>>>> )
>>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>> 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