[jboss-cvs] JBoss Messaging SVN: r7140 - in branches/Branch_JBM2_Perf_Clebert: src/main/org/jboss/messaging/core/journal and 2 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Sat May 30 18:49:26 EDT 2009
Author: clebert.suconic at jboss.com
Date: 2009-05-30 18:49:25 -0400 (Sat, 30 May 2009)
New Revision: 7140
Modified:
branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/asyncio/timedbuffer/TimedBuffer.java
branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/journal/SequentialFile.java
branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/journal/impl/AIOSequentialFile.java
branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java
branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/journal/impl/NIOSequentialFile.java
branches/Branch_JBM2_Perf_Clebert/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/fakes/FakeSequentialFileFactory.java
Log:
tweaks
Modified: branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/asyncio/timedbuffer/TimedBuffer.java
===================================================================
--- branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/asyncio/timedbuffer/TimedBuffer.java 2009-05-30 11:02:36 UTC (rev 7139)
+++ branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/asyncio/timedbuffer/TimedBuffer.java 2009-05-30 22:49:25 UTC (rev 7140)
@@ -38,8 +38,6 @@
/**
* A TimedBuffer
- *
- * TODO: this is a prototype only.. it is missing the timer itself
*
* @author <a href="mailto:clebert.suconic at jboss.org">Clebert Suconic</a>
*
@@ -69,6 +67,8 @@
private volatile long timeLastWrite = 0;
private final ScheduledExecutorService schedule = ScheduledSingleton.getScheduledService();
+
+ private Lock lock = new ReentrantReadWriteLock().writeLock();
// Static --------------------------------------------------------
@@ -99,10 +99,29 @@
{
if (System.currentTimeMillis() - timeLastWrite > timeout)
{
- flush();
+ lock.lock();
+ try
+ {
+ flush();
+ }
+ finally
+ {
+ lock.unlock();
+ }
}
}
+
+
+ public void lock()
+ {
+ lock.lock();
+ }
+
+ public void unlock()
+ {
+ lock.unlock();
+ }
/**
* Verify if the size fits the buffer, if it fits we lock the buffer to avoid a flush until add is called
Modified: branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/journal/SequentialFile.java
===================================================================
--- branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/journal/SequentialFile.java 2009-05-30 11:02:36 UTC (rev 7139)
+++ branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/journal/SequentialFile.java 2009-05-30 22:49:25 UTC (rev 7140)
@@ -84,4 +84,8 @@
void renameTo(String newFileName) throws Exception;
+ void lockBuffer();
+
+ void unlockBuffer();
+
}
Modified: branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/journal/impl/AIOSequentialFile.java
===================================================================
--- branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/journal/impl/AIOSequentialFile.java 2009-05-30 11:02:36 UTC (rev 7139)
+++ branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/journal/impl/AIOSequentialFile.java 2009-05-30 22:49:25 UTC (rev 7140)
@@ -135,6 +135,18 @@
timedBuffer.flush();
}
+ public void lockBuffer()
+ {
+ timedBuffer.lock();
+ }
+
+ public void unlockBuffer()
+ {
+ timedBuffer.unlock();
+ }
+
+
+
public synchronized void close() throws Exception
{
checkOpened();
Modified: branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java
===================================================================
--- branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java 2009-05-30 11:02:36 UTC (rev 7139)
+++ branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/journal/impl/JournalImpl.java 2009-05-30 22:49:25 UTC (rev 7140)
@@ -1865,9 +1865,14 @@
throw new IllegalArgumentException("Record is too large to store " + size);
}
+ // The buffer on the file can't be flushed or the currentFile could be affected
+ currentFile.getFile().lockBuffer();
+
if (!currentFile.getFile().fits(size))
{
+ currentFile.getFile().unlockBuffer();
moveNextFile();
+ currentFile.getFile().lockBuffer();
}
if (currentFile == null)
@@ -1884,10 +1889,10 @@
if (callback != null)
{
currentFile.getFile().write(bb, callback);
-
+
// TODO: Do we need to do this?
- // it wouldn't scale, but it is probably useful in some usecases?
- // It should be configurable at least
+ // it wouldn't scale, but it is probably useful in some usecases?
+ // It should be configurable at least
if (sync)
{
currentFile.getFile().flush();
@@ -1902,6 +1907,8 @@
}
finally
{
+ currentFile.getFile().unlockBuffer();
+
lock.release();
}
@@ -1935,7 +1942,7 @@
bb.putInt(orderingID);
bb.rewind();
-
+
sequentialFile.setBuffering(false);
sequentialFile.write(bb, true);
Modified: branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/journal/impl/NIOSequentialFile.java
===================================================================
--- branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/journal/impl/NIOSequentialFile.java 2009-05-30 11:02:36 UTC (rev 7139)
+++ branches/Branch_JBM2_Perf_Clebert/src/main/org/jboss/messaging/core/journal/impl/NIOSequentialFile.java 2009-05-30 22:49:25 UTC (rev 7140)
@@ -255,4 +255,18 @@
{
}
+ /* (non-Javadoc)
+ * @see org.jboss.messaging.core.journal.SequentialFile#lockBuffer()
+ */
+ public void lockBuffer()
+ {
+ }
+
+ /* (non-Javadoc)
+ * @see org.jboss.messaging.core.journal.SequentialFile#unlockBuffer()
+ */
+ public void unlockBuffer()
+ {
+ }
+
}
Modified: branches/Branch_JBM2_Perf_Clebert/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/fakes/FakeSequentialFileFactory.java
===================================================================
--- branches/Branch_JBM2_Perf_Clebert/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/fakes/FakeSequentialFileFactory.java 2009-05-30 11:02:36 UTC (rev 7139)
+++ branches/Branch_JBM2_Perf_Clebert/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/fakes/FakeSequentialFileFactory.java 2009-05-30 22:49:25 UTC (rev 7140)
@@ -321,7 +321,7 @@
// + open);
return open;
}
-
+
public void flush()
{
}
@@ -581,6 +581,20 @@
{
}
+ /* (non-Javadoc)
+ * @see org.jboss.messaging.core.journal.SequentialFile#lockBuffer()
+ */
+ public void lockBuffer()
+ {
+ }
+
+ /* (non-Javadoc)
+ * @see org.jboss.messaging.core.journal.SequentialFile#unlockBuffer()
+ */
+ public void unlockBuffer()
+ {
+ }
+
}
/* (non-Javadoc)
More information about the jboss-cvs-commits
mailing list