use of org.apache.hadoop.ozone.common.DeleteBlockGroupResult in project ozone by apache.
the class ScmBlockLocationProtocolClientSideTranslatorPB method deleteKeyBlocks.
/**
* Delete the set of keys specified.
*
* @param keyBlocksInfoList batch of block keys to delete.
* @return list of block deletion results.
* @throws IOException if there is any failure.
*/
@Override
public List<DeleteBlockGroupResult> deleteKeyBlocks(List<BlockGroup> keyBlocksInfoList) throws IOException {
List<KeyBlocks> keyBlocksProto = keyBlocksInfoList.stream().map(BlockGroup::getProto).collect(Collectors.toList());
DeleteScmKeyBlocksRequestProto request = DeleteScmKeyBlocksRequestProto.newBuilder().addAllKeyBlocks(keyBlocksProto).build();
SCMBlockLocationRequest wrapper = createSCMBlockRequest(Type.DeleteScmKeyBlocks).setDeleteScmKeyBlocksRequest(request).build();
final SCMBlockLocationResponse wrappedResponse = handleError(submitRequest(wrapper));
final DeleteScmKeyBlocksResponseProto resp = wrappedResponse.getDeleteScmKeyBlocksResponse();
List<DeleteBlockGroupResult> results = new ArrayList<>(resp.getResultsCount());
results.addAll(resp.getResultsList().stream().map(result -> new DeleteBlockGroupResult(result.getObjectKey(), DeleteBlockGroupResult.convertBlockResultProto(result.getBlockResultsList()))).collect(Collectors.toList()));
return results;
}
use of org.apache.hadoop.ozone.common.DeleteBlockGroupResult in project ozone by apache.
the class SCMBlockProtocolServer method deleteKeyBlocks.
/**
* Delete blocks for a set of object keys.
*
* @param keyBlocksInfoList list of block keys with object keys to delete.
* @return deletion results.
*/
@Override
public List<DeleteBlockGroupResult> deleteKeyBlocks(List<BlockGroup> keyBlocksInfoList) throws IOException {
if (LOG.isDebugEnabled()) {
LOG.debug("SCM is informed by OM to delete {} blocks", keyBlocksInfoList.size());
}
List<DeleteBlockGroupResult> results = new ArrayList<>();
Map<String, String> auditMap = Maps.newHashMap();
ScmBlockLocationProtocolProtos.DeleteScmBlockResult.Result resultCode;
Exception e = null;
try {
scm.getScmBlockManager().deleteBlocks(keyBlocksInfoList);
resultCode = ScmBlockLocationProtocolProtos.DeleteScmBlockResult.Result.success;
} catch (IOException ioe) {
e = ioe;
LOG.warn("Fail to delete {} keys", keyBlocksInfoList.size(), ioe);
switch(ioe instanceof SCMException ? ((SCMException) ioe).getResult() : IO_EXCEPTION) {
case SAFE_MODE_EXCEPTION:
resultCode = ScmBlockLocationProtocolProtos.DeleteScmBlockResult.Result.safeMode;
break;
case FAILED_TO_FIND_BLOCK:
resultCode = ScmBlockLocationProtocolProtos.DeleteScmBlockResult.Result.errorNotFound;
break;
default:
resultCode = ScmBlockLocationProtocolProtos.DeleteScmBlockResult.Result.unknownFailure;
}
}
for (BlockGroup bg : keyBlocksInfoList) {
auditMap.put("KeyBlockToDelete", bg.toString());
List<DeleteBlockResult> blockResult = new ArrayList<>();
for (BlockID b : bg.getBlockIDList()) {
blockResult.add(new DeleteBlockResult(b, resultCode));
}
results.add(new DeleteBlockGroupResult(bg.getGroupID(), blockResult));
}
if (e == null) {
AUDIT.logWriteSuccess(buildAuditMessageForSuccess(SCMAction.DELETE_KEY_BLOCK, auditMap));
} else {
AUDIT.logWriteFailure(buildAuditMessageForFailure(SCMAction.DELETE_KEY_BLOCK, auditMap, e));
}
return results;
}
use of org.apache.hadoop.ozone.common.DeleteBlockGroupResult in project ozone by apache.
the class ScmBlockLocationProtocolServerSideTranslatorPB method deleteScmKeyBlocks.
public DeleteScmKeyBlocksResponseProto deleteScmKeyBlocks(DeleteScmKeyBlocksRequestProto req) throws IOException {
DeleteScmKeyBlocksResponseProto.Builder resp = DeleteScmKeyBlocksResponseProto.newBuilder();
List<BlockGroup> infoList = req.getKeyBlocksList().stream().map(BlockGroup::getFromProto).collect(Collectors.toList());
final List<DeleteBlockGroupResult> results = impl.deleteKeyBlocks(infoList);
for (DeleteBlockGroupResult result : results) {
DeleteKeyBlocksResultProto.Builder deleteResult = DeleteKeyBlocksResultProto.newBuilder().setObjectKey(result.getObjectKey()).addAllBlockResults(result.getBlockResultProtoList());
resp.addResults(deleteResult.build());
}
return resp.build();
}
use of org.apache.hadoop.ozone.common.DeleteBlockGroupResult in project ozone by apache.
the class ScmBlockLocationTestingClient method deleteKeyBlocks.
@Override
public List<DeleteBlockGroupResult> deleteKeyBlocks(List<BlockGroup> keyBlocksInfoList) throws IOException {
List<DeleteBlockGroupResult> results = new ArrayList<>();
List<DeleteBlockResult> blockResultList = new ArrayList<>();
Result result;
for (BlockGroup keyBlocks : keyBlocksInfoList) {
for (BlockID blockKey : keyBlocks.getBlockIDList()) {
currentCall++;
switch(this.failCallsFrequency) {
case 0:
result = success;
break;
case 1:
result = unknownFailure;
break;
default:
if (currentCall % this.failCallsFrequency == 0) {
result = unknownFailure;
} else {
result = success;
}
}
blockResultList.add(new DeleteBlockResult(blockKey, result));
}
results.add(new DeleteBlockGroupResult(keyBlocks.getGroupID(), blockResultList));
}
return results;
}
Aggregations