Murtadha Hubail has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/2315
Change subject: [ASTERIXDB-1706][RT] Use System.nanoTime For Result Timestamp
......................................................................
[ASTERIXDB-1706][RT] Use System.nanoTime For Result Timestamp
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
- Use System.nanoTime for result timestamp to
avoid results being incorrectly swept due to
System.currentTimeMillis system time adjustments.
Change-Id: I388d2a477bcfdc47d11dc6a4873483b82c9fadbf
---
M
hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataset/DatasetJobRecord.java
M
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/dataset/ResultStateSweeper.java
M
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/dataset/ResultSetMap.java
3 files changed, 10 insertions(+), 17 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/15/2315/1
diff --git
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataset/DatasetJobRecord.java
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataset/DatasetJobRecord.java
index 55f1d7c..4e7ddda 100644
---
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataset/DatasetJobRecord.java
+++
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataset/DatasetJobRecord.java
@@ -84,7 +84,7 @@
private Map<ResultSetId, ResultSetMetaData> resultSetMetadataMap = new
HashMap<>();
public DatasetJobRecord() {
- this.timestamp = System.currentTimeMillis();
+ this.timestamp = System.nanoTime();
this.status = new Status();
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/dataset/ResultStateSweeper.java
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/dataset/ResultStateSweeper.java
index a9ca771..4fb03b5 100644
---
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/dataset/ResultStateSweeper.java
+++
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/dataset/ResultStateSweeper.java
@@ -21,10 +21,10 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.TimeUnit;
import org.apache.hyracks.api.dataset.IDatasetManager;
import org.apache.hyracks.api.job.JobId;
-import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Logger;
/**
@@ -33,34 +33,29 @@
public class ResultStateSweeper implements Runnable {
private final IDatasetManager datasetManager;
-
private final long resultTTL;
-
private final long resultSweepThreshold;
-
private final Logger logger;
-
private final List<JobId> toBeCollected;
public ResultStateSweeper(IDatasetManager datasetManager, long resultTTL,
long resultSweepThreshold,
Logger logger) {
this.datasetManager = datasetManager;
- this.resultTTL = resultTTL;
+ this.resultTTL = TimeUnit.MILLISECONDS.toNanos(resultTTL);
this.resultSweepThreshold = resultSweepThreshold;
this.logger = logger;
- toBeCollected = new ArrayList<JobId>();
+ toBeCollected = new ArrayList<>();
}
@Override
- @SuppressWarnings("squid:S2142") // catch interrupted exception
public void run() {
- while (true) {
+ while (!Thread.currentThread().isInterrupted()) {
try {
Thread.sleep(resultSweepThreshold);
sweep();
} catch (InterruptedException e) {
- logger.log(Level.WARN, "Result cleaner thread interrupted,
shutting down.");
- break; // the interrupt was explicit from another thread. This
thread should shut down...
+ logger.warn("Result cleaner thread interrupted, shutting
down.");
+ Thread.currentThread().interrupt();
}
}
}
@@ -70,7 +65,7 @@
toBeCollected.clear();
for (JobId jobId : datasetManager.getJobIds()) {
final long timestamp =
datasetManager.getResultTimestamp(jobId);
- if (timestamp != -1 && System.currentTimeMillis() > timestamp
+ resultTTL) {
+ if (timestamp != -1 && System.nanoTime() > timestamp +
resultTTL) {
toBeCollected.add(jobId);
}
}
@@ -78,8 +73,6 @@
datasetManager.deinitState(jobId);
}
}
- if (logger.isTraceEnabled()) {
- logger.trace("Result state cleanup instance successfully
completed.");
- }
+ logger.trace("Result state cleanup instance successfully completed.");
}
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/dataset/ResultSetMap.java
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/dataset/ResultSetMap.java
index 3957401..1a64a5a 100644
---
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/dataset/ResultSetMap.java
+++
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/dataset/ResultSetMap.java
@@ -37,7 +37,7 @@
private final HashMap<ResultSetId, ResultState[]> resultStateMap;
ResultSetMap() {
- timestamp = System.currentTimeMillis();
+ timestamp = System.nanoTime();
resultStateMap = new HashMap<>();
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/2315
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I388d2a477bcfdc47d11dc6a4873483b82c9fadbf
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Murtadha Hubail <[email protected]>