[
https://issues.apache.org/jira/browse/HBASE-9115?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Aleksandr B updated HBASE-9115:
-------------------------------
Description:
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);
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 = table.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}
was:
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}
> HTableInterface.append operation fails (overwrites) the value added to the
> 1st column 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);
> 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 = table.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