This is an automated email from the ASF dual-hosted git repository. brandonwilliams pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit 9660499acc4ceceb748715ddbd8b81e02916fb53 Merge: 63e8e7d ffd3d41 Author: Brandon Williams <brandonwilli...@apache.org> AuthorDate: Tue Nov 10 11:28:20 2020 -0600 Merge branch 'cassandra-3.11' into trunk .../cassandra/db/lifecycle/LogTransaction.java | 174 +++++++++++++-------- 1 file changed, 111 insertions(+), 63 deletions(-) diff --cc src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java index 4039322,a28384f..ae12142 --- a/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java +++ b/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java @@@ -47,7 -48,7 +47,7 @@@ import org.apache.cassandra.io.sstable. import org.apache.cassandra.io.sstable.SnapshotDeletingTask; import org.apache.cassandra.io.sstable.format.SSTableReader; import org.apache.cassandra.io.util.FileUtils; --import org.apache.cassandra.tools.StandaloneSSTableUtil; ++import org.apache.cassandra.service.StorageService; import org.apache.cassandra.utils.*; import org.apache.cassandra.utils.concurrent.Ref; import org.apache.cassandra.utils.concurrent.RefCounted; @@@ -269,34 -288,35 +289,36 @@@ class LogTransaction extends Transactio public void run() { - if (logger.isTraceEnabled()) - logger.trace("Removing files for transaction log {}", data); - - // this happens if we forget to close a txn and the garbage collector closes it for us - // or if the transaction journal was never properly created in the first place - if (!data.completed()) + synchronized (lock) { - logger.error("Transaction log {} indicates txn was not completed, trying to abort it now", data); - Throwable err = Throwables.perform((Throwable)null, data::abort); - if (err != null) - logger.error("Failed to abort transaction log {}", data, err); - } + if (logger.isTraceEnabled()) + logger.trace("Removing files for transaction {}", name()); - Throwable err = data.removeUnfinishedLeftovers(null); + // this happens if we forget to close a txn and the garbage collector closes it for us + // or if the transaction journal was never properly created in the first place + if (!data.completed()) + { + logger.error("{} was not completed, trying to abort it now", data); + - if (err != null) - { - logger.info("Failed deleting files for transaction log {}, we'll retry after GC and on on server restart", - data, - err); - failedDeletions.add(this); - } - else - { - if (logger.isTraceEnabled()) - logger.trace("Closing transaction log {}", data); + Throwable err = Throwables.perform((Throwable) null, data::abort); + if (err != null) + logger.error("Failed to abort {}", data, err); + } - data.close(); + Throwable err = data.removeUnfinishedLeftovers(null); + + if (err != null) + { + logger.info("Failed deleting files for transaction {}, we'll retry after GC and on on server restart", name(), err); + failedDeletions.add(this); + } + else + { + if (logger.isTraceEnabled()) + logger.trace("Closing file transaction {}", name()); + + data.close(); + } } } } @@@ -342,31 -369,37 +371,37 @@@ if (tracker != null && !tracker.isDummy()) SystemKeyspace.clearSSTableReadMeter(desc.ksname, desc.cfname, desc.generation); - try + synchronized (lock) { - // If we can't successfully delete the DATA component, set the task to be retried later: see TransactionTidier - File datafile = new File(desc.filenameFor(Component.DATA)); - if (logger.isTraceEnabled()) - logger.trace("Tidier running for old sstable {}", desc.baseFilename()); - + try + { + // If we can't successfully delete the DATA component, set the task to be retried later: see TransactionTidier + File datafile = new File(desc.filenameFor(Component.DATA)); - if (datafile.exists()) - delete(datafile); - else if (!wasNew) - logger.error("SSTableTidier ran with no existing data file for an sstable that was not new"); ++ if (logger.isTraceEnabled()) ++ logger.trace("Tidier running for old sstable {}", desc.baseFilename()); + - // let the remainder be cleaned up by delete - SSTable.delete(desc, SSTable.discoverComponentsFor(desc)); - } - catch (Throwable t) - { - logger.error("Failed deletion for {}, we'll retry after GC and on server restart", desc); - failedDeletions.add(this); - return; - } + if (datafile.exists()) + delete(datafile); + else if (!wasNew) + logger.error("SSTableTidier ran with no existing data file for an sstable that was not new"); - if (tracker != null && tracker.cfstore != null && !wasNew) - tracker.cfstore.metric.totalDiskSpaceUsed.dec(sizeOnDisk); + // let the remainder be cleaned up by delete + SSTable.delete(desc, SSTable.discoverComponentsFor(desc)); + } + catch (Throwable t) + { + logger.error("Failed deletion for {}, we'll retry after GC and on server restart", desc); + failedDeletions.add(this); + return; + } + + if (tracker != null && tracker.cfstore != null && !wasNew) + tracker.cfstore.metric.totalDiskSpaceUsed.dec(sizeOnDisk); - // release the referent to the parent so that the all transaction files can be released - parentRef.release(); + // release the referent to the parent so that the all transaction files can be released + parentRef.release(); + } } public void abort() --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org