You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ji...@apache.org on 2018/09/14 21:03:49 UTC
[geode] branch develop updated: GEODE-3: Use the correct
DataSerializer for TimeUnit for either java8 or java9 (#2473)
This is an automated email from the ASF dual-hosted git repository.
jinmeiliao pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new 9c6ae18 GEODE-3: Use the correct DataSerializer for TimeUnit for either java8 or java9 (#2473)
9c6ae18 is described below
commit 9c6ae183bcad23f488cc7895aed955932d69169c
Author: jinmeiliao <ji...@pivotal.io>
AuthorDate: Fri Sep 14 14:03:41 2018 -0700
GEODE-3: Use the correct DataSerializer for TimeUnit for either java8 or java9 (#2473)
* this fixed the analyzeDataSerializable test using java9
---
.../geode/internal/InternalDataSerializer.java | 71 +++++++++++++---------
1 file changed, 43 insertions(+), 28 deletions(-)
diff --git a/geode-core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java b/geode-core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java
index 66a9754..22c1282 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java
@@ -621,38 +621,53 @@ public abstract class InternalDataSerializer extends DataSerializer {
return true;
}
});
- classesToSerializers.put(TimeUnit.NANOSECONDS.getClass().getName(), new WellKnownDS() {
- @Override
- public boolean toData(Object o, DataOutput out) throws IOException {
- out.writeByte(DSCODE.TIME_UNIT.toByte());
- out.writeByte(TIME_UNIT_NANOSECONDS);
- return true;
- }
- });
- classesToSerializers.put(TimeUnit.MICROSECONDS.getClass().getName(), new WellKnownDS() {
- @Override
- public boolean toData(Object o, DataOutput out) throws IOException {
- out.writeByte(DSCODE.TIME_UNIT.toByte());
- out.writeByte(TIME_UNIT_MICROSECONDS);
- return true;
- }
- });
- classesToSerializers.put(TimeUnit.MILLISECONDS.getClass().getName(), new WellKnownDS() {
- @Override
- public boolean toData(Object o, DataOutput out) throws IOException {
- out.writeByte(DSCODE.TIME_UNIT.toByte());
- out.writeByte(TIME_UNIT_MILLISECONDS);
- return true;
- }
- });
- classesToSerializers.put(TimeUnit.SECONDS.getClass().getName(), new WellKnownDS() {
+
+ WellKnownDS TIME_UNIT_SERIALIZER = new WellKnownDS() {
@Override
public boolean toData(Object o, DataOutput out) throws IOException {
- out.writeByte(DSCODE.TIME_UNIT.toByte());
- out.writeByte(TIME_UNIT_SECONDS);
+ TimeUnit timeUnit = (TimeUnit) o;
+ switch (timeUnit) {
+ case NANOSECONDS: {
+ out.writeByte(DSCODE.TIME_UNIT.toByte());
+ out.writeByte(TIME_UNIT_NANOSECONDS);
+ break;
+ }
+ case MICROSECONDS: {
+ out.writeByte(DSCODE.TIME_UNIT.toByte());
+ out.writeByte(TIME_UNIT_MICROSECONDS);
+ break;
+ }
+ case MILLISECONDS: {
+ out.writeByte(DSCODE.TIME_UNIT.toByte());
+ out.writeByte(TIME_UNIT_MILLISECONDS);
+ break;
+ }
+ case SECONDS: {
+ out.writeByte(DSCODE.TIME_UNIT.toByte());
+ out.writeByte(TIME_UNIT_SECONDS);
+ break;
+ }
+ // handles all other timeunits
+ default: {
+ writeGemFireEnum(timeUnit, out);
+ }
+ }
return true;
}
- });
+ };
+
+ // in java 9 and above, TimeUnit implementation changes. the class name of these units are the
+ // same now.
+ if (TimeUnit.NANOSECONDS.getClass().getName().equals(TimeUnit.SECONDS.getClass().getName())) {
+ classesToSerializers.put(TimeUnit.class.getName(), TIME_UNIT_SERIALIZER);
+ }
+ // in java 8 and below
+ else {
+ classesToSerializers.put(TimeUnit.NANOSECONDS.getClass().getName(), TIME_UNIT_SERIALIZER);
+ classesToSerializers.put(TimeUnit.MICROSECONDS.getClass().getName(), TIME_UNIT_SERIALIZER);
+ classesToSerializers.put(TimeUnit.MILLISECONDS.getClass().getName(), TIME_UNIT_SERIALIZER);
+ classesToSerializers.put(TimeUnit.SECONDS.getClass().getName(), TIME_UNIT_SERIALIZER);
+ }
classesToSerializers.put("java.util.Date", new WellKnownPdxDS() {
@Override
public boolean toData(Object o, DataOutput out) throws IOException {