HDFS-13941. make storageId in BlockPoolTokenSecretManager.checkAccess optional. Contributed by Wei-Chiu Chuang.
This commit is contained in:
parent
1d5390679e
commit
2caf69debd
|
@ -94,6 +94,18 @@ public class BlockPoolTokenSecretManager extends
|
||||||
storageTypes, storageIds);
|
storageTypes, storageIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See {@link BlockTokenSecretManager#checkAccess(BlockTokenIdentifier,
|
||||||
|
* String, ExtendedBlock, BlockTokenIdentifier.AccessMode,
|
||||||
|
* StorageType[])}
|
||||||
|
*/
|
||||||
|
public void checkAccess(BlockTokenIdentifier id, String userId,
|
||||||
|
ExtendedBlock block, AccessMode mode, StorageType[] storageTypes)
|
||||||
|
throws InvalidToken {
|
||||||
|
get(block.getBlockPoolId()).checkAccess(id, userId, block, mode,
|
||||||
|
storageTypes);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See {@link BlockTokenSecretManager#checkAccess(Token, String,
|
* See {@link BlockTokenSecretManager#checkAccess(Token, String,
|
||||||
* ExtendedBlock, BlockTokenIdentifier.AccessMode,
|
* ExtendedBlock, BlockTokenIdentifier.AccessMode,
|
||||||
|
@ -108,7 +120,7 @@ public class BlockPoolTokenSecretManager extends
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See {@link BlockTokenSecretManager#addKeys(ExportedBlockKeys)}
|
* See {@link BlockTokenSecretManager#addKeys(ExportedBlockKeys)}.
|
||||||
*/
|
*/
|
||||||
public void addKeys(String bpid, ExportedBlockKeys exportedKeys)
|
public void addKeys(String bpid, ExportedBlockKeys exportedKeys)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
|
@ -31,6 +31,7 @@ import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.apache.hadoop.classification.InterfaceAudience;
|
import org.apache.hadoop.classification.InterfaceAudience;
|
||||||
|
@ -291,6 +292,23 @@ public class BlockTokenSecretManager extends
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if access should be allowed. userID is not checked if null. This
|
||||||
|
* method doesn't check if token password is correct. It should be used only
|
||||||
|
* when token password has already been verified (e.g., in the RPC layer).
|
||||||
|
*
|
||||||
|
* Some places need to check the access using StorageTypes and for other
|
||||||
|
* places the StorageTypes is not relevant.
|
||||||
|
*/
|
||||||
|
public void checkAccess(BlockTokenIdentifier id, String userId,
|
||||||
|
ExtendedBlock block, BlockTokenIdentifier.AccessMode mode,
|
||||||
|
StorageType[] storageTypes) throws InvalidToken {
|
||||||
|
checkAccess(id, userId, block, mode);
|
||||||
|
if (ArrayUtils.isNotEmpty(storageTypes)) {
|
||||||
|
checkAccess(id.getStorageTypes(), storageTypes, "StorageTypes");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void checkAccess(BlockTokenIdentifier id, String userId,
|
public void checkAccess(BlockTokenIdentifier id, String userId,
|
||||||
ExtendedBlock block, BlockTokenIdentifier.AccessMode mode)
|
ExtendedBlock block, BlockTokenIdentifier.AccessMode mode)
|
||||||
throws InvalidToken {
|
throws InvalidToken {
|
||||||
|
|
|
@ -215,7 +215,11 @@ public class TestBlockToken {
|
||||||
private static void checkAccess(BlockTokenSecretManager m,
|
private static void checkAccess(BlockTokenSecretManager m,
|
||||||
Token<BlockTokenIdentifier> t, ExtendedBlock blk,
|
Token<BlockTokenIdentifier> t, ExtendedBlock blk,
|
||||||
BlockTokenIdentifier.AccessMode mode, StorageType[] storageTypes,
|
BlockTokenIdentifier.AccessMode mode, StorageType[] storageTypes,
|
||||||
String[] storageIds) throws SecretManager.InvalidToken {
|
String[] storageIds) throws IOException {
|
||||||
|
if(storageIds == null) {
|
||||||
|
// Test overloaded checkAccess method.
|
||||||
|
m.checkAccess(t.decodeIdentifier(), null, blk, mode, storageTypes);
|
||||||
|
}
|
||||||
m.checkAccess(t, null, blk, mode, storageTypes, storageIds);
|
m.checkAccess(t, null, blk, mode, storageTypes, storageIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -801,6 +805,7 @@ public class TestBlockToken {
|
||||||
emptyStorageIds);
|
emptyStorageIds);
|
||||||
sm.checkAccess(id, null, block3, mode, storageTypes,
|
sm.checkAccess(id, null, block3, mode, storageTypes,
|
||||||
null);
|
null);
|
||||||
|
sm.checkAccess(id, null, block3, mode, storageTypes);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Reference in New Issue