|
@@ -807,8 +807,14 @@ class FsDatasetImpl implements FsDatasetSpi<FsVolumeImpl> {
|
|
|
throws ReplicaNotFoundException {
|
|
|
ReplicaInfo info = volumeMap.get(b.getBlockPoolId(), b.getLocalBlock());
|
|
|
if (info == null) {
|
|
|
- throw new ReplicaNotFoundException(
|
|
|
- ReplicaNotFoundException.NON_EXISTENT_REPLICA + b);
|
|
|
+ if (volumeMap.get(b.getBlockPoolId(), b.getLocalBlock().getBlockId())
|
|
|
+ == null) {
|
|
|
+ throw new ReplicaNotFoundException(
|
|
|
+ ReplicaNotFoundException.NON_EXISTENT_REPLICA + b);
|
|
|
+ } else {
|
|
|
+ throw new ReplicaNotFoundException(
|
|
|
+ ReplicaNotFoundException.UNEXPECTED_GS_REPLICA + b);
|
|
|
+ }
|
|
|
}
|
|
|
return info;
|
|
|
}
|
|
@@ -1994,14 +2000,18 @@ class FsDatasetImpl implements FsDatasetSpi<FsVolumeImpl> {
|
|
|
try(AutoCloseableLock lock = datasetLock.acquire()) {
|
|
|
final ReplicaInfo info = volumeMap.get(bpid, invalidBlks[i]);
|
|
|
if (info == null) {
|
|
|
- // It is okay if the block is not found -- it may be deleted earlier.
|
|
|
- LOG.info("Failed to delete replica " + invalidBlks[i]
|
|
|
- + ": ReplicaInfo not found.");
|
|
|
- continue;
|
|
|
- }
|
|
|
- if (info.getGenerationStamp() != invalidBlks[i].getGenerationStamp()) {
|
|
|
- errors.add("Failed to delete replica " + invalidBlks[i]
|
|
|
- + ": GenerationStamp not matched, info=" + info);
|
|
|
+ ReplicaInfo infoByBlockId =
|
|
|
+ volumeMap.get(bpid, invalidBlks[i].getBlockId());
|
|
|
+ if (infoByBlockId == null) {
|
|
|
+ // It is okay if the block is not found -- it
|
|
|
+ // may be deleted earlier.
|
|
|
+ LOG.info("Failed to delete replica " + invalidBlks[i]
|
|
|
+ + ": ReplicaInfo not found.");
|
|
|
+ } else {
|
|
|
+ errors.add("Failed to delete replica " + invalidBlks[i]
|
|
|
+ + ": GenerationStamp not matched, existing replica is "
|
|
|
+ + Block.toString(infoByBlockId));
|
|
|
+ }
|
|
|
continue;
|
|
|
}
|
|
|
f = info.getBlockFile();
|