in hbase-client/src/main/java/org/apache/omid/transaction/TTable.java [275:345]
private Put deleteInternal(Transaction tx, Delete delete) throws IOException {
throwExceptionIfOpSetsTimerange(delete);
HBaseTransaction transaction = enforceHBaseTransactionAsParam(tx);
final long writeTimestamp = transaction.getWriteTimestamp();
boolean deleteFamily = false;
final Put deleteP = new Put(delete.getRow(), writeTimestamp);
final Get deleteG = new Get(delete.getRow());
propagateAttributes(delete, deleteP);
propagateAttributes(delete, deleteG);
Map<byte[], List<Cell>> fmap = delete.getFamilyCellMap();
if (fmap.isEmpty()) {
familyQualifierBasedDeletion(transaction, deleteP, deleteG);
}
for (List<Cell> cells : fmap.values()) {
for (Cell cell : cells) {
CellUtils.validateCell(cell, writeTimestamp);
switch (cell.getType()) {
case DeleteColumn:
deleteP.addColumn(CellUtil.cloneFamily(cell),
CellUtil.cloneQualifier(cell),
writeTimestamp,
CellUtils.DELETE_TOMBSTONE);
addWriteSetElement(transaction,
new HBaseCellId(this,
delete.getRow(),
CellUtil.cloneFamily(cell),
CellUtil.cloneQualifier(cell),
writeTimestamp));
break;
case DeleteFamily:
deleteG.addFamily(CellUtil.cloneFamily(cell));
deleteFamily = true;
break;
case Delete:
if (cell.getTimestamp() == HConstants.LATEST_TIMESTAMP) {
deleteP.addColumn(CellUtil.cloneFamily(cell),
CellUtil.cloneQualifier(cell),
writeTimestamp,
CellUtils.DELETE_TOMBSTONE);
addWriteSetElement(transaction,
new HBaseCellId(this,
delete.getRow(),
CellUtil.cloneFamily(cell),
CellUtil.cloneQualifier(cell),
writeTimestamp));
break;
} else {
throw new UnsupportedOperationException(
"Cannot delete specific versions on Snapshot Isolation.");
}
default:
break;
}
}
}
if (deleteFamily) {
if (enforceHBaseTransactionManagerAsParam(transaction.getTransactionManager()).
getConflictDetectionLevel() == ConflictDetectionLevel.ROW) {
familyQualifierBasedDeletionWithOutRead(transaction, deleteP, deleteG);
} else {
familyQualifierBasedDeletion(transaction, deleteP, deleteG);
}
}
return deleteP;
}