You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by be...@apache.org on 2015/08/21 11:18:25 UTC
[5/7] cassandra git commit: Merge branch 'cassandra-2.2' into
cassandra-3.0
Merge branch 'cassandra-2.2' into cassandra-3.0
Conflicts:
src/java/org/apache/cassandra/io/util/SequentialWriter.java
src/java/org/apache/cassandra/utils/concurrent/Transactional.java
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/1c27abf6
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/1c27abf6
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/1c27abf6
Branch: refs/heads/trunk
Commit: 1c27abf6c3f8199cd75b8b1930ce3a8285e627bb
Parents: be45eb6 a3fc425
Author: Benedict Elliott Smith <be...@apache.org>
Authored: Fri Aug 21 09:58:27 2015 +0100
Committer: Benedict Elliott Smith <be...@apache.org>
Committed: Fri Aug 21 09:58:27 2015 +0100
----------------------------------------------------------------------
.../apache/cassandra/cache/AutoSavingCache.java | 29 ++++++++++----------
.../cassandra/io/util/SequentialWriter.java | 12 +++++++-
.../utils/concurrent/Transactional.java | 7 ++++-
.../cassandra/io/util/DataOutputTest.java | 3 +-
.../cassandra/io/util/SequentialWriterTest.java | 24 ++++++++++++++++
5 files changed, 56 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1c27abf6/src/java/org/apache/cassandra/cache/AutoSavingCache.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1c27abf6/src/java/org/apache/cassandra/io/util/SequentialWriter.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/io/util/SequentialWriter.java
index 905a5c6,0c39469..0375e23
--- a/src/java/org/apache/cassandra/io/util/SequentialWriter.java
+++ b/src/java/org/apache/cassandra/io/util/SequentialWriter.java
@@@ -170,6 -168,79 +171,12 @@@ public class SequentialWriter extends B
return new CompressedSequentialWriter(new File(dataFilePath), offsetsPath, parameters, sstableMetadataCollector);
}
+ public SequentialWriter finishOnClose()
+ {
+ finishOnClose = true;
+ return this;
+ }
+
- public void write(int value) throws ClosedChannelException
- {
- if (buffer == null)
- throw new ClosedChannelException();
-
- if (!buffer.hasRemaining())
- {
- reBuffer();
- }
-
- buffer.put((byte) value);
-
- isDirty = true;
- syncNeeded = true;
- }
-
- public void write(byte[] buffer) throws IOException
- {
- write(buffer, 0, buffer.length);
- }
-
- public void write(byte[] data, int offset, int length) throws IOException
- {
- if (buffer == null)
- throw new ClosedChannelException();
-
- int position = offset;
- int remaining = length;
- while (remaining > 0)
- {
- if (!buffer.hasRemaining())
- reBuffer();
-
- int toCopy = Math.min(remaining, buffer.remaining());
- buffer.put(data, position, toCopy);
-
- remaining -= toCopy;
- position += toCopy;
-
- isDirty = true;
- syncNeeded = true;
- }
- }
-
- public int write(ByteBuffer src) throws IOException
- {
- if (buffer == null)
- throw new ClosedChannelException();
-
- int length = src.remaining();
- int finalLimit = src.limit();
- while (src.hasRemaining())
- {
- if (!buffer.hasRemaining())
- reBuffer();
-
- if (buffer.remaining() < src.remaining())
- src.limit(src.position() + buffer.remaining());
- buffer.put(src);
- src.limit(finalLimit);
-
- isDirty = true;
- syncNeeded = true;
- }
- return length;
- }
-
/**
* Synchronize file contents with disk.
*/
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1c27abf6/src/java/org/apache/cassandra/utils/concurrent/Transactional.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/utils/concurrent/Transactional.java
index f79a795,85c3de5..02562ce
--- a/src/java/org/apache/cassandra/utils/concurrent/Transactional.java
+++ b/src/java/org/apache/cassandra/utils/concurrent/Transactional.java
@@@ -41,14 -41,14 +41,19 @@@ import static org.apache.cassandra.util
* If everything completes normally, then on exiting the try block the auto close method will invoke cleanup
* to release any temporary state/resources
*
- * No exceptions should be thrown during commit; if they are, it is not at all clear what the correct behaviour
+ * All exceptions and assertions that may be thrown should be checked and ruled out during commit preparation.
+ * Commit should generally never throw an exception unless there is a real correctness-affecting exception that
+ * cannot be moved to prepareToCommit, in which case this operation MUST be executed before any other commit
+ * methods in the object graph.
+ *
+ * If exceptions are generated by commit after this initial moment, it is not at all clear what the correct behaviour
* of the system should be, and so simply logging the exception is likely best (since it may have been an issue
- * during cleanup, say), and rollback cannot now occur.
+ * during cleanup, say), and rollback cannot now occur. As such all exceptions and assertions that may be thrown
+ * should be checked and ruled out during commit preparation.
+ *
+ * Since Transactional implementations will abort any changes they've made if calls to prepareToCommit() and commit()
+ * aren't made prior to calling close(), the semantics of its close() method differ significantly from
+ * most AutoCloseable implementations.
*/
public interface Transactional extends AutoCloseable
{