HDFS-12143. Improve performance of getting and removing inode features. Contributed by Daryn Sharp.
This commit is contained in:
parent
cca51e916b
commit
1a79dcfc45
|
@ -283,12 +283,14 @@ public abstract class INodeWithAdditionalFields extends INode
|
|||
|
||||
protected void removeFeature(Feature f) {
|
||||
int size = features.length;
|
||||
Preconditions.checkState(size > 0, "Feature "
|
||||
+ f.getClass().getSimpleName() + " not found.");
|
||||
if (size == 0) {
|
||||
throwFeatureNotFoundException(f);
|
||||
}
|
||||
|
||||
if (size == 1) {
|
||||
Preconditions.checkState(features[0] == f, "Feature "
|
||||
+ f.getClass().getSimpleName() + " not found.");
|
||||
if (features[0] != f) {
|
||||
throwFeatureNotFoundException(f);
|
||||
}
|
||||
features = EMPTY_FEATURE;
|
||||
return;
|
||||
}
|
||||
|
@ -307,14 +309,22 @@ public abstract class INodeWithAdditionalFields extends INode
|
|||
}
|
||||
}
|
||||
|
||||
Preconditions.checkState(!overflow && j == size - 1, "Feature "
|
||||
+ f.getClass().getSimpleName() + " not found.");
|
||||
if (overflow || j != size - 1) {
|
||||
throwFeatureNotFoundException(f);
|
||||
}
|
||||
features = arr;
|
||||
}
|
||||
|
||||
private void throwFeatureNotFoundException(Feature f) {
|
||||
throw new IllegalStateException(
|
||||
"Feature " + f.getClass().getSimpleName() + " not found.");
|
||||
}
|
||||
|
||||
protected <T extends Feature> T getFeature(Class<? extends Feature> clazz) {
|
||||
Preconditions.checkArgument(clazz != null);
|
||||
for (Feature f : features) {
|
||||
final int size = features.length;
|
||||
for (int i=0; i < size; i++) {
|
||||
Feature f = features[i];
|
||||
if (clazz.isAssignableFrom(f.getClass())) {
|
||||
@SuppressWarnings("unchecked")
|
||||
T ret = (T) f;
|
||||
|
|
Loading…
Reference in New Issue