You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Aleksandr B (JIRA)" <ji...@apache.org> on 2013/08/02 13:17:48 UTC
[jira] [Created] (HBASE-9115) HTableInterface.append operation
fails (overwrites) the value added to the 1st colum out of several
Aleksandr B created HBASE-9115:
----------------------------------
Summary: HTableInterface.append operation fails (overwrites) the value added to the 1st colum out of several
Key: HBASE-9115
URL: https://issues.apache.org/jira/browse/HBASE-9115
Project: HBase
Issue Type: Bug
Affects Versions: 0.94.10
Environment: MAC OS X 10.8.4, Hbase in the pseudo-distributed mode, hadoop v1.2.0, Hbase Java API based client.
*hdfs-site.xml*:
{code:xml}
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
</configuration>
{code}
*hbase-site.xml*:
{code:xml}
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>localhost</value>
</property>
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
</configuration>
{code}
Reporter: Aleksandr B
Priority: Critical
I use Hbase Java API and I try to append values Bytes.toBytes("one two") and Bytes.toBytes(" three") in 3 columns.
Only for 2 out of these 3 columns the result is "one two three".
*Output from the hbase shell:*
{noformat}
hbase(main):008:0* scan "mytesttable"
ROW COLUMN+CELL
mytestRowKey column=TestA:dlbytes, timestamp=1375436156140, value=one two three
mytestRowKey column=TestA:tbytes, timestamp=1375436156140, value=one two three
mytestRowKey column=TestA:ulbytes, timestamp=1375436156140, value= three
1 row(s) in 0.0280 seconds
{noformat}
*My test code:*
{code:title=Database.java|borderStyle=solid}
import static org.junit.Assert.*;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTableInterface;
import org.apache.hadoop.hbase.client.HTablePool;
import org.apache.hadoop.hbase.client.Append;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.Test;
...
@Test
public void testAppend() throws IOException {
byte [] rowKey = Bytes.toBytes("mytestRowKey");
byte [] column1 = Bytes.toBytes("ulbytes");
byte [] column2 = Bytes.toBytes("dlbytes");
byte [] column3 = Bytes.toBytes("tbytes");
String part11 = "one two";
String part12 = " three";
String cFamily = "TestA";
String TABLE = "mytesttable";
Configuration conf = HBaseConfiguration.create();
HTablePool pool = new HTablePool(conf, 10);
HBaseAdmin admin = new HBaseAdmin(conf);
if(admin.tableExists(TABLE)){
admin.disableTable(TABLE);
admin.deleteTable(TABLE);
}
HTableDescriptor tableDescriptor = new HTableDescriptor(TABLE);
HColumnDescriptor hcd = new HColumnDescriptor(cFamily);
hcd.setMaxVersions(1);
tableDescriptor.addFamily(hcd);
admin.createTable(tableDescriptor);
HTableInterface table = pool.getTable(TABLE);
Append a = new Append(rowKey);
a.setReturnResults(false);
a.add(Bytes.toBytes(cFamily), column1, Bytes.toBytes(part11));
a.add(Bytes.toBytes(cFamily), column2, Bytes.toBytes(part11));
a.add(Bytes.toBytes(cFamily), column3, Bytes.toBytes(part11));
table.append(a);
HTableInterface table2 = pool.getTable(TABLE);
a = new Append(rowKey);
a.add(Bytes.toBytes(cFamily), column1, Bytes.toBytes(part12));
a.add(Bytes.toBytes(cFamily), column2, Bytes.toBytes(part12));
a.add(Bytes.toBytes(cFamily), column3, Bytes.toBytes(part12));
Result result = table2.append(a);
byte [] resultForColumn1 = result.getValue(Bytes.toBytes(cFamily), column1);
byte [] resultForColumn2 = result.getValue(Bytes.toBytes(cFamily), column2);
byte [] resultForColumn3 = result.getValue(Bytes.toBytes(cFamily), column3);
if (resultForColumn1 == null || resultForColumn2 == null || resultForColumn3 == null)
System.out.println("The DB table contains these values but they are never given back, strange...");
else {
assertEquals(0, Bytes.compareTo(Bytes.toBytes(part11 + part12),
resultForColumn1));
assertEquals(0, Bytes.compareTo(Bytes.toBytes(part11 + part12),
resultForColumn2));
assertEquals(0, Bytes.compareTo(Bytes.toBytes(part11 + part12),
resultForColumn3));
}
}
{code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira