public class TestRandomAccessFileSynchronousWrites
extends junit.framework.TestCase
RandomAccessFile opened using rss or rdd
 mode. A conforming platform will NOT reorder writes and will a request to
 FileChannel.force(boolean) will flush data through to stable media
 before the write operation returns. A write cache in the operating system,
 device driver, controller, or disk drive can defeat synchronous IO with the
 results that: (a) the sequence in which writes are issued by the application
 may not be the sequence in which the data are laid down on the disk; and (b)
 the write operation may return before the data are stable on disk.
 Both of these results can break the semantics of the atomic commit protocol in at least the following ways:
| Modifier and Type | Field and Description | 
|---|---|
protected static org.apache.log4j.Logger | 
log  | 
| Constructor and Description | 
|---|
TestRandomAccessFileSynchronousWrites()  | 
TestRandomAccessFileSynchronousWrites(String name)  | 
| Modifier and Type | Method and Description | 
|---|---|
protected void | 
assertWriteCacheDisabled(com.bigdata.journal.TestRandomAccessFileSynchronousWrites.Stats baseline,
                        com.bigdata.journal.TestRandomAccessFileSynchronousWrites.Stats syncio)
Verify that the request to sync to disk with each IO ( 
rws or
 rwd) was honored by the underlying platform. | 
protected com.bigdata.journal.TestRandomAccessFileSynchronousWrites.Stats | 
doSyncWriteTest(String mode)
Test helper attempts to detect when a request for synchronous writes is
 being ignored by the platform. 
 | 
void | 
test_syncWrites_rdd()
Test verifies whether or not the platform appears to perform synchronous
 IOs when creating a  
RandomAccessFile with mode rws. | 
void | 
test_syncWrites_rds()
Test verifies whether or not the platform appears to perform synchronous
 IOs when creating a  
RandomAccessFile with mode rws. | 
assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertEquals, assertFalse, assertFalse, assertNotNull, assertNotNull, assertNotSame, assertNotSame, assertNull, assertNull, assertSame, assertSame, assertTrue, assertTrue, countTestCases, createResult, fail, fail, failNotEquals, failNotSame, failSame, format, getName, run, run, runBare, runTest, setName, setUp, tearDown, toStringpublic TestRandomAccessFileSynchronousWrites()
public TestRandomAccessFileSynchronousWrites(String name)
public void test_syncWrites_rds()
                         throws IOException
RandomAccessFile with mode rws.IOExceptionpublic void test_syncWrites_rdd()
                         throws IOException
RandomAccessFile with mode rws.IOExceptionprotected void assertWriteCacheDisabled(com.bigdata.journal.TestRandomAccessFileSynchronousWrites.Stats baseline,
                            com.bigdata.journal.TestRandomAccessFileSynchronousWrites.Stats syncio)
rws or
 rwd) was honored by the underlying platform.baseline - The rw performance Stats.syncio - The performance for either the rws or
            rwd modes, which require synchronization to the
            disk after each write.junit.framework.AssertionFailedError - unless the write IOPs are significantly lower for the
             syncio condition.protected com.bigdata.journal.TestRandomAccessFileSynchronousWrites.Stats doSyncWriteTest(String mode) throws IOException
Note: The file is created using the temp file mechanisms so this is only really testing the behavior of the disk on which the temp files are stored.
Note: The more write operations that you request and the larger the file on which those writes are randomly distributed the more you are likely to defeat any cache mechanisms.
    Results on a laptop class platform (Windows XP):
  
  write cache disabled in platform:
  
  elapsed=5063ms, mode=rwd, writesPerSec=988, bytesPerSec=1011258
  elapsed=5031ms, mode=rws, writesPerSec=994, bytesPerSec=1017690
  elapsed=109ms, mode=rw, writesPerSec=45872, bytesPerSec=46972477
  
  write cache enabled in platform:
  
  elapsed=1797ms, mode=rwd, writesPerSec=2782, bytesPerSec=2849193
  elapsed=1969ms, mode=rws, writesPerSec=2539, bytesPerSec=2600305
  elapsed=62ms, mode=rw, writesPerSec=80645, bytesPerSec=82580645
 
 
 
 Based on the data above, you can see that merely requesting synchronous
 IO in Java clearly does not disable all layers of the write cache.mode - The file mode to be used.Stats for that mode.IOExceptionCopyright © 2006–2019 SYSTAP, LLC DBA Blazegraph. All rights reserved.