My preference is to agree that the next Malhar release is 4.0.0 and make the proposed changes when 3.8.0 goes out. Otherwise why to keep semantic versioning checks on Malhar in case there is no version compatibility.

Thank you,

Vlad

On 7/14/17 08:11, Thomas Weise wrote:
next release is 3.8.0

On Fri, Jul 14, 2017 at 7:55 AM, Vlad Rozov <v.ro...@datatorrent.com> wrote:

next release - 3.9.0 or 4.0.0?

Thank you,

Vlad

On 7/13/17 22:25, Thomas Weise wrote:

It is time to resurrect this thread and get going with the work.

For the next release, I will sign up to do the package move in Malhar:

https://issues.apache.org/jira/browse/APEXMALHAR-2517

In general this will be straightforward; most classes in Malhar are marked
evolving and it is trivial for users to change import statements. However,
I would suggest to discuss if there are selected operators that are worth
keeping a backward compatibility stub in the old location.

Here is my plan:

1. Relocate all classes in *lib* and *contrib* within one PR - this is all

IDE automated work
2. Add backward compatibility classes, if, any in separate PR
3. Create PR for Megh library to reflect moved classes

Thanks,
Thomas



On Wed, Mar 1, 2017 at 2:24 PM, Pramod Immaneni <pra...@datatorrent.com>
wrote:

Inline
On Mon, Feb 27, 2017 at 11:03 PM, Thomas Weise <t...@apache.org> wrote:

-->
On Mon, Feb 27, 2017 at 1:27 PM, Pramod Immaneni <
pra...@datatorrent.com

wrote:

For malhar, for existing operators, I prefer we do this as part of the
planned refactoring for breaking the monolith modules into baby

packages
and would also prefer deprecating the existing operators in place.
Refactor into smaller modules was discussed for malhar-contrib and given
the overall state of that module I think it is OK to defer package

renaming

there. I do however prefer to see the package rename addressed for other
modules, especially for the main library module.

Should we consider breaking the library into smaller modules as well,
the
file/block operators for example probably can be in their own module from
just an organizational perspective.



This
will help us achieve two things. First, the user will see all the new
changes at once as opposed to dealing with it twice (with package

rename
and dependency changes) and second it will allow for a smoother
transition

as the existing code will still work in a deprecated state. It will

also
give a more consistent structure to malhar. For new operators, we can
go
with the new package path but we need to ensure they will get moved
into
the baby packages as well.
I think existing operators should be renamed so that git history
remains. A

possible solution for backward compatibility could be to subsequently
add
empty subclasses in the previous location (for existing concrete

operators

that we know are actually in use) to simplify migration for users.


Yes we can do that.

For demos, we can modify the paths as the apps are typically used
wholesale

and the interface is typically manual interaction.

For core, if we are adding new api subsystems, like the launcher api we
added recently for example, we can go with new package path but if we

are
making incremental additions to existing functionality, I feel it is
better

to keep it in the same package. I also prefer we keep the package of

the
implementation classes consistent with api, for understandability and
readability of the code. So, for example, we don't change package path

of
LogicalPlan as it is an implementation of DAG. It is subjective, but it
will be good if we can also do the same with classes closely related to

the

implementation classes as well. Maybe we can moving these on a package

by
package basis, like everything in com.datatorrent.stram.engine could be
moved. For completely internal components like buffer server, we can

move
them wholesale. We can consider moving all api and classes, when we go
to
next major release but would like to see if we can find a way to
support
existing api for one more major release in deprecated mode.

The point of the major release is to enable backward incompatible
changes
and I don't think it is realistic to support the existing API for
another
major release. IMO it is also not necessary as most existing application
code refers to operators, attributes and the application interface.

Perhaps

it is possible to keep those around as interface extensions to help
migration. Custom operators may need to be migrated to reflect API

changes,

and I would consider that a reasonable task for operator developers as

part

of a major upgrade.

It would be good if we can keep them as deprecated interface extensions
for
one release to provide a smoother transition.


API and implementation in engine are kept separate intentionally. They
reside in different packages today, so I don't see a problem renaming
com.datatorrent.stram.engine as you say, even when the API cannot be
touched right away.

They are different packages but sharing a common prefix with api will be
helpful to someone new to codebase in terms of readability. Not a big
deal
and can be changed.


Thanks
On Mon, Feb 27, 2017 at 7:39 AM, Thomas Weise <t...@apache.org> wrote:

Hi,
This topic has come up on several PRs and I think it warrants a

broader
discussion.
At the time of incubation, the decision was to defer change of Java
packages from com.datatorrent to org.apache.apex till next major

release
to

ensure backward compatibility for users.

Unfortunately that has lead to some confusion, as contributors

continue
to
add new code under legacy packages.

It is also a wider issue that examples for using Apex continue to

refer
to
com.datatorrent packages, nearly one year after graduation. More and

more
user code is being built on top of something that needs to change,
the
can
is being kicked down the road and users will face more changes later.

I would like to propose the following:

1. All new code has to be submitted under org.apache.apex packages

2. Not all code is under backward compatibility restriction and in

those
cases we can rename the packages right away. Examples: buffer server,
engine, demos/examples, benchmarks

3. Discuss when the core API and operators can be changed. For

operators
we

have a bit more freedom to do changes before a major release as most

of
them are marked @Evolving and users have the ability to continue
using
prior version of Malhar with newer engine due to engine backward
compatibility guarantee.

Thanks,
Thomas



Reply via email to