What is the default time interval for 'virt-who' ID mappings and can it be reduced?

Solution Verified - Updated -

Environment

  • Red Hat Enterprise Linux(RHEL) 5.7 and newer
  • Red Hat Enterprise Linux(RHEL) 6.1 and newer
  • Red Hat Enterprise Linux(RHEL) 7.0 and newer
  • VMWare ESX hosts
  • Red Hat Subscription Manager
  • Red Hat Customer Portal

Issue

  • Using virt-who to map our VMWare ESX hosts subscriptions to guests systems.
  • Whenever a new virtual machine is created, we have to wait until a new mapping has happened (that takes an hour, normally i guess).
  1. It possible and valid to set the VIRTWHO_INTERVAL=300 for example? Or would this create too much load or network-traffic (or whatever)?
  2. Is there perhaps a trigger to manually start the mapping whenever there is a new virtual machine?

Resolution

  • Yes, unfortunately there's no events to trigger virt-who to update the guest's UUID immediately after adding a guest with ESX mode.
  • You can set shorter checking interval as a workaround (--interval option or VIRTWHO_INTERVAL in /etc/sysconfig/virt-who). If using value lower than 1800s, it is recommended to monitor CPU and memory usage of candlepin application / tomcat service on the server where virt-who reports to.

Root Cause

  • There is no known way how to provide this function for VDSM and ESX mode.

Diagnostic Steps

Here's code;

  • /usr/share/virt-who/virt-who.py
...
    61  # Default interval to retry after unsuccessful run
    62  RetryInterval = 60 # One minute
    63  # Default interval for sending list of UUIDs
    64  DefaultInterval = 3600 # Once per hour
...
   529              if virtWho.send():
   530                  # Check if connection is established each 'RetryInterval' seconds
   531                  slept = 0
   532                  while slept < options.interval:
   533                      # Sleep 'RetryInterval' or the rest of options.interval
   534                      t = min(RetryInterval, options.interval - slept)
   535                      # But sleep at least one second
   536                      t = max(t, 1)
   537                      time.sleep(t)
   538                      slept += t
   539  
   540                      # Reload configuration if queued
   541                      if virtWho.doReload:
   542                          virtWho.reloadConfig()
   543                          break
   544  
   545                      # Check the connection
   546                      if not virtWho.ping():
   547                          # End the cycle
   548                          break
   549              else:
   550                  # If last send fails, new try will be sooner
   551                  time.sleep(RetryInterval)

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.

Comments