MCPcopy Create free account
hub / github.com/OpenTSDB/asynchbase / fromBuffer

Method fromBuffer

src/KeyValue.java:235–291  ·  view source on GitHub ↗

De-serializes KeyValue from a buffer (HBase 0.94 and before). @param buf The buffer to de-serialize from. @param prev Another KeyValue previously de-serialized from the same buffer. Can be null. The idea here is that KeyValues often come in a sorted batch, and often share a

(final ChannelBuffer buf,
                                    final KeyValue prev)

Source from the content-addressed store, hash-verified

233 * malformed {@link KeyValue}.
234 */
235 public static KeyValue fromBuffer(final ChannelBuffer buf,
236 final KeyValue prev) {
237 final int rowkey_length = buf.readInt(); // Total length of the row key.
238 //LOG.debug("rowkey_length="+rowkey_length);
239 HBaseRpc.checkNonEmptyArrayLength(buf, rowkey_length);
240 final int value_length = buf.readInt();
241 //LOG.debug("value_length="+value_length);
242 HBaseRpc.checkArrayLength(buf, value_length);
243 final short key_length = buf.readShort();
244 //LOG.debug("key_length="+key_length);
245 HBaseRpc.checkArrayLength(buf, value_length);
246 final byte[] key = new byte[key_length];
247 buf.readBytes(key);
248 //LOG.debug("key="+Bytes.pretty(key));
249 final byte family_length = buf.readByte();
250 if (key_length + family_length + 2 + 1 + 8 + 1 > rowkey_length) {
251 invalid("rowkey_length="
252 + key_length + " doesn't match key_length + family_length ("
253 + key_length + " + " + family_length + " +12) in " + buf + '='
254 + Bytes.pretty(buf));
255 }
256 final byte[] family = new byte[family_length];
257 buf.readBytes(family);
258 final int qual_length = (rowkey_length - key_length - family_length
259 - 2 - 1 - 8 - 1);
260 HBaseRpc.checkArrayLength(buf, qual_length);
261 final byte[] qualifier;
262 if (qual_length > 0) {
263 qualifier = new byte[qual_length];
264 buf.readBytes(qualifier);
265 } else {
266 qualifier = HBaseClient.EMPTY_ARRAY;
267 }
268 final long timestamp = buf.readLong();
269 final byte key_type = buf.readByte();
270 final byte[] value;
271 if (value_length > 0) {
272 value = new byte[value_length];
273 buf.readBytes(value);
274 } else {
275 value = HBaseClient.EMPTY_ARRAY;
276 }
277 if (2 + key_length + 1 + family_length + qual_length + 8 + 1
278 != rowkey_length) { // XXX TMP DEBUG
279 invalid("2 + rl:" + key_length + " + 1 + fl:" + family_length + " + ql:"
280 + qual_length + " + 8 + 1" + " != kl:" + rowkey_length);
281 }
282 if (prev == null) {
283 return new KeyValue(key, family, qualifier, timestamp, /*key_type,*/
284 value);
285 } else {
286 return new KeyValue(Bytes.deDup(prev.key, key),
287 Bytes.deDup(prev.family, family),
288 Bytes.deDup(prev.qualifier, qualifier),
289 timestamp, /*key_type,*/ value);
290 }
291 }
292

Callers 6

convertResultMethod · 0.95
parseResultMethod · 0.95
parseResultsMethod · 0.95
convertResultMethod · 0.95
getRowsMethod · 0.95

Calls 5

checkArrayLengthMethod · 0.95
invalidMethod · 0.95
prettyMethod · 0.95
deDupMethod · 0.95

Tested by

no test coverage detected