-
Notifications
You must be signed in to change notification settings - Fork 588
HDDS-12983. Validator Registry Changes for Supporting Version based validations #8404
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
…alidations Change-Id: I939888c989eaec0a62884aa564e2f24a594122ef
Change-Id: Icec10ce7bb452753db0936212b0757c01279b533
Change-Id: I9a010c86d0128da8140fa33b46eaeef9da0dc283
adoroszlai
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @swamirishi for the patch.
| public List<Method> validationsFor(RequestType requestType, | ||
| RequestProcessingPhase phase, | ||
| Map<Class<? extends Annotation>, ? extends Versioned> requestVersions) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please do not format method signature like this. Whenever visibility / return type / method name / other modifiers are changed, we would have to reindent all parameters.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
| Validator validator, String methodName, Class<ReturnValue> returnValueType) { | ||
| try { | ||
| return (ReturnValue) validator.getClass().getMethod(methodName).invoke(validator); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use returnValueType (currently unused) to cast the result, instead of using unchecked cast (ReturnValue).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
| processingPhase = RequestProcessingPhase.PRE_PROCESS, | ||
| requestType = Type.CreateBucket | ||
| requestType = Type.CreateBucket, | ||
| applyBefore = ClientVersion.BUCKET_LAYOUT_SUPPORT |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit:
| applyBefore = ClientVersion.BUCKET_LAYOUT_SUPPORT | |
| applyBefore = ClientVersion.BUCKET_LAYOUT_SUPPORT |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
| * One validator can be applied in multiple, E.g. | ||
| * {@link org.apache.hadoop.ozone.om.request.validation.OMClientVersionValidator}, | ||
| * {@link org.apache.hadoop.ozone.om.request.validation.OMLayoutVersionValidator} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think this sentence makes sense.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
updated the sentence lmk if it is ok now
| ValidatorRegistry<OzoneManagerProtocolProtos.Type> registry = | ||
| new ValidatorRegistry<>(OzoneManagerProtocolProtos.Type.class, PACKAGE, | ||
| Arrays.stream(VersionExtractor.values()).map(VersionExtractor::getValidatorClass).collect(Collectors.toSet()), | ||
| REQUEST_PROCESSING_PHASES); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we avoid duplicating this logic in each test case?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
| * @return All the items which has an index value greater than given index value. | ||
| */ | ||
| public List<T> getItemsEqualToIdx(IDX indexValue) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Javadoc mismatch ("greater than" vs. EqualTo)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
| */ | ||
| private static final class IndexedItems<T, IDX extends Comparable<IDX>> { | ||
| private final List<T> items; | ||
| private final TreeMap<IDX, Integer> indexMap; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Declare as interface: NavigableMap.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
| .sorted((validatorMethodPair1, validatorMethodPair2) -> | ||
| Integer.compare( | ||
| this.getApplyBeforeVersion(validatorMethodPair1.getKey()).version(), | ||
| this.getApplyBeforeVersion(validatorMethodPair2.getKey()).version())) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Extract this lambda to a static method.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
| List<Method> validations = registry.validationsFor(request.getCmdType(), PRE_PROCESS, | ||
| this.getVersions(request)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: remove this. and do not wrap line.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
Change-Id: Ibf524d42e3d8535377105a07f8ca3213c8c62199
Change-Id: I67634e5517239bdec3965ed8819f9af6ecf577dd
Change-Id: Idf26bbc7e83877a71f46bafdf0216d70733a92ee
Change-Id: Idecefb392dbf5c01227d7c3702db1781b9edb073
Change-Id: I174cea546d6fd021e58966b3a5bca3672e9d567e # Conflicts: # hadoop-ozone/client/pom.xml # hadoop-ozone/interface-storage/pom.xml # hadoop-ozone/recon-codegen/pom.xml # hadoop-ozone/s3gateway/pom.xml
Change-Id: I132006b2b5a638e7f19d9ec1beb33b332d105e98
|
This PR has been marked as stale due to 21 days of inactivity. Please comment or remove the stale label to keep it open. Otherwise, it will be automatically closed in 7 days. |
|
Thank you for your contribution. This PR is being closed due to inactivity. If needed, feel free to reopen it. |
Change-Id: Ie1076419cae849563efc8a14ac97e5c0c83828a9 # Conflicts: # hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMDirectoryCreateRequest.java # hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/file/OMFileCreateRequest.java # hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCommitRequest.java # hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyCreateRequest.java # hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/OMKeyRenameRequest.java
Change-Id: I461d46461905d041a613b101182d24e18a143d5c
| @OMLayoutVersionValidator( | ||
| processingPhase = RequestProcessingPhase.PRE_PROCESS, | ||
| requestType = Type.CreateDirectory | ||
| requestType = Type.CreateDirectory, | ||
| applyBefore = OMLayoutFeature.ERASURE_CODED_STORAGE_SUPPORT |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please simply replace the two changed lines instead of moving things around.
- @RequestFeatureValidator(
- conditions = ValidationCondition.CLUSTER_NEEDS_FINALIZATION,
+ @OMLayoutVersionValidator(
+ applyBefore = OMLayoutFeature.ERASURE_CODED_STORAGE_SUPPORT,There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
hadoop-hdds/client/pom.xml
Outdated
| <bannedImport>org.apache.hadoop.ozone.om.request.validation.RequestFeatureValidator</bannedImport> | ||
| <bannedImport>org.apache.hadoop.ozone.om.request.validation.OMLayoutVersionValidator</bannedImport> | ||
| <bannedImport>org.apache.hadoop.ozone.om.request.validation.OMClientVersionValidator</bannedImport> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Created #9530 to reduce the change that this PR needs to make in POM files. The other PR:
- adds the new annotations, since they were already introduced in HDDS-11981
- more importantly, removes
RequestFeatureValidatorfrom modules where it's not even accessible
So this PR will only need to update POMs for the removal of RequestFeatureValidator, and only in fewer modules.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
merged with master branch
Change-Id: Ie6717a5c5e5e6821c2ec8d7abc7a5d4a20d6767f # Conflicts: # hadoop-hdds/client/pom.xml # hadoop-hdds/common/pom.xml # hadoop-hdds/container-service/pom.xml # hadoop-hdds/framework/pom.xml # hadoop-hdds/server-scm/pom.xml # hadoop-ozone/cli-admin/pom.xml # hadoop-ozone/cli-shell/pom.xml # hadoop-ozone/common/pom.xml # hadoop-ozone/csi/pom.xml # hadoop-ozone/freon/pom.xml # hadoop-ozone/insight/pom.xml # hadoop-ozone/recon/pom.xml # hadoop-ozone/tools/pom.xml # pom.xml
Change-Id: Ia2f6792669628c67088b8b5a273fb271476e8848
|
@adoroszlai I have addressed all your review comments. Can you take a look at the change now. |
What changes were proposed in this pull request?
Making changes to the ValidatorRegistry class to be able to pull the validators registered and inturn being able to get all the underlying validator methods based on the usage of the registered feature validator based on a specified version, request processing phase and request type efficiently.
This is the last PR for completing the request validator fixes after breaking down
#6932 into smaller PRs
What is the link to the Apache JIRA
https://issues.apache.org/jira/browse/HDDS-12983
How was this patch tested?
Adding unit tests