Revision 4fe43605

b/tools/move-instance
30 30
import time
31 31
import logging
32 32
import optparse
33
import random
33 34
import threading
34 35

  
35 36
from ganeti import cli
......
489 490
    # or failure
490 491
    creation_attempts.append(False)
491 492

  
493
    # Initiate the RNG for the variations
494
    random.seed()
495

  
492 496
    for is_attempt_opportunistic in creation_attempts:
493 497
      job_id = self._CreateInstance(dest_client, mrt.move.dest_instance_name,
494 498
                                    mrt.move.dest_pnode, mrt.move.dest_snode,
......
515 519
           err.args[1] != rapi.client.ECODE_TEMP_NORES:
516 520
          raise
517 521

  
518
      logging.info("Opportunistic attempt unsuccessful, waiting %d seconds"
522
      delay_to_use = MoveDestExecutor._VaryDelay(mrt)
523
      logging.info("Opportunistic attempt unsuccessful, waiting %.2f seconds"
519 524
                   " before another creation attempt is made",
520
                   mrt.move.opportunistic_delay)
521
      time.sleep(mrt.move.opportunistic_delay)
525
                   delay_to_use)
526
      time.sleep(delay_to_use)
527

  
528
  @staticmethod
529
  def _VaryDelay(mrt):
530
    """ Varies the opportunistic delay by a small amount.
531

  
532
    """
533
    MAX_VARIATION = 0.15
534
    variation_factor = (1.0 + random.uniform(-MAX_VARIATION, MAX_VARIATION))
535
    return mrt.move.opportunistic_delay * variation_factor
522 536

  
523 537
  @staticmethod
524 538
  def _SetImportInfo(mrt, impinfo):

Also available in: Unified diff