This is good point... IIRC, we haven't considered the scenario where we bundle several updates for the same column in a multi...
Kevin Ratnasekera <djkevincr1...@gmail.com> 于2019年4月16日周二 下午5:03写道: > Hi Duo, > > Thank you for the response. As per the design, Can I please know, where > this NEW_VERSION_BEHAVIOR is intended to work with Buffered Mutator? For > example DELETE PUT PUT sequence ( in Buffered Mutator ) for same row, > column will it work without any mask issues as previously considered as > limitations HBase? > > Regards > Kevin > > On Tue, Apr 16, 2019 at 2:03 PM 张铎(Duo Zhang) <palomino...@gmail.com> > wrote: > >> Sorry, this behavior has not been tested critically yet... >> >> The guy who developed this feature has left and we haven't enabled this >> feature in our cluster yet. >> >> So feel free to open issues if you find some bugs of it. We will try to >> fix >> it if possible. >> >> Thanks. >> >> Kevin Ratnasekera <djkevincr1...@gmail.com> 于2019年4月16日周二 上午3:09写道: >> >> > Code for delete row issue in cases of qualifier = null, even after row >> is >> > deleted it will return non null value, >> > >> > @Test >> > public void testing() throws IOException { >> > >> > Connection conn = ConnectionFactory.createConnection(conf); >> > >> > TableName test = TableName.valueOf("Test"); >> > TableDescriptorBuilder tableDescBuilder = >> > TableDescriptorBuilder.newBuilder(test); >> > ColumnFamilyDescriptorBuilder columnDescBuilder = >> > ColumnFamilyDescriptorBuilder >> > .newBuilder(Bytes.toBytes("test-family")); >> > columnDescBuilder.setNewVersionBehavior(true); >> > ColumnFamilyDescriptor columnDescriptor = columnDescBuilder.build(); >> > tableDescBuilder.addColumnFamily(columnDescriptor); >> > TableDescriptor tableDescriptor = tableDescBuilder.build(); >> > >> > conn.getAdmin().createTable(tableDescriptor); >> > >> > Table table = conn.getTable(test); >> > >> > Put put = new Put(Bytes.toBytes("com.example/http")); >> > put.addColumn(Bytes.toBytes("test-family"), null, >> > Bytes.toBytes("test-value")); >> > table.put(put); >> > >> > Delete del = new Delete(Bytes.toBytes("com.example/http")); >> > table.delete(del); >> > >> > Get get = new Get(Bytes.toBytes("com.example/http")); >> > //get.addColumn(Bytes.toBytes("test-family"), null); >> > Result result = table.get(get); >> > byte [] value = result.getValue(Bytes.toBytes("test-family"), null); >> > >> > if(value == null) { >> > // Testing purposes >> > } >> > } >> > >> > >> > On Mon, Apr 15, 2019 at 10:51 PM Kevin Ratnasekera < >> > djkevincr1...@gmail.com> >> > wrote: >> > >> > > Hi all, >> > > >> > > Here's test code I used for testing purposes and I would like to know >> the >> > > behavior, >> > > >> > > >> > > @Test >> > > public void testing() throws IOException { >> > > >> > > Connection conn = ConnectionFactory.createConnection(conf); >> > > >> > > TableName test = TableName.valueOf("Test"); >> > > TableDescriptorBuilder tableDescBuilder = >> > TableDescriptorBuilder.newBuilder(test); >> > > ColumnFamilyDescriptorBuilder columnDescBuilder = >> > ColumnFamilyDescriptorBuilder >> > > .newBuilder(Bytes.toBytes("test-family")); >> > > columnDescBuilder.setNewVersionBehavior(true); >> > > ColumnFamilyDescriptor columnDescriptor = columnDescBuilder.build(); >> > > tableDescBuilder.addColumnFamily(columnDescriptor); >> > > TableDescriptor tableDescriptor = tableDescBuilder.build(); >> > > >> > > conn.getAdmin().createTable(tableDescriptor); >> > > >> > > Table table = conn.getTable(test); >> > > BufferedMutator bm = conn.getBufferedMutator(test); >> > > >> > > Delete del = new Delete(Bytes.toBytes("com.example/http")); >> > > del.addColumn(Bytes.toBytes("test-family"), >> > Bytes.toBytes("test-qualifier")); >> > > bm.mutate(del); >> > > >> > > Put put = new Put(Bytes.toBytes("com.example/http")); >> > > put.addColumn(Bytes.toBytes("test-family"), >> > Bytes.toBytes("test-qualifier"), Bytes.toBytes("test-value")); >> > > bm.mutate(put); >> > > >> > > put = new Put(Bytes.toBytes("com.example/http")); >> > > put.addColumn(Bytes.toBytes("test-family"), >> > Bytes.toBytes("test-qualifier"), Bytes.toBytes("test-value-2")); >> > > bm.mutate(put); >> > > >> > > bm.flush(); >> > > bm.close(); >> > > >> > > Get get = new Get(Bytes.toBytes("com.example/http")); >> > > get.addColumn(Bytes.toBytes("test-family"), >> > Bytes.toBytes("test-qualifier")); >> > > Result result = table.get(get); >> > > byte [] val = result.getValue(Bytes.toBytes("test-family"), >> > Bytes.toBytes("test-qualifier")); >> > > >> > > if(val == null) { >> > > // Testing purposes >> > > } >> > > } >> > > >> > > I would like to know the exact behavior of value val variable here, >> when >> > NEW_VERSION_BEHAVIOR >> > > is true. Above code when it is executed returns null as value for val >> > > variable. As I can see, delete overshadows the subsequent puts. >> > > >> > > Regards >> > > Kevin >> > > >> > > On Mon, Apr 15, 2019 at 2:05 PM Kevin Ratnasekera < >> > djkevincr1...@gmail.com> >> > > wrote: >> > > >> > >> Update: >> > >> Found out that above delete row works all columns which have non null >> > >> qualifier. Delete doesn't work for puts with column qualifier is >> null. >> > >> >> > >> On related note, >> > >> >> > >> Delete delete = new Delete(keyRaw); >> > >> >> > >> delete.addFamily(hcol.getFamily()); >> > >> >> > >> Let's say I need to perform delete on all columns created inside a >> > family >> > >> in a particular row, once I execute above delete operation, I am >> not be >> > >> able to do put operation on the same row same column family. >> > >> >> > >> Is there something I am missing here? >> > >> >> > >> Regards >> > >> >> > >> Kevin >> > >> >> > >> >> > >> On Mon, Apr 15, 2019 at 12:20 AM Kevin Ratnasekera < >> > >> djkevincr1...@gmail.com> wrote: >> > >> >> > >>> Hi all, >> > >>> >> > >>> I am from Apache Gora project. I currently in the process of upgrade >> > our >> > >>> HBase dependencies to 2.0.5. We faced the issue described in [1] and >> > had to >> > >>> put workarounds to get through it some time back. ( By timestamps ) >> > Now I >> > >>> started to test NEW_VERSION_BEHAVIOR and I noticed even trivial row >> > deletes >> > >>> fails when NEW_VERSION_BEHAVIOR is set to true. >> > >>> >> > >>> Delete del = new Delete(toBytes(key)); >> > >>> >> > >>> table = connection.getTable(tableName); >> > >>> >> > >>> table.delete(del); >> > >>> Result result = table.get(new Get(toBytes(key))); >> > >>> >> > >>> Here Get returns some cells which are marked for delete. ( Some >> columns >> > >>> are deleted and some are not ) These deletes works fine when >> > >>> NEW_VERSION_BEHAVIOR is set to false. Please note I do this tests >> > using HBaseTestingUtility >> > >>> minicluster. >> > >>> >> > >>> Are there any known issues with NEW_VERSION_BEHAVIOR with deletes? >> It >> > >>> would be really helpful if someone can give some pointers to debug >> the >> > root >> > >>> cause of this. >> > >>> >> > >>> [1] https://issues.apache.org/jira/browse/HBASE-2256 >> > >>> >> > >>> Regards >> > >>> Kevin >> > >>> >> > >> >> > >> >