Skip to content
This repository was archived by the owner on May 6, 2022. It is now read-only.

Commit 9e9135f

Browse files
committed
#46 improved join and ordering tests
1 parent f61c407 commit 9e9135f

File tree

2 files changed

+65
-3
lines changed

2 files changed

+65
-3
lines changed

chronix-solr-cloud-storage/src/main/java/de/qaware/chronix/storage/solr/timeseries/metric/MetricTimeSeriesOrdering.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,11 @@
1717

1818
import com.google.common.collect.Ordering;
1919
import de.qaware.chronix.timeseries.MetricTimeSeries;
20+
import org.slf4j.Logger;
21+
import org.slf4j.LoggerFactory;
2022

2123
import java.io.Serializable;
24+
import java.util.Date;
2225

2326
/**
2427
* Orders MetricTimeSeries by their start timestamp
@@ -31,6 +34,9 @@ public class MetricTimeSeriesOrdering extends Ordering<MetricTimeSeries> impleme
3134

3235
private static final long serialVersionUID = 42L;
3336

37+
private final Logger LOGGER = LoggerFactory.getLogger(MetricTimeSeriesOrdering.class);
38+
39+
3440
@Override
3541
public int compare(MetricTimeSeries left, MetricTimeSeries right) {
3642
if (left == null && right == null) {
@@ -40,11 +46,30 @@ public int compare(MetricTimeSeries left, MetricTimeSeries right) {
4046
} else if (right == null) {
4147
return 1;
4248
} else if (left.getStart() < right.getStart()) {
49+
if (left.getEnd() >= right.getStart()) printTimeseriesDescription(left, right);
4350
return -1;
4451
} else if (left.getStart() == right.getStart()) {
4552
return 0;
4653
} else {
54+
if (left.getEnd() <= right.getStart()) printTimeseriesDescription(left, right);
4755
return 1;
4856
}
4957
}
58+
59+
private void printTimeseriesDescription(MetricTimeSeries left, MetricTimeSeries right) {
60+
LOGGER.error("Detected intersecting time series chunks:");
61+
LOGGER.error(
62+
"LEFT: {}", getTimeseriesIntervalDescription(left)
63+
);
64+
LOGGER.error(
65+
"RIGHT: {}", getTimeseriesIntervalDescription(right)
66+
);
67+
}
68+
69+
private String getTimeseriesIntervalDescription(MetricTimeSeries mts) {
70+
String start = new Date(mts.getStart()).toString();
71+
String end = new Date(mts.getEnd()).toString();
72+
StringBuffer sb = new StringBuffer();
73+
return sb.append(start).append(", ").append(end).toString();
74+
}
5075
}

chronix-spark-ts-rdd/src/test/groovy/de/qaware/chronix/spark/api/java/TestChronixSparkContext.groovy

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package de.qaware.chronix.spark.api.java
1717

18+
import de.qaware.chronix.storage.solr.timeseries.metric.MetricTimeSeriesKey
1819
import de.qaware.chronix.timeseries.MetricTimeSeries
1920
import org.apache.solr.client.solrj.SolrQuery
2021
import org.apache.spark.SparkConf
@@ -49,7 +50,7 @@ class TestChronixSparkContext extends Specification {
4950
then:
5051
Assert.assertTrue(timeSeries.size() == 5)
5152
for (MetricTimeSeries ts : timeSeries) {
52-
System.out.println(ts.toString());
53+
System.out.println(ts.toString())
5354
}
5455
}
5556

@@ -62,9 +63,45 @@ class TestChronixSparkContext extends Specification {
6263
long joined = result.count()
6364
println "Chunked: " + chunked
6465
println "Joined: " + joined
66+
Assert.assertTrue(resultChunked.count() >= result.count())
67+
68+
Set<MetricTimeSeriesKey> keys = new HashSet<>();
69+
int incorrectCnt = 0;
70+
int correctCnt = 0;
71+
72+
println "CHUNKED *****************"
73+
for (MetricTimeSeries mts : resultChunked.collect()) {
74+
//check ordering
75+
long prevTimeStamp = 0.0
76+
for (Long timeStamp : mts.getTimestampsAsArray()) {
77+
Assert.assertTrue(mts.getStart() <= timeStamp &&
78+
timeStamp <= mts.getEnd())
79+
Assert.assertTrue(timeStamp > prevTimeStamp)
80+
prevTimeStamp = timeStamp
81+
}
82+
}
83+
84+
println "JOINED ******************"
6585
for (MetricTimeSeries mts : result.collect()) {
66-
println mts
86+
//check identity
87+
MetricTimeSeriesKey mtsKey = new MetricTimeSeriesKey(mts)
88+
Assert.assertTrue(!keys.contains(mtsKey))
89+
keys.add(mtsKey)
90+
//check ordering
91+
long prevTimeStamp = 0.0
92+
for (Long timeStamp : mts.getTimestampsAsArray()) {
93+
Assert.assertTrue(mts.getStart() <= timeStamp &&
94+
timeStamp <= mts.getEnd())
95+
if (timeStamp > prevTimeStamp) correctCnt++
96+
else {
97+
incorrectCnt++
98+
println mts.metric
99+
println "Incorrect timestamps: " + timeStamp + " < " + prevTimeStamp
100+
}
101+
prevTimeStamp = timeStamp
102+
}
67103
}
68-
Assert.assertTrue(resultChunked.count() >= result.count())
104+
println "Incorrect ordering: " + incorrectCnt
105+
println "Correct ordering: " + correctCnt
69106
}
70107
}

0 commit comments

Comments
 (0)