Skip to content

feat: Update timezone data to 2025b#26981

Merged
tdcmeehan merged 2 commits intoprestodb:masterfrom
rdtr:update-tzdata-2025b-v2
Feb 27, 2026
Merged

feat: Update timezone data to 2025b#26981
tdcmeehan merged 2 commits intoprestodb:masterfrom
rdtr:update-tzdata-2025b-v2

Conversation

@rdtr
Copy link
Copy Markdown
Contributor

@rdtr rdtr commented Jan 17, 2026

  • Update Joda-Time from 2.13.1 to 2.14.0 (includes tzdata 2025b)
  • Add America/Coyhaique timezone (new zone for Chile's Aysén Region)
  • Update zone-index.properties checksum in test
  • Update JDK version to 17.0.16 in CI config based on https://bugs.openjdk.org/browse/JDK-8352716

This is a replacement for #26856. The CI was having persistent issues running tests on the original PR even after several rebases, so I am opening a fresh PR.

Description

This PR updates the timezone data to 2025b by upgrading Joda-Time from 2.13.1 to 2.14.0. The update adds the new America/Coyhaique timezone (zone key 2234), which was introduced for Chile's Aysén Region. The zone-index.properties checksum in TestTimeZoneKey has been updated to reflect the new zone entry.

Motivation and Context

Timezone databases are periodically updated to reflect changes in timezone rules around the world. The tzdata 2025b release includes the new America/Coyhaique zone for Chile's Aysén Region. Keeping Presto's timezone data current ensures accurate timestamp handling for users in affected regions.

Impact

  • No breaking changes to public APIs
  • Users can now use America/Coyhaique as a valid timezone identifier
  • Existing timezone functionality remains unchanged

Test Plan

  • Existing TestTimeZoneKey tests verify the zone-index.properties integrity via checksum validation
  • The checksum has been updated to account for the new timezone entry

Contributor checklist

  • Please make sure your submission complies with our contributing guide, in particular code style and commit standards.
  • PR description addresses the issue accurately and concisely. If the change is non-trivial, a GitHub Issue is referenced.
  • Documented new properties (with its default value), SQL syntax, functions, or other functionality.
  • If release notes are required, they follow the release notes guidelines.
  • Adequate tests were added if applicable.
  • CI passed.
  • If adding new dependencies, verified they have an OpenSSF Scorecard score of 5.0 or higher (or obtained explicit TSC approval for lower scores).

Release Notes

Please follow release notes guidelines and fill in the release notes below.

== RELEASE NOTES ==

  General Changes
  * Update timezone data to 2025b by upgrading to Joda-Time 2.14.0.
  * Add support for America/Coyhaique timezone (Chile's Aysén Region).

@rdtr rdtr requested review from a team, czentgr, elharo and unidevel as code owners January 17, 2026 10:06
@sourcery-ai
Copy link
Copy Markdown
Contributor

sourcery-ai bot commented Jan 17, 2026

Reviewer's Guide

Updates Presto’s timezone data to tzdata 2025b by bumping Joda-Time and adding the America/Coyhaique zone, adjusts the checksum-based regression test for zone-index, and refreshes all GitHub Actions workflows to use Temurin JDK 17.0.16 due to an upstream JDK issue.

Sequence diagram for timezone resolution with updated tzdata_2025b

sequenceDiagram
  actor User
  participant PrestoClient
  participant PrestoCoordinator
  participant TimeZoneKey
  participant JodaTimeTimeZoneData

  User->>PrestoClient: Submit query (timestamp, America/Coyhaique)
  PrestoClient->>PrestoCoordinator: Send query
  PrestoCoordinator->>TimeZoneKey: lookupTimeZoneKey(America/Coyhaique)
  TimeZoneKey->>JodaTimeTimeZoneData: resolveZoneId(America/Coyhaique)
  JodaTimeTimeZoneData-->>TimeZoneKey: zoneId(2234, tzdata 2025b rules)
  TimeZoneKey-->>PrestoCoordinator: TimeZoneKey(2234)
  PrestoCoordinator->>PrestoCoordinator: Evaluate expressions with timezone
  PrestoCoordinator-->>PrestoClient: Query results
  PrestoClient-->>User: Display timestamps in America/Coyhaique
Loading

File-Level Changes

Change Details Files
Upgrade Joda-Time to 2.14.0 to pick up tzdata 2025b and keep timezone rules in sync with deployed JVMs.
  • Update the dep.joda.version Maven property from 2.13.1 to 2.14.0.
  • Maintain the comment warning that Joda version must match JVM tzdata to signal coupling to reviewers.
pom.xml
Add the new America/Coyhaique timezone key and keep the zone-index regression test aligned via checksum.
  • Append zone key 2234 mapped to America/Coyhaique at the end of zone-index.properties.
  • Recompute and update the expected hash in TestTimeZoneKey to match the new zone-index contents while keeping the integrity check logic unchanged.
presto-common/src/main/resources/com/facebook/presto/common/type/zone-index.properties
presto-common/src/test/java/com/facebook/presto/common/type/TestTimeZoneKey.java
Update CI workflows to run on Temurin JDK 17.0.16 in response to upstream JDK issues.
  • Bump java-version from 17.0.15 to 17.0.16 across all GitHub Actions workflows that set up Java.
  • Keep all other workflow configuration (matrices, steps, caching) unchanged to minimize CI behavior drift.
.github/workflows/prestocpp-linux-build-and-unit-test.yml
.github/workflows/arrow-flight-tests.yml
.github/workflows/hive-tests.yml
.github/workflows/product-tests-specific-environment.yml
.github/workflows/docs.yml
.github/workflows/jdbc-connector-tests.yml
.github/workflows/kudu.yml
.github/workflows/maven-checks.yml
.github/workflows/product-tests-basic-environment.yml
.github/workflows/singlestore-tests.yml
.github/workflows/spark-integration.yml
.github/workflows/test-other-modules.yml
.github/workflows/tests.yml

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@rdtr rdtr mentioned this pull request Jan 17, 2026
7 tasks
Copy link
Copy Markdown
Contributor

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've found 1 issue, and left some high level feedback:

  • Given how many workflows hardcode the Java patch version, consider centralizing the Java version (e.g., via a shared reusable workflow, workflow-level env, or matrix variable) so future patch bumps only need to be changed in one place.
  • The zone-index.properties and associated checksum assertion are guarded by a strong "should not (normally) be changed" comment; it might be helpful to update that comment (or add a short note nearby) to explicitly call out the Joda/tzdata upgrade procedure, including updating zone-index.properties and the expected hash.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- Given how many workflows hardcode the Java patch version, consider centralizing the Java version (e.g., via a shared reusable workflow, workflow-level env, or matrix variable) so future patch bumps only need to be changed in one place.
- The `zone-index.properties` and associated checksum assertion are guarded by a strong "should not (normally) be changed" comment; it might be helpful to update that comment (or add a short note nearby) to explicitly call out the Joda/tzdata upgrade procedure, including updating `zone-index.properties` and the expected hash.

## Individual Comments

### Comment 1
<location> `presto-common/src/test/java/com/facebook/presto/common/type/TestTimeZoneKey.java:218-219` </location>
<code_context>
             hasher.putString(timeZoneKey.getId(), StandardCharsets.UTF_8);
         }
         // Zone file should not (normally) be changed, so let's make this more difficult
-        assertEquals(hasher.hash().asLong(), 4825838578917475630L, "zone-index.properties file contents changed!");
+        assertEquals(hasher.hash().asLong(), 3765670086753811806L, "zone-index.properties file contents changed!");
</code_context>

<issue_to_address>
**suggestion (testing):** Consider making the checksum assertion failure more actionable for future tzdata updates

Since tzdata updates like this are expected periodically, this assertion may fail without clearly telling the updater what to do. Consider either:

- Expanding the assertion message to note that the expected checksum should be updated after tzdata/Joda-Time changes, or
- Adding a brief comment on how to recompute the checksum (algorithm or helper method), so future maintainers don’t have to rediscover the process.

```suggestion
        // Zone file should not (normally) be changed, so let's make this more difficult.
        // If this assertion fails after an intentional tzdata/Joda-Time update that changes
        // zone-index.properties, recompute the expected checksum by running this test and
        // updating the constant below with the new value from hasher.hash().asLong().
        assertEquals(
                hasher.hash().asLong(),
                3765670086753811806L,
                "zone-index.properties file contents changed. If this is due to an intentional tzdata/Joda-Time or zone-index.properties update, update the expected checksum to match hasher.hash().asLong().");
```
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment on lines 218 to +219
// Zone file should not (normally) be changed, so let's make this more difficult
assertEquals(hasher.hash().asLong(), 4825838578917475630L, "zone-index.properties file contents changed!");
assertEquals(hasher.hash().asLong(), 3765670086753811806L, "zone-index.properties file contents changed!");
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (testing): Consider making the checksum assertion failure more actionable for future tzdata updates

Since tzdata updates like this are expected periodically, this assertion may fail without clearly telling the updater what to do. Consider either:

  • Expanding the assertion message to note that the expected checksum should be updated after tzdata/Joda-Time changes, or
  • Adding a brief comment on how to recompute the checksum (algorithm or helper method), so future maintainers don’t have to rediscover the process.
Suggested change
// Zone file should not (normally) be changed, so let's make this more difficult
assertEquals(hasher.hash().asLong(), 4825838578917475630L, "zone-index.properties file contents changed!");
assertEquals(hasher.hash().asLong(), 3765670086753811806L, "zone-index.properties file contents changed!");
// Zone file should not (normally) be changed, so let's make this more difficult.
// If this assertion fails after an intentional tzdata/Joda-Time update that changes
// zone-index.properties, recompute the expected checksum by running this test and
// updating the constant below with the new value from hasher.hash().asLong().
assertEquals(
hasher.hash().asLong(),
3765670086753811806L,
"zone-index.properties file contents changed. If this is due to an intentional tzdata/Joda-Time or zone-index.properties update, update the expected checksum to match hasher.hash().asLong().");

@rdtr rdtr force-pushed the update-tzdata-2025b-v2 branch from 7a0e228 to 19d5d9f Compare January 18, 2026 01:51
@unidevel
Copy link
Copy Markdown
Contributor

@rdtr Seems some CI not running, can you rebase to try gain?

@rdtr rdtr force-pushed the update-tzdata-2025b-v2 branch from 19d5d9f to 3816cb8 Compare January 20, 2026 08:20
@rdtr
Copy link
Copy Markdown
Contributor Author

rdtr commented Jan 20, 2026

@unidevel Hmm I opened this because I encountered the similar issue in #26856
Is this a known issue or is it possible that actually my change affects a unit test?

Anyway, I have pushed again.

@unidevel
Copy link
Copy Markdown
Contributor

@rdtr I guess this is a bug of github, since you upgraded JDK to 17.0.16, you probably can continue working on the original PR, and ignore the pending tests related to 17.0.15. Once reviewed and approved, you may ask admin like @tdcmeehan to merge this without full CI passed.

@tdcmeehan
Copy link
Copy Markdown
Contributor

I'm actually a little worried this isn't transient, since it's happened for two PRs in a row. @rdtr can you try to quickly revert to 15 to see if the CI passes? If so, it would seem to be specific to the version upgrade.

@linux-foundation-easycla
Copy link
Copy Markdown

linux-foundation-easycla bot commented Jan 22, 2026

CLA Signed

The committers listed above are authorized under a signed CLA.

  • ✅ login: rdtr / name: rdtr (fcabced)
  • ✅ login: tdcmeehan / name: Timothy Meehan (b466283)

@rdtr rdtr force-pushed the update-tzdata-2025b-v2 branch 2 times, most recently from eff8774 to 54f7367 Compare January 22, 2026 06:23
@rdtr
Copy link
Copy Markdown
Contributor Author

rdtr commented Jan 22, 2026

@tdcmeehan
I pushed again while reverting JDK version upgrade part, still some failures are there which doesn't look like relevant to my change. Please let me know how we can proceed.

@tdcmeehan
Copy link
Copy Markdown
Contributor

@rdtr could you try to restore the JDK changes, but try a different distribution, to see if it's localized to the distribution?

@rdtr rdtr force-pushed the update-tzdata-2025b-v2 branch 7 times, most recently from 399cddf to d1f2ebb Compare January 31, 2026 16:15
@rdtr
Copy link
Copy Markdown
Contributor Author

rdtr commented Feb 1, 2026

@tdcmeehan
I changed to Zulu and while it also has had multiple failures now I don't see failures. Pending checkes were not done becaues they are all for 17.0.15? Please let me know how we can proceed.

@tdcmeehan
Copy link
Copy Markdown
Contributor

@rdtr thanks for your patience, I see the issue now. To make this easier for the next timezone update, could you change our workflow files to change: matrix: java: [17.0.15] => matrix: java: ['17'] ? I believe if we use just the major version, then we automatically use the latest patch version available. Then I can update our branch protection rules to match against just 17.

Copy link
Copy Markdown
Contributor

@tdcmeehan tdcmeehan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM % the accidental file inclusion

@@ -0,0 +1,8 @@
{
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please revert this and consider adding .claude to the gitignore file.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the catch, I removed it.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tdcmeehan It seems using 17 does not work? Many checks are failing.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It works, I just need to update our branch protection rules, will get to it soon.

@rdtr rdtr force-pushed the update-tzdata-2025b-v2 branch from 63022b4 to f1d7219 Compare February 12, 2026 16:27
- Update Joda-Time from 2.13.1 to 2.14.0 (includes tzdata 2025b)
- Add America/Coyhaique timezone (new zone for Chile's Aysén Region)
- Update zone-index.properties checksum in test
@tdcmeehan
Copy link
Copy Markdown
Contributor

@rdtr I'm trying to fix the product tests, I think the JDK upgrade also made some changes to SSL. Let's see if CI can get green now.

@rdtr
Copy link
Copy Markdown
Contributor Author

rdtr commented Feb 27, 2026

Thanks. Please let me know if anything needs to be done on my end.

@tdcmeehan tdcmeehan merged commit 6e5d260 into prestodb:master Feb 27, 2026
81 checks passed
n0r0shi added a commit to n0r0shi/velox that referenced this pull request Mar 7, 2026
Add America/Coyhaique (timezone ID 2234) to the timezone database and
timezone names, following the Presto zone-index convention. Also fix
the namespace in gen_timezone_database.py (util -> tz) to match the
current codebase.

America/Coyhaique was added to the IANA timezone database in tzdata
2025b. The upstream Presto PR (prestodb/presto#26981) has been merged.

Fixes facebookincubator#16216
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants