RFR: 8231640: (prop) Canonical property storage
Jaikiran Pai
jai.forums2013 at gmail.com
Tue Sep 7 14:04:07 UTC 2021
On 05/09/21 6:01 pm, Jaikiran Pai wrote:
> Hello Alan,
>
> On 05/09/21 1:46 pm, Alan Bateman wrote:
>> On 04/09/2021 16:50, Jaikiran Pai 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.
>> In the discussion on this option then I think we were talking about
>> changing the specification of the store methods to allow for an
>> implementation specific means to override the date and put the
>> discussion on SOURCE_DATE_EPOCH in an @implNote.
>>
> I will move the updated javadoc to an @implNote then. I guess, the
> existing part where it explains how the current date comment is
> written out, should stay where it is currently?
I've now updated the PR to move the new text of this javadoc into a
@implNote.
-Jaikiran
More information about the core-libs-dev
mailing list