-
Notifications
You must be signed in to change notification settings - Fork 1
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
Add dedicated NodeRole.ControlService to distinguish it from ordinary hosts #17
Comments
Introducing a new node role might have a big impact on the entire codebase. In contrast to introducing BorderRouter in contrast to Router, the change would be specific to SCION. The CS has no equivalent in BGP. The cases you quote can all be solved in different ways as far as I can see. I'm not convinced treating the CS extra special is the right way to go. We should also not forget that the CS is actually multiple services, the certificate server, beacon server, path server, etc. are all distinct. The fact that they are implemented in the same process is just an implementation detail. By the same logic, we could consider introducing node roles for each of the services, but since each Node has only exactly one role that wouldn't work without further changes. In summary, I would prefer a different solution like adding some kind of label or attribute to the host node. @martenwallewein, @tjohn327, @LencigGaer What is your opinion? |
That's not the deciding reasoning behind NodeRoles anyway ( there's a RouteServer role which is very specific to BGP ) |
here is a simple demonstrative example that would benefit greatly from this. ... If wanted to no longer install all distributables on all nodes, but only the required ones.
As of now, the only way to achieve this by rather awkwardly adding the node's AS as a function parameter so we can call 'getControlServices()->List[str]' to test if a given node is a Control Service. An alternative would be to make ControlService a real 'Service' , which is installed on host nodes. Then we could call Node::getClasses()->List[str] and check if it contains 'SCION_ControlService' service-class-label. |
I think Labels are a bit hacky (they will show up in the docker-compose.yml file as
in addition to the already existing 'role' label (which would also be 'SCION Control Service'). Moreover it would produce an ugly inconsistency/exception.. for all nodes the checks are like '.getRole()==xyz' but for ControlServices it would be ' if 'ControlService' in node.getLabels().values()' or sth. |
I thought quite a while about this and I think adding a ControlService role seems the most valuable approach for me. I know that in BGP we don't have that role, but I see the ControlService as more as a pure "service" in seed. It's more a required infrastructure element which needs to be known in the topology. |
It seems adding a new node role is indeed the most viable option. |
currently SCION ControlServices (CS) are treated like end hosts by SEED (they are registered under NodeRole.Host).
However this is sub optimal for at least the following reasons:
but can make do without a single host (i.e. transit AS)
Accordingly this PR proposes to add a NodeType for CS'es
The text was updated successfully, but these errors were encountered: