HBASE-1411 Remove HLogEdit
git-svn-id: https://svn.apache.org/repos/asf/hadoop/hbase/trunk@774596 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
e738b7f4a2
commit
291383d2d1
|
@ -1,183 +0,0 @@
|
||||||
/**
|
|
||||||
* Copyright 2007 The Apache Software Foundation
|
|
||||||
*
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
* or more contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. The ASF licenses this file
|
|
||||||
* to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.apache.hadoop.hbase.regionserver;
|
|
||||||
|
|
||||||
import java.io.DataInput;
|
|
||||||
import java.io.DataOutput;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
|
|
||||||
import org.apache.hadoop.hbase.HConstants;
|
|
||||||
import org.apache.hadoop.hbase.KeyValue;
|
|
||||||
import org.apache.hadoop.hbase.io.BatchOperation;
|
|
||||||
import org.apache.hadoop.hbase.util.Bytes;
|
|
||||||
import org.apache.hadoop.io.Writable;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A log value.
|
|
||||||
*
|
|
||||||
* These aren't sortable; you need to sort by the matching HLogKey.
|
|
||||||
* TODO: Remove. Just output KVs.
|
|
||||||
*/
|
|
||||||
public class HLogEdit implements Writable, HConstants {
|
|
||||||
/** Value written to HLog on a complete cache flush. TODO: Remove. Not used.
|
|
||||||
*/
|
|
||||||
static byte [] COMPLETE_CACHE_FLUSH;
|
|
||||||
static {
|
|
||||||
try {
|
|
||||||
COMPLETE_CACHE_FLUSH = "HBASE::CACHEFLUSH".getBytes(UTF8_ENCODING);
|
|
||||||
} catch (UnsupportedEncodingException e) {
|
|
||||||
assert(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** If transactional log entry, these are the op codes */
|
|
||||||
public enum TransactionalOperation {
|
|
||||||
/** start transaction */
|
|
||||||
START,
|
|
||||||
/** Equivalent to append in non-transactional environment */
|
|
||||||
WRITE,
|
|
||||||
/** Transaction commit entry */
|
|
||||||
COMMIT,
|
|
||||||
/** Abort transaction entry */
|
|
||||||
ABORT
|
|
||||||
}
|
|
||||||
|
|
||||||
private KeyValue kv;
|
|
||||||
private static final int MAX_VALUE_LEN = 128;
|
|
||||||
|
|
||||||
private boolean isTransactionEntry;
|
|
||||||
private Long transactionId = null;
|
|
||||||
private TransactionalOperation operation;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Default constructor used by Writable
|
|
||||||
*/
|
|
||||||
public HLogEdit() {
|
|
||||||
this(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Construct a fully initialized HLogEdit
|
|
||||||
* @param kv
|
|
||||||
*/
|
|
||||||
public HLogEdit(final KeyValue kv) {
|
|
||||||
this.kv = kv;
|
|
||||||
this.isTransactionEntry = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Construct a WRITE transaction.
|
|
||||||
* @param transactionId
|
|
||||||
* @param op
|
|
||||||
* @param timestamp
|
|
||||||
*/
|
|
||||||
public HLogEdit(long transactionId, final byte [] row, BatchOperation op,
|
|
||||||
long timestamp) {
|
|
||||||
this(new KeyValue(row, op.getColumn(), timestamp,
|
|
||||||
op.isPut()? KeyValue.Type.Put: KeyValue.Type.Delete, op.getValue()));
|
|
||||||
// This covers delete ops too...
|
|
||||||
this.transactionId = transactionId;
|
|
||||||
this.operation = TransactionalOperation.WRITE;
|
|
||||||
this.isTransactionEntry = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Construct a transactional operation (BEGIN, ABORT, or COMMIT).
|
|
||||||
*
|
|
||||||
* @param transactionId
|
|
||||||
* @param op
|
|
||||||
*/
|
|
||||||
public HLogEdit(long transactionId, TransactionalOperation op) {
|
|
||||||
this.kv = KeyValue.LOWESTKEY;
|
|
||||||
this.transactionId = transactionId;
|
|
||||||
this.operation = op;
|
|
||||||
this.isTransactionEntry = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return the KeyValue */
|
|
||||||
public KeyValue getKeyValue() {
|
|
||||||
return this.kv;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @return true if entry is a transactional entry */
|
|
||||||
public boolean isTransactionEntry() {
|
|
||||||
return isTransactionEntry;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the transactionId, or null if this is not a transactional edit.
|
|
||||||
*
|
|
||||||
* @return Return the transactionId.
|
|
||||||
*/
|
|
||||||
public Long getTransactionId() {
|
|
||||||
return transactionId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the operation.
|
|
||||||
*
|
|
||||||
* @return Return the operation.
|
|
||||||
*/
|
|
||||||
public TransactionalOperation getOperation() {
|
|
||||||
return operation;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return First column name, timestamp, and first 128 bytes of the value
|
|
||||||
* bytes as a String.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
String value = "";
|
|
||||||
try {
|
|
||||||
value = (this.kv.getValueLength() > MAX_VALUE_LEN)?
|
|
||||||
new String(this.kv.getValue(), 0, MAX_VALUE_LEN,
|
|
||||||
HConstants.UTF8_ENCODING) + "...":
|
|
||||||
new String(this.kv.getValue(), HConstants.UTF8_ENCODING);
|
|
||||||
} catch (UnsupportedEncodingException e) {
|
|
||||||
throw new RuntimeException("UTF8 encoding not present?", e);
|
|
||||||
}
|
|
||||||
return this.kv.toString() +
|
|
||||||
(isTransactionEntry ? "/tran=" + transactionId + "/op=" +
|
|
||||||
operation.toString(): "") + "/value=" + value;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Writable
|
|
||||||
|
|
||||||
public void write(DataOutput out) throws IOException {
|
|
||||||
Bytes.writeByteArray(out, kv.getBuffer(), kv.getOffset(), kv.getLength());
|
|
||||||
out.writeBoolean(isTransactionEntry);
|
|
||||||
if (isTransactionEntry) {
|
|
||||||
out.writeLong(transactionId);
|
|
||||||
out.writeUTF(operation.name());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void readFields(DataInput in) throws IOException {
|
|
||||||
byte [] kvbytes = Bytes.readByteArray(in);
|
|
||||||
this.kv = new KeyValue(kvbytes, 0, kvbytes.length);
|
|
||||||
isTransactionEntry = in.readBoolean();
|
|
||||||
if (isTransactionEntry) {
|
|
||||||
transactionId = in.readLong();
|
|
||||||
operation = TransactionalOperation.valueOf(in.readUTF());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue