docs: 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)