Refactor CoreNodeManager to inherit from CustomNodeManager2 with ICoreNodeManager interface #3429
+540
−9
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Proposed changes
CoreNodeManager now inherits from CustomNodeManager2, consolidating the server library's NodeManager implementations into a single architecture. The original CoreNodeManager implementation had no test coverage and used a different internal structure (NodeTable/ILocalNode vs NodeState). An interface-based approach has been introduced to provide better abstraction and flexibility.
Key changes:
ICoreNodeManagerinterface that extendsINodeManager2and defines the contract for core node managersCoreNodeManager2inheriting fromCustomNodeManager2and implementingICoreNodeManagerDataLock,ImportNodes,AttachNode,CreateUniqueNodeId,DynamicNamespaceIndexCoreNodeManageras[Obsolete]but kept functional for backward compatibility (now also implementsICoreNodeManager)MasterNodeManager,IServerInternal,ServerInternalDatato depend onICoreNodeManagerinterface instead of concrete typesTest coverage:
Types of changes
Checklist
Further comments
The refactoring maintains full backward compatibility by keeping the old CoreNodeManager as obsolete. The new implementation uses the same NodeState-based architecture as CustomNodeManager2, making the codebase more maintainable. SamplingGroups support is now enabled in the core node manager as specified in the requirements.
The introduction of
ICoreNodeManagerinterface provides better separation of concerns and allows the server infrastructure to depend on abstractions rather than concrete implementations, following SOLID principles. Both the deprecatedCoreNodeManagerand the newCoreNodeManager2implement this interface, ensuring a smooth transition path.Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.