Thanks all for comments and suggestions. We want to close this thread and
start implementing the new policy based on the discussion:

1. Stop assigning JIRAs to the first person listed in the dependency owners
files <https://github.com/apache/beam/tree/master/ownership>. Instead, cc
people on the owner list.
2. We will be creating JIRAs for upgrading individual dependencies, not for
upgrading to specific versions of those dependencies. For example, if a
given dependency X is three minor versions or an year behind we will create
a JIRA for upgrading that. But the specific version to upgrade to has to be
determined by the Beam community. Beam community might choose to close a
JIRA if there are known issues with available recent releases. Tool will
reopen such a closed JIRA to inform owners if Beam is hitting the 'fixed
version' or 3 new versions of the dependency have been released since JIRA
was closed.

Thank you.

Regards.
Yifan

On Wed, Sep 5, 2018 at 2:14 PM Yifan Zou <yifan...@google.com> wrote:

> +1 on the jira "fix version".
> The release frequency of dependencies are various, so that using new
> information such as versions from the Jira closing date to reopen the
> issues might not be very proper. We could check the fix versions first, and
> if specified, then reopen the issue in that version's release cycle; it
> not, follow Cham's proposal (2).
>
> On Wed, Sep 5, 2018 at 1:59 PM Chamikara Jayalath <chamik...@google.com>
> wrote:
>
>>
>>
>> On Wed, Sep 5, 2018 at 12:50 PM Tim Robertson <timrobertson...@gmail.com>
>> wrote:
>>
>>> Thank you Cham, and everyone for contributing
>>>
>>> Sorry for slow reply to a thread I started, but I've been swamped on non
>>> Beam projects.
>>>
>>> KafkaIO's policy of 'let the user decide exact version at runtime' has
>>>> been quite useful so far. How feasible is that for other connectors?
>>>
>>>
>>> I presume shimming might be needed in a few places but it's certainly
>>> something we might want to explore more. I'll look into KafkaIO.
>>>
>>> On Cham's proposal :
>>>
>>> (1) +0.5. We can always then opt to either assign or take ownership of
>>> an issue, although I am also happy to stick with the owners model - it
>>> prompted me to investigate and resulted in this thread.
>>>
>>> (2) I think this makes sense.
>>> A bot informing us that we're falling behind versions is immensely
>>> useful as long as we can link issues to others which might have a wider
>>> discussion (remember many dependencies need to be treated together such as
>>> "Support Hadoop 3.0.x" or "Support HBase 2.x"). Would it make sense to let
>>> owners use the Jira "fix versions" to put in future release to inform the
>>> bot when it should start alerting again?
>>>
>>
>> I think this makes sense. Setting a "fix version" will be specially
>> useful for dependency changes that result in API changes that have to be
>> postponed till next major version of Beam.
>>
>> On grouping, I believe we already group JIRAs into tasks and sub-tasks
>> based on group ids of dependencies. I suppose it will not be too hard to
>> close multiple sub-tasks with the same reasoning.
>>
>>
>>>
>>>
>>> On Wed, Sep 5, 2018 at 3:18 AM Yifan Zou <yifan...@google.com> wrote:
>>>
>>>> Thanks Cham for putting this together. Also, after modifying the
>>>> dependency tool based on the policy above, we will close all existing JIRA
>>>> issues that prevent creating duplicate bugs and stop pushing assignees to
>>>> upgrade dependencies with old bugs.
>>>>
>>>> Please let us know if you have any comments on the revised policy in
>>>> Cham's email.
>>>>
>>>> Thanks all.
>>>>
>>>> Regards.
>>>> Yifan Zou
>>>>
>>>> On Tue, Sep 4, 2018 at 5:35 PM Chamikara Jayalath <chamik...@google.com>
>>>> wrote:
>>>>
>>>>> Based on this email thread and offline feedback from several folks,
>>>>> current concerns regarding dependency upgrade policy and tooling seems to
>>>>> be following.
>>>>>
>>>>> (1) We have to be careful when upgrading dependencies. For example, we
>>>>> should not create JIRAs for upgrading to dependency versions that have
>>>>> known issues.
>>>>>
>>>>> (2) Dependency owners list can get stale. Somebody who is interested
>>>>> in upgrading a dependency today might not be interested in the same task 
>>>>> in
>>>>> six months. Responsibility of upgrading a dependency should lie with the
>>>>> community instead of pre-identified owner(s).
>>>>>
>>>>> On the other hand we do not want Beam to significantly fall behind
>>>>> when it comes to dependencies. We should upgrade dependencies whenever it
>>>>> makes sense. This allows us to offer a more up to date system and to makes
>>>>> things easy for users that deploy Beam along with other systems.
>>>>>
>>>>> I discussed these issues with Yifan and we would like to suggest
>>>>> following changes to current policy and tooling that might help alleviate
>>>>> some of the concerns.
>>>>>
>>>>> (1) Instead of a dependency "owners" list we will be maintaining an
>>>>> "interested parties" list. When we create a JIRA for a dependency we will
>>>>> not assign it to an owner but rather we will CC all the folks that
>>>>> mentioned that they will be interested in receiving updates related to 
>>>>> that
>>>>> dependency. Hope is that some of the interested parties will also put
>>>>> forward the effort to upgrade dependencies they are interested in but the
>>>>> responsibility of upgrading dependencies lie with the community as a 
>>>>> whole.
>>>>>
>>>>>  (2) We will be creating JIRAs for upgrading individual dependencies,
>>>>> not for upgrading to specific versions of those dependencies. For example,
>>>>> if a given dependency X is three minor versions or an year behind we will
>>>>> create a JIRA for upgrading that. But the specific version to upgrade to
>>>>> has to be determined by the Beam community. Beam community might choose to
>>>>> close a JIRA if there are known issues with available recent releases. 
>>>>> Tool
>>>>> may reopen such a closed JIRA in the future if new information becomes
>>>>> available (for example, 3 new versions have been released since JIRA was
>>>>> closed).
>>>>>
>>>>> Thoughts ?
>>>>>
>>>>> Thanks,
>>>>> Cham
>>>>>
>>>>> On Tue, Aug 28, 2018 at 1:51 PM Chamikara Jayalath <
>>>>> chamik...@google.com> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> On Tue, Aug 28, 2018 at 12:05 PM Thomas Weise <t...@apache.org> wrote:
>>>>>>
>>>>>>> I think there is an invalid assumption being made in this
>>>>>>> discussion, which is that most projects comply with semantic versioning.
>>>>>>> The reality in the open source big data space is unfortunately quite
>>>>>>> different. Ismaël has well characterized the situation and HBase isn't 
>>>>>>> an
>>>>>>> exception. Another indicator for the scale of problem is extensive 
>>>>>>> amount
>>>>>>> of shading used in Beam and other projects. It wouldn't be necessary if
>>>>>>> semver compliance was something we can rely on.
>>>>>>>
>>>>>>> Our recent Flink upgrade broke user(s). And we noticed a backward
>>>>>>> incompatible Flink change that affected the portable Flink runner even
>>>>>>> between patches.
>>>>>>>
>>>>>>> Many projects (including Beam) guarantee compatibility only for a
>>>>>>> subset of public API. Sometimes a REST API is not covered, sometimes not
>>>>>>> strictly internal protocols change and so on, all of which can break 
>>>>>>> users,
>>>>>>> despite the public API remaining "compatible". As much as I would love 
>>>>>>> to
>>>>>>> rely on the version number to tell me wether an upgrade is safe or not,
>>>>>>> that's not practically possible.
>>>>>>>
>>>>>>> Furthermore, we need to proceed with caution forcing upgrades on
>>>>>>> users that host the target systems. To stay with the Flink example, 
>>>>>>> moving
>>>>>>> Beam from 1.4 to 1.5 is actually a major change to some, because they 
>>>>>>> now
>>>>>>> have to upgrade their Flink clusters/deployments to be able to use the 
>>>>>>> new
>>>>>>> version of Beam.
>>>>>>>
>>>>>>> Upgrades need to be done with caution and may require extensive
>>>>>>> verification beyond what our automation provides. I think the Spark 
>>>>>>> change
>>>>>>> from 1.x to 2.x and also the JDK 1.8 change were good examples, they
>>>>>>> provided the community a window to provide feedback and influence the
>>>>>>> change.
>>>>>>>
>>>>>>
>>>>>> Thanks for the clarification.
>>>>>>
>>>>>> Current policy indeed requests caution and explicit checks when
>>>>>> upgrading all dependencies (including minor and patch versions) but
>>>>>> language might have to be updated to emphasize your concerns.
>>>>>>
>>>>>> Here's the current text.
>>>>>>
>>>>>> "Beam releases adhere to
>>>>>> <https://beam.apache.org/get-started/downloads/> semantic
>>>>>> versioning. Hence, community members should take care when updating
>>>>>> dependencies. Minor version updates to dependencies should be backwards
>>>>>> compatible in most cases. Some updates to dependencies though may result 
>>>>>> in
>>>>>> backwards incompatible API or functionality changes to Beam. PR reviewers
>>>>>> and committers should take care to detect any dependency updates that 
>>>>>> could
>>>>>> potentially introduce backwards incompatible changes to Beam before 
>>>>>> merging
>>>>>> and PRs that update dependencies should include a statement regarding 
>>>>>> this
>>>>>> verification in the form of a PR comment. Dependency updates that result 
>>>>>> in
>>>>>> backwards incompatible changes to non-experimental features of Beam 
>>>>>> should
>>>>>> be held till next major version release of Beam. Any exceptions to this
>>>>>> policy should only occur in extreme cases (for example, due to a security
>>>>>> vulnerability of an existing dependency that is only fixed in a 
>>>>>> subsequent
>>>>>> major version) and should be discussed in the Beam dev list. Note that
>>>>>> backwards incompatible changes to experimental features may be introduced
>>>>>> in a minor version release."
>>>>>>
>>>>>> Also, are there any other steps we can take to make sure that Beam
>>>>>> dependencies are not too old while offering a stable system ? Note that
>>>>>> having a lot of legacy dependencies that do not get upgraded regularly 
>>>>>> can
>>>>>> also result in user pain and Beam being unusable for certain users who 
>>>>>> run
>>>>>> into dependency conflicts when using Beam along with other systems (which
>>>>>> will increase the amount of shading/vendoring we have to do).
>>>>>>
>>>>>> Please note that current tooling does not force upgrades or
>>>>>> automatically upgrade dependencies. It simply creates JIRAs that can be
>>>>>> closed with a reason if needed. For Python SDK though we have version
>>>>>> ranges in place for most dependencies [1] so these dependencies get 
>>>>>> updated
>>>>>> automatically according to the corresponding ranges.
>>>>>> https://github.com/apache/beam/blob/master/sdks/python/setup.py#L103
>>>>>>
>>>>>> Thanks,
>>>>>> Cham
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Thomas
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Tue, Aug 28, 2018 at 11:29 AM Raghu Angadi <rang...@google.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Thanks for the IO versioning summary.
>>>>>>>> KafkaIO's policy of 'let the user decide exact version at runtime'
>>>>>>>> has been quite useful so far. How feasible is that for other 
>>>>>>>> connectors?
>>>>>>>>
>>>>>>>> Also, KafkaIO does not limit itself to minimum features available
>>>>>>>> across all the supported versions. Some of the features (e.g. server 
>>>>>>>> side
>>>>>>>> timestamps) are disabled based on runtime Kafka version.  The unit 
>>>>>>>> tests
>>>>>>>> currently run with single recent version. Integration tests could 
>>>>>>>> certainly
>>>>>>>> use multiple versions. With some more effort in writing tests, we could
>>>>>>>> make multiple versions of the unit tests.
>>>>>>>>
>>>>>>>> Raghu.
>>>>>>>>
>>>>>>>> IO versioning
>>>>>>>>> * Elasticsearch. We delayed the move to version 6 until we heard of
>>>>>>>>> more active users needing it (more deployments). We support 2.x and
>>>>>>>>> 5.x (but 2.x went recently EOL). Support for 6.x is in progress.
>>>>>>>>> * SolrIO, stable version is 7.x, LTS is 6.x. We support only 5.x
>>>>>>>>> because most big data distributions still use 5.x (however 5.x has
>>>>>>>>> been EOL).
>>>>>>>>> * KafkaIO uses version 1.x but Kafka recently moved to 2.x, however
>>>>>>>>> most of the deployments of Kafka use earlier versions than 1.x.
>>>>>>>>> This
>>>>>>>>> module uses a single version with the kafka client as a provided
>>>>>>>>> dependency and so far it works (but we don’t have multi version
>>>>>>>>> tests).
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Tue, Aug 28, 2018 at 8:38 AM Ismaël Mejía <ieme...@gmail.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> I think we should refine the strategy on dependencies discussed
>>>>>>>>> recently. Sorry to come late with this (I did not follow closely
>>>>>>>>> the
>>>>>>>>> previous discussion), but the current approach is clearly not in
>>>>>>>>> line
>>>>>>>>> with the industry reality (at least not for IO connectors + Hadoop
>>>>>>>>> +
>>>>>>>>> Spark/Flink use).
>>>>>>>>>
>>>>>>>>> A really proactive approach to dependency updates is a good
>>>>>>>>> practice
>>>>>>>>> for the core dependencies we have e.g. Guava, Bytebuddy, Avro,
>>>>>>>>> Protobuf, etc, and of course for the case of cloud based IOs e.g.
>>>>>>>>> GCS,
>>>>>>>>> Bigquery, AWS S3, etc. However when we talk about self hosted data
>>>>>>>>> sources or processing systems this gets more complicated and I
>>>>>>>>> think
>>>>>>>>> we should be more flexible and do this case by case (and remove
>>>>>>>>> these
>>>>>>>>> from the auto update email reminder).
>>>>>>>>>
>>>>>>>>> Some open source projects have at least three maintained versions:
>>>>>>>>> - LTS – maps to what most of the people have installed (or the big
>>>>>>>>> data distributions use) e.g. HBase 1.1.x, Hadoop 2.6.x
>>>>>>>>> - Stable – current recommended version. HBase 1.4.x, Hadoop 2.8.x
>>>>>>>>> - Next – latest release. HBase 2.1.x Hadoop 3.1.x
>>>>>>>>>
>>>>>>>>> Following the most recent versions can be good to be close to the
>>>>>>>>> current development of other projects and some of the fixes, but
>>>>>>>>> these
>>>>>>>>> versions are commonly not deployed for most users and adopting a
>>>>>>>>> LTS
>>>>>>>>> or stable only approach won't satisfy all cases either. To
>>>>>>>>> understand
>>>>>>>>> why this is complex let’s see some historical issues:
>>>>>>>>>
>>>>>>>>> IO versioning
>>>>>>>>> * Elasticsearch. We delayed the move to version 6 until we heard of
>>>>>>>>> more active users needing it (more deployments). We support 2.x and
>>>>>>>>> 5.x (but 2.x went recently EOL). Support for 6.x is in progress.
>>>>>>>>> * SolrIO, stable version is 7.x, LTS is 6.x. We support only 5.x
>>>>>>>>> because most big data distributions still use 5.x (however 5.x has
>>>>>>>>> been EOL).
>>>>>>>>> * KafkaIO uses version 1.x but Kafka recently moved to 2.x, however
>>>>>>>>> most of the deployments of Kafka use earlier versions than 1.x.
>>>>>>>>> This
>>>>>>>>> module uses a single version with the kafka client as a provided
>>>>>>>>> dependency and so far it works (but we don’t have multi version
>>>>>>>>> tests).
>>>>>>>>>
>>>>>>>>> Runners versioning
>>>>>>>>> * The move to Spark 1 to Spark 2 was decided after evaluating the
>>>>>>>>> tradeoffs between maintaining multiple version support and to have
>>>>>>>>> breaking changes with the issues of maintaining multiple versions.
>>>>>>>>> This is a rare case but also with consequences. This dependency is
>>>>>>>>> provided but we don't actively test issues on version migration.
>>>>>>>>> * Flink moved to version 1.5, introducing incompatibility in
>>>>>>>>> checkpointing (discussed recently and with not yet consensus on
>>>>>>>>> how to
>>>>>>>>> handle).
>>>>>>>>>
>>>>>>>>> As you can see, it seems really hard to have a solution that fits
>>>>>>>>> all
>>>>>>>>> cases. Probably the only rule that I see from this list is that we
>>>>>>>>> should upgrade versions for connectors that have been deprecated or
>>>>>>>>> arrived to the EOL (e.g. Solr 5.x, Elasticsearch 2.x).
>>>>>>>>>
>>>>>>>>> For the case of the provided dependencies I wonder if as part of
>>>>>>>>> the
>>>>>>>>> tests we should provide tests with multiple versions (note that
>>>>>>>>> this
>>>>>>>>> is currently blocked by BEAM-4087).
>>>>>>>>>
>>>>>>>>> Any other ideas or opinions to see how we can handle this? What
>>>>>>>>> other
>>>>>>>>> people in the community think ? (Notice that this can have relation
>>>>>>>>> with the ongoing LTS discussion.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Tue, Aug 28, 2018 at 10:44 AM Tim Robertson
>>>>>>>>> <timrobertson...@gmail.com> wrote:
>>>>>>>>> >
>>>>>>>>> > Hi folks,
>>>>>>>>> >
>>>>>>>>> > I'd like to revisit the discussion around our versioning policy
>>>>>>>>> specifically for the Hadoop ecosystem and make sure we are aware of 
>>>>>>>>> the
>>>>>>>>> implications.
>>>>>>>>> >
>>>>>>>>> > As an example our policy today would have us on HBase 2.1 and I
>>>>>>>>> have reminders to address this.
>>>>>>>>> >
>>>>>>>>> > However, currently the versions of HBase in the major hadoop
>>>>>>>>> distros are:
>>>>>>>>> >
>>>>>>>>> >  - Cloudera 5 on HBase 1.2 (Cloudera 6 is 2.1 but is only in
>>>>>>>>> beta)
>>>>>>>>> >  - Hortonworks HDP3 on HBase 2.0 (only recently released so we
>>>>>>>>> can assume is not widely adopted)
>>>>>>>>> >  - AWS EMR HBase on 1.4
>>>>>>>>> >
>>>>>>>>> > On the versioning I think we might need a more nuanced approach
>>>>>>>>> to ensure that we target real communities of existing and potential 
>>>>>>>>> users.
>>>>>>>>> Enterprise users need to stick to the supported versions in the
>>>>>>>>> distributions to maintain support contracts from the vendors.
>>>>>>>>> >
>>>>>>>>> > Should our versioning policy have more room to consider on a
>>>>>>>>> case by case basis?
>>>>>>>>> >
>>>>>>>>> > For Hadoop might we benefit from a strategy on which community
>>>>>>>>> of users Beam is targeting?
>>>>>>>>> >
>>>>>>>>> > (OT: I'm collecting some thoughts on what we might consider to
>>>>>>>>> target enterprise hadoop users - kerberos on all relevant IO, 
>>>>>>>>> performance,
>>>>>>>>> leaking beyond encryption zones with temporary files etc)
>>>>>>>>> >
>>>>>>>>> > Thanks,
>>>>>>>>> > Tim
>>>>>>>>>
>>>>>>>>

Reply via email to