On Sat, 4 Sep 2021 15:25:59 GMT, Jaikiran Pai <j...@openjdk.org> wrote:

> The commit in this PR implements the proposal for enhancement that was 
> discussed in the core-libs-dev mailing list recently[1], for 
> https://bugs.openjdk.java.net/browse/JDK-8231640
> 
> At a high level - the `store()` APIs in `Properties` have been modified to 
> now look for the `SOURCE_DATE_EPOCH` environment variable[2]. If that env 
> variable is set, then instead of writing out the current date time as a date 
> comment, the `store()` APIs instead will use the value set for this env 
> variable to parse it to a `Date` and write out the string form of such a 
> date. The implementation here uses the `d MMM yyyy HH:mm:ss 'GMT'` date 
> format and `Locale.ROOT` to format and write out such a date. This should 
> provide reproducibility whenever the `SOURCE_DATE_EPOCH` is set. Furthermore, 
> intentionally, no changes in the date format of the "current date" have been 
> done.
> 
> These  modified `store()` APIs work in the presence of the `SecurityManager` 
> too. The caller is expected to have a read permission on the 
> `SOURCE_DATE_EPOCH` environment variable. If the caller doesn't have that 
> permission, then the implementation of these `store()` APIs will write out 
> the "current date" and will ignore any value that has been set for the 
> `SOURCE_DATE_EPOCH` env variable. This should allow for backward 
> compatibility of existing applications, where, when they run under a 
> `SecurityManager` and perhaps with an existing restrictive policy file, the 
> presence of `SOURCE_DATE_EPOCH` shouldn't impact their calls to the `store()` 
> APIs.
> 
> The modified `store()` APIs will also ignore any value for 
> `SOURCE_DATE_EPOCH` that  cannot be parsed to an `long` value. In such cases, 
> the `store()` APIs will write out the "current date" and ignore the value set 
> for this environment variable. No exceptions will be thrown for such invalid 
> values. This is an additional backward compatibility precaution to prevent 
> any rogue value for `SOURCE_DATE_EPOCH` from breaking applications.
> 
> An additional change in the implementation of these `store()` APIs and 
> unrelated to the date comment, is that these APIs will now write out the 
> property keys in a deterministic order. The keys will be written out in the 
> natural ordering as specified by `java.lang.String#compareTo()` API.
> 
> The combination of the ordering of the property keys when written out and the 
> usage of `SOURCE_DATE_EPOCH` environment value to determine the date comment 
> should together allow for reproducibility of the output generated by these 
> `store()` APIs.
> 
> New jtreg test classes have been introduced to verify these changes. The 
> primary focus of `PropertiesStoreTest` is the ordering aspects of the 
> property keys that are written out. On the other hand 
> `StoreReproducibilityTest` focuses on the reproducibility of the output 
> generated by these APIs.  The `StoreReproducibilityTest` runs these tests 
> both in the presence and absence of `SecurityManager`. Plus, in the presence 
> of SecurityManager, it tests both the scenarios where the caller is granted 
> the requisite permission and in other case not granted that permission.
> 
> These new tests and existing tests under `test/jdk/java/util/Properties/` 
> pass with these changes.
> 
> [1] 
> https://mail.openjdk.java.net/pipermail/core-libs-dev/2021-August/080758.html
> [2] https://reproducible-builds.org/specs/source-date-epoch/

Off topic - the `tier1` failures that are being reported in GitHub action jobs 
seem genuine but unrelated to this change. The failure is consistently in a 
single test `InfoOptsTest` and it fails with the following error when running 
the `testUniqueInfoOpts` test case. Looks like a recent issue in some commit. 
I'll sort that out separately.
Here's the error from the logs:


2021-09-04T16:37:24.7528210Z Running test testUniqueInfoOpts
2021-09-04T16:37:24.7630470Z Main [--help, --help] []
2021-09-04T16:37:24.7635480Z rc:0
2021-09-04T16:37:24.7736940Z javac/DIRECT:
2021-09-04T16:37:24.7762440Z Usage: javac <options> <source files>
2021-09-04T16:37:24.7863980Z where possible options include:
2021-09-04T16:37:24.7892480Z   @<filename>                  Read options and 
filenames from file
2021-09-04T16:37:24.7986700Z   -Akey[=value]                Options to pass to 
annotation processors
2021-09-04T16:37:24.8003100Z   --add-modules <module>(,<module>)*
2021-09-04T16:37:24.8030720Z         Root modules to resolve in addition to the 
initial modules, or all modules
2021-09-04T16:37:24.8106550Z         on the module path if <module> is 
ALL-MODULE-PATH.
2021-09-04T16:37:24.8108330Z   --boot-class-path <path>, -bootclasspath <path>
2021-09-04T16:37:24.8110830Z         Override location of bootstrap class files
2021-09-04T16:37:24.8112470Z   --class-path <path>, -classpath <path>, -cp 
<path>
2021-09-04T16:37:24.8113590Z         Specify where to find user class files and 
annotation processors
2021-09-04T16:37:24.8115140Z   -d <directory>               Specify where to 
place generated class files
2021-09-04T16:37:24.8116530Z   -deprecation
2021-09-04T16:37:24.8117490Z         Output source locations where deprecated 
APIs are used
2021-09-04T16:37:24.8118770Z   --enable-preview
2021-09-04T16:37:24.8120330Z         Enable preview language features. To be 
used in conjunction with either -source or --release.
2021-09-04T16:37:24.8129810Z   -encoding <encoding>         Specify character 
encoding used by source files
2021-09-04T16:37:24.8136440Z   -endorseddirs <dirs>         Override location 
of endorsed standards path
2021-09-04T16:37:24.8239190Z   -extdirs <dirs>              Override location 
of installed extensions
2021-09-04T16:37:24.8251400Z   -g                           Generate all 
debugging info
2021-09-04T16:37:24.8290250Z   -g:{lines,vars,source}       Generate only some 
debugging info
2021-09-04T16:37:24.8291910Z   -g:none                      Generate no 
debugging info
2021-09-04T16:37:24.8293200Z   -h <directory>
2021-09-04T16:37:24.8294170Z         Specify where to place generated native 
header files
2021-09-04T16:37:24.8296270Z   --help, -help, -?            Print this help 
message
2021-09-04T16:37:24.8297720Z   --help-extra, -X             Print help on extra 
options
2021-09-04T16:37:24.8299160Z   -implicit:{none,class}
2021-09-04T16:37:24.8300250Z         Specify whether or not to generate class 
files for implicitly referenced files
2021-09-04T16:37:24.8301820Z   -J<flag>                     Pass <flag> 
directly to the runtime system
2021-09-04T16:37:24.8303230Z   --limit-modules <module>(,<module>)*
2021-09-04T16:37:24.8304210Z         Limit the universe of observable modules
2021-09-04T16:37:24.8305570Z   --module <module>(,<module>)*, -m 
<module>(,<module>)*
2021-09-04T16:37:24.8306630Z         Compile only the specified module(s), 
check timestamps
2021-09-04T16:37:24.8307980Z   --module-path <path>, -p <path>
2021-09-04T16:37:24.8309050Z         Specify where to find application modules
2021-09-04T16:37:24.8310500Z   --module-source-path <module-source-path>
2021-09-04T16:37:24.8311660Z         Specify where to find input source files 
for multiple modules
2021-09-04T16:37:24.8313050Z   --module-version <version>
2021-09-04T16:37:24.8314040Z         Specify version of modules that are being 
compiled
2021-09-04T16:37:24.8315390Z   -nowarn                      Generate no warnings
2021-09-04T16:37:24.8316640Z   -parameters
2021-09-04T16:37:24.8317620Z         Generate metadata for reflection on method 
parameters
2021-09-04T16:37:24.8361300Z   -proc:{none,only}
2021-09-04T16:37:24.8362510Z         Control whether annotation processing 
and/or compilation is done.
2021-09-04T16:37:24.8364150Z   -processor <class1>[,<class2>,<class3>...]
2021-09-04T16:37:24.8365410Z         Names of the annotation processors to run; 
bypasses default discovery process
2021-09-04T16:37:24.8366910Z   --processor-module-path <path>
2021-09-04T16:37:24.8367990Z         Specify a module path where to find 
annotation processors
2021-09-04T16:37:24.8369540Z   --processor-path <path>, -processorpath <path>
2021-09-04T16:37:24.8370620Z         Specify where to find annotation processors
2021-09-04T16:37:24.8371840Z   -profile <profile>
2021-09-04T16:37:24.8372800Z         Check that API used is available in the 
specified profile
2021-09-04T16:37:24.8374080Z   --release <release>
2021-09-04T16:37:24.8375110Z         Compile for the specified Java SE release. 
Supported releases: 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18
2021-09-04T16:37:24.8377060Z   -s <directory>               Specify where to 
place generated source files
2021-09-04T16:37:24.8378940Z   --source <release>, -source <release>
2021-09-04T16:37:24.8380150Z         Provide source compatibility with the 
specified Java SE release. Supported releases: 7, 8, 9, 10, 11, 12, 13, 14, 15, 
16, 17, 18
2021-09-04T16:37:24.8381690Z   --source-path <path>, -sourcepath <path>
2021-09-04T16:37:24.8382670Z         Specify where to find input source files
2021-09-04T16:37:24.8383990Z   --system <jdk>|none          Override location 
of system modules
2021-09-04T16:37:24.8385370Z   --target <release>, -target <release>
2021-09-04T16:37:24.8386570Z         Generate class files suitable for the 
specified Java SE release. Supported releases: 7, 8, 9, 10, 11, 12, 13, 14, 15, 
16, 17, 18
2021-09-04T16:37:24.8388070Z   --upgrade-module-path <path>
2021-09-04T16:37:24.8389040Z         Override location of upgradeable modules
2021-09-04T16:37:24.8390480Z   -verbose                     Output messages 
about what the compiler is doing
2021-09-04T16:37:24.8391930Z   --version, -version          Version information
2021-09-04T16:37:24.8393380Z   -Werror                      Terminate 
compilation if warnings occur
2021-09-04T16:37:24.8394150Z 
2021-09-04T16:37:24.8395160Z Main [-X, -X] []
2021-09-04T16:37:24.8395860Z rc:0
2021-09-04T16:37:24.8396520Z javac/DIRECT:
2021-09-04T16:37:24.8397830Z   --add-exports 
<module>/<package>=<other-module>(,<other-module>)*
2021-09-04T16:37:24.8399140Z         Specify a package to be considered as 
exported from its defining module
2021-09-04T16:37:24.8400780Z         to additional modules, or to all unnamed 
modules if <other-module> is ALL-UNNAMED.
2021-09-04T16:37:24.8403050Z   --add-reads 
<module>=<other-module>(,<other-module>)*
2021-09-04T16:37:24.8404200Z         Specify additional modules to be 
considered as required by a given module.
2021-09-04T16:37:24.8405750Z         <other-module> may be ALL-UNNAMED to 
require the unnamed module.
2021-09-04T16:37:24.8407430Z   --default-module-for-created-files <module-name>
2021-09-04T16:37:24.8408890Z         Fallback target module for files created 
by annotation processors, if none specified or inferred.
2021-09-04T16:37:24.8410640Z   -Djava.endorsed.dirs=<dirs>  Override location 
of endorsed standards path
2021-09-04T16:37:24.8412280Z   -Djava.ext.dirs=<dirs>       Override location 
of installed extensions
2021-09-04T16:37:24.8413820Z   --help-lint                  Print the supported 
keys for -Xlint
2021-09-04T16:37:24.8415200Z   --patch-module <module>=<file>(:<file>)*
2021-09-04T16:37:24.8416210Z         Override or augment a module with classes 
and resources
2021-09-04T16:37:24.8417110Z         in JAR files or directories
2021-09-04T16:37:24.8418510Z   -Xbootclasspath:<path>       Override location 
of bootstrap class files
2021-09-04T16:37:24.8420080Z   -Xbootclasspath/a:<path>     Append to the 
bootstrap class path
2021-09-04T16:37:24.8421630Z   -Xbootclasspath/p:<path>     Prepend to the 
bootstrap class path
2021-09-04T16:37:24.8423170Z   -Xdiags:{compact,verbose}    Select a diagnostic 
mode
2021-09-04T16:37:24.8424430Z   -Xdoclint
2021-09-04T16:37:24.8425370Z         Enable recommended checks for problems in 
javadoc comments
2021-09-04T16:37:24.8426730Z   -Xdoclint:(all|none|[-]<group>)[/<access>]
2021-09-04T16:37:24.8427770Z         Enable or disable specific checks for 
problems in javadoc comments,
2021-09-04T16:37:24.8428920Z         where <group> is one of accessibility, 
html, missing, reference, or syntax,
2021-09-04T16:37:24.8430170Z         and <access> is one of public, protected, 
package, or private.
2021-09-04T16:37:24.8431760Z   -Xdoclint/package:[-]<packages>(,[-]<package>)*
2021-09-04T16:37:24.8432880Z         Enable or disable checks in specific 
packages. Each <package> is either the
2021-09-04T16:37:24.8434310Z         qualified name of a package or a package 
name prefix followed by .*, which
2021-09-04T16:37:24.8435940Z         expands to all sub-packages of the given 
package. Each <package> can be prefixed
2021-09-04T16:37:24.8438060Z         with - to disable checks for the specified 
package or packages.
2021-09-04T16:37:24.8439610Z   -Xlint                       Enable recommended 
warnings
2021-09-04T16:37:24.8440840Z   -Xlint:<key>(,<key>)*
2021-09-04T16:37:24.8441750Z         Warnings to enable or disable, separated 
by comma.
2021-09-04T16:37:24.8443150Z         Precede a key by - to disable the 
specified warning.
2021-09-04T16:37:24.8444570Z         Use --help-lint to see the supported keys.
2021-09-04T16:37:24.8446010Z   -Xmaxerrs <number>           Set the maximum 
number of errors to print
2021-09-04T16:37:24.8447550Z   -Xmaxwarns <number>          Set the maximum 
number of warnings to print
2021-09-04T16:37:24.8550380Z   -Xpkginfo:{always,legacy,nonempty}
2021-09-04T16:37:24.8636310Z         Specify handling of package-info files
2021-09-04T16:37:24.8639600Z   -Xplugin:"name args"
2021-09-04T16:37:24.8663470Z         Name and optional arguments for a plug-in 
to be run
2021-09-04T16:37:24.8665480Z   -Xprefer:{source,newer}
2021-09-04T16:37:24.8683700Z         Specify which file to read when both a 
source file and class file are found for an implicitly compiled class
2021-09-04T16:37:24.8728280Z   -Xprint
2021-09-04T16:37:24.8729520Z         Print out a textual representation of 
specified types
2021-09-04T16:37:24.8730900Z   -XprintProcessorInfo
2021-09-04T16:37:24.8731960Z         Print information about which annotations 
a processor is asked to process
2021-09-04T16:37:24.8733270Z   -XprintRounds
2021-09-04T16:37:24.8734200Z         Print information about rounds of 
annotation processing
2021-09-04T16:37:24.8736230Z   -Xstdout <filename>          Redirect standard 
output
2021-09-04T16:37:24.8736940Z 
2021-09-04T16:37:24.8737760Z These extra options are subject to change without 
notice.
2021-09-04T16:37:24.8739170Z Main [--help-lint, --help-lint] []
2021-09-04T16:37:24.8739960Z rc:0
2021-09-04T16:37:24.8740890Z javac/DIRECT:
2021-09-04T16:37:24.8742040Z The supported keys for -Xlint are:
2021-09-04T16:37:24.8742920Z     all                  Enable all warnings
2021-09-04T16:37:24.8743980Z     auxiliaryclass       Warn about an auxiliary 
class that is hidden in a source file, and is used from other files.
2021-09-04T16:37:24.8744800Z     cast                 Warn about use of 
unnecessary casts.
2021-09-04T16:37:24.8745500Z     classfile            Warn about issues related 
to classfile contents.
2021-09-04T16:37:24.8746200Z     deprecation          Warn about use of 
deprecated items.
2021-09-04T16:37:24.8747550Z     dep-ann              Warn about items marked 
as deprecated in JavaDoc but not using the @Deprecated annotation.
2021-09-04T16:37:24.8748410Z     divzero              Warn about division by 
constant integer 0.
2021-09-04T16:37:24.8749030Z     empty                Warn about empty 
statement after if.
2021-09-04T16:37:24.8749680Z     exports              Warn about issues 
regarding module exports.
2021-09-04T16:37:24.8750470Z     fallthrough          Warn about falling 
through from one case of a switch statement to the next.
2021-09-04T16:37:24.8751300Z     finally              Warn about finally 
clauses that do not terminate normally.
2021-09-04T16:37:24.8752780Z     missing-explicit-ctor Warn about missing 
explicit constructors in public and protected classes in exported packages.
2021-09-04T16:37:24.8753780Z     module               Warn about module system 
related issues.
2021-09-04T16:37:24.8754410Z     opens                Warn about issues 
regarding module opens.
2021-09-04T16:37:24.8755110Z     options              Warn about issues 
relating to use of command line options.
2021-09-04T16:37:24.8755850Z     overloads            Warn about issues 
regarding method overloads.
2021-09-04T16:37:24.8756560Z     overrides            Warn about issues 
regarding method overrides.
2021-09-04T16:37:24.8757270Z     path                 Warn about invalid path 
elements on the command line.
2021-09-04T16:37:24.8758010Z     processing           Warn about issues 
regarding annotation processing.
2021-09-04T16:37:24.8759040Z     rawtypes             Warn about use of raw 
types.
2021-09-04T16:37:24.8759730Z     removal              Warn about use of API 
that has been marked for removal.
2021-09-04T16:37:24.8761030Z     requires-automatic   Warn about use of 
automatic modules in the requires clauses.
2021-09-04T16:37:24.8762640Z     requires-transitive-automatic Warn about 
automatic modules in requires transitive.
2021-09-04T16:37:24.8763680Z     serial               Warn about Serializable 
classes that do not provide a serial version ID. 
2021-09-04T16:37:24.8765050Z                          Also warn about access to 
non-public members from a serializable element.
2021-09-04T16:37:24.8765870Z     static               Warn about accessing a 
static member using an instance.
2021-09-04T16:37:24.8766610Z     strictfp             Warn about unnecessary 
use of the strictfp modifier.
2021-09-04T16:37:24.8767930Z     synchronization      Warn about 
synchronization attempts on instances of value-based classes.
2021-09-04T16:37:24.8769460Z     text-blocks          Warn about inconsistent 
white space characters in text block indentation.
2021-09-04T16:37:24.8770810Z     try                  Warn about issues 
relating to use of try blocks (i.e. try-with-resources).
2021-09-04T16:37:24.8771580Z     unchecked            Warn about unchecked 
operations.
2021-09-04T16:37:24.8772250Z     varargs              Warn about potentially 
unsafe vararg methods.
2021-09-04T16:37:24.8772950Z     preview              Warn about use of preview 
language features.
2021-09-04T16:37:24.8773540Z     none                 Disable all warnings
2021-09-04T16:37:24.8774850Z Main [-version, -version] []
2021-09-04T16:37:24.8775370Z rc:0
2021-09-04T16:37:24.8775690Z javac/DIRECT:
2021-09-04T16:37:24.8776460Z javac 18-internal
2021-09-04T16:37:24.8777290Z Main [-fullversion, -fullversion] []
2021-09-04T16:37:24.8777740Z rc:0
2021-09-04T16:37:24.8778060Z javac/DIRECT:
2021-09-04T16:37:24.8779450Z javac full version 
"18-internal+0-jaikiran-85748cf4a8efb69cbe69667851a14321804a51b6"
2021-09-04T16:37:24.8780590Z >>>>> Expected string appears more than once: 18
2021-09-04T16:37:24.8780950Z 
2021-09-04T16:37:24.8781400Z java.lang.Exception: 1 errors occurred
2021-09-04T16:37:24.8782230Z    at 
OptionModesTester.runTests(OptionModesTester.java:81)
2021-09-04T16:37:24.8783100Z    at InfoOptsTest.main(InfoOptsTest.java:41)
2021-09-04T16:37:24.8784350Z    at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2021-09-04T16:37:24.8786310Z    at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
2021-09-04T16:37:24.8788620Z    at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2021-09-04T16:37:24.8791250Z    at 
java.base/java.lang.reflect.Method.invoke(Method.java:568)
2021-09-04T16:37:24.8792700Z    at 
com.sun.javatest.regtest.agent.MainActionHelper$AgentVMRunnable.run(MainActionHelper.java:312)
2021-09-04T16:37:24.8794000Z    at 
java.base/java.lang.Thread.run(Thread.java:833)
2021-09-04T16:37:24.8794420Z 
2021-09-04T16:37:24.8794980Z JavaTest Message: Test threw exception: 
java.lang.Exception
2021-09-04T16:37:24.8795660Z JavaTest Message: shutting down test
2021-09-04T16:37:24.8795990Z 
2021-09-04T16:37:24.8796190Z 
2021-09-04T16:37:24.8797640Z TEST RESULT: Failed. Execution failed: `main' 
threw exception: java.lang.Exception: 1 errors occurred

-------------

PR: https://git.openjdk.java.net/jdk/pull/5372

Reply via email to