Also call it for dropping reservations when a job finishes. And remove the field for temporary DRBDs, that has been already moved to WConfD.
Signed-off-by: Petr Pudlak <[email protected]> --- lib/config.py | 59 +++++++++++------------------------------------------------ 1 file changed, 11 insertions(+), 48 deletions(-) diff --git a/lib/config.py b/lib/config.py index 6eb36e4..93260ea 100644 --- a/lib/config.py +++ b/lib/config.py @@ -286,12 +286,10 @@ class ConfigWriter(object): self._cfg_file = cfg_file self._getents = _getents self._temporary_ids = TemporaryReservationManager() - self._temporary_drbds = {} - self._temporary_macs = TemporaryReservationManager() self._temporary_secrets = TemporaryReservationManager() self._temporary_lvs = TemporaryReservationManager() self._temporary_ips = TemporaryReservationManager() - self._all_rms = [self._temporary_ids, self._temporary_macs, + self._all_rms = [self._temporary_ids, self._temporary_secrets, self._temporary_lvs, self._temporary_ips] # Note: in order to prevent errors when resolving our name later, @@ -690,61 +688,22 @@ class ConfigWriter(object): assert isinstance(data, dict), "Not a dictionary: " + str(data) return data - def _UnlockedGetNetworkMACPrefix(self, net_uuid): - """Return the network mac prefix if it exists or the cluster level default. - - """ - prefix = None - if net_uuid: - nobj = self._UnlockedGetNetwork(net_uuid) - if nobj.mac_prefix: - prefix = nobj.mac_prefix - - return prefix - - def _GenerateOneMAC(self, prefix=None): - """Return a function that randomly generates a MAC suffic - and appends it to the given prefix. If prefix is not given get - the cluster level default. - - """ - if not prefix: - prefix = self._ConfigData().cluster.mac_prefix - - def GenMac(): - byte1 = random.randrange(0, 256) - byte2 = random.randrange(0, 256) - byte3 = random.randrange(0, 256) - mac = "%s:%02x:%02x:%02x" % (prefix, byte1, byte2, byte3) - return mac - - return GenMac - - @_ConfigSync(shared=1) - def GenerateMAC(self, net_uuid, ec_id): + def GenerateMAC(self, net_uuid, _ec_id): """Generate a MAC for an instance. This should check the current instances for duplicates. """ - existing = self._AllMACs() - prefix = self._UnlockedGetNetworkMACPrefix(net_uuid) - gen_mac = self._GenerateOneMAC(prefix) - return self._temporary_ids.Generate(existing, gen_mac, ec_id) + return self._wconfd.GenerateMAC(self._GetWConfdContext(), net_uuid) - @_ConfigSync(shared=1) - def ReserveMAC(self, mac, ec_id): + def ReserveMAC(self, mac, _ec_id): """Reserve a MAC for an instance. This only checks instances managed by this cluster, it does not check for potential collisions elsewhere. """ - all_macs = self._AllMACs() - if mac in all_macs: - raise errors.ReservationError("mac already in use") - else: - self._temporary_macs.Reserve(ec_id, mac) + self._wconfd.ReserveMAC(self._GetWConfdContext(), mac) def _UnlockedCommitTemporaryIps(self, ec_id): """Commit all reserved IP address to their respective pools @@ -3220,12 +3179,16 @@ class ConfigWriter(object): self._WriteConfig(feedback_fn=feedback_fn) - def _UnlockedDropECReservations(self, ec_id): + def _UnlockedDropECReservations(self, _ec_id): """Drop per-execution-context reservations """ + # FIXME: Remove the following two lines after all reservations are moved to + # wconfd. for rm in self._all_rms: - rm.DropECReservations(ec_id) + rm.DropECReservations(_ec_id) + if not self._offline: + self._wconfd.DropAllReservations(self._GetWConfdContext()) def DropECReservations(self, ec_id): self._UnlockedDropECReservations(ec_id) -- 1.9.1.423.g4596e3a
