This is an automated email from the ASF dual-hosted git repository. stoty pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/phoenix.git
The following commit(s) were added to refs/heads/master by this push: new 1ca1cf6957 PHOENIX-6914 Refactor phoenix-pherf to use java.time instead of Joda-Time 1ca1cf6957 is described below commit 1ca1cf6957e57c172daa8e26463b9a46b65f1172 Author: Istvan Toth <st...@apache.org> AuthorDate: Tue Mar 21 09:05:52 2023 +0100 PHOENIX-6914 Refactor phoenix-pherf to use java.time instead of Joda-Time --- phoenix-pherf/pom.xml | 5 -- .../org/apache/phoenix/pherf/PherfConstants.java | 5 +- .../apache/phoenix/pherf/rules/RulesApplier.java | 74 ++++++++++++++-------- .../pherf/rules/SequentialDateDataGenerator.java | 25 +++++--- .../apache/phoenix/pherf/RuleGeneratorTest.java | 16 ++--- .../rules/SequentialDateDataGeneratorTest.java | 27 ++++---- .../rules/SequentialListDataGeneratorTest.java | 23 ++++--- 7 files changed, 97 insertions(+), 78 deletions(-) diff --git a/phoenix-pherf/pom.xml b/phoenix-pherf/pom.xml index 4ef0b92670..e2b2b7fb5f 100644 --- a/phoenix-pherf/pom.xml +++ b/phoenix-pherf/pom.xml @@ -136,10 +136,6 @@ <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> </dependency> - <dependency> - <groupId>joda-time</groupId> - <artifactId>joda-time</artifactId> - </dependency> <dependency> <groupId>stax</groupId> <artifactId>stax-api</artifactId> @@ -383,7 +379,6 @@ <include>org.apache.commons:commons-lang3</include> <include>org.apache.commons:commons-math3</include> <include>org.apache.phoenix.thirdparty:phoenix-shaded-commons-cli</include> - <include>joda-time:joda-time</include> <include>org.apache.commons:commons-csv</include> <include>commons-lang:commons-lang</include> <include>commons-io:commons-io</include> diff --git a/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/PherfConstants.java b/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/PherfConstants.java index c749d15f31..caba0d1e4a 100644 --- a/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/PherfConstants.java +++ b/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/PherfConstants.java @@ -18,10 +18,9 @@ package org.apache.phoenix.pherf; -import org.joda.time.DateTimeZone; - import java.io.IOException; import java.io.InputStream; +import java.time.ZoneId; import java.util.Properties; public class PherfConstants { @@ -41,7 +40,7 @@ public class PherfConstants { public static final int DEFAULT_THREAD_POOL_SIZE = 10; public static final int DEFAULT_BATCH_SIZE = 1000; public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS"; - public static final DateTimeZone DEFAULT_TIME_ZONE = DateTimeZone.UTC; + public static final ZoneId DEFAULT_TIME_ZONE = ZoneId.of("UTC"); public static final String RESOURCE_SCENARIO = "/scenario"; public static final String SCENARIO_ROOT_PATTERN = diff --git a/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/rules/RulesApplier.java b/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/rules/RulesApplier.java index 15d40c3181..a75e99fcac 100644 --- a/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/rules/RulesApplier.java +++ b/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/rules/RulesApplier.java @@ -18,26 +18,38 @@ package org.apache.phoenix.pherf.rules; -import org.apache.phoenix.thirdparty.com.google.common.base.Preconditions; -import org.apache.phoenix.thirdparty.com.google.common.collect.Lists; -import org.apache.commons.math3.random.RandomDataGenerator; -import org.apache.phoenix.pherf.PherfConstants; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ThreadLocalRandom; + import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.RandomUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.phoenix.pherf.configuration.*; +import org.apache.commons.math3.random.RandomDataGenerator; +import org.apache.phoenix.pherf.PherfConstants; +import org.apache.phoenix.pherf.configuration.Column; +import org.apache.phoenix.pherf.configuration.DataModel; +import org.apache.phoenix.pherf.configuration.DataSequence; +import org.apache.phoenix.pherf.configuration.DataTypeMapping; +import org.apache.phoenix.pherf.configuration.Scenario; +import org.apache.phoenix.pherf.configuration.XMLConfigParser; +import org.apache.phoenix.thirdparty.com.google.common.base.Preconditions; +import org.apache.phoenix.thirdparty.com.google.common.collect.Lists; import org.apache.phoenix.util.EnvironmentEdgeManager; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ThreadLocalRandom; - public class RulesApplier { private static final Logger LOGGER = LoggerFactory.getLogger(RulesApplier.class); @@ -325,28 +337,32 @@ public class RulesApplier { } public String generateRandomDate(String min, String max) throws Exception { - DateTimeFormatter fmtr = DateTimeFormat.forPattern(PherfConstants.DEFAULT_DATE_PATTERN).withZone(DateTimeZone.UTC); - DateTime minDt; - DateTime maxDt; - DateTime dt; + DateTimeFormatter fmtr = + DateTimeFormatter.ofPattern(PherfConstants.DEFAULT_DATE_PATTERN) + .withZone(ZoneId.of("UTC")); + Instant minDt; + Instant maxDt; + Instant dt; - minDt = fmtr.parseDateTime(checkDatePattern(min)); - maxDt = fmtr.parseDateTime(checkDatePattern(max)); + minDt = ZonedDateTime.parse(checkDatePattern(min), fmtr).toInstant(); + maxDt = ZonedDateTime.parse(checkDatePattern(max), fmtr).toInstant(); // Get Ms Date between min and max synchronized (randomDataGenerator) { //Make sure date generated is exactly between the passed limits - long rndLong = randomDataGenerator.nextLong(minDt.getMillis()+1, maxDt.getMillis()-1); - dt = new DateTime(rndLong, PherfConstants.DEFAULT_TIME_ZONE); + long rndLong = randomDataGenerator.nextLong(minDt.toEpochMilli()+1, maxDt.toEpochMilli()-1); + dt = Instant.ofEpochMilli(rndLong); } - return fmtr.print(dt); + return fmtr.format(dt); } public String getCurrentDate() { - DateTimeFormatter fmtr = DateTimeFormat.forPattern(PherfConstants.DEFAULT_DATE_PATTERN).withZone(DateTimeZone.UTC);; - DateTime dt = new DateTime(PherfConstants.DEFAULT_TIME_ZONE); - return fmtr.print(dt); + DateTimeFormatter fmtr = + DateTimeFormatter.ofPattern(PherfConstants.DEFAULT_DATE_PATTERN) + .withZone(ZoneId.of("UTC")); + LocalDateTime dt = LocalDateTime.now(); + return fmtr.format(dt); } /** @@ -422,9 +438,11 @@ public class RulesApplier { // Checks if date is in defult pattern public String checkDatePattern(String date) { - DateTimeFormatter fmtr = DateTimeFormat.forPattern(PherfConstants.DEFAULT_DATE_PATTERN).withZone(DateTimeZone.UTC);; - DateTime parsedDate = fmtr.parseDateTime(date); - return fmtr.print(parsedDate); + DateTimeFormatter fmtr = + DateTimeFormatter.ofPattern(PherfConstants.DEFAULT_DATE_PATTERN) + .withZone(ZoneId.of("UTC")); + Instant parsedDate = ZonedDateTime.parse(date, fmtr).toInstant(); + return fmtr.format(parsedDate); } /** diff --git a/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/rules/SequentialDateDataGenerator.java b/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/rules/SequentialDateDataGenerator.java index 63328d0a4c..9a398c1c84 100644 --- a/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/rules/SequentialDateDataGenerator.java +++ b/phoenix-pherf/src/main/java/org/apache/phoenix/pherf/rules/SequentialDateDataGenerator.java @@ -18,25 +18,27 @@ package org.apache.phoenix.pherf.rules; -import org.apache.phoenix.thirdparty.com.google.common.base.Preconditions; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.concurrent.atomic.AtomicInteger; + import org.apache.phoenix.pherf.configuration.Column; import org.apache.phoenix.pherf.configuration.DataSequence; import org.apache.phoenix.pherf.configuration.DataTypeMapping; - -import org.joda.time.LocalDateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; -import java.util.concurrent.atomic.AtomicInteger; +import org.apache.phoenix.thirdparty.com.google.common.annotations.VisibleForTesting; +import org.apache.phoenix.thirdparty.com.google.common.base.Preconditions; /** * A generator for sequentially increasing dates. * For now the increments are fixed at 1 second. */ public class SequentialDateDataGenerator implements RuleBasedDataGenerator { - private static DateTimeFormatter FMT = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS"); + private static DateTimeFormatter FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); private final Column columnRule; private final AtomicInteger counter; - private final LocalDateTime startDateTime = new LocalDateTime(); + //Make sure we truncate to milliseconds + private final LocalDateTime startDateTime = + LocalDateTime.parse(LocalDateTime.now().format(FMT), FMT); public SequentialDateDataGenerator(Column columnRule) { Preconditions.checkArgument(columnRule.getDataSequence() == DataSequence.SEQUENTIAL); @@ -45,6 +47,11 @@ public class SequentialDateDataGenerator implements RuleBasedDataGenerator { counter = new AtomicInteger(0); } + @VisibleForTesting + public LocalDateTime getStartDateTime() { + return startDateTime; + } + /** * Note that this method rolls over for attempts to get larger than maxValue * @return new DataValue @@ -52,7 +59,7 @@ public class SequentialDateDataGenerator implements RuleBasedDataGenerator { @Override public DataValue getDataValue() { LocalDateTime newDateTime = startDateTime.plusSeconds(counter.getAndIncrement()); - String formattedDateTime = newDateTime.toString(FMT); + String formattedDateTime = newDateTime.format(FMT); return new DataValue(columnRule.getType(), formattedDateTime); } diff --git a/phoenix-pherf/src/test/java/org/apache/phoenix/pherf/RuleGeneratorTest.java b/phoenix-pherf/src/test/java/org/apache/phoenix/pherf/RuleGeneratorTest.java index c62922b402..eb3ee18cd1 100644 --- a/phoenix-pherf/src/test/java/org/apache/phoenix/pherf/RuleGeneratorTest.java +++ b/phoenix-pherf/src/test/java/org/apache/phoenix/pherf/RuleGeneratorTest.java @@ -25,6 +25,10 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.text.SimpleDateFormat; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collections; import java.util.Date; @@ -42,10 +46,6 @@ import org.apache.phoenix.pherf.configuration.XMLConfigParser; import org.apache.phoenix.pherf.rules.DataValue; import org.apache.phoenix.pherf.rules.RulesApplier; import org.apache.phoenix.pherf.workload.WriteWorkload; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; import org.junit.Test; public class RuleGeneratorTest { @@ -438,11 +438,11 @@ public class RuleGeneratorTest { * @param value */ private void assertDateBetween(DataValue value) { - DateTimeFormatter fmtr = DateTimeFormat.forPattern(PherfConstants.DEFAULT_DATE_PATTERN).withZone(DateTimeZone.UTC); + DateTimeFormatter fmtr = DateTimeFormatter.ofPattern(PherfConstants.DEFAULT_DATE_PATTERN).withZone(ZoneId.of("UTC")); - DateTime dt = fmtr.parseDateTime(value.getValue()); - DateTime min = fmtr.parseDateTime(value.getMinValue()); - DateTime max = fmtr.parseDateTime(value.getMaxValue()); + Instant dt = ZonedDateTime.parse(value.getValue(), fmtr).toInstant(); + Instant min = ZonedDateTime.parse(value.getMinValue(), fmtr).toInstant(); + Instant max = ZonedDateTime.parse(value.getMaxValue(), fmtr).toInstant(); assertTrue("Value " + dt + " is not after minValue", dt.isAfter(min)); assertTrue("Value " + dt + " is not before maxValue", dt.isBefore(max)); diff --git a/phoenix-pherf/src/test/java/org/apache/phoenix/pherf/rules/SequentialDateDataGeneratorTest.java b/phoenix-pherf/src/test/java/org/apache/phoenix/pherf/rules/SequentialDateDataGeneratorTest.java index 3cc75e4761..1c351fbe11 100644 --- a/phoenix-pherf/src/test/java/org/apache/phoenix/pherf/rules/SequentialDateDataGeneratorTest.java +++ b/phoenix-pherf/src/test/java/org/apache/phoenix/pherf/rules/SequentialDateDataGeneratorTest.java @@ -17,18 +17,18 @@ */ package org.apache.phoenix.pherf.rules; -import org.apache.phoenix.pherf.configuration.Column; -import org.apache.phoenix.pherf.configuration.DataSequence; -import org.joda.time.LocalDateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; -import org.junit.Test; - import static org.apache.phoenix.pherf.configuration.DataTypeMapping.DATE; import static org.apache.phoenix.pherf.configuration.DataTypeMapping.VARCHAR; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +import org.apache.phoenix.pherf.configuration.Column; +import org.apache.phoenix.pherf.configuration.DataSequence; +import org.junit.Test; + public class SequentialDateDataGeneratorTest { SequentialDateDataGenerator generator; @@ -54,25 +54,26 @@ public class SequentialDateDataGeneratorTest { @Test public void testGetDataValue() { - DateTimeFormatter FMT = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS"); + DateTimeFormatter FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); Column columnA = new Column(); columnA.setType(DATE); columnA.setDataSequence(DataSequence.SEQUENTIAL); - LocalDateTime startDateTime = new LocalDateTime(); // The increments are the of 1 sec units generator = new SequentialDateDataGenerator(columnA); + LocalDateTime startDateTime = generator.getStartDateTime(); + DataValue result1 = generator.getDataValue(); - LocalDateTime result1LocalTime = FMT.parseDateTime(result1.getValue()).toLocalDateTime(); + LocalDateTime result1LocalTime = LocalDateTime.parse(result1.getValue(), FMT); assertFalse(result1LocalTime.isBefore(startDateTime)); DataValue result2 = generator.getDataValue(); - LocalDateTime result2LocalTime = FMT.parseDateTime(result2.getValue()).toLocalDateTime(); + LocalDateTime result2LocalTime = LocalDateTime.parse(result2.getValue(), FMT); assertEquals(result2LocalTime.minusSeconds(1), result1LocalTime); DataValue result3 = generator.getDataValue(); - LocalDateTime result3LocalTime = FMT.parseDateTime(result3.getValue()).toLocalDateTime(); + LocalDateTime result3LocalTime = LocalDateTime.parse(result3.getValue(), FMT); assertEquals(result3LocalTime.minusSeconds(1), result2LocalTime); DataValue result4 = generator.getDataValue(); - LocalDateTime result4LocalTime = FMT.parseDateTime(result4.getValue()).toLocalDateTime(); + LocalDateTime result4LocalTime = LocalDateTime.parse(result4.getValue(), FMT); assertEquals(result4LocalTime.minusSeconds(1), result3LocalTime); } } diff --git a/phoenix-pherf/src/test/java/org/apache/phoenix/pherf/rules/SequentialListDataGeneratorTest.java b/phoenix-pherf/src/test/java/org/apache/phoenix/pherf/rules/SequentialListDataGeneratorTest.java index d590167d76..a258b83a2a 100644 --- a/phoenix-pherf/src/test/java/org/apache/phoenix/pherf/rules/SequentialListDataGeneratorTest.java +++ b/phoenix-pherf/src/test/java/org/apache/phoenix/pherf/rules/SequentialListDataGeneratorTest.java @@ -17,19 +17,18 @@ */ package org.apache.phoenix.pherf.rules; -import org.apache.phoenix.pherf.configuration.Column; -import org.apache.phoenix.pherf.configuration.DataSequence; -import org.joda.time.LocalDateTime; -import org.joda.time.format.DateTimeFormat; -import org.joda.time.format.DateTimeFormatter; -import org.junit.Test; +import static org.apache.phoenix.pherf.configuration.DataTypeMapping.DATE; +import static org.apache.phoenix.pherf.configuration.DataTypeMapping.VARCHAR; +import static org.junit.Assert.assertEquals; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; -import static org.apache.phoenix.pherf.configuration.DataTypeMapping.DATE; -import static org.apache.phoenix.pherf.configuration.DataTypeMapping.VARCHAR; -import static org.junit.Assert.assertEquals; +import org.apache.phoenix.pherf.configuration.Column; +import org.apache.phoenix.pherf.configuration.DataSequence; +import org.junit.Test; public class SequentialListDataGeneratorTest { SequentialListDataGenerator generator; @@ -46,9 +45,9 @@ public class SequentialListDataGeneratorTest { @Test(expected = IllegalArgumentException.class) public void testRejectsNonVarchar() { - DateTimeFormatter FMT = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS"); - LocalDateTime startDateTime = new LocalDateTime(); - String formattedDateTime = startDateTime.toString(FMT); + DateTimeFormatter FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); + LocalDateTime startDateTime = LocalDateTime.now(); + String formattedDateTime = startDateTime.format(FMT); Column columnA = new Column(); columnA.setType(DATE); columnA.setDataSequence(DataSequence.SEQUENTIAL);