diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index 681dd3f..ccb8668 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -5232,8 +5232,9 @@ public class HRegion implements HeapSize { // , Writable{ && CellUtil.matchingQualifier(results.get(idx),kv)) { oldKv = KeyValueUtil.ensureKeyValue(results.get(idx)); // allocate an empty kv once + long ts = Math.max(now, oldKv.getTimestamp()); newKV = new KeyValue(row.length, kv.getFamilyLength(), - kv.getQualifierLength(), now, KeyValue.Type.Put, + kv.getQualifierLength(), ts, KeyValue.Type.Put, oldKv.getValueLength() + kv.getValueLength(), oldKv.getTagsLengthUnsigned() + kv.getTagsLengthUnsigned()); // copy in the value @@ -5424,8 +5425,10 @@ public class HRegion implements HeapSize { // , Writable{ boolean noWriteBack = (amount == 0); Cell c = null; + long ts = now; if (idx < results.size() && CellUtil.matchingQualifier(results.get(idx), kv)) { c = results.get(idx); + ts = Math.max(now, c.getTimestamp()); if(c.getValueLength() == Bytes.SIZEOF_LONG) { amount += Bytes.toLong(c.getValueArray(), c.getValueOffset(), Bytes.SIZEOF_LONG); } else { @@ -5441,7 +5444,7 @@ public class HRegion implements HeapSize { // , Writable{ byte[] val = Bytes.toBytes(amount); int oldCellTagsLen = (c == null) ? 0 : c.getTagsLengthUnsigned(); int incCellTagsLen = kv.getTagsLengthUnsigned(); - KeyValue newKV = new KeyValue(row.length, family.getKey().length, q.length, now, + KeyValue newKV = new KeyValue(row.length, family.getKey().length, q.length, ts, KeyValue.Type.Put, val.length, oldCellTagsLen + incCellTagsLen); System.arraycopy(row, 0, newKV.getBuffer(), newKV.getRowOffset(), row.length); System.arraycopy(family.getKey(), 0, newKV.getBuffer(), newKV.getFamilyOffset(),