That is just an artifact of the way the code was written, the
math.max() and +1 code was the guarantee.  Remember without that code,
the old ICV would _LOSE DATA_.  So a little hacking was in order.

I expect to clean up this with the HBASE-2856 patch.

-ryan

On Mon, Jan 10, 2011 at 4:34 PM, Jonathan Gray <jg...@fb.com> wrote:
> How does doing currentTimeMillis() twice in a row guarantee different 
> timestamps?  And in this case, we're talking about the MemStore vs. HLog not 
> HFile.
>
> There is another section of the code where there is a timestamp+1 to avoid 
> duplicates but this is something else.
>
>> -----Original Message-----
>> From: Ryan Rawson [mailto:ryano...@gmail.com]
>> Sent: Monday, January 10, 2011 2:27 PM
>> To: dev@hbase.apache.org
>> Subject: Re: question about Hregion.incrementColumnValue
>>
>> I put more comments on this:
>> HBASE-3021
>>
>> Basically we needed to avoid duplicate timestamp KVs in memstore & hfile,
>> elsewise we might end up 'getting' the wrong value and thus messing up the
>> count.
>>
>> With work on ACID by stack we can avoid using that.
>>
>> -ryan
>>
>> On Mon, Jan 10, 2011 at 11:23 AM, Stack <st...@duboce.net> wrote:
>> > Yeah, thats going away unless Ryan comes up w/ a reason for why we
>> > should keep it.
>> > St.Ack
>> >
>> > On Mon, Jan 10, 2011 at 12:29 AM, Ryan Rawson <ryano...@gmail.com>
>> wrote:
>> >> There was a good, but complex reason. Its going away with stacks time
>> >> stamp patch. I'll see if I can do a better email tomorrow.
>> >> On Jan 9, 2011 11:42 PM, "Dhruba Borthakur" <dhr...@gmail.com>
>> wrote:
>> >>> I am looking at Hregion.incrementColumnValue(). It has the following
>> >>> piece of code
>> >>>
>> >>> // build the KeyValue now:
>> >>> 3266 KeyValue newKv = new KeyValue(row, family,
>> >>> 3267 qualifier, EnvironmentEdgeManager.currentTimeMillis(),
>> >>> 3268 Bytes.toBytes(result));
>> >>> 3269
>> >>> 3270 // now log it:
>> >>> 3271 if (writeToWAL) {
>> >>> 3272 long now = EnvironmentEdgeManager.currentTimeMillis();
>> >>> 3273 WALEdit walEdit = new WALEdit();
>> >>> 3274 walEdit.add(newKv);
>> >>> 3275 this.log.append(regionInfo,
>> >>> regionInfo.getTableDesc().getName(),
>> >>> 3276 walEdit, now);
>> >>> 3277 }
>> >>>
>> >>> It invokes EnvironmentEdgeManager.currentTimeMillis() twice, once
>> >>> for creating the new KV and then another time to add it to the WAL.
>> >>> Is this significant or just an oversight? Can we instead invoke it
>> >>> once before we create the new key-value and then use it for both code
>> paths?
>> >>>
>> >>> Thanks,
>> >>> dhruba
>> >>>
>> >>> --
>> >>> Connect to me at http://www.facebook.com/dhruba
>> >>
>> >
>

Reply via email to