RFR: 8231640: (prop) Canonical property storage [v21]
Jaikiran Pai
jai.forums2013 at gmail.com
Tue Sep 21 04:04:42 UTC 2021
Thank you Joe. That link helped. I have now moved the CSR to the next state.
-Jaikiran
On 21/09/21 9:28 am, Joseph D. Darcy wrote:
> Hello Jaikiran,
>
> The CSR is in Draft state. As discussed in the CSR wiki
> (https://wiki.openjdk.java.net/display/csr/Main), the request needs to
> be moved by the assignee to either Finalized or Proposed state to
> request the CSR review the request.
>
> HTH,
>
> -Joe
>
> On 9/20/2021 8:46 PM, Jaikiran Pai wrote:
>> On Sat, 18 Sep 2021 03:52:17 GMT, Jaikiran Pai <jpai at 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/
>>> Jaikiran Pai has updated the pull request incrementally with one
>>> additional commit since the last revision:
>>>
>>> Roger's suggestion to reword the implSpec text
>> What would be the next step to move the CSR forward? Should I be
>> changing it's status or do something else?
>>
>> -------------
>>
>> PR: https://git.openjdk.java.net/jdk/pull/5372
More information about the core-libs-dev
mailing list