On Tue, 13 May 2025 12:00:15 GMT, Jaikiran Pai <j...@openjdk.org> wrote:

> Can I please get a review of this change in the JDK build tool class 
> `CreateSymbols` which addresses an issue related to the reproducibility of 
> the generated `ct.sym` file? This addresses 
> https://bugs.openjdk.org/browse/JDK-8327466.
> 
> Even before this change, in order to support reproducibility of the generated 
> ct.sym file, this internal `CreateSymbols` program takes a `timestamp` 
> argument. The value for the `timestamp` is considered to be the number of 
> seconds since epoch and maps directly to the `SOURCE_DATE_EPOCH` construct 
> that's used by several tools (even outside the JDK) to provide reproducible 
> output.
> 
> The ct.sym file generated by the `CreateSymbols` program is a ZIP file. 
> `CreateSymbols` uses the passed `timestamp` value to set the last modified 
> time on each of the ZIP entries of the generated ZIP file. That way, a 
> constant value for the `timestamp` argument implies that without anything 
> else having changed for a subsequent build, the subsequently generated ct.sym 
> will also have the exact same value for the timestamp for each of the ZIP 
> entries.
> 
> Like many other things in the ZIP specification, a timestamp for a ZIP entry 
> can be set in more than one place within the ZIP structure and the value thus 
> set can be interpreted differently depending on where it is set. That also 
> results in Java SE's `java.util.zip` APIs having more than one way of setting 
> that timestamp.
> 
> The `CreateSymbols` program uses the `java.util.zip.ZipEntry.setTime(...)` 
> API to set this timestamp on the entry. However, that API is specified to be 
> affected by the local system default timezone. This effectively means that if 
> `CreateSymbols` is triggered more than once with the same `timestamp` value 
> but with a different timezone, then the generated ct.sym files from each run 
> will have a different value for the ZIP entry timestamps. This defeats the 
> purpose of the `timestamp` agrument.
> 
> The fix is to use an alternate API `java.util.zip.ZipEntry.setTimeLocal(...)` 
> which isn't affected by the local system timezone. This API was introduced in 
> Java 9 to solve issues like this. The decade old original RFR, when this API 
> was introduced, does a very good job of explaining the necessity of this API 
> and how it differs from the `setTime(...)` method 
> https://mail.openjdk.org/pipermail/core-libs-dev/2015-June/034426.html.
> 
> The commit in this PR also introduces a regression test which reproduces the 
> issue and verifies the fix.
> 
> I have run this change in tier1 and tier5 and this and other tests co...

Marked as reviewed by erikj (Reviewer).

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

PR Review: https://git.openjdk.org/jdk/pull/25207#pullrequestreview-2836670871

Reply via email to