[ 
https://issues.apache.org/jira/browse/APEXCORE-319?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15201696#comment-15201696
 ] 

ASF GitHub Bot commented on APEXCORE-319:
-----------------------------------------

Github user tweise commented on a diff in the pull request:

    https://github.com/apache/incubator-apex-site/pull/19#discussion_r56679593
  
    --- Diff: src/md/compatibility.md ---
    @@ -0,0 +1,112 @@
    +#Apache Apex Compatibility
    +
    +##Purpose
    +
    +This document captures the compatibility goals of the Apache Apex project. 
The different types of compatibility between Apex releases that affect 
contributors, downstream projects, and end-users are enumerated. For each type 
of compatibility we:
    +
    +* describe the impact on downstream projects or end-users
    +* where applicable, call out the policy adopted when incompatible changes 
are permitted.
    +
    +Apache Apex follows [semantic versioning](http://semver.org/). Depending 
in the compatibility type, there may be different tools or mechanisms to ensure 
compatibility, for example by comparing artifacts during the build process.
    +
    +The type of change will inform the required target version number. Given a 
version number MAJOR.MINOR.PATCH, increment the:
    +
    +* MAJOR version when you make incompatible API changes,
    +* MINOR version when you add functionality in a backwards-compatible 
manner, and
    +* PATCH version when you make backwards-compatible bug fixes.
    +
    +Additional labels for pre-release and build metadata are available as 
extensions to the MAJOR.MINOR.PATCH format.
    +
    +The overall goal is to avoid backward incompatible changes and major 
release upgrades. Accordingly we attempt to release new features with minor 
versions that are incremental to the prior release and offer our users a 
frictionless upgrade path. When planning contributions, please consider 
compatibility and release road map upfront. Specifically, certain changes that 
conflict with the versioning may need to be documented in JIRA and deferred 
until a future major release. 
    +
    +##Compatibility types
    +
    +###Java API
    +
    +Public API compatibility is required to ensure end-user programs and 
downstream projects continue to work without modification.
    +The public API consists of:
    +
    +* apex-core: all interfaces and classes in `api` and `common` modules
    +* apex-malhar: all interfaces and classes in all modules except `demos`, 
`samples`, `benchmark` 
    +
    +Interfaces and classes that are part of the public API and are annotated 
with [interface 
stability](https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/InterfaceClassification.html)
 are treated according to the rules defined by the annotation.  
    +
    +Policy
    +
    +Changes to the public API must follow semantic versioning. 
    +Public APIs must be deprecated for at least one major release prior to 
their removal in a major release.
    +The japicmp plugin is used to enforce compatibility as part of the Travis 
pre-commit builds.
    +
    +###Semantic compatibility
    +
    +The behavior of APIs needs to remain consistent over versions, though 
changes for correctness may result in changes in behavior. Tests and javadocs 
specify the behavior. Over time, test suites should be expanded to verify 
compliance with the specification, effectively creating a formal specification 
for the subset of behaviors that can be easily tested.
    +
    +Policy
    +
    +The behavior of API may be changed to fix incorrect behavior, changes to 
be accompanied by tests coverage for the exact behavior.
    +
    +###REST API
    +
    +REST API compatibility corresponds to both the URLs and request/response 
content over the wire. REST APIs are specifically meant for stable use by 
clients across releases, even major releases. 
    +
    +Policy
    +
    +The REST API is separately versioned. This is to allow for co-existence of 
old and new API should there be a need for backward incompatible changes in the 
future.
    +
    +###Command Line Interface (CLI)
    +
    +The CLI may be used either directly via the system shell or via shell 
scripts. Changing the path, removing or renaming command line options, the 
order of arguments, or the command return code and output break compatibility 
and may adversely affect users.
    +
    +Policy
    +
    +CLI commands are to be deprecated (warning when used) in a prior minor 
release before they are removed or incompatibly modified in a subsequent major 
release.
    +
    +###Configuration Files
    +
    +Configuration files are used for engine or application settings. Changes 
to keys and default values affect users. 
    +
    +Policy
    +
    +Name, location, format, keys of configuration files should be deprecated 
in a prior minor release and can only be changed in major release. Best effort 
should be made to support the deprecated behavior for one more major release 
(not guaranteed). 
    +
    +###Internal Wire compatibility
    +
    +Apex containers internally use RPC communication and netlet for the data 
flow. The protocols are private and user components are not exposed to it. Apex 
is a YARN application and automatically deployed. There is currently no 
situation where containers of different Apex engine versions need to be 
interoperable. Should such scenario become relevant in the future, wire 
compatibility needs to be specified.
    +
    +Policy
    +
    +N/A
    +
    +###Internal File formats
    +
    +Apex engine stores data in the file system for recovery. When using 
serialization (Kryo, Java etc.), changes to internal classes may affect the 
ability to relaunch an application with upgraded engine code from previous 
state. This is currently not supported. In the future, the serialization 
mechanism should guarantee backward compatibility.
    +
    +Policy
    +
    +Currently no compatibility guarantee. User to cold-restart application on 
engine upgrade.
    +
    +###Java Classpath
    +
    +Apex applications should not bundle Hadoop dependencies or Apex engine 
dependencies but use the dependencies provided in the target environment to 
avoid conflicts. The Apex application archetype can be used to generate a 
compliant project.  
    +
    +Policy
    +
    +Apex engine dependencies can change as per semantic versioning.
    +
    +###Maven Build Artifacts
    +
    +Downstream projects reference the Apex engine dependencies and Malhar 
operator libraries for application development etc. Changes to the packaging 
(which classes are in which jar), the groupId, artifactId and which artifacts 
are deployed to Maven central impact upgrades.
    +
    +Policy
    +
    +The artifacts that contain the classes that form the public API as 
specified above cannot change on patch releases and should stay compatible 
within a major release.
    +
    +###Hardware/Software Requirements
    +
    +Apex depends on Apache Hadoop. The community intends to support all major 
Hadoop distros and current versions. Apex currently supports Hadoop 2.2.0 and 
higher and Java 7 and higher. Apex is written in Java and has been tested on 
Linux based Hadoop clusters. There are no additional restrictions on the 
hardware architecture.  
    --- End diff --
    
    Memory requirements are primarily driven by application specific factors 
and Hadoop infrastructure.


> Document backward compatibility guidelines
> ------------------------------------------
>
>                 Key: APEXCORE-319
>                 URL: https://issues.apache.org/jira/browse/APEXCORE-319
>             Project: Apache Apex Core
>          Issue Type: Task
>            Reporter: Chris Nauroth
>            Assignee: Thomas Weise
>              Labels: tlp
>
> QU40
> The project puts a high priority on backwards compatibility and aims to
> document any incompatible changes and provide tools and documentation to help 
> users transition to new features.
> I couldn't find backwards-compatibility guidelines documented at
> apex.incubator.apache.org.  Example:
> http://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/Comp
> atibility.html



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to