You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by gt...@apache.org on 2015/05/15 14:23:32 UTC
activemq git commit: https://issues.apache.org/jira/browse/AMQ-4705 -
lastmod granualarity is second on some nix. Also write on lock acquire to
ensure modification time change
Repository: activemq
Updated Branches:
refs/heads/master 4c8a4722a -> 5e36f65e0
https://issues.apache.org/jira/browse/AMQ-4705 - lastmod granualarity is second on some nix. Also write on lock acquire to ensure modification time change
Project: http://git-wip-us.apache.org/repos/asf/activemq/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/5e36f65e
Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/5e36f65e
Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/5e36f65e
Branch: refs/heads/master
Commit: 5e36f65e0e29456c422c90854e1babef8a679980
Parents: 4c8a472
Author: gtully <ga...@gmail.com>
Authored: Fri May 15 13:23:12 2015 +0100
Committer: gtully <ga...@gmail.com>
Committed: Fri May 15 13:23:12 2015 +0100
----------------------------------------------------------------------
.../java/org/apache/activemq/util/LockFile.java | 18 +++++++++---------
.../store/kahadb/KahaDBDeleteLockTest.java | 15 +++++++++++++--
2 files changed, 22 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq/blob/5e36f65e/activemq-broker/src/main/java/org/apache/activemq/util/LockFile.java
----------------------------------------------------------------------
diff --git a/activemq-broker/src/main/java/org/apache/activemq/util/LockFile.java b/activemq-broker/src/main/java/org/apache/activemq/util/LockFile.java
index 45e26ca..516c5c2 100644
--- a/activemq-broker/src/main/java/org/apache/activemq/util/LockFile.java
+++ b/activemq-broker/src/main/java/org/apache/activemq/util/LockFile.java
@@ -24,7 +24,6 @@ import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileLock;
import java.nio.channels.OverlappingFileLockException;
-import java.util.Calendar;
import java.util.Date;
/**
@@ -39,7 +38,7 @@ public class LockFile {
private long lastModified;
private FileLock lock;
- private RandomAccessFile readFile;
+ private RandomAccessFile randomAccessLockFile;
private int lockCounter;
private final boolean deleteOnUnlock;
private volatile boolean locked;
@@ -72,18 +71,19 @@ public class LockFile {
}
try {
if (lock == null) {
- readFile = new RandomAccessFile(file, "rw");
+ randomAccessLockFile = new RandomAccessFile(file, "rw");
IOException reason = null;
try {
- lock = readFile.getChannel().tryLock(0, Math.max(1, readFile.getChannel().size()), false);
+ lock = randomAccessLockFile.getChannel().tryLock(0, Math.max(1, randomAccessLockFile.getChannel().size()), false);
} catch (OverlappingFileLockException e) {
reason = IOExceptionSupport.create("File '" + file + "' could not be locked.", e);
} catch (IOException ioe) {
reason = ioe;
}
if (lock != null) {
- //Set lastModified only if we are able to successfully obtain the lock.
- readFile.getChannel().force(true);
+ //track lastModified only if we are able to successfully obtain the lock.
+ randomAccessLockFile.writeLong(System.currentTimeMillis());
+ randomAccessLockFile.getChannel().force(true);
lastModified = file.lastModified();
lockCounter++;
System.setProperty(getVmLockKey(), new Date().toString());
@@ -141,12 +141,12 @@ public class LockFile {
private void closeReadFile() {
// close the file.
- if (readFile != null) {
+ if (randomAccessLockFile != null) {
try {
- readFile.close();
+ randomAccessLockFile.close();
} catch (Throwable ignore) {
}
- readFile = null;
+ randomAccessLockFile = null;
}
}
http://git-wip-us.apache.org/repos/asf/activemq/blob/5e36f65e/activemq-unit-tests/src/test/java/org/apache/activemq/store/kahadb/KahaDBDeleteLockTest.java
----------------------------------------------------------------------
diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/store/kahadb/KahaDBDeleteLockTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/store/kahadb/KahaDBDeleteLockTest.java
index 53de603..390072e 100644
--- a/activemq-unit-tests/src/test/java/org/apache/activemq/store/kahadb/KahaDBDeleteLockTest.java
+++ b/activemq-unit-tests/src/test/java/org/apache/activemq/store/kahadb/KahaDBDeleteLockTest.java
@@ -21,15 +21,19 @@ import org.apache.activemq.util.Wait;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.RandomAccessFile;
+import java.util.Date;
import java.util.concurrent.TimeUnit;
import static org.junit.Assert.assertTrue;
public class KahaDBDeleteLockTest {
+ static final Logger LOG = LoggerFactory.getLogger(KahaDBDeleteLockTest.class);
protected BrokerService master;
@@ -48,6 +52,12 @@ public class KahaDBDeleteLockTest {
masterPersistenceAdapter.setDirectory(kahaDataDir);
masterPersistenceAdapter.setLockKeepAlivePeriod(500);
+ // ensure broker creates the file
+ File lockFile = new File(kahaDataDir, "lock");
+ if (lockFile.exists()) {
+ lockFile.delete();
+ }
+
master.setPersistenceAdapter(masterPersistenceAdapter);
master.start();
master.waitUntilStarted();
@@ -97,12 +107,13 @@ public class KahaDBDeleteLockTest {
assertTrue("lock file exists via modification time", Wait.waitFor(new Wait.Condition() {
@Override
public boolean isSatisified() throws Exception {
+ LOG.info("Lock file " + lockFile.getAbsolutePath() + ", last mod at: " + new Date(lockFile.lastModified()));
return lockFile.lastModified() > 0;
}
}));
- // ensure modification will be seen, milisecond granularity
- TimeUnit.MILLISECONDS.sleep(10);
+ // ensure modification will be seen, second granularity on some nix
+ TimeUnit.SECONDS.sleep(2);
RandomAccessFile file = new RandomAccessFile(lockFile, "rw");
file.write(4);
file.getChannel().force(true);