- Add a CooperativeRingBuilder subclass of RingBuilder. The subclass takes
a reference to a parent CompositeRingBuilder which is consulted about
whether a part can be moved during rebalance. The parent builder in turn
consults all component CooperativeRingBuilder's to decide if a part can
be moved.
- Make CompositeRingBuilder load CooperativeRingBuilder instances.
- Add rebalance() method to CompositeRingBuilder class.
- Add a load_components() method to CompositeRingBuilder class.
- Change the CompositeRingBuilder compose() method to NOT by default
raise a ValueError if component builders have not been modified since
last loaded. With the load_components method being added it makes
less sense insist by default on loaded components being modified, and
it is desirable to have the same semantic for all methods that load
components. Previously it has been necessary to use the 'force' flag
with compose() to prevent these errors being raised, which has the
unfortunate side effect of also disabling all other checks on
component builders. A new 'require_modified' parameter is added to
compose() which defaults to False but can be set to True if the
previous default behaviour is required.
Change-Id: I1b30cb3d776be441346a4131007d2487a5440a81