diff --git hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java index fde258f..b45a277 100644 --- hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java +++ hbase-client/src/main/java/org/apache/hadoop/hbase/client/Mutation.java @@ -179,6 +179,34 @@ public abstract class Mutation extends OperationWithAttributes implements Row, C } /** + * Set the durability for this mutation. If this is set to true, + * the default durability of the table is set. + * @param writeToWal + */ + @Deprecated + public void setWriteToWal(boolean writeToWal) { + if(!writeToWal) { + setDurability(Durability.SKIP_WAL); + } else { + // This is required to handle the case where this method is + // called twice, first with writeToWal = false, + // and then with writeToWal = true + setDurability(Durability.USE_DEFAULT); + } + } + + /** + * Get the durability for this mutation. + * @return - true if this mutation is set to write to the WAL either + * synchronously, asynchronously or fsync to disk on the file system. + * - to get the exact durability, use the {#getDurability} method. + */ + @Deprecated + public boolean getWriteToWal() { + return Durability.SKIP_WAL != getDurability(); + } + + /** * Method for retrieving the put's familyMap * @return familyMap */ diff --git hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestPutWriteToWal.java hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestPutWriteToWal.java index 8572c0b..1b259bb 100644 --- hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestPutWriteToWal.java +++ hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestPutWriteToWal.java @@ -18,11 +18,55 @@ */ package org.apache.hadoop.hbase.client; +import org.apache.hadoop.hbase.SmallTests; +import org.junit.Assert; import org.junit.Before; +import org.junit.Test; +import org.junit.experimental.categories.Category; +/** + * Tests for testing methods added in HBASE-9093. This set of tests is meant + * to test the {@linkplain Mutation#setWriteToWal(boolean)} + * and {@linkplain Mutation#getWriteToWal()} methods which provide + * a compatibility layer with HBase versions < 95's client side WAL semantics. + */ +@Category(SmallTests.class) public class TestPutWriteToWal { + + private Put put; @Before public void setUp() throws Exception { + put = new Put("test".getBytes()); + } + + @Test + public void testWriteToWal(){ + put.setWriteToWal(true); + Assert.assertEquals(Durability.USE_DEFAULT, put.getDurability()); + } + + @Test + public void testNoWriteToWal() { + put.setWriteToWal(false); + Assert.assertEquals(Durability.SKIP_WAL, put.getDurability()); + } + + @Test + public void testWriteToWalSwitch() { + put.setWriteToWal(false); + Assert.assertEquals(Durability.SKIP_WAL, put.getDurability()); + put.setWriteToWal(true); + Assert.assertEquals(Durability.USE_DEFAULT, put.getDurability()); + } + + @Test + public void testPutCopy() { + put.setWriteToWal(false); + Put putCopy1 = new Put(put); + Assert.assertEquals(Durability.SKIP_WAL, putCopy1.getDurability()); + put.setWriteToWal(true); + Put putCopy2 = new Put(put); + Assert.assertEquals(Durability.USE_DEFAULT, putCopy2.getDurability()); } }