Hi guys,
Currently, Mesos uses the following ways to configure role-related objects:
1. For dynamic reserve resources for a role, /reserve endpoint is used to
reserve, another /unreserve endpoint is used to unreserve, maybe the third
endpoint should be added to show resource reservation of a role later due to
someone has issue a requirement of this.
2. For configuring quota for a role, only one endpoint /quota is provided to
set/remove/show quota information.
3. For role information, /roles endpoint is only provided to show role
information(contains role name, weight and the registered frameworks and their
used resources) that master is configured with (specified by --roles when Mesos
master startup), and the configured roles do not be changed by this endpoint at
runtime(without restart Mesos master). And current there are two proposals in
progress to support re-configure roles at runtime:
- Dynamic Roles(MESOS-3177): roles are stored in the registry and
added/deleted/removed/shown via /roles HTTP endpoints with the authorized
principles.
- Implicit Roles(MESOS-3988): any role will be allowed, subject to the
ACL/authorization system.
After having a discussion, we all prefer to implement Implicit Roles rather
than Dynamic Roles, but dynamic weight is out scope of Implicit Roles, so a new
project will need be issued for dynamic weight, and like quota, a new
endpoint(such as /weight) will be added to update weight of a role at runtime.
For above design and implementation, they are all different. In order to
improve the user experience, some enhancements should be done for the same
behaviours between above endpoints. I have two proposals as below:
Proposals 1, using /roles endpoint to centralizely show all roles information
and using other endpoints(/weight,/quota,/reservation) to only set the
role-related configuration.
- Implement Implicit Roles to support dynamically implicitly add/remove role at
runtime. and enhance /roles endpoint to centralizely show all role information
which contains role name, weight, resource reservation, quota,etc.
- For reservation, merge /reserve and /unreserve together, end user can use one
endpoint /reservation(should better be a noun for a Restful endpoint) to
reserve(POST method) and unreserve(PUT method) resource, and does not support
to show reservation with this endpoint;
- For setting quota, end user can only use /quota endpoint to set and remove
quota, and does not support to show quota with this endpoint;
- For dynamic weight, add a new endpoint /weight, end user can use to update
weight of a role, and does not support to show weights with this endpoint.
Proposals 2, keep the old behaviour of /roles endpoint and using other
endpoints(/weight,/quota,/reservation) to set and show the role-related
configuration.
- Implement Implicit Roles to support dynamic implicitly configure role at
runtime. and keep the old behaviour of /roles to only show role information
which contains role name, weight and the registered frameworks and their used
resources.
- For reservation, merge /reserve and /unreserve together, end user can use one
endpoint /reservation to reserve(POST method) resource, unreserve(PUT method)
resource, show reserved resources(GET method);
- For setting quota, keep the current behaviour, and end user can use /quota
endpoint to set(PUT method), remove(DELETE method) and show(GET method) quota;
- For dynamic weight, add a new endpoint /weight, end user can use to
update(PUT method) weight of a role, and show(GET method) weight information.
I prefer the proposal 1, because cluster administrator can use /roles endpoint
to show the global resource plan of the cluster. I would like to listen from
you guys on the above proposals, and any other comments are welcome.
------------------
Regards!
Grady YQ. Wang??????????