blob: ae69321a1c80884dce51f41465e0eee4895c70cf [file] [log] [blame]
/*
* 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.eagle.log.entity.old;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.eagle.common.config.EagleConfigFactory;
import org.apache.eagle.log.base.taggedlog.TaggedLogAPIEntity;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.HTableFactory;
import org.apache.hadoop.hbase.client.HTableInterface;
import org.apache.eagle.log.entity.InternalLog;
import org.apache.eagle.log.entity.meta.EntityDefinition;
import org.apache.eagle.common.EagleBase64Wrapper;
public class HBaseLogDeleter implements LogDeleter {
private HTableInterface tbl;
private String table;
private String columnFamily;
public HBaseLogDeleter(String table, String columnFamily) {
this.table = table;
this.columnFamily = columnFamily;
}
@Override
public void open() throws IOException {
try {
tbl = EagleConfigFactory.load().getHTable(this.table);
} catch (RuntimeException ex) {
throw new IOException(ex);
}
}
@Override
public void close() throws IOException {
if (tbl != null) {
new HTableFactory().releaseHTableInterface(tbl);
}
}
@Override
public void flush() throws IOException {
throw new IllegalArgumentException("Not supported flush for hbase delete");
}
/**
* support delete by constructing a rowkey or by encoded rowkey passed from client.
*/
@Override
public void delete(InternalLog log) throws IOException {
final byte[] rowkey = RowkeyHelper.getRowkey(log);
final Delete delete = createDelete(rowkey);
tbl.delete(delete);
}
public void delete(TaggedLogAPIEntity entity, EntityDefinition entityDef) throws Exception {
final byte[] rowkey = RowkeyHelper.getRowkey(entity, entityDef);
final Delete delete = createDelete(rowkey);
tbl.delete(delete);
}
/**
* Batch delete.
*
* @param logs
* @throws IOException
*/
public void delete(List<InternalLog> logs) throws IOException {
final List<byte[]> rowkeys = RowkeyHelper.getRowkeysByLogs(logs);
deleteRowkeys(rowkeys);
}
/**
* Batch delete.
*
* @throws Exception
*/
public void deleteEntities(List<? extends TaggedLogAPIEntity> entities, EntityDefinition entityDef)
throws Exception {
final List<byte[]> rowkeys = RowkeyHelper.getRowkeysByEntities(entities, entityDef);
deleteRowkeys(rowkeys);
}
/**
* Batch delete.
*
* @throws IOException
*/
public void deleteRowkeys(List<byte[]> rowkeys) throws IOException {
final List<Delete> deletes = new ArrayList<Delete>(rowkeys.size());
for (byte[] rowkey : rowkeys) {
final Delete delete = createDelete(rowkey);
deletes.add(delete);
}
tbl.delete(deletes);
}
@Override
public void deleteRowByRowkey(String encodedRowkey) throws IOException {
byte[] row = EagleBase64Wrapper.decode(encodedRowkey);
final Delete delete = createDelete(row);
tbl.delete(delete);
}
public void deleteRowByRowkey(List<String> encodedRowkeys) throws IOException {
final List<byte[]> rowkeys = RowkeyHelper.getRowkeysByEncodedRowkeys(encodedRowkeys);
deleteRowkeys(rowkeys);
}
private Delete createDelete(byte[] row) throws IOException {
Delete delete = new Delete(row);
delete.deleteFamily(columnFamily.getBytes());
return delete;
}
}