HBASE-21012 Revert the change of serializing TimeRangeTracker
Signed-off-by: Michael Stack <stack@apache.org> Signed-off-by: zhangduo <zhangduo@apache.org> Signed-off-by: Chia-Ping Tsai <chia7712@gmail.com>
This commit is contained in:
parent
5e12d6a98e
commit
873d9f5082
|
@ -19,7 +19,9 @@
|
||||||
package org.apache.hadoop.hbase.regionserver;
|
package org.apache.hadoop.hbase.regionserver;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
|
import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
|
@ -206,13 +208,24 @@ public abstract class TimeRangeTracker {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static byte[] toByteArray(TimeRangeTracker tracker) {
|
/**
|
||||||
return ProtobufUtil.prependPBMagic(
|
* This method used to serialize TimeRangeTracker (TRT) by protobuf while this breaks the
|
||||||
HBaseProtos.TimeRangeTracker.newBuilder()
|
* forward compatibility on HFile.(See HBASE-21008) In previous hbase version ( < 2.0.0 ) we use
|
||||||
.setFrom(tracker.getMin())
|
* DataOutput to serialize TRT, these old versions don't have capability to deserialize TRT
|
||||||
.setTo(tracker.getMax())
|
* which is serialized by protobuf. So we need to revert the change of serializing
|
||||||
.build()
|
* TimeRangeTracker back to DataOutput. For more information, please check HBASE-21012.
|
||||||
.toByteArray());
|
* @param tracker TimeRangeTracker needed to be serialized.
|
||||||
|
* @return byte array filled with serialized TimeRangeTracker.
|
||||||
|
* @throws IOException if something goes wrong in writeLong.
|
||||||
|
*/
|
||||||
|
public static byte[] toByteArray(TimeRangeTracker tracker) throws IOException {
|
||||||
|
try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) {
|
||||||
|
try (DataOutputStream dos = new DataOutputStream(bos)) {
|
||||||
|
dos.writeLong(tracker.getMin());
|
||||||
|
dos.writeLong(tracker.getMax());
|
||||||
|
return bos.toByteArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -588,6 +588,18 @@ The internal changes to HBase during this upgrade were sufficient for compilatio
|
||||||
|
|
||||||
If you previously relied on client side tracing integrated with HBase operations, it is recommended that you upgrade your usage to HTrace 4 as well.
|
If you previously relied on client side tracing integrated with HBase operations, it is recommended that you upgrade your usage to HTrace 4 as well.
|
||||||
|
|
||||||
|
[[upgrade2.0.hfile.compatability]]
|
||||||
|
.HFile lose forward compatability
|
||||||
|
|
||||||
|
HFiles generated by 2.0.0, 2.0.1, 2.1.0 are not forward compatible to 1.4.6-, 1.3.2.1-, 1.2.6.1-,
|
||||||
|
and other inactive releases. Why HFile lose compatability is hbase in new versions
|
||||||
|
(2.0.0, 2.0.1, 2.1.0) use protobuf to serialize/deserialize TimeRangeTracker (TRT) while old
|
||||||
|
versions use DataInput/DataOutput. To solve this, We have to put
|
||||||
|
link:https://jira.apache.org/jira/browse/HBASE-21012[HBASE-21012]
|
||||||
|
to 2.x and put link:https://jira.apache.org/jira/browse/HBASE-21013[HBASE-21013] in 1.x.
|
||||||
|
For more information, please check
|
||||||
|
link:https://jira.apache.org/jira/browse/HBASE-21008[HBASE-21008].
|
||||||
|
|
||||||
[[upgrade2.0.perf]]
|
[[upgrade2.0.perf]]
|
||||||
.Performance
|
.Performance
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue