Revision afa1386e

b/lib/cmdlib.py
5323 5323
  """
5324 5324
  port = lu.cfg.AllocatePort()
5325 5325
  vgname = lu.cfg.GetVGName()
5326
  shared_secret = lu.cfg.GenerateDRBDSecret()
5326
  shared_secret = lu.cfg.GenerateDRBDSecret(lu.proc.GetECId())
5327 5327
  dev_data = objects.Disk(dev_type=constants.LD_LV, size=size,
5328 5328
                          logical_id=(vgname, names[0]))
5329 5329
  dev_meta = objects.Disk(dev_type=constants.LD_LV, size=128,
b/lib/config.py
138 138
    self._temporary_ids = TemporaryReservationManager()
139 139
    self._temporary_drbds = {}
140 140
    self._temporary_macs = TemporaryReservationManager()
141
    self._temporary_secrets = TemporaryReservationManager()
141 142
    # Note: in order to prevent errors when resolving our name in
142 143
    # _DistributeConfig, we compute it here once and reuse it; it's
143 144
    # better to raise an error before starting to modify the config
......
190 191
      self._temporary_macs.Reserve(mac, ec_id)
191 192

  
192 193
  @locking.ssynchronized(_config_lock, shared=1)
193
  def GenerateDRBDSecret(self):
194
  def GenerateDRBDSecret(self, ec_id):
194 195
    """Generate a DRBD secret.
195 196

  
196 197
    This checks the current disks for duplicates.
197 198

  
198 199
    """
199
    all_secrets = self._AllDRBDSecrets()
200
    retries = 64
201
    while retries > 0:
202
      secret = utils.GenerateSecret()
203
      if secret not in all_secrets:
204
        break
205
      retries -= 1
206
    else:
207
      raise errors.ConfigurationError("Can't generate unique DRBD secret")
208
    return secret
209

  
200
    return self._temporary_secrets.Generate(self._AllDRBDSecrets(),
201
                                            utils.GenerateSecret,
202
                                            ec_id)
210 203
  def _AllLVs(self):
211 204
    """Compute the list of all LVs.
212 205

  
......
1429 1422
    """
1430 1423
    self._temporary_ids.DropECReservations(ec_id)
1431 1424
    self._temporary_macs.DropECReservations(ec_id)
1425
    self._temporary_secrets.DropECReservations(ec_id)
1432 1426

  

Also available in: Unified diff