def distributed_wait(modulo=None, wait=None, operation_name='operation'): ''' Distribute operations by waiting based on modulo_distribution If modulo and or wait are not set, check config_get for those values. If config values are not set, default to modulo=3 and wait=30. :param modulo: int The modulo number creates the group distribution :param wait: int The constant time wait value :param operation_name: string Operation name for status message i.e. 'restart' :side effect: Calls config_get() :side effect: Calls log() :side effect: Calls status_set() :side effect: Calls time.sleep() ''' if modulo is None: modulo = config_get('modulo-nodes') or 3 if wait is None: wait = config_get('known-wait') or 30 if juju_is_leader(): # The leader should never wait calculated_wait = 0 else: # non_zero_wait=True guarantees the non-leader who gets modulo 0 # will still wait calculated_wait = modulo_distribution(modulo=modulo, wait=wait, non_zero_wait=True) msg = "Waiting {} seconds for {} ...".format(calculated_wait, operation_name) log(msg, DEBUG) status_set('maintenance', msg) time.sleep(calculated_wait)
def distributed_wait(modulo=None, wait=None, operation_name='operation'): ''' Distribute operations by waiting based on modulo_distribution If modulo and or wait are not set, check config_get for those values. :param modulo: int The modulo number creates the group distribution :param wait: int The constant time wait value :param operation_name: string Operation name for status message i.e. 'restart' :side effect: Calls config_get() :side effect: Calls log() :side effect: Calls status_set() :side effect: Calls time.sleep() ''' if modulo is None: modulo = config_get('modulo-nodes') if wait is None: wait = config_get('known-wait') calculated_wait = modulo_distribution(modulo=modulo, wait=wait) msg = "Waiting {} seconds for {} ...".format(calculated_wait, operation_name) log(msg, DEBUG) status_set('maintenance', msg) time.sleep(calculated_wait)