You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by yu...@apache.org on 2016/05/26 16:33:21 UTC
[5/9] cassandra git commit: Merge branch 'cassandra-2.2' into
cassandra-3.0
Merge branch 'cassandra-2.2' into cassandra-3.0
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/764f3d3a
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/764f3d3a
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/764f3d3a
Branch: refs/heads/cassandra-3.7
Commit: 764f3d3a1dd4d643cd3178967f14b45d155f4fd6
Parents: a3d0556 4aa859e
Author: Yuki Morishita <yu...@apache.org>
Authored: Thu May 26 09:53:39 2016 -0500
Committer: Yuki Morishita <yu...@apache.org>
Committed: Thu May 26 09:53:39 2016 -0500
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../org/apache/cassandra/io/FSErrorHandler.java | 30 ++++++
.../org/apache/cassandra/io/util/FileUtils.java | 79 ++++-----------
.../cassandra/service/CassandraDaemon.java | 2 +
.../service/DefaultFSErrorHandler.java | 101 +++++++++++++++++++
.../apache/cassandra/db/DirectoriesTest.java | 2 +
6 files changed, 153 insertions(+), 62 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/764f3d3a/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 062bb7b,f2276f0..75ce90d
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,44 -1,9 +1,45 @@@
-2.2.7
+3.0.7
+ * Prevent OOM failures on SSTable corruption, improve tests for corruption detection (CASSANDRA-9530)
+ * Use CFS.initialDirectories when clearing snapshots (CASSANDRA-11705)
+ * Allow compaction strategies to disable early open (CASSANDRA-11754)
+ * Refactor Materialized View code (CASSANDRA-11475)
+ * Update Java Driver (CASSANDRA-11615)
+Merged from 2.2:
* Enable client encryption in sstableloader with cli options (CASSANDRA-11708)
* Possible memory leak in NIODataInputStream (CASSANDRA-11867)
- * Fix commit log replay after out-of-order flush completion (CASSANDRA-9669)
* Add seconds to cqlsh tracing session duration (CASSANDRA-11753)
- * Prohibit Reverse Counter type as part of the PK (CASSANDRA-9395)
+ * Prohibit Reversed Counter type as part of the PK (CASSANDRA-9395)
+Merged from 2.1:
++ * Backport CASSANDRA-11578 (CASSANDRA-11750)
+ * Clear out parent repair session if repair coordinator dies (CASSANDRA-11824)
+ * Set default streaming_socket_timeout_in_ms to 24 hours (CASSANDRA-11840)
+ * Do not consider local node a valid source during replace (CASSANDRA-11848)
+ * Add message dropped tasks to nodetool netstats (CASSANDRA-11855)
+ * Avoid holding SSTableReaders for duration of incremental repair (CASSANDRA-11739)
+
+
+3.0.6
+ * Disallow creating view with a static column (CASSANDRA-11602)
+ * Reduce the amount of object allocations caused by the getFunctions methods (CASSANDRA-11593)
+ * Potential error replaying commitlog with smallint/tinyint/date/time types (CASSANDRA-11618)
+ * Fix queries with filtering on counter columns (CASSANDRA-11629)
+ * Improve tombstone printing in sstabledump (CASSANDRA-11655)
+ * Fix paging for range queries where all clustering columns are specified (CASSANDRA-11669)
+ * Don't require HEAP_NEW_SIZE to be set when using G1 (CASSANDRA-11600)
+ * Fix sstabledump not showing cells after tombstone marker (CASSANDRA-11654)
+ * Ignore all LocalStrategy keyspaces for streaming and other related
+ operations (CASSANDRA-11627)
+ * Ensure columnfilter covers indexed columns for thrift 2i queries (CASSANDRA-11523)
+ * Only open one sstable scanner per sstable (CASSANDRA-11412)
+ * Option to specify ProtocolVersion in cassandra-stress (CASSANDRA-11410)
+ * ArithmeticException in avgFunctionForDecimal (CASSANDRA-11485)
+ * LogAwareFileLister should only use OLD sstable files in current folder to determine disk consistency (CASSANDRA-11470)
+ * Notify indexers of expired rows during compaction (CASSANDRA-11329)
+ * Properly respond with ProtocolError when a v1/v2 native protocol
+ header is received (CASSANDRA-11464)
+ * Validate that num_tokens and initial_token are consistent with one another (CASSANDRA-10120)
+Merged from 2.2:
+ * Fix commit log replay after out-of-order flush completion (CASSANDRA-9669)
* cqlsh: correctly handle non-ascii chars in error messages (CASSANDRA-11626)
* Exit JVM if JMX server fails to startup (CASSANDRA-11540)
* Produce a heap dump when exiting on OOM (CASSANDRA-9861)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/764f3d3a/src/java/org/apache/cassandra/io/util/FileUtils.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/io/util/FileUtils.java
index 46f2de5,3124fcd..9e81da5
--- a/src/java/org/apache/cassandra/io/util/FileUtils.java
+++ b/src/java/org/apache/cassandra/io/util/FileUtils.java
@@@ -25,19 -23,17 +25,17 @@@ import java.nio.charset.StandardCharset
import java.nio.file.*;
import java.text.DecimalFormat;
import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
-
- import sun.nio.ch.DirectBuffer;
+ import java.util.concurrent.atomic.AtomicReference;
-import org.apache.cassandra.config.Config;
-import sun.nio.ch.DirectBuffer;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
++import sun.nio.ch.DirectBuffer;
import org.apache.cassandra.concurrent.ScheduledExecutors;
- import org.apache.cassandra.config.DatabaseDescriptor;
- import org.apache.cassandra.db.BlacklistedDirectories;
- import org.apache.cassandra.db.Keyspace;
import org.apache.cassandra.io.FSError;
+ import org.apache.cassandra.io.FSErrorHandler;
import org.apache.cassandra.io.FSReadError;
import org.apache.cassandra.io.FSWriteError;
import org.apache.cassandra.io.sstable.CorruptSSTableException;
@@@ -47,10 -42,8 +44,10 @@@ import org.apache.cassandra.utils.JVMSt
import static org.apache.cassandra.utils.Throwables.maybeFail;
import static org.apache.cassandra.utils.Throwables.merge;
- public class FileUtils
+ public final class FileUtils
{
+ public static final Charset CHARSET = StandardCharsets.UTF_8;
+
private static final Logger logger = LoggerFactory.getLogger(FileUtils.class);
private static final double KB = 1024d;
private static final double MB = 1024*1024d;
@@@ -458,65 -396,30 +456,18 @@@
dir.deleteOnExit();
}
- public static void skipBytesFully(DataInput in, int bytes) throws IOException
- {
- int n = 0;
- while (n < bytes)
- {
- int skipped = in.skipBytes(bytes - n);
- if (skipped == 0)
- throw new EOFException("EOF after " + n + " bytes out of " + bytes);
- n += skipped;
- }
- }
-
public static void handleCorruptSSTable(CorruptSSTableException e)
{
- if (!StorageService.instance.isSetupCompleted())
- handleStartupFSError(e);
-
- JVMStabilityInspector.inspectThrowable(e);
- switch (DatabaseDescriptor.getDiskFailurePolicy())
- {
- case stop_paranoid:
- StorageService.instance.stopTransports();
- break;
- }
+ FSErrorHandler handler = fsErrorHandler.get();
+ if (handler != null)
+ handler.handleCorruptSSTable(e);
}
-
+
public static void handleFSError(FSError e)
{
- if (!StorageService.instance.isSetupCompleted())
- handleStartupFSError(e);
-
- JVMStabilityInspector.inspectThrowable(e);
- switch (DatabaseDescriptor.getDiskFailurePolicy())
- {
- case stop_paranoid:
- case stop:
- StorageService.instance.stopTransports();
- break;
- case best_effort:
- // for both read and write errors mark the path as unwritable.
- BlacklistedDirectories.maybeMarkUnwritable(e.path);
- if (e instanceof FSReadError)
- {
- File directory = BlacklistedDirectories.maybeMarkUnreadable(e.path);
- if (directory != null)
- Keyspace.removeUnreadableSSTables(directory);
- }
- break;
- case ignore:
- // already logged, so left nothing to do
- break;
- default:
- throw new IllegalStateException();
- }
- }
-
- private static void handleStartupFSError(Throwable t)
- {
- switch (DatabaseDescriptor.getDiskFailurePolicy())
- {
- case stop_paranoid:
- case stop:
- case die:
- logger.error("Exiting forcefully due to file system exception on startup, disk failure policy \"{}\"",
- DatabaseDescriptor.getDiskFailurePolicy(),
- t);
- JVMStabilityInspector.killCurrentJVM(t, true);
- break;
- default:
- break;
- }
+ FSErrorHandler handler = fsErrorHandler.get();
+ if (handler != null)
+ handler.handleFSError(e);
}
/**
* Get the size of a directory in bytes
@@@ -572,54 -474,8 +522,59 @@@
return false;
}
+ public static void append(File file, String ... lines)
+ {
+ if (file.exists())
+ write(file, Arrays.asList(lines), StandardOpenOption.APPEND);
+ else
+ write(file, Arrays.asList(lines), StandardOpenOption.CREATE);
+ }
+
+ public static void appendAndSync(File file, String ... lines)
+ {
+ if (file.exists())
+ write(file, Arrays.asList(lines), StandardOpenOption.APPEND, StandardOpenOption.SYNC);
+ else
+ write(file, Arrays.asList(lines), StandardOpenOption.CREATE, StandardOpenOption.SYNC);
+ }
+
+ public static void replace(File file, String ... lines)
+ {
+ write(file, Arrays.asList(lines), StandardOpenOption.TRUNCATE_EXISTING);
+ }
+
+ public static void write(File file, List<String> lines, StandardOpenOption ... options)
+ {
+ try
+ {
+ Files.write(file.toPath(),
+ lines,
+ CHARSET,
+ options);
+ }
+ catch (IOException ex)
+ {
+ throw new RuntimeException(ex);
+ }
+ }
+
+ public static List<String> readLines(File file)
+ {
+ try
+ {
+ return Files.readAllLines(file.toPath(), CHARSET);
+ }
+ catch (IOException ex)
+ {
+ if (ex instanceof NoSuchFileException)
+ return Collections.emptyList();
+
+ throw new RuntimeException(ex);
+ }
+ }
++
+ public static void setFSErrorHandler(FSErrorHandler handler)
+ {
+ fsErrorHandler.getAndSet(handler);
+ }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/764f3d3a/src/java/org/apache/cassandra/service/CassandraDaemon.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/764f3d3a/test/unit/org/apache/cassandra/db/DirectoriesTest.java
----------------------------------------------------------------------
diff --cc test/unit/org/apache/cassandra/db/DirectoriesTest.java
index f864bbc,008e343..f8d01a8
--- a/test/unit/org/apache/cassandra/db/DirectoriesTest.java
+++ b/test/unit/org/apache/cassandra/db/DirectoriesTest.java
@@@ -42,8 -36,9 +42,9 @@@ import org.apache.cassandra.io.FSWriteE
import org.apache.cassandra.io.sstable.Component;
import org.apache.cassandra.io.sstable.Descriptor;
import org.apache.cassandra.io.util.FileUtils;
+import org.apache.cassandra.schema.IndexMetadata;
+ import org.apache.cassandra.service.DefaultFSErrorHandler;
import org.apache.cassandra.utils.ByteBufferUtil;
-import org.apache.cassandra.io.FSWriteError;
import org.apache.cassandra.utils.Pair;
import static org.junit.Assert.assertEquals;
@@@ -65,14 -63,10 +66,15 @@@ public class DirectoriesTes
@BeforeClass
public static void beforeClass() throws IOException
{
+ FileUtils.setFSErrorHandler(new DefaultFSErrorHandler());
- for (String cf : CFS)
+ for (String table : TABLES)
{
- CFM.add(new CFMetaData(KS, cf, ColumnFamilyType.Standard, null));
+ UUID tableID = CFMetaData.generateLegacyCfId(KS, table);
+ CFM.add(CFMetaData.Builder.create(KS, table)
+ .withId(tableID)
+ .addPartitionKey("thekey", UTF8Type.instance)
+ .addClusteringColumn("thecolumn", UTF8Type.instance)
+ .build());
}
tempDataDir = File.createTempFile("cassandra", "unittest");