camel-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "liugang (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (CAMEL-7296) camel-hbase component have some bugs on Consumer side
Date Fri, 14 Mar 2014 08:23:42 GMT

     [ https://issues.apache.org/jira/browse/CAMEL-7296?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

liugang updated CAMEL-7296:
---------------------------

    Description: 
After I tried a little bit, I think there are 2 problems on Consumer side:
# Returned value is null
if we specified family and qualifier options in URI, then all returned values will be null.
 I did some investigation, and I found the problem is caused by the equals method of HBaseCell
class. In poll() method of HBaseConsumer, the resultRow will apply rowModel first before insert
the resultCell, see below code:
{code}
             ....
              HBaseData data = new HBaseData();
                HBaseRow resultRow = new HBaseRow();
                resultRow.apply(rowModel);       //the existing HBaseCell in rowModel will
be insert into resultRow
                byte[] row = result.getRow();
                resultRow.setId(endpoint.getCamelContext().getTypeConverter().convertTo(rowModel.getRowType(),
row));

                List<KeyValue> keyValues = result.list();
                if (keyValues != null) {
                    for (KeyValue keyValue : keyValues) {
                        String qualifier = new String(keyValue.getQualifier());
                        String family = new String(keyValue.getFamily());
                        HBaseCell resultCell = new HBaseCell();
                        resultCell.setFamily(family);
                        resultCell.setQualifier(qualifier);
                        resultCell.setValue(endpoint.getCamelContext().getTypeConverter().convertTo(String.class,
keyValue.getValue()));
                        resultRow.getCells().add(resultCell); //will fail to insert if some
cell with same Family and Qualifier exists
                    }
                    ...
              }
{code} 
that means we can't specify family and qualifier option when consuming.
# remove option
the default value of remove option is true, that mean, after scan the table, all scanned row
will be removed. I think it's not we expect, so user may have to add option remove=false to
stop that. however this option doesn't describe on website http://camel.apache.org/hbase.html
.

Besides these problem, I think some descriptions on http://camel.apache.org/hbase.html are
not correct, for example the demos and Header Options. please have a check.

  was:
After I tried a little bit, I think there are 2 problems on Consumer side:
# Returned value is null
if we specified family and qualifier options in URI, then all returned values will be null.
 I did some investigation, and I found the problem is caused by the equals method of HBaseCell
class. In poll() method of HBaseConsumer, the resultRow will apply rowModel first before insert
the resultCell, see below code:
{code}
             ....
              HBaseData data = new HBaseData();
                HBaseRow resultRow = new HBaseRow();
                resultRow.apply(rowModel);       //the existing HBaseCell in rowModel will
be insert into resultRow
                byte[] row = result.getRow();
                resultRow.setId(endpoint.getCamelContext().getTypeConverter().convertTo(rowModel.getRowType(),
row));

                List<KeyValue> keyValues = result.list();
                if (keyValues != null) {
                    for (KeyValue keyValue : keyValues) {
                        String qualifier = new String(keyValue.getQualifier());
                        String family = new String(keyValue.getFamily());
                        HBaseCell resultCell = new HBaseCell();
                        resultCell.setFamily(family);
                        resultCell.setQualifier(qualifier);
                        resultCell.setValue(endpoint.getCamelContext().getTypeConverter().convertTo(String.class,
keyValue.getValue()));
                        resultRow.getCells().add(resultCell); //will fail to insert if some
cell with same Family and Qualifier exists
                    }
                    ...
              }
{code} 
that means we can't specify family and qualifier option when consuming.
# remove option
the default value of remove option is true, that mean, after scan the table, all scanned row
will be removed. I think it's not we expect, so user may have to add option remove=false to
stop that. however this option doesn't describe on website http://camel.apache.org/hbase.html
.

Besides these problem, I think some descriptions on http://camel.apache.org/hbase.html are
not correct. please have a check.


> camel-hbase component have some bugs on Consumer side
> -----------------------------------------------------
>
>                 Key: CAMEL-7296
>                 URL: https://issues.apache.org/jira/browse/CAMEL-7296
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-hbase
>    Affects Versions: 2.12.3
>            Reporter: liugang
>
> After I tried a little bit, I think there are 2 problems on Consumer side:
> # Returned value is null
> if we specified family and qualifier options in URI, then all returned values will be
null.  I did some investigation, and I found the problem is caused by the equals method of
HBaseCell class. In poll() method of HBaseConsumer, the resultRow will apply rowModel first
before insert the resultCell, see below code:
> {code}
>              ....
>               HBaseData data = new HBaseData();
>                 HBaseRow resultRow = new HBaseRow();
>                 resultRow.apply(rowModel);       //the existing HBaseCell in rowModel
will be insert into resultRow
>                 byte[] row = result.getRow();
>                 resultRow.setId(endpoint.getCamelContext().getTypeConverter().convertTo(rowModel.getRowType(),
row));
>                 List<KeyValue> keyValues = result.list();
>                 if (keyValues != null) {
>                     for (KeyValue keyValue : keyValues) {
>                         String qualifier = new String(keyValue.getQualifier());
>                         String family = new String(keyValue.getFamily());
>                         HBaseCell resultCell = new HBaseCell();
>                         resultCell.setFamily(family);
>                         resultCell.setQualifier(qualifier);
>                         resultCell.setValue(endpoint.getCamelContext().getTypeConverter().convertTo(String.class,
keyValue.getValue()));
>                         resultRow.getCells().add(resultCell); //will fail to insert if
some cell with same Family and Qualifier exists
>                     }
>                     ...
>               }
> {code} 
> that means we can't specify family and qualifier option when consuming.
> # remove option
> the default value of remove option is true, that mean, after scan the table, all scanned
row will be removed. I think it's not we expect, so user may have to add option remove=false
to stop that. however this option doesn't describe on website http://camel.apache.org/hbase.html
.
> Besides these problem, I think some descriptions on http://camel.apache.org/hbase.html
are not correct, for example the demos and Header Options. please have a check.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Mime
View raw message