You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ty...@apache.org on 2015/05/26 21:23:32 UTC
[1/2] cassandra git commit: Allow skipping file syncs during tests
Repository: cassandra
Updated Branches:
refs/heads/trunk e4da2e28d -> 3123e88e5
Allow skipping file syncs during tests
Patch by Ariel Weisberg; reviewed by Tyler Hobbs for CASSANDRA-9403
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/91187b54
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/91187b54
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/91187b54
Branch: refs/heads/trunk
Commit: 91187b542eb41ad137f1897a9c3f6c08239bf09d
Parents: 95b57c7
Author: Ariel Weisberg <ar...@weisberg.ws>
Authored: Tue May 26 14:21:18 2015 -0500
Committer: Tyler Hobbs <ty...@gmail.com>
Committed: Tue May 26 14:21:18 2015 -0500
----------------------------------------------------------------------
build.xml | 6 +
.../db/commitlog/CompressedSegment.java | 3 +-
.../db/commitlog/MemoryMappedSegment.java | 3 +-
.../io/sstable/format/big/BigTableWriter.java | 3 +-
.../cassandra/io/util/SequentialWriter.java | 5 +-
.../org/apache/cassandra/utils/SyncUtil.java | 165 +++++++++++++++++++
test/unit/org/apache/cassandra/Util.java | 15 ++
.../cassandra/db/ColumnFamilyMetricTest.java | 29 +++-
.../CompressedRandomAccessReaderTest.java | 6 +-
.../io/sstable/SSTableRewriterTest.java | 3 +-
.../io/util/BufferedRandomAccessFileTest.java | 14 +-
.../org/apache/cassandra/schema/DefsTest.java | 22 ++-
12 files changed, 247 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/91187b54/build.xml
----------------------------------------------------------------------
diff --git a/build.xml b/build.xml
index ff048a2..69f6a61 100644
--- a/build.xml
+++ b/build.xml
@@ -1213,6 +1213,7 @@
<jvmarg value="-Dcassandra.ring_delay_ms=1000"/>
<jvmarg value="-Dcassandra.tolerate_sstable_size=true"/>
<jvmarg value="-Djava.io.tmpdir=${tmp.dir}"/>
+ <jvmarg value="-Dcassandra.skip_sync=true" />
</testmacro>
<fileset dir="${test.unit.src}">
<exclude name="**/pig/*.java" />
@@ -1228,6 +1229,7 @@
<jvmarg value="-Dcassandra.ring_delay_ms=1000"/>
<jvmarg value="-Dcassandra.tolerate_sstable_size=true"/>
<jvmarg value="-Dcassandra.config.loader=org.apache.cassandra.OffsetAwareConfigurationLoader"/>
+ <jvmarg value="-Dcassandra.skip_sync=true" />
</testmacro>
</target>
@@ -1255,6 +1257,7 @@
<jvmarg value="-Dmigration-sstable-root=${test.data}/migration-sstables"/>
<jvmarg value="-Dcassandra.ring_delay_ms=1000"/>
<jvmarg value="-Dcassandra.tolerate_sstable_size=true"/>
+ <jvmarg value="-Dcassandra.skip_sync=true" />
</testmacro>
</target>
@@ -1274,6 +1277,7 @@
<jvmarg value="-Dcassandra.ring_delay_ms=1000"/>
<jvmarg value="-Dcassandra.tolerate_sstable_size=true"/>
<jvmarg value="-Dcassandra.config=file:///${compressed_yaml}"/>
+ <jvmarg value="-Dcassandra.skip_sync=true" />
</testmacro>
<fileset dir="${test.unit.src}">
<exclude name="**/pig/*.java" />
@@ -1334,6 +1338,7 @@
<jvmarg value="-Xss256k"/>
<jvmarg value="-Dcassandra.memtable_row_overhead_computation_step=100"/>
<jvmarg value="-Dcassandra.test.use_prepared=${cassandra.test.use_prepared}"/>
+ <jvmarg value="-Dcassandra.skip_sync=true" />
<classpath>
<path refid="cassandra.classpath" />
<pathelement location="${test.classes}"/>
@@ -1377,6 +1382,7 @@
<jvmarg value="-Xss256k"/>
<jvmarg value="-Dcassandra.test.use_prepared=${cassandra.test.use_prepared}"/>
<jvmarg value="-Dcassandra.memtable_row_overhead_computation_step=100"/>
+ <jvmarg value="-Dcassandra.skip_sync=true" />
<classpath>
<path refid="cassandra.classpath" />
<pathelement location="${test.classes}"/>
http://git-wip-us.apache.org/repos/asf/cassandra/blob/91187b54/src/java/org/apache/cassandra/db/commitlog/CompressedSegment.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/commitlog/CompressedSegment.java b/src/java/org/apache/cassandra/db/commitlog/CompressedSegment.java
index 73bc5e2..c8101e4 100644
--- a/src/java/org/apache/cassandra/db/commitlog/CompressedSegment.java
+++ b/src/java/org/apache/cassandra/db/commitlog/CompressedSegment.java
@@ -27,6 +27,7 @@ import org.apache.cassandra.io.FSWriteError;
import org.apache.cassandra.io.compress.BufferType;
import org.apache.cassandra.io.compress.ICompressor;
import org.apache.cassandra.io.util.FileUtils;
+import org.apache.cassandra.utils.SyncUtil;
/*
* Compressed commit log segment. Provides an in-memory buffer for the mutation threads. On sync compresses the written
@@ -120,7 +121,7 @@ public class CompressedSegment extends CommitLogSegment
// Protected by synchronization on CommitLogSegment.sync().
writeSyncMarker(compressedBuffer, 0, (int) channel.position(), (int) channel.position() + compressedBuffer.remaining());
channel.write(compressedBuffer);
- channel.force(true);
+ SyncUtil.force(channel, true);
}
catch (Exception e)
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/91187b54/src/java/org/apache/cassandra/db/commitlog/MemoryMappedSegment.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/commitlog/MemoryMappedSegment.java b/src/java/org/apache/cassandra/db/commitlog/MemoryMappedSegment.java
index 98b9abb..7e74ec6 100644
--- a/src/java/org/apache/cassandra/db/commitlog/MemoryMappedSegment.java
+++ b/src/java/org/apache/cassandra/db/commitlog/MemoryMappedSegment.java
@@ -27,6 +27,7 @@ import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.io.FSWriteError;
import org.apache.cassandra.io.util.FileUtils;
import org.apache.cassandra.utils.CLibrary;
+import org.apache.cassandra.utils.SyncUtil;
/*
* Memory-mapped segment. Maps the destination channel into an appropriately-sized memory-mapped buffer in which the
@@ -91,7 +92,7 @@ public class MemoryMappedSegment extends CommitLogSegment
writeSyncMarker(buffer, startMarker, startMarker, nextMarker);
try {
- ((MappedByteBuffer) buffer).force();
+ SyncUtil.force((MappedByteBuffer) buffer);
}
catch (Exception e) // MappedByteBuffer.force() does not declare IOException but can actually throw it
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/91187b54/src/java/org/apache/cassandra/io/sstable/format/big/BigTableWriter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/format/big/BigTableWriter.java b/src/java/org/apache/cassandra/io/sstable/format/big/BigTableWriter.java
index a7a7fcc..0f8f0d3 100644
--- a/src/java/org/apache/cassandra/io/sstable/format/big/BigTableWriter.java
+++ b/src/java/org/apache/cassandra/io/sstable/format/big/BigTableWriter.java
@@ -51,6 +51,7 @@ import org.apache.cassandra.utils.StreamingHistogram;
import org.apache.cassandra.utils.concurrent.Transactional;
import static org.apache.cassandra.utils.Throwables.merge;
+import org.apache.cassandra.utils.SyncUtil;
public class BigTableWriter extends SSTableWriter
{
@@ -513,7 +514,7 @@ public class BigTableWriter extends SSTableWriter
DataOutputStreamPlus stream = new BufferedDataOutputStreamPlus(fos);
FilterFactory.serialize(bf, stream);
stream.flush();
- fos.getFD().sync();
+ SyncUtil.sync(fos);
stream.close();
}
catch (IOException e)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/91187b54/src/java/org/apache/cassandra/io/util/SequentialWriter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/util/SequentialWriter.java b/src/java/org/apache/cassandra/io/util/SequentialWriter.java
index 304f702..f3268a2 100644
--- a/src/java/org/apache/cassandra/io/util/SequentialWriter.java
+++ b/src/java/org/apache/cassandra/io/util/SequentialWriter.java
@@ -36,6 +36,7 @@ import org.apache.cassandra.utils.CLibrary;
import org.apache.cassandra.utils.concurrent.Transactional;
import static org.apache.cassandra.utils.Throwables.merge;
+import org.apache.cassandra.utils.SyncUtil;
/**
* Adds buffering, mark, and fsyncing to OutputStream. We always fsync on close; we may also
@@ -227,7 +228,7 @@ public class SequentialWriter extends OutputStream implements WritableByteChanne
{
try
{
- channel.force(false);
+ SyncUtil.force(channel, false);
}
catch (IOException e)
{
@@ -244,7 +245,7 @@ public class SequentialWriter extends OutputStream implements WritableByteChanne
if (!directorySynced)
{
- CLibrary.trySync(directoryFD);
+ SyncUtil.trySync(directoryFD);
directorySynced = true;
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/91187b54/src/java/org/apache/cassandra/utils/SyncUtil.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/utils/SyncUtil.java b/src/java/org/apache/cassandra/utils/SyncUtil.java
new file mode 100644
index 0000000..0e83ba2
--- /dev/null
+++ b/src/java/org/apache/cassandra/utils/SyncUtil.java
@@ -0,0 +1,165 @@
+package org.apache.cassandra.utils;
+
+import java.io.FileDescriptor;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+import java.io.SyncFailedException;
+import java.lang.reflect.Field;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.ClosedChannelException;
+import java.nio.channels.FileChannel;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.cassandra.config.Config;
+
+import com.google.common.base.Preconditions;
+
+/*
+ * A wrapper around various mechanisms for syncing files that makes it possible it intercept
+ * and skip syncing. Useful for unit tests in certain environments where syncs can have outliers
+ * bad enough to causes tests to run 10s of seconds longer.
+ */
+public class SyncUtil
+{
+ public static boolean SKIP_SYNC = Boolean.getBoolean(Config.PROPERTY_PREFIX + "skip_sync");
+
+ private static final Field mbbFDField;
+ private static final Field fdClosedField;
+ private static final Field fdUseCountField;
+
+ static
+ {
+ Field mbbFDFieldTemp = null;
+ try
+ {
+ mbbFDFieldTemp = MappedByteBuffer.class.getDeclaredField("fd");
+ mbbFDFieldTemp.setAccessible(true);
+ }
+ catch (NoSuchFieldException e)
+ {
+ }
+ mbbFDField = mbbFDFieldTemp;
+
+ //Java 8
+ Field fdClosedFieldTemp = null;
+ try
+ {
+ fdClosedFieldTemp = FileDescriptor.class.getDeclaredField("closed");
+ fdClosedFieldTemp.setAccessible(true);
+ }
+ catch (NoSuchFieldException e)
+ {
+ }
+ fdClosedField = fdClosedFieldTemp;
+
+ //Java 7
+ Field fdUseCountTemp = null;
+ try
+ {
+ fdUseCountTemp = FileDescriptor.class.getDeclaredField("useCount");
+ fdUseCountTemp.setAccessible(true);
+ }
+ catch (NoSuchFieldException e)
+ {
+ }
+ fdUseCountField = fdUseCountTemp;
+ }
+
+ public static MappedByteBuffer force(MappedByteBuffer buf)
+ {
+ Preconditions.checkNotNull(buf);
+ if (SKIP_SYNC)
+ {
+ Object fd = null;
+ try
+ {
+ if (mbbFDField != null)
+ {
+ fd = mbbFDField.get(buf);
+ }
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ //This is what MappedByteBuffer.force() throws if a you call force() on an umapped buffer
+ if (mbbFDField != null && fd == null)
+ throw new UnsupportedOperationException();
+ return buf;
+ }
+ else
+ {
+ return buf.force();
+ }
+ }
+
+ public static void sync(FileDescriptor fd) throws SyncFailedException
+ {
+ Preconditions.checkNotNull(fd);
+ if (SKIP_SYNC)
+ {
+ boolean closed = false;
+ try
+ {
+ if (fdClosedField != null)
+ closed = fdClosedField.getBoolean(fd);
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+
+ int useCount = 1;
+ try
+ {
+ if (fdUseCountField != null)
+ useCount = ((AtomicInteger)fdUseCountField.get(fd)).get();
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ if (closed || !fd.valid() || useCount < 0)
+ throw new SyncFailedException("Closed " + closed + " valid " + fd.valid() + " useCount " + useCount);
+ }
+ else
+ {
+ fd.sync();
+ }
+ }
+
+ public static void force(FileChannel fc, boolean metaData) throws IOException
+ {
+ Preconditions.checkNotNull(fc);
+ if (SKIP_SYNC)
+ {
+ if (!fc.isOpen())
+ throw new ClosedChannelException();
+ }
+ else
+ {
+ fc.force(metaData);
+ }
+ }
+
+ public static void sync(RandomAccessFile ras) throws IOException
+ {
+ Preconditions.checkNotNull(ras);
+ sync(ras.getFD());
+ }
+
+ public static void sync(FileOutputStream fos) throws IOException
+ {
+ Preconditions.checkNotNull(fos);
+ sync(fos.getFD());
+ }
+
+ public static void trySync(int fd)
+ {
+ if (SKIP_SYNC)
+ return;
+ else
+ CLibrary.trySync(fd);
+ }
+}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/91187b54/test/unit/org/apache/cassandra/Util.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/Util.java b/test/unit/org/apache/cassandra/Util.java
index c2205c4..08cc093 100644
--- a/test/unit/org/apache/cassandra/Util.java
+++ b/test/unit/org/apache/cassandra/Util.java
@@ -29,6 +29,7 @@ import java.util.*;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
+import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
@@ -67,6 +68,7 @@ import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.CounterId;
import org.apache.hadoop.fs.FileUtil;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class Util
@@ -379,4 +381,17 @@ public class Util
Composite endName = CellNames.simpleDense(ByteBufferUtil.bytes(finish));
return new RangeTombstone(startName, endName, timestamp , localtime);
}
+
+
+ public static void spinAssertEquals(Object expected, Supplier<Object> s, int timeoutInSeconds)
+ {
+ long now = System.currentTimeMillis();
+ while (System.currentTimeMillis() - now < now + (1000 * timeoutInSeconds))
+ {
+ if (s.get().equals(expected))
+ break;
+ Thread.yield();
+ }
+ assertEquals(expected, s.get());
+ }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/91187b54/test/unit/org/apache/cassandra/db/ColumnFamilyMetricTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/ColumnFamilyMetricTest.java b/test/unit/org/apache/cassandra/db/ColumnFamilyMetricTest.java
index 45ed56e..1337564 100644
--- a/test/unit/org/apache/cassandra/db/ColumnFamilyMetricTest.java
+++ b/test/unit/org/apache/cassandra/db/ColumnFamilyMetricTest.java
@@ -22,13 +22,15 @@ import java.util.Collection;
import org.junit.BeforeClass;
import org.junit.Test;
-
import org.apache.cassandra.SchemaLoader;
+import org.apache.cassandra.Util;
import org.apache.cassandra.config.KSMetaData;
import org.apache.cassandra.io.sstable.format.SSTableReader;
import org.apache.cassandra.locator.SimpleStrategy;
import org.apache.cassandra.utils.ByteBufferUtil;
+import com.google.common.base.Supplier;
+
import static org.junit.Assert.assertEquals;
import static org.apache.cassandra.Util.cellname;
@@ -48,7 +50,7 @@ public class ColumnFamilyMetricTest
public void testSizeMetric()
{
Keyspace keyspace = Keyspace.open("Keyspace1");
- ColumnFamilyStore store = keyspace.getColumnFamilyStore("Standard2");
+ final ColumnFamilyStore store = keyspace.getColumnFamilyStore("Standard2");
store.disableAutoCompaction();
store.truncateBlocking();
@@ -78,10 +80,27 @@ public class ColumnFamilyMetricTest
store.truncateBlocking();
// after truncate, size metrics should be down to 0
- assertEquals(0, store.metric.liveDiskSpaceUsed.getCount());
- assertEquals(0, store.metric.totalDiskSpaceUsed.getCount());
+ Util.spinAssertEquals(
+ 0L,
+ new Supplier<Object>()
+ {
+ public Long get()
+ {
+ return store.metric.liveDiskSpaceUsed.getCount();
+ }
+ },
+ 30);
+ Util.spinAssertEquals(
+ 0L,
+ new Supplier<Object>()
+ {
+ public Long get()
+ {
+ return store.metric.totalDiskSpaceUsed.getCount();
+ }
+ },
+ 30);
store.enableAutoCompaction();
}
-
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/91187b54/test/unit/org/apache/cassandra/io/compress/CompressedRandomAccessReaderTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/io/compress/CompressedRandomAccessReaderTest.java b/test/unit/org/apache/cassandra/io/compress/CompressedRandomAccessReaderTest.java
index b013206..0cf4cfa 100644
--- a/test/unit/org/apache/cassandra/io/compress/CompressedRandomAccessReaderTest.java
+++ b/test/unit/org/apache/cassandra/io/compress/CompressedRandomAccessReaderTest.java
@@ -25,7 +25,6 @@ import java.util.Collections;
import java.util.Random;
import org.junit.Test;
-
import org.apache.cassandra.db.composites.SimpleDenseCellNameType;
import org.apache.cassandra.db.marshal.BytesType;
import org.apache.cassandra.exceptions.ConfigurationException;
@@ -35,6 +34,7 @@ import org.apache.cassandra.io.util.ChannelProxy;
import org.apache.cassandra.io.util.FileMark;
import org.apache.cassandra.io.util.RandomAccessReader;
import org.apache.cassandra.io.util.SequentialWriter;
+import org.apache.cassandra.utils.SyncUtil;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@@ -196,7 +196,7 @@ public class CompressedRandomAccessReaderTest
for (int i = 0; i < checksum.length; i++)
{
checksumModifier.write(random.nextInt());
- checksumModifier.getFD().sync(); // making sure that change was synced with disk
+ SyncUtil.sync(checksumModifier); // making sure that change was synced with disk
final RandomAccessReader r = CompressedRandomAccessReader.open(channel, meta);
@@ -238,6 +238,6 @@ public class CompressedRandomAccessReaderTest
{
file.seek(checksumOffset);
file.write(checksum);
- file.getFD().sync();
+ SyncUtil.sync(file);
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/91187b54/test/unit/org/apache/cassandra/io/sstable/SSTableRewriterTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/io/sstable/SSTableRewriterTest.java b/test/unit/org/apache/cassandra/io/sstable/SSTableRewriterTest.java
index fa91d00..265bb6a 100644
--- a/test/unit/org/apache/cassandra/io/sstable/SSTableRewriterTest.java
+++ b/test/unit/org/apache/cassandra/io/sstable/SSTableRewriterTest.java
@@ -262,6 +262,7 @@ public class SSTableRewriterTest extends SchemaLoader
SSTableReader s = writeFile(cfs, 1000);
cfs.addSSTable(s);
long startStorageMetricsLoad = StorageMetrics.load.getCount();
+ long sBytesOnDisk = s.bytesOnDisk();
Set<SSTableReader> compacting = Sets.newHashSet(s);
SSTableRewriter.overrideOpenInterval(10000000);
@@ -292,7 +293,7 @@ public class SSTableRewriterTest extends SchemaLoader
for (SSTableReader x : cfs.getSSTables())
sum += x.bytesOnDisk();
assertEquals(sum, cfs.metric.liveDiskSpaceUsed.getCount());
- assertEquals(startStorageMetricsLoad - s.bytesOnDisk() + sum, StorageMetrics.load.getCount());
+ assertEquals(startStorageMetricsLoad - sBytesOnDisk + sum, StorageMetrics.load.getCount());
assertEquals(files, sstables.size());
assertEquals(files, cfs.getSSTables().size());
SSTableDeletingTask.waitForDeletions();
http://git-wip-us.apache.org/repos/asf/cassandra/blob/91187b54/test/unit/org/apache/cassandra/io/util/BufferedRandomAccessFileTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/io/util/BufferedRandomAccessFileTest.java b/test/unit/org/apache/cassandra/io/util/BufferedRandomAccessFileTest.java
index 0ff4b01..0c1583d 100644
--- a/test/unit/org/apache/cassandra/io/util/BufferedRandomAccessFileTest.java
+++ b/test/unit/org/apache/cassandra/io/util/BufferedRandomAccessFileTest.java
@@ -21,6 +21,7 @@ package org.apache.cassandra.io.util;
import org.apache.cassandra.service.FileCacheService;
import org.apache.cassandra.utils.ByteBufferUtil;
+import org.apache.cassandra.utils.SyncUtil;
import java.io.File;
import java.io.FileOutputStream;
@@ -36,7 +37,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
import static org.apache.cassandra.Util.expectEOF;
import static org.apache.cassandra.Util.expectException;
-
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertEquals;
@@ -425,11 +425,11 @@ public class BufferedRandomAccessFileTest
try (final RandomAccessReader r = RandomAccessReader.open(new File(tmpFile.getPath())))
{
assert tmpFile.getPath().equals(r.getPath());
-
+
// Create a mark and move the rw there.
final FileMark mark = r.mark();
r.reset(mark);
-
+
// Expect this call to succeed.
r.bytesPastMark(mark);
}
@@ -469,7 +469,7 @@ public class BufferedRandomAccessFileTest
try (RandomAccessReader copy = RandomAccessReader.open(new File(r.getPath())))
{
ByteBuffer contents = copy.readBytes((int) copy.length());
-
+
assertEquals(contents.limit(), data.length);
assertEquals(ByteBufferUtil.compare(contents, data), 0);
}
@@ -517,12 +517,12 @@ public class BufferedRandomAccessFileTest
{
w.write(new byte[30]);
w.flush();
-
+
try (RandomAccessReader r = RandomAccessReader.open(w))
{
r.seek(10);
r.mark();
-
+
r.seek(0);
r.bytesPastMark();
}
@@ -680,7 +680,7 @@ public class BufferedRandomAccessFileTest
f.deleteOnExit();
FileOutputStream fout = new FileOutputStream(f);
fout.write(data);
- fout.getFD().sync();
+ SyncUtil.sync(fout);
fout.close();
return f;
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/91187b54/test/unit/org/apache/cassandra/schema/DefsTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/schema/DefsTest.java b/test/unit/org/apache/cassandra/schema/DefsTest.java
index 0fb9353..302878a 100644
--- a/test/unit/org/apache/cassandra/schema/DefsTest.java
+++ b/test/unit/org/apache/cassandra/schema/DefsTest.java
@@ -49,6 +49,8 @@ import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
+import com.google.common.base.Supplier;
+
@RunWith(OrderedJUnit4ClassRunner.class)
public class DefsTest
{
@@ -232,7 +234,7 @@ public class DefsTest
for (int i = 0; i < 100; i++)
rm.add(cfm.cfName, cellname("col" + i), ByteBufferUtil.bytes("anyvalue"), 1L);
rm.applyUnsafe();
- ColumnFamilyStore store = Keyspace.open(cfm.ksName).getColumnFamilyStore(cfm.cfName);
+ final ColumnFamilyStore store = Keyspace.open(cfm.ksName).getColumnFamilyStore(cfm.cfName);
Assert.assertNotNull(store);
store.forceBlockingFlush();
Assert.assertTrue(store.directories.sstableLister().list().size() > 0);
@@ -256,11 +258,19 @@ public class DefsTest
Assert.assertFalse("This mutation should have failed since the CF no longer exists.", success);
// verify that the files are gone.
- for (File file : store.directories.sstableLister().listFiles())
- {
- if (file.getPath().endsWith("Data.db") && !new File(file.getPath().replace("Data.db", "Compacted")).exists())
- throw new AssertionError("undeleted file " + file);
- }
+ Supplier<Object> lambda = new Supplier<Object>() {
+ @Override
+ public Boolean get() {
+ for (File file : store.directories.sstableLister().listFiles())
+ {
+ if (file.getPath().endsWith("Data.db") && !new File(file.getPath().replace("Data.db", "Compacted")).exists())
+ return false;
+ }
+ return true;
+ }
+ };
+ Util.spinAssertEquals(true, lambda, 30);
+
}
@Test
[2/2] cassandra git commit: Merge branch 'cassandra-2.2' into trunk
Posted by ty...@apache.org.
Merge branch 'cassandra-2.2' into trunk
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/3123e88e
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/3123e88e
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/3123e88e
Branch: refs/heads/trunk
Commit: 3123e88e540b88767f1a2a62d4f649920b9af82c
Parents: e4da2e2 91187b5
Author: Tyler Hobbs <ty...@gmail.com>
Authored: Tue May 26 14:23:21 2015 -0500
Committer: Tyler Hobbs <ty...@gmail.com>
Committed: Tue May 26 14:23:21 2015 -0500
----------------------------------------------------------------------
build.xml | 6 +
.../db/commitlog/CompressedSegment.java | 3 +-
.../db/commitlog/MemoryMappedSegment.java | 3 +-
.../io/sstable/format/big/BigTableWriter.java | 3 +-
.../cassandra/io/util/SequentialWriter.java | 5 +-
.../org/apache/cassandra/utils/SyncUtil.java | 165 +++++++++++++++++++
test/unit/org/apache/cassandra/Util.java | 15 ++
.../cassandra/db/ColumnFamilyMetricTest.java | 8 +-
.../CompressedRandomAccessReaderTest.java | 6 +-
.../io/sstable/SSTableRewriterTest.java | 3 +-
.../io/util/BufferedRandomAccessFileTest.java | 14 +-
.../org/apache/cassandra/schema/DefsTest.java | 16 +-
12 files changed, 222 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3123e88e/build.xml
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3123e88e/test/unit/org/apache/cassandra/Util.java
----------------------------------------------------------------------
diff --cc test/unit/org/apache/cassandra/Util.java
index c2205c4,08cc093..b8f33d3
--- a/test/unit/org/apache/cassandra/Util.java
+++ b/test/unit/org/apache/cassandra/Util.java
@@@ -28,7 -28,8 +28,8 @@@ import java.nio.channels.FileChannel
import java.util.*;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
++import java.util.function.Supplier;
-import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3123e88e/test/unit/org/apache/cassandra/db/ColumnFamilyMetricTest.java
----------------------------------------------------------------------
diff --cc test/unit/org/apache/cassandra/db/ColumnFamilyMetricTest.java
index 45ed56e,1337564..b644264
--- a/test/unit/org/apache/cassandra/db/ColumnFamilyMetricTest.java
+++ b/test/unit/org/apache/cassandra/db/ColumnFamilyMetricTest.java
@@@ -19,6 -19,6 +19,7 @@@ package org.apache.cassandra.db
import java.nio.ByteBuffer;
import java.util.Collection;
++import java.util.function.Supplier;
import org.junit.BeforeClass;
import org.junit.Test;
@@@ -78,8 -80,26 +79,8 @@@ public class ColumnFamilyMetricTes
store.truncateBlocking();
// after truncate, size metrics should be down to 0
- assertEquals(0, store.metric.liveDiskSpaceUsed.getCount());
- assertEquals(0, store.metric.totalDiskSpaceUsed.getCount());
- Util.spinAssertEquals(
- 0L,
- new Supplier<Object>()
- {
- public Long get()
- {
- return store.metric.liveDiskSpaceUsed.getCount();
- }
- },
- 30);
- Util.spinAssertEquals(
- 0L,
- new Supplier<Object>()
- {
- public Long get()
- {
- return store.metric.totalDiskSpaceUsed.getCount();
- }
- },
- 30);
++ Util.spinAssertEquals(0L, () -> store.metric.liveDiskSpaceUsed.getCount(), 30);
++ Util.spinAssertEquals(0L, () -> store.metric.totalDiskSpaceUsed.getCount(), 30);
store.enableAutoCompaction();
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3123e88e/test/unit/org/apache/cassandra/schema/DefsTest.java
----------------------------------------------------------------------
diff --cc test/unit/org/apache/cassandra/schema/DefsTest.java
index 0fb9353,302878a..1e28575
--- a/test/unit/org/apache/cassandra/schema/DefsTest.java
+++ b/test/unit/org/apache/cassandra/schema/DefsTest.java
@@@ -20,6 -20,6 +20,7 @@@ package org.apache.cassandra.schema
import java.io.File;
import java.nio.ByteBuffer;
++import java.util.function.Supplier;
import org.apache.cassandra.OrderedJUnit4ClassRunner;
import org.apache.cassandra.SchemaLoader;
@@@ -256,11 -258,19 +257,16 @@@ public class DefsTes
Assert.assertFalse("This mutation should have failed since the CF no longer exists.", success);
// verify that the files are gone.
- for (File file : store.directories.sstableLister().listFiles())
- {
- if (file.getPath().endsWith("Data.db") && !new File(file.getPath().replace("Data.db", "Compacted")).exists())
- throw new AssertionError("undeleted file " + file);
- }
- Supplier<Object> lambda = new Supplier<Object>() {
- @Override
- public Boolean get() {
- for (File file : store.directories.sstableLister().listFiles())
- {
- if (file.getPath().endsWith("Data.db") && !new File(file.getPath().replace("Data.db", "Compacted")).exists())
- return false;
- }
- return true;
++ Supplier<Object> lambda = () -> {
++ for (File file : store.directories.sstableLister().listFiles())
++ {
++ if (file.getPath().endsWith("Data.db") && !new File(file.getPath().replace("Data.db", "Compacted")).exists())
++ return false;
+ }
++ return true;
+ };
+ Util.spinAssertEquals(true, lambda, 30);
+
}
@Test