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 2016/08/26 17:07:04 UTC
[1/3] cassandra git commit: Fix file handle leak due to transaction
logs
Repository: cassandra
Updated Branches:
refs/heads/cassandra-3.0 f092f7be2 -> da07130e4
refs/heads/trunk 708b0534f -> dc1712a81
Fix file handle leak due to transaction logs
Patch by Stefania Alborghetti; reviewed by Tyler Hobbs for
CASSANDRA-11594
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/da07130e
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/da07130e
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/da07130e
Branch: refs/heads/cassandra-3.0
Commit: da07130e4e08cd8645001c6f7fa9ea2acb2072ca
Parents: f092f7b
Author: Stefania Alborghetti <st...@datastax.com>
Authored: Fri Aug 26 11:58:23 2016 -0500
Committer: Tyler Hobbs <ty...@gmail.com>
Committed: Fri Aug 26 11:58:23 2016 -0500
----------------------------------------------------------------------
CHANGES.txt | 3 +++
.../apache/cassandra/db/lifecycle/LogAwareFileLister.java | 10 ++++++----
src/java/org/apache/cassandra/db/lifecycle/LogFile.java | 4 ++--
.../org/apache/cassandra/db/lifecycle/LogReplica.java | 4 ++--
.../org/apache/cassandra/db/lifecycle/LogReplicaSet.java | 5 +++--
.../org/apache/cassandra/db/lifecycle/LogTransaction.java | 8 ++------
6 files changed, 18 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/da07130e/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 59c8a4b..cf14f67 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,7 @@
3.0.9
+ * Fix file handle leaks due to simultaneous compaction/repair and
+ listing snapshots, calculating snapshot sizes, or making schema
+ changes (CASSANDRA-11594)
* Fix nodetool repair exits with 0 for some errors (CASSANDRA-12508)
* Do not shut down BatchlogManager twice during drain (CASSANDRA-12504)
* Disk failure policy should not be invoked on out of space (CASSANDRA-12385)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/da07130e/src/java/org/apache/cassandra/db/lifecycle/LogAwareFileLister.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/lifecycle/LogAwareFileLister.java b/src/java/org/apache/cassandra/db/lifecycle/LogAwareFileLister.java
index e9072c4..7728f9c 100644
--- a/src/java/org/apache/cassandra/db/lifecycle/LogAwareFileLister.java
+++ b/src/java/org/apache/cassandra/db/lifecycle/LogAwareFileLister.java
@@ -122,10 +122,12 @@ final class LogAwareFileLister
*/
void classifyFiles(File txnFile)
{
- LogFile txn = LogFile.make(txnFile);
- readTxnLog(txn);
- classifyFiles(txn);
- files.put(txnFile, FileType.TXN_LOG);
+ try (LogFile txn = LogFile.make(txnFile))
+ {
+ readTxnLog(txn);
+ classifyFiles(txn);
+ files.put(txnFile, FileType.TXN_LOG);
+ }
}
void readTxnLog(LogFile txn)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/da07130e/src/java/org/apache/cassandra/db/lifecycle/LogFile.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/lifecycle/LogFile.java b/src/java/org/apache/cassandra/db/lifecycle/LogFile.java
index 6d0c835..8560410 100644
--- a/src/java/org/apache/cassandra/db/lifecycle/LogFile.java
+++ b/src/java/org/apache/cassandra/db/lifecycle/LogFile.java
@@ -52,7 +52,7 @@ import static org.apache.cassandra.utils.Throwables.merge;
*
* @see LogTransaction
*/
-final class LogFile
+final class LogFile implements AutoCloseable
{
private static final Logger logger = LoggerFactory.getLogger(LogFile.class);
@@ -374,7 +374,7 @@ final class LogFile
return replicas.exists();
}
- void close()
+ public void close()
{
replicas.close();
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/da07130e/src/java/org/apache/cassandra/db/lifecycle/LogReplica.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/lifecycle/LogReplica.java b/src/java/org/apache/cassandra/db/lifecycle/LogReplica.java
index 79b9749..712a22d 100644
--- a/src/java/org/apache/cassandra/db/lifecycle/LogReplica.java
+++ b/src/java/org/apache/cassandra/db/lifecycle/LogReplica.java
@@ -34,7 +34,7 @@ import org.apache.cassandra.utils.CLibrary;
*
* @see LogFile
*/
-final class LogReplica
+final class LogReplica implements AutoCloseable
{
private final File file;
private int folderDescriptor;
@@ -88,7 +88,7 @@ final class LogReplica
return file.exists();
}
- void close()
+ public void close()
{
if (folderDescriptor >= 0)
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/da07130e/src/java/org/apache/cassandra/db/lifecycle/LogReplicaSet.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/lifecycle/LogReplicaSet.java b/src/java/org/apache/cassandra/db/lifecycle/LogReplicaSet.java
index d9d9213..d8b2141 100644
--- a/src/java/org/apache/cassandra/db/lifecycle/LogReplicaSet.java
+++ b/src/java/org/apache/cassandra/db/lifecycle/LogReplicaSet.java
@@ -41,7 +41,7 @@ import org.apache.cassandra.utils.Throwables;
*
* @see LogReplica, LogFile
*/
-public class LogReplicaSet
+public class LogReplicaSet implements AutoCloseable
{
private static final Logger logger = LoggerFactory.getLogger(LogReplicaSet.class);
@@ -72,6 +72,7 @@ public class LogReplicaSet
if (replicasByFile.containsKey(folder))
return;
+ @SuppressWarnings("resource") // LogReplicas are closed in LogReplicaSet::close
final LogReplica replica = LogReplica.create(folder, fileName);
records.forEach(replica::append);
@@ -201,7 +202,7 @@ public class LogReplicaSet
: false;
}
- void close()
+ public void close()
{
Throwables.maybeFail(Throwables.perform(null, replicas().stream().map(r -> r::close)));
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/da07130e/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java b/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
index b34ca60..ca644eb 100644
--- a/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
+++ b/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
@@ -425,8 +425,8 @@ class LogTransaction extends Transactional.AbstractTransactional implements Tran
static void removeUnfinishedLeftovers(String name, List<File> logFiles)
{
- LogFile txn = LogFile.make(name, logFiles);
- try
+
+ try(LogFile txn = LogFile.make(name, logFiles))
{
if (txn.verify())
{
@@ -439,10 +439,6 @@ class LogTransaction extends Transactional.AbstractTransactional implements Tran
logger.error("Unexpected disk state: failed to read transaction txn {}", txn);
}
}
- finally
- {
- txn.close();
- }
}
}
}
[2/3] cassandra git commit: Fix file handle leak due to transaction
logs
Posted by ty...@apache.org.
Fix file handle leak due to transaction logs
Patch by Stefania Alborghetti; reviewed by Tyler Hobbs for
CASSANDRA-11594
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/da07130e
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/da07130e
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/da07130e
Branch: refs/heads/trunk
Commit: da07130e4e08cd8645001c6f7fa9ea2acb2072ca
Parents: f092f7b
Author: Stefania Alborghetti <st...@datastax.com>
Authored: Fri Aug 26 11:58:23 2016 -0500
Committer: Tyler Hobbs <ty...@gmail.com>
Committed: Fri Aug 26 11:58:23 2016 -0500
----------------------------------------------------------------------
CHANGES.txt | 3 +++
.../apache/cassandra/db/lifecycle/LogAwareFileLister.java | 10 ++++++----
src/java/org/apache/cassandra/db/lifecycle/LogFile.java | 4 ++--
.../org/apache/cassandra/db/lifecycle/LogReplica.java | 4 ++--
.../org/apache/cassandra/db/lifecycle/LogReplicaSet.java | 5 +++--
.../org/apache/cassandra/db/lifecycle/LogTransaction.java | 8 ++------
6 files changed, 18 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/da07130e/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 59c8a4b..cf14f67 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,7 @@
3.0.9
+ * Fix file handle leaks due to simultaneous compaction/repair and
+ listing snapshots, calculating snapshot sizes, or making schema
+ changes (CASSANDRA-11594)
* Fix nodetool repair exits with 0 for some errors (CASSANDRA-12508)
* Do not shut down BatchlogManager twice during drain (CASSANDRA-12504)
* Disk failure policy should not be invoked on out of space (CASSANDRA-12385)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/da07130e/src/java/org/apache/cassandra/db/lifecycle/LogAwareFileLister.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/lifecycle/LogAwareFileLister.java b/src/java/org/apache/cassandra/db/lifecycle/LogAwareFileLister.java
index e9072c4..7728f9c 100644
--- a/src/java/org/apache/cassandra/db/lifecycle/LogAwareFileLister.java
+++ b/src/java/org/apache/cassandra/db/lifecycle/LogAwareFileLister.java
@@ -122,10 +122,12 @@ final class LogAwareFileLister
*/
void classifyFiles(File txnFile)
{
- LogFile txn = LogFile.make(txnFile);
- readTxnLog(txn);
- classifyFiles(txn);
- files.put(txnFile, FileType.TXN_LOG);
+ try (LogFile txn = LogFile.make(txnFile))
+ {
+ readTxnLog(txn);
+ classifyFiles(txn);
+ files.put(txnFile, FileType.TXN_LOG);
+ }
}
void readTxnLog(LogFile txn)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/da07130e/src/java/org/apache/cassandra/db/lifecycle/LogFile.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/lifecycle/LogFile.java b/src/java/org/apache/cassandra/db/lifecycle/LogFile.java
index 6d0c835..8560410 100644
--- a/src/java/org/apache/cassandra/db/lifecycle/LogFile.java
+++ b/src/java/org/apache/cassandra/db/lifecycle/LogFile.java
@@ -52,7 +52,7 @@ import static org.apache.cassandra.utils.Throwables.merge;
*
* @see LogTransaction
*/
-final class LogFile
+final class LogFile implements AutoCloseable
{
private static final Logger logger = LoggerFactory.getLogger(LogFile.class);
@@ -374,7 +374,7 @@ final class LogFile
return replicas.exists();
}
- void close()
+ public void close()
{
replicas.close();
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/da07130e/src/java/org/apache/cassandra/db/lifecycle/LogReplica.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/lifecycle/LogReplica.java b/src/java/org/apache/cassandra/db/lifecycle/LogReplica.java
index 79b9749..712a22d 100644
--- a/src/java/org/apache/cassandra/db/lifecycle/LogReplica.java
+++ b/src/java/org/apache/cassandra/db/lifecycle/LogReplica.java
@@ -34,7 +34,7 @@ import org.apache.cassandra.utils.CLibrary;
*
* @see LogFile
*/
-final class LogReplica
+final class LogReplica implements AutoCloseable
{
private final File file;
private int folderDescriptor;
@@ -88,7 +88,7 @@ final class LogReplica
return file.exists();
}
- void close()
+ public void close()
{
if (folderDescriptor >= 0)
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/da07130e/src/java/org/apache/cassandra/db/lifecycle/LogReplicaSet.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/lifecycle/LogReplicaSet.java b/src/java/org/apache/cassandra/db/lifecycle/LogReplicaSet.java
index d9d9213..d8b2141 100644
--- a/src/java/org/apache/cassandra/db/lifecycle/LogReplicaSet.java
+++ b/src/java/org/apache/cassandra/db/lifecycle/LogReplicaSet.java
@@ -41,7 +41,7 @@ import org.apache.cassandra.utils.Throwables;
*
* @see LogReplica, LogFile
*/
-public class LogReplicaSet
+public class LogReplicaSet implements AutoCloseable
{
private static final Logger logger = LoggerFactory.getLogger(LogReplicaSet.class);
@@ -72,6 +72,7 @@ public class LogReplicaSet
if (replicasByFile.containsKey(folder))
return;
+ @SuppressWarnings("resource") // LogReplicas are closed in LogReplicaSet::close
final LogReplica replica = LogReplica.create(folder, fileName);
records.forEach(replica::append);
@@ -201,7 +202,7 @@ public class LogReplicaSet
: false;
}
- void close()
+ public void close()
{
Throwables.maybeFail(Throwables.perform(null, replicas().stream().map(r -> r::close)));
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/da07130e/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java b/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
index b34ca60..ca644eb 100644
--- a/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
+++ b/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
@@ -425,8 +425,8 @@ class LogTransaction extends Transactional.AbstractTransactional implements Tran
static void removeUnfinishedLeftovers(String name, List<File> logFiles)
{
- LogFile txn = LogFile.make(name, logFiles);
- try
+
+ try(LogFile txn = LogFile.make(name, logFiles))
{
if (txn.verify())
{
@@ -439,10 +439,6 @@ class LogTransaction extends Transactional.AbstractTransactional implements Tran
logger.error("Unexpected disk state: failed to read transaction txn {}", txn);
}
}
- finally
- {
- txn.close();
- }
}
}
}
[3/3] cassandra git commit: Merge branch 'cassandra-3.0' into trunk
Posted by ty...@apache.org.
Merge branch 'cassandra-3.0' into trunk
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/dc1712a8
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/dc1712a8
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/dc1712a8
Branch: refs/heads/trunk
Commit: dc1712a81b3ec03a674d8ba5df8ca7f2fade5cdd
Parents: 708b053 da07130
Author: Tyler Hobbs <ty...@gmail.com>
Authored: Fri Aug 26 12:06:46 2016 -0500
Committer: Tyler Hobbs <ty...@gmail.com>
Committed: Fri Aug 26 12:06:46 2016 -0500
----------------------------------------------------------------------
CHANGES.txt | 3 +++
.../apache/cassandra/db/lifecycle/LogAwareFileLister.java | 10 ++++++----
src/java/org/apache/cassandra/db/lifecycle/LogFile.java | 4 ++--
.../org/apache/cassandra/db/lifecycle/LogReplica.java | 4 ++--
.../org/apache/cassandra/db/lifecycle/LogReplicaSet.java | 5 +++--
.../org/apache/cassandra/db/lifecycle/LogTransaction.java | 7 +------
6 files changed, 17 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/dc1712a8/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 0635398,cf14f67..b3975da
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,57 -1,7 +1,60 @@@
-3.0.9
+3.10
+ * json/yaml output format for nodetool compactionhistory (CASSANDRA-12486)
+ * Retry all internode messages once after a connection is
+ closed and reopened (CASSANDRA-12192)
+ * Add support to rebuild from targeted replica (CASSANDRA-9875)
+ * Add sequence distribution type to cassandra stress (CASSANDRA-12490)
+ * "SELECT * FROM foo LIMIT ;" does not error out (CASSANDRA-12154)
+ * Define executeLocally() at the ReadQuery Level (CASSANDRA-12474)
+ * Extend read/write failure messages with a map of replica addresses
+ to error codes in the v5 native protocol (CASSANDRA-12311)
+ * Fix rebuild of SASI indexes with existing index files (CASSANDRA-12374)
+ * Let DatabaseDescriptor not implicitly startup services (CASSANDRA-9054)
+ * Fix clustering indexes in presence of static columns in SASI (CASSANDRA-12378)
+ * Fix queries on columns with reversed type on SASI indexes (CASSANDRA-12223)
+ * Added slow query log (CASSANDRA-12403)
+ * Count full coordinated request against timeout (CASSANDRA-12256)
+ * Allow TTL with null value on insert and update (CASSANDRA-12216)
+ * Make decommission operation resumable (CASSANDRA-12008)
+ * Add support to one-way targeted repair (CASSANDRA-9876)
+ * Remove clientutil jar (CASSANDRA-11635)
+ * Fix compaction throughput throttle (CASSANDRA-12366)
+ * Delay releasing Memtable memory on flush until PostFlush has finished running (CASSANDRA-12358)
+ * Cassandra stress should dump all setting on startup (CASSANDRA-11914)
+ * Make it possible to compact a given token range (CASSANDRA-10643)
+ * Allow updating DynamicEndpointSnitch properties via JMX (CASSANDRA-12179)
+ * Collect metrics on queries by consistency level (CASSANDRA-7384)
+ * Add support for GROUP BY to SELECT statement (CASSANDRA-10707)
+ * Deprecate memtable_cleanup_threshold and update default for memtable_flush_writers (CASSANDRA-12228)
+ * Upgrade to OHC 0.4.4 (CASSANDRA-12133)
+ * Add version command to cassandra-stress (CASSANDRA-12258)
+ * Create compaction-stress tool (CASSANDRA-11844)
+ * Garbage-collecting compaction operation and schema option (CASSANDRA-7019)
+ * Add beta protocol flag for v5 native protocol (CASSANDRA-12142)
+ * Support filtering on non-PRIMARY KEY columns in the CREATE
+ MATERIALIZED VIEW statement's WHERE clause (CASSANDRA-10368)
+ * Unify STDOUT and SYSTEMLOG logback format (CASSANDRA-12004)
+ * COPY FROM should raise error for non-existing input files (CASSANDRA-12174)
+ * Faster write path (CASSANDRA-12269)
+ * Option to leave omitted columns in INSERT JSON unset (CASSANDRA-11424)
+ * Support json/yaml output in nodetool tpstats (CASSANDRA-12035)
+ * Expose metrics for successful/failed authentication attempts (CASSANDRA-10635)
+ * Prepend snapshot name with "truncated" or "dropped" when a snapshot
+ is taken before truncating or dropping a table (CASSANDRA-12178)
+ * Optimize RestrictionSet (CASSANDRA-12153)
+ * cqlsh does not automatically downgrade CQL version (CASSANDRA-12150)
+ * Omit (de)serialization of state variable in UDAs (CASSANDRA-9613)
+ * Create a system table to expose prepared statements (CASSANDRA-8831)
+ * Reuse DataOutputBuffer from ColumnIndex (CASSANDRA-11970)
+ * Remove DatabaseDescriptor dependency from SegmentedFile (CASSANDRA-11580)
+ * Add supplied username to authentication error messages (CASSANDRA-12076)
+ * Remove pre-startup check for open JMX port (CASSANDRA-12074)
+ * Remove compaction Severity from DynamicEndpointSnitch (CASSANDRA-11738)
+ * Restore resumable hints delivery (CASSANDRA-11960)
+Merged from 3.0:
+ * Fix file handle leaks due to simultaneous compaction/repair and
+ listing snapshots, calculating snapshot sizes, or making schema
+ changes (CASSANDRA-11594)
* Fix nodetool repair exits with 0 for some errors (CASSANDRA-12508)
* Do not shut down BatchlogManager twice during drain (CASSANDRA-12504)
* Disk failure policy should not be invoked on out of space (CASSANDRA-12385)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/dc1712a8/src/java/org/apache/cassandra/db/lifecycle/LogAwareFileLister.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/dc1712a8/src/java/org/apache/cassandra/db/lifecycle/LogFile.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/dc1712a8/src/java/org/apache/cassandra/db/lifecycle/LogReplica.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/lifecycle/LogReplica.java
index da90f88,712a22d..fd65f5b
--- a/src/java/org/apache/cassandra/db/lifecycle/LogReplica.java
+++ b/src/java/org/apache/cassandra/db/lifecycle/LogReplica.java
@@@ -37,15 -34,14 +37,15 @@@ import org.apache.cassandra.utils.CLibr
*
* @see LogFile
*/
- final class LogReplica
+ final class LogReplica implements AutoCloseable
{
private final File file;
- private int folderDescriptor;
+ private int directoryDescriptor;
+ private final Map<String, String> errors = new HashMap<>();
- static LogReplica create(File folder, String fileName)
+ static LogReplica create(File directory, String fileName)
{
- return new LogReplica(new File(fileName), CLibrary.tryOpenDirectory(folder.getPath()));
+ return new LogReplica(new File(fileName), CLibrary.tryOpenDirectory(directory.getPath()));
}
static LogReplica open(File file)
@@@ -107,12 -88,12 +107,12 @@@
return file.exists();
}
- void close()
+ public void close()
{
- if (folderDescriptor >= 0)
+ if (directoryDescriptor >= 0)
{
- CLibrary.tryCloseFD(folderDescriptor);
- folderDescriptor = -1;
+ CLibrary.tryCloseFD(directoryDescriptor);
+ directoryDescriptor = -1;
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/dc1712a8/src/java/org/apache/cassandra/db/lifecycle/LogReplicaSet.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/lifecycle/LogReplicaSet.java
index 47a9901,d8b2141..65be285
--- a/src/java/org/apache/cassandra/db/lifecycle/LogReplicaSet.java
+++ b/src/java/org/apache/cassandra/db/lifecycle/LogReplicaSet.java
@@@ -38,10 -39,9 +38,10 @@@ import org.apache.cassandra.utils.Throw
* A set of log replicas. This class mostly iterates over replicas when writing or reading,
* ensuring consistency among them and hiding replication details from LogFile.
*
- * @see LogReplica, LogFile
+ * @see LogReplica
+ * @see LogFile
*/
- public class LogReplicaSet
+ public class LogReplicaSet implements AutoCloseable
{
private static final Logger logger = LoggerFactory.getLogger(LogReplicaSet.class);
@@@ -67,15 -67,16 +67,16 @@@
logger.trace("Added log file replica {} ", file);
}
- void maybeCreateReplica(File folder, String fileName, Set<LogRecord> records)
+ void maybeCreateReplica(File directory, String fileName, Set<LogRecord> records)
{
- if (replicasByFile.containsKey(folder))
+ if (replicasByFile.containsKey(directory))
return;
+ @SuppressWarnings("resource") // LogReplicas are closed in LogReplicaSet::close
- final LogReplica replica = LogReplica.create(folder, fileName);
+ final LogReplica replica = LogReplica.create(directory, fileName);
records.forEach(replica::append);
- replicasByFile.put(folder, replica);
+ replicasByFile.put(directory, replica);
if (logger.isTraceEnabled())
logger.trace("Created new file replica {}", replica);
http://git-wip-us.apache.org/repos/asf/cassandra/blob/dc1712a8/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
index bfd9739,ca644eb..f99f432
--- a/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
+++ b/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
@@@ -432,18 -418,15 +432,17 @@@ class LogTransaction extends Transactio
filesByName.add(file);
}
- void removeUnfinishedLeftovers()
+ boolean removeUnfinishedLeftovers()
{
- files.forEach(LogFilesByName::removeUnfinishedLeftovers);
+ return files.entrySet()
+ .stream()
+ .map(LogFilesByName::removeUnfinishedLeftovers)
+ .allMatch(Predicate.isEqual(true));
}
- static void removeUnfinishedLeftovers(String name, List<File> logFiles)
+ static boolean removeUnfinishedLeftovers(Map.Entry<String, List<File>> entry)
{
- LogFile txn = LogFile.make(entry.getKey(), entry.getValue());
- try
-
- try(LogFile txn = LogFile.make(name, logFiles))
++ try(LogFile txn = LogFile.make(entry.getKey(), entry.getValue()))
{
if (txn.verify())
{
@@@ -459,14 -436,9 +458,10 @@@
}
else
{
- logger.error("Unexpected disk state: failed to read transaction txn {}", txn);
+ logger.error("Unexpected disk state: failed to read transaction log {}", txn.toString(true));
+ return false;
}
}
- finally
- {
- txn.close();
- }
}
}
}