emkornfield commented on code in PR #588:
URL: https://github.com/apache/parquet-format/pull/588#discussion_r3453844777
##########
CONTRIBUTING.md:
##########
@@ -131,62 +138,67 @@ For the purposes of this discussion we classify features
into the following buck
3. Forward incompatible. A file written under a newer version of the format
with
the feature enabled cannot be read under an older version of the format
(e.g.
- adding and using a new compression algorithm). It is expected any feature in
+ adding and using a new compression algorithm). Any feature in
this category will provide a signal to older readers, so they can
- unambiguously determine that they cannot properly read the file (e.g. via
- adding a new value to an existing enum).
+ unambiguously determine that they cannot properly read the file. There are
+ two mechanisms for providing this functionality:
+ 1. Adding values to existing enums/unions (e.g. Sort Order,
+ encodings, compression) is covered by this mechanism.
+ 2. Reserving a new bit in the [PARX](ParxMagicNumber.md) footer feature
bitmap covers other
+ structural changes that an older reader would not be able to accept.
New features are intended to be widely beneficial to users of Parquet, and
therefore it is hoped third-party implementations will adopt them quickly after
-they are introduced. It is assumed that writing new parts of the format, and
-especially forward incompatible features, will be configured with a feature
flag
-defaulted to "off", and at some future point the feature is turned on by
default
-(reading of the new feature will typically be enabled without configuration or
-defaulted to on). Some amount of lead time is desirable to ensure a critical
-mass of Parquet implementations support a feature to avoid compatibility issues
+they are introduced. It is expected that implementations will provide a
configuration
+mechanism for users to enable features. It is recommended that implementations
provide
+at least a way to enable all relevant features given a specification version
+(e.g. major and minor version). In addition, implementations might choose to
+enable features at a finer-grained level, with feature flags initially
defaulted to "off".
+
+Some amount of lead time is desirable to ensure a critical
+mass of Parquet implementations support a given specification version
across the ecosystem. Therefore, the Parquet PMC gives the following
-recommendations for managing features:
+recommendations for managing the default specification version used for
writing:
1. Backward compatibility is the concern of implementations but given the
ubiquity of Parquet and the length of time it has been used, libraries
should
support reading older versions of the format to the greatest extent
possible.
-2. Forward compatible features/changes may be enabled and used by default in
+2. Minor format versions may be enabled and used by default in
implementations once the parquet-format containing those changes has been
- formally released. For features that may pose a significant performance
+ formally released. For releases that may pose a significant performance
regression to older format readers, libraries should consider delaying
default
- enablement until 1 year after the release of the parquet-java implementation
- that contains the feature implementation.
+ enablement until 1 year after the parquet-java implementation for that
format
+ version is released.
-3. Forward incompatible features/changes should not be turned on by default
- until 2 years after the parquet-java implementation containing the feature
is
- released. It is recommended that changing the default value for a forward
- incompatible feature flag should be clearly advertised to consumers (e.g.
via
+3. Major version upgrades should not be enabled by default
+ until 2 years after the parquet-java implementation for the specification
has been
Review Comment:
My main concern here is there we don't have full participation from
everybody that has a parquet reader so knowing an exact time to release is
still somewhat a guess (especially because some people never update there
libraries). I think setting expectations that all readers have two years
before the potentially start breaking change become widespread is a reasonable
balance.
I'm open to other wording here or other views on a policy that actually
enables us to upgrade in a reasonable time-frame but minimizes breakages.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]