8000 support rfc3339 micro 6 digit timestamp · tony-clarke-amdocs/java@2279cea · GitHub
[go: up one dir, main page]

Skip to content

Commit 2279cea

Browse files
committed
support rfc3339 micro 6 digit timestamp
1 parent 6267ff3 commit 2279cea

File tree

4 files changed

+58
-28
lines changed
  • e2e/src/test/java/io/kubernetes/client/e2e/extended/leaderelection
  • extended/src/main/java/io/kubernetes/client/extended/leaderelection/resourcelock
  • kubernetes/src

4 files changed

+58
-28
lines changed

e2e/src/test/java/io/kubernetes/client/e2e/extended/leaderelection/LeaderElectorTest.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@
2626
import java.io.IOException;
2727
import java.net.HttpURLConnection;
2828
import java.time.Duration;
29-
import java.time.format.DateTimeFormatter;
30-
import java.time.format.DateTimeFormatterBuilder;
3129
import java.util.ArrayList;
3230
import java.util.Collection;
3331
import java.util.List;
@@ -78,21 +76,6 @@ public LeaderElectorTest(LockType lockType) {
7876
} catch (IOException ex) {
7977
throw new RuntimeException("Couldn't create ApiClient", ex);
8078
}
81-
// Lease resource requires special care with DateTime
82-
if (lockType == LockType.Lease) {
83-
// TODO: switch date-time library so that micro-sec timestamp can be serialized
84-
// in RFC3339
85-
// format w/ correct precision without the hacks
86-
87-
// This formatter is used for Lease resource spec's acquire/renewTime
88-
DateTimeFormatter formatter =
89-
new DateTimeFormatterBuilder()
90-
.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'"))
91-
.appendOptional(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'"))
92-
.toFormatter();
93-
94-
apiClient.setOffsetDateTimeFormat(formatter);
95-
}
9679
this.lockType = lockType;
9780
}
9881

extended/src/main/java/io/kubernetes/client/extended/leaderelection/resourcelock/LeaseLock.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -135,15 +135,23 @@ private LeaderElectionRecord getRecordFromLease(V1LeaseSpec lease) {
135135
}
136136

137137
private V1LeaseSpec getLeaseFromRecord(LeaderElectionRecord record) {
138-
return new V1LeaseSpec()
139-
.acquireTime(
140-
OffsetDateTime.ofInstant(
141-
Instant.ofEpochMilli(record.getAcquireTime().getTime()), ZoneOffset.UTC))
142-
.renewTime(
143-
OffsetDateTime.ofInstant(
144-
Instant.ofEpochMilli(record.getRenewTime().getTime()), ZoneOffset.UTC))
145-
.holderIdentity(record.getHolderIdentity())
146-
.leaseDurationSeconds(record.getLeaseDurationSeconds())
147-
.leaseTransitions(record.getLeaderTransitions());
138+
V1LeaseSpec spec =
139+
new V1LeaseSpec()
140+
.holderIdentity(record.getHolderIdentity())
141+
.leaseDurationSeconds(record.getLeaseDurationSeconds())
142+
.leaseTransitions(record.getLe 8000 aderTransitions());
143+
if (record.getAcquireTime() != null) {
144+
spec =
145+
spec.acquireTime(
146+
OffsetDateTime.ofInstant(
147+
Instant.ofEpochMilli(record.getAcquireTime().getTime()), ZoneOffset.UTC));
148+
}
149+
if (record.getRenewTime() != null) {
150+
spec =
151+
spec.renewTime(
152+
OffsetDateTime.ofInstant(
153+
Instant.ofEpochMilli(record.getRenewTime().getTime()), ZoneOffset.UTC));
154+
}
155+
return spec;
148156
}
149157
}

kubernetes/src/main/java/io/kubernetes/client/openapi/JSON.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import java.time.LocalDate;
3333
import java.time.OffsetDateTime;
3434
import java.time.format.DateTimeFormatter;
35+
import java.time.format.DateTimeFormatterBuilder;
36+
import java.time.temporal.ChronoField;
3537
import java.util.Date;
3638
import java.util.Map;
3739
import okio.ByteString;
@@ -42,11 +44,22 @@ public class JSON {
4244

4345
private boolean isLenientOnJson = false;
4446

47+
public static final DateTimeFormatter RFC3339MICRO_FORMATTER =
48+
new DateTimeFormatterBuilder()
49+
.parseDefaulting(ChronoField.OFFSET_SECONDS, 0)
50+
.append(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"))
51+
.optionalStart()
52+
.appendFraction(ChronoField.NANO_OF_SECOND, 6, 6, true)
53+
.optionalEnd()
54+
.appendLiteral("Z")
55+
.toFormatter();
56+
4557
private DateTypeAdapter dateTypeAdapter = new DateTypeAdapter();
4658

4759
private SqlDateTypeAdapter sqlDateTypeAdapter = new SqlDateTypeAdapter();
4860

49-
private OffsetDateTimeTypeAdapter offsetDateTimeTypeAdapter = new OffsetDateTimeTypeAdapter();
61+
private OffsetDateTimeTypeAdapter offsetDateTimeTypeAdapter =
62+
new OffsetDateTimeTypeAdapter(RFC3339MICRO_FORMATTER);
5063

5164
private LocalDateTypeAdapter localDateTypeAdapter = new LocalDateTypeAdapter();
5265

kubernetes/src/test/java/io/kubernetes/client/openapi/JSONTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import static org.hamcrest.CoreMatchers.is;
1616
import static org.junit.Assert.*;
1717

18+
import java.time.OffsetDateTime;
1819
import okio.ByteString;
1920
import org.junit.Test;
2021

@@ -36,4 +37,29 @@ public void testSerializeByteArray() {
3637
final String decodedText = new String(byteStr.toByteArray());
3738
assertThat(decodedText, is(plainText));
3839
}
40+
41+
@Test
42+
public void testOffsetDateTime1e6Parse() {
43+
System.out.println(JSON.RFC3339MICRO_FORMATTER.format(OffsetDateTime.now()));
44+
String timeStr = "2018-04-03T11:32:26.123456Z";
45+
OffsetDateTime t = OffsetDateTime.parse(timeStr, JSON.RFC3339MICRO_FORMATTER);
46+
String serializedTsStr = JSON.RFC3339MICRO_FORMATTER.format(t);
47+
assertEquals(timeStr, serializedTsStr);
48+
}
49+
50+
@Test
51+
public void testOffsetDateTime1e4Parse() {
52+
String timeStr = "2018-04-03T11:32:26.123400Z";
53+
OffsetDateTime t = OffsetDateTime.parse(timeStr, JSON.RFC3339MICRO_FORMATTER);
54+
String serializedTsStr = JSON.RFC3339MICRO_FORMATTER.format(t);
55+
assertEquals(timeStr, serializedTsStr);
56+
}
57+
58+
@Test
59+
public void testOffsetDateTimeNoFractionParse() {
60+
String timeStr = "2018-04-03T11:32:26Z";
61+
OffsetDateTime t = OffsetDateTime.parse(timeStr, JSON.RFC3339MICRO_FORMATTER);
62+
String serializedTsStr = JSON.RFC3339MICRO_FORMATTER.format(t);
63+
assertEquals("2018-04-03T11:32:26.000000Z", serializedTsStr);
64+
}
3965
}

0 commit comments

Comments
 (0)
0