In "phase 1" of the multi-role framework support, we want to preserve the existing behavior of single-role framework support in that we disallow frameworks from modifying their role.
With multi-role framework support, we will initially disallow frameworks from modifying the roles field. Note that in the case that the master has failed over but the framework hasn't re-registered yet, we will use the framework info from the agents to disallow changes to the roles field. We will treat FrameworkInfo.roles as a set rather than a list, so ordering does not matter for equality.
One difference between role and roles is that for role modification, we ignore it. But, with roles modification, since this is a new feature, we can disallow it by rejecting the framework subscription.
Later, in phase 2, we will allow frameworks to modify their roles, see