ImmutableContext and ImmutableStructure truncate Instant values to milliseconds

Ouverte Adaptée aux débutants
#2,070 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@RaphaelFakhri y travaille déjà.

Depuis le 4/11/2026.

  • #2071 par @RaphaelFakhri — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
76/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
java
Domaine
backend

Piste de recherche

Commencez par lire Value.clone() et les chemins de construction et de lecture de ImmutableStructure décrits dans l’issue. Vérifiez ImmutableStructureTest.MutatingGetInstantValueShouldNotChangeOriginalValue, qui tronque actuellement son entrée à la milliseconde. Le travail est terminé lorsqu’un instant avec une précision inférieure à la milliseconde est renvoyé sans modification par getValue(key).asInstant(), asMap() et asObjectMap().

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

An Instant stored in an ImmutableStructure or ImmutableContext loses its sub-millisecond precision. getValue(key).asInstant(), asMap() and asObjectMap() return an instant truncated to milliseconds, so the value read back is not equal to the value stored.

Value.clone() copies instants with Instant.ofEpochMilli(instant.toEpochMilli()), and ImmutableStructure clones every value on construction and on each read.

Expected behavior

The stored Instant is returned unchanged. Instant is immutable, so a copy is not needed.

Steps to reproduce

Instant instant = Instant.ofEpochSecond(1_700_000_000L, 123_456_789L);
EvaluationContext ctx = new ImmutableContext(Map.of("t", new Value(instant)));

System.out.println(instant);                          // 2023-11-14T22:13:20.123456789Z
System.out.println(ctx.getValue("t").asInstant());    // 2023-11-14T22:13:20.123Z

Instant.now() has microsecond or finer resolution on Java 9 and later, so contexts built from Instant.now() are affected in practice. The existing ImmutableStructureTest.MutatingGetInstantValueShouldNotChangeOriginalValue test calls truncatedTo(ChronoUnit.MILLIS) to avoid this.

Langage dominant
Java
Étoiles
129
Forks
62
Merge moyen
6 h 37 min
PR mergées (30 j)
12

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de open-feature/java-sdk

Toutes les issues de open-feature/java-sdk

Issues similaires

Plus d'issues Java

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.