Grokbase Groups HBase dev July 2012
FAQ
Hi Devs



Currently the checkAndPut, checkAndDelete these api currently accept the row
that needs to be checked and the Delete/Put also along with it.



Again internally in the code HRegion.checkAndMutate() there is a
verification to find if the row passed and the one inside the
Mutate(Put/Delete) object are same. If not throw an exception.



1) Can we do this check on the client side itself?

2) Can we just use the row that is stuffed inside the Put/Delete?
(Anyway this change will be an api change).



Pls correct me if am missing something here.



Regards

Ram

Search Discussions

  • Michael Stack at Jul 2, 2012 at 9:05 am

    On Mon, Jul 2, 2012 at 10:44 AM, Ramkrishna.S.Vasudevan wrote:
    1)      Can we do this check on the client side itself?
    I'd say this not enough, that we have to have something serverside too.

    2)      Can we just use the row that is stuffed inside the Put/Delete?
    (Anyway this change will be an api change).
    We could do this. Seems redundant passing in row independently.

    St.Ack
  • Dishant A at Jul 2, 2012 at 2:04 pm
    Hi Ram,

    1) Can you do this check on client side?
    You can't, because this operation is supposed to be atomic and if you do a
    get and the value changes on server side in the meantime, you will be doing
    it wrong.


    2) Can we just use the row that is stuffed inside the Put/Delete?
    (Anyway this change will be an api change).

    This lose the case when you want to check the value of column A and based
    on it change the value of column B. So again we can't.

    Hope this helps.

    Thanks,
    Dishant
    On Mon, Jul 2, 2012 at 4:44 AM, Ramkrishna.S.Vasudevan wrote:

    Hi Devs



    Currently the checkAndPut, checkAndDelete these api currently accept the
    row
    that needs to be checked and the Delete/Put also along with it.



    Again internally in the code HRegion.checkAndMutate() there is a
    verification to find if the row passed and the one inside the
    Mutate(Put/Delete) object are same. If not throw an exception.



    1) Can we do this check on the client side itself?

    2) Can we just use the row that is stuffed inside the Put/Delete?
    (Anyway this change will be an api change).



    Pls correct me if am missing something here.



    Regards

    Ram








  • Ramkrishna.S.Vasudevan at Jul 2, 2012 at 2:24 pm
    Hi Dishant

    In my first point the check on the client side what I meant is
    {code}
    if (!Bytes.equals(row, r.getRow())) {
    throw new DoNotRetryIOException("Action's getRow must match the passed
    row");
    }
    {code}
    Currently there is a check happening in server side before even we get the
    lock. I thought this check can be moved to client because the row passed in
    the param and the one in
    Delete/Put are expected to be same.

    But seeing the code I felt like we are trying to check the same row only. I
    did not mean to compare the family and qualifier, the row is expected to be
    same as per the above code.
    So I meant that the row need not be passed explicity.

    Regards
    Ram
    -----Original Message-----
    From: Dishant A
    Sent: Monday, July 02, 2012 7:34 PM
    To: dev@hbase.apache.org
    Subject: Re: checkAndPut, checkAndDelete

    Hi Ram,

    1) Can you do this check on client side?
    You can't, because this operation is supposed to be atomic and if you
    do a
    get and the value changes on server side in the meantime, you will be
    doing
    it wrong.


    2) Can we just use the row that is stuffed inside the Put/Delete?
    (Anyway this change will be an api change).

    This lose the case when you want to check the value of column A and
    based
    on it change the value of column B. So again we can't.

    Hope this helps.

    Thanks,
    Dishant

    On Mon, Jul 2, 2012 at 4:44 AM, Ramkrishna.S.Vasudevan <
    ramkrishna.vasudevan@huawei.com> wrote:
    Hi Devs



    Currently the checkAndPut, checkAndDelete these api currently accept the
    row
    that needs to be checked and the Delete/Put also along with it.



    Again internally in the code HRegion.checkAndMutate() there is a
    verification to find if the row passed and the one inside the
    Mutate(Put/Delete) object are same. If not throw an exception.



    1) Can we do this check on the client side itself?

    2) Can we just use the row that is stuffed inside the
    Put/Delete?
    (Anyway this change will be an api change).



    Pls correct me if am missing something here.



    Regards

    Ram








  • Anoop Sam John at Jul 2, 2012 at 6:02 pm
    Yes as Ram said the rowId passed to the API and rowId in Put/Delete need to be the same. We can see this check at the server side. I was wondering why these APIs were taking the extra rowId param.
    I thought at 1st that these can be different rows, add a row if value of a column in another row is some 'x''. This can not be satisfied anyway I think. The operation needs to be under single transaction at server side. So these rows ( if we allow to be diff rows) to be in same region. Can some one explain why we added the rowId extra param in the API? Any way it might be better to add the client side check IMO. Fail fast wl be better..

    -Anoop-
    ________________________________________
    From: Dishant A [hbase.project@gmail.com]
    Sent: Monday, July 02, 2012 7:33 PM
    To: dev@hbase.apache.org
    Subject: Re: checkAndPut, checkAndDelete

    Hi Ram,

    1) Can you do this check on client side?
    You can't, because this operation is supposed to be atomic and if you do a
    get and the value changes on server side in the meantime, you will be doing
    it wrong.


    2) Can we just use the row that is stuffed inside the Put/Delete?
    (Anyway this change will be an api change).

    This lose the case when you want to check the value of column A and based
    on it change the value of column B. So again we can't.

    Hope this helps.

    Thanks,
    Dishant
    On Mon, Jul 2, 2012 at 4:44 AM, Ramkrishna.S.Vasudevan wrote:

    Hi Devs



    Currently the checkAndPut, checkAndDelete these api currently accept the
    row
    that needs to be checked and the Delete/Put also along with it.



    Again internally in the code HRegion.checkAndMutate() there is a
    verification to find if the row passed and the one inside the
    Mutate(Put/Delete) object are same. If not throw an exception.



    1) Can we do this check on the client side itself?

    2) Can we just use the row that is stuffed inside the Put/Delete?
    (Anyway this change will be an api change).



    Pls correct me if am missing something here.



    Regards

    Ram








Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupdev @
categorieshbase, hadoop
postedJul 2, '12 at 8:45a
activeJul 2, '12 at 6:02p
posts5
users4
websitehbase.apache.org

People

Translate

site design / logo © 2022 Grokbase