-
Notifications
You must be signed in to change notification settings - Fork 587
HDDS-8919. Allow EC pipelines to be created and then added to PipelineManager in two steps #4968
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
Conversation
…manager in two steps
|
There are two things which concern me about this change:
|
|
Thanks @sodonnel work on this. This will help the performance of the ec container allocate block. |
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 @sodonnel for working on this.
Therefore it might make sense to throw an error in a call comes into BuildPipeline with a Ratis replicationConfig.
Agreed. In fact, it may be good to include EC in the method names.
| stateManager.addPipeline(pipeline.getProtobufMessage( | ||
| ClientVersion.CURRENT_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.
pipeline.getProtobufMessage can now be moved outside the locked section.
| LOG.debug("Failed to create pipeline with replicationConfig {}.", | ||
| replicationConfig, ex); | ||
| LOG.debug("Failed to add pipeline with replicationConfig {}.", | ||
| pipeline.getReplicationConfig(), ex); |
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: we may want to log the pipeline itself. Previously this was called with a fresh pipeline, but now pipeline can be "anything".
|
@sodonnel Thanks for updating the PR. It seems there is a test for |
* master: HDDS-8555. [Snapshot] When snapshot feature is disabled, block OM startup if there are still snapshots in the system (apache#4994) HDDS-8782. Improve Volume Scanner Health checks. (apache#4867) HDDS-8447. Datanodes should not process container deletes for failed volumes. (apache#4901) HDDS-5869. Added support for stream on S3Gateway write path (apache#4970) HDDS-8859. [Snapshot] Return failure message to client for a failed snapshot diff jobs (apache#4993) HDDS-8939. [Snapshot] isBlockLocationSame check should be skipped if object is not OmKeyInfo. (apache#4991) HDDS-8923. Expose XceiverClient cache stats as metrics (apache#4979) HDDS-8913. ContainerManagerImpl: reduce processing while locked (apache#4967) HDDS-8935. [Snapshot] Fallback to full diff if getDetlaFiles from compaction DAG fails (apache#4986) HDDS-8911. Update Hadoop to 3.3.6 (apache#4985) HDDS-8931. Allow EC PipelineChoosingPolicy to be defined separately from Ratis (apache#4983) HDDS-8895. Support dynamic change of ozone.readonly.administrators in SCM (apache#4977) HDDS-6814. Make OM service ID optional for `ozone s3` commands if only one is defined in config (apache#4953) HDDS-8925. BaseFreonGenerator may not complete if last attempts fail (apache#4975) HDDS-7100. Container scanner incorrectly marks containers unhealthy when DN is shutdown (apache#4951) HDDS-8919. Allow EC pipelines to be created and then added to PipelineManager in two steps (apache#4968) HDDS-8901. Enable mTLS for InterSCMGrpcProtocol. (apache#4964) Conflicts: hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/interfaces/Container.java hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueContainer.java hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueContainerCheck.java hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/keyvalue/KeyValueHandler.java hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/ContainerTestUtils.java
…eManager in two steps (apache#4968)
…eManager in two steps (apache#4968)
What changes were proposed in this pull request?
As it stands, the method:
Is used to create a new pipeline and add it to the Pipeline manager. This creation and adding is all performed under a single lock The somewhat expensive node selection process from the placement policy is performed under the lock.
For Ratis pipelines, this could be important, as pipelines are created and limited based on the number of existing pipelines on the nodes.
EC pipelines do not have such a limitation, and they also need to be created much more frequently due to their short lived nature.
This PR changes the pipeline manager to have a buildPipeline Method, which calls the placement policy and creates the new pipeline object without any locks.
Then there is an addPipeline method to add the created pipeline to the pipelineManager under the lock.
This will allow for the WritableECPipelineProvider to build pipelines without blocking other threads and then add them to the manager under a lock, reducing the amount of work performed under a lock. This change would need to be made in another PR.
What is the link to the Apache JIRA
https://issues.apache.org/jira/browse/HDDS-8919
How was this patch tested?
Modified one test to call the new methods