Change in vdsm[ovirt-3.5]: eliminate sampling.BaseSample
by Dan Kenigsberg
Hello Antoni Segura Puimedon,
I'd like you to do a code review. Please visit
http://gerrit.ovirt.org/29644
to review the following change.
Change subject: eliminate sampling.BaseSample
......................................................................
eliminate sampling.BaseSample
For quite some time, BaseSample is not a common base class of anything.
It serves no meaningful abstraction, so this patch inlines into its only
user.
Change-Id: Ia1668e89ac21229cea1d5aac7ea155882f4295a0
Signed-off-by: Dan Kenigsberg <danken(a)redhat.com>
Reviewed-on: http://gerrit.ovirt.org/29471
Reviewed-by: Antoni Segura Puimedon <asegurap(a)redhat.com>
---
M vdsm/virt/sampling.py
1 file changed, 6 insertions(+), 14 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/44/29644/1
diff --git a/vdsm/virt/sampling.py b/vdsm/virt/sampling.py
index 4ef9890..38490c3 100644
--- a/vdsm/virt/sampling.py
+++ b/vdsm/virt/sampling.py
@@ -188,18 +188,6 @@
self.timestamp = time.time()
-class BaseSample(TimedSample):
- """
- A sample of the statistics for a process.
- """
- def __init__(self, pid, ifids):
- TimedSample.__init__(self)
- self.interfaces = {}
- for ifid in ifids:
- self.interfaces[ifid] = InterfaceSample(ifid)
- self.pidcpu = PidCpuSample(pid)
-
-
_PROC_STAT_PATH = '/proc/stat'
@@ -221,7 +209,7 @@
raise ValueError('Boot time not present')
-class HostSample(BaseSample):
+class HostSample(TimedSample):
"""
A sample of host-related statistics.
@@ -250,7 +238,11 @@
:param ifids: The IDs of the interfaces you want to sample.
:type: list
"""
- BaseSample.__init__(self, pid, ifids)
+ TimedSample.__init__(self)
+ self.interfaces = {}
+ for ifid in ifids:
+ self.interfaces[ifid] = InterfaceSample(ifid)
+ self.pidcpu = PidCpuSample(pid)
self.totcpu = TotalCpuSample()
meminfo = utils.readMemInfo()
freeOrCached = (meminfo['MemFree'] +
--
To view, visit http://gerrit.ovirt.org/29644
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia1668e89ac21229cea1d5aac7ea155882f4295a0
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: ovirt-3.5
Gerrit-Owner: Dan Kenigsberg <danken(a)redhat.com>
Gerrit-Reviewer: Antoni Segura Puimedon <asegurap(a)redhat.com>
9 years, 10 months
Change in vdsm[master]: Live Merge: Explicitly save block job info
by alitke@redhat.com
Adam Litke has uploaded a new change for review.
Change subject: Live Merge: Explicitly save block job info
......................................................................
Live Merge: Explicitly save block job info
When we removed _blockJobs from the VM.status() it had the unfortunate
side effect of causing block job info to not be saved by VM.saveState().
Fix this by explicitly adding it to toSave.
Change-Id: I6175530fe0aed1e00ad02b6a4abe0704c294e45b
Signed-off-by: Adam Litke <alitke(a)redhat.com>
---
M vdsm/virt/vm.py
1 file changed, 2 insertions(+), 0 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/58/29358/1
diff --git a/vdsm/virt/vm.py b/vdsm/virt/vm.py
index 543b798..8813d94 100644
--- a/vdsm/virt/vm.py
+++ b/vdsm/virt/vm.py
@@ -2351,6 +2351,8 @@
drive['truesize'] = str(d.truesize)
drive['apparentsize'] = str(d.apparentsize)
+ toSave['_blockJobs'] = deepcopy(self.conf.get('_blockJobs', {}))
+
with tempfile.NamedTemporaryFile(dir=constants.P_VDSM_RUN,
delete=False) as f:
pickle.dump(toSave, f)
--
To view, visit http://gerrit.ovirt.org/29358
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I6175530fe0aed1e00ad02b6a4abe0704c294e45b
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Adam Litke <alitke(a)redhat.com>
9 years, 10 months
Change in vdsm[master]: netinfo: remove deprecated getaddr and getnetmask
by asegurap@redhat.com
Antoni Segura Puimedon has uploaded a new change for review.
Change subject: netinfo: remove deprecated getaddr and getnetmask
......................................................................
netinfo: remove deprecated getaddr and getnetmask
In 5fa87504543719fdc827d2284738a7723b8a5973 we started using
libnl to retrieve both ipv4 addresses and netmask and these
methods fell into deprecation. It's time to get rid of this
old ethtool using code.
Change-Id: I33f39bb63ef440efb3b9bf00aa39f17f37813938
Signed-off-by: Antoni S. Puimedon <asegurap(a)redhat.com>
---
M lib/vdsm/netinfo.py
M vdsm/virt/vm.py
M vdsm_reg/deployUtil.py.in
3 files changed, 12 insertions(+), 26 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/00/29600/1
diff --git a/lib/vdsm/netinfo.py b/lib/vdsm/netinfo.py
index 489e6d6..a412425 100644
--- a/lib/vdsm/netinfo.py
+++ b/lib/vdsm/netinfo.py
@@ -43,7 +43,7 @@
from .ipwrapper import IPRoute2Error
from .ipwrapper import Route
from .ipwrapper import routeGet
-from .ipwrapper import routeShowGateways, routeShowAllDefaultGateways
+from .ipwrapper import routeShowGateways
from . import libvirtconnection
from .netconfpersistence import RunningConfig
from .utils import execCmd, memoized, CommandPath
@@ -327,14 +327,6 @@
return 0
-def getaddr(dev):
- dev_info_list = ethtool.get_interfaces_info(dev.encode('utf8'))
- addr = dev_info_list[0].ipv4_address
- if addr is None:
- addr = ''
- return addr
-
-
def prefix2netmask(prefix):
if not 0 <= prefix <= 32:
raise ValueError('%s is not a valid prefix value. It must be between '
@@ -343,22 +335,15 @@
struct.pack("!I", int('1' * prefix + '0' * (32 - prefix), 2)))
-def getnetmask(dev):
- dev_info_list = ethtool.get_interfaces_info(dev.encode('utf8'))
- netmask = dev_info_list[0].ipv4_netmask
- if netmask == 0:
- return ''
- return prefix2netmask(netmask)
-
-
def getDefaultGateway():
output = routeShowGateways('main')
return Route.fromText(output[0]) if output else None
-def getIpInfo(dev, ipaddrs):
- ipv4addr = ''
- ipv4netmask = ''
+def getIpInfo(dev, ipaddrs=None):
+ if ipaddrs is None:
+ ipaddrs = _getIpAddrs()
+ ipv4addr = ipv4netmask = ''
ipv4addrs = []
ipv6addrs = []
for addr in ipaddrs[dev]:
@@ -820,8 +805,9 @@
def getIpAddresses():
- "Return a list of the host's IP addresses"
- return filter(None, [getaddr(i) for i in ethtool.get_active_devices()])
+ "Return a list of the host's IPv4 addresses"
+ return [addr['address'] for addr in nl_addr.iter_addrs() if
+ addr['family'] == 'inet']
def IPv4toMapped(ip):
diff --git a/vdsm/virt/vm.py b/vdsm/virt/vm.py
index 6e937fc..46c595c 100644
--- a/vdsm/virt/vm.py
+++ b/vdsm/virt/vm.py
@@ -5719,7 +5719,7 @@
try:
nets = netinfo.networks()
device = nets[network].get('iface', network)
- ip = netinfo.getaddr(device)
+ ip, _, _, _ = netinfo.getIpInfo(device)
except (libvirt.libvirtError, KeyError, IndexError):
ip = config.get('addresses', 'guests_gateway_ip')
if ip == '':
diff --git a/vdsm_reg/deployUtil.py.in b/vdsm_reg/deployUtil.py.in
index ad91e54..a2cc89d 100644
--- a/vdsm_reg/deployUtil.py.in
+++ b/vdsm_reg/deployUtil.py.in
@@ -463,10 +463,10 @@
strIface = _getMGTIface(vdcHostName)
if strIface is not None:
- strReturn = netinfo.getaddr(strIface)
+ ipv4addr, _, _, _ = netinfo.getIpInfo(strIface)
- logging.debug("getMGTIP: Host MGT IP=" + strReturn)
- return strReturn
+ logging.debug("getMGTIP: Host MGT IP=", ipv4addr)
+ return ipv4addr
def preventDuplicate(bridgeName=None):
--
To view, visit http://gerrit.ovirt.org/29600
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I33f39bb63ef440efb3b9bf00aa39f17f37813938
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Antoni Segura Puimedon <asegurap(a)redhat.com>
9 years, 10 months
Change in vdsm[master]: netinfo: remove unused getipv6addrs
by asegurap@redhat.com
Antoni Segura Puimedon has uploaded a new change for review.
Change subject: netinfo: remove unused getipv6addrs
......................................................................
netinfo: remove unused getipv6addrs
In 5fa87504543719fdc827d2284738a7723b8a5973 we started using libnl
to retrieve both ipv4 and ipv6 addresses and this method fell into
deprecation. It's time to get rid of this unused code.
Change-Id: I4ce3631185f44574454e240eb62bf659c4528c81
Signed-off-by: Antoni S. Puimedon <asegurap(a)redhat.com>
---
M lib/vdsm/netinfo.py
1 file changed, 0 insertions(+), 7 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/99/29599/1
diff --git a/lib/vdsm/netinfo.py b/lib/vdsm/netinfo.py
index 73cc30b..489e6d6 100644
--- a/lib/vdsm/netinfo.py
+++ b/lib/vdsm/netinfo.py
@@ -372,13 +372,6 @@
return ipv4addr, ipv4netmask, ipv4addrs, ipv6addrs
-def getipv6addrs(dev):
- """Return a list of IPv6 addresses in the format of 'address/prefixlen'."""
- dev_info_list = ethtool.get_interfaces_info(dev.encode('utf8'))
- ipv6addrs = dev_info_list[0].get_ipv6_addresses()
- return [addr.address + '/' + str(addr.netmask) for addr in ipv6addrs]
-
-
def gethwaddr(dev):
return file('/sys/class/net/%s/address' % dev).read().strip()
--
To view, visit http://gerrit.ovirt.org/29599
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I4ce3631185f44574454e240eb62bf659c4528c81
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Antoni Segura Puimedon <asegurap(a)redhat.com>
9 years, 10 months
Change in vdsm[master]: netinfo: add gateway reporting to all devices
by asegurap@redhat.com
Antoni Segura Puimedon has uploaded a new change for review.
Change subject: netinfo: add gateway reporting to all devices
......................................................................
netinfo: add gateway reporting to all devices
by adding gateway reporting to all the devices we make it possible
to for a vdsm client to gather which is the gateway of the device
that is to be used for providing link to a bridged (VM) network.
Change-Id: I5dc4730214efa9eaba8425c3bf4842441b97084f
Signed-off-by: Antoni S. Puimedon <asegurap(a)redhat.com>
---
M lib/vdsm/netinfo.py
M lib/vdsm/netlink/route.py
2 files changed, 48 insertions(+), 31 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/04/28704/1
diff --git a/lib/vdsm/netinfo.py b/lib/vdsm/netinfo.py
index e42e6f4..bcbfcab 100644
--- a/lib/vdsm/netinfo.py
+++ b/lib/vdsm/netinfo.py
@@ -48,6 +48,7 @@
from .utils import execCmd, memoized, CommandPath
from .netlink import link as nl_link
from .netlink import addr as nl_addr
+from .netlink import route as nl_route
NET_CONF_DIR = '/etc/sysconfig/network-scripts/'
@@ -511,8 +512,8 @@
return paddr
-def _getNetInfo(iface, dhcp4, bridged, gateways, ipv6routes, ipaddrs,
- qosInbound, qosOutbound):
+def _getNetInfo(iface, dhcp4, bridged, routes, ipaddrs, qosInbound,
+ qosOutbound):
'''Returns a dictionary of properties about the network's interface status.
Raises a KeyError if the iface does not exist.'''
data = {}
@@ -530,10 +531,10 @@
data.update({'iface': iface, 'bridged': bridged,
'addr': ipv4addr, 'netmask': ipv4netmask,
'bootproto4': 'dhcp' if iface in dhcp4 else 'none',
- 'gateway': getgateway(gateways, iface),
'ipv4addrs': ipv4addrs,
'ipv6addrs': ipv6addrs,
- 'ipv6gateway': ipv6routes.get(iface, '::'),
+ 'gateway': _getGateway(routes, iface),
+ 'ipv6gateway': _getGateway(routes, iface, family=6),
'mtu': str(getMtu(iface))})
if qosInbound:
data['qosInbound'] = qosInbound
@@ -548,18 +549,16 @@
return data
-def _bridgeinfo(link, gateways, ipv6routes, ipaddrs):
- info = _devinfo(link, ipaddrs)
- info.update({'gateway': getgateway(gateways, link.name),
- 'ipv6gateway': ipv6routes.get(link.name, '::'),
- 'ports': ports(link.name),
+def _bridgeinfo(link, routes, ipaddrs):
+ info = _devinfo(link, routes, ipaddrs)
+ info.update({'ports': ports(link.name),
'stp': bridge_stp_state(link.name),
'opts': bridgeOpts(link.name)})
return info
-def _nicinfo(link, paddr, ipaddrs):
- info = _devinfo(link, ipaddrs)
+def _nicinfo(link, paddr, routes, ipaddrs):
+ info = _devinfo(link, routes, ipaddrs)
info.update({'hwaddr': link.address, 'speed': nicSpeed(link.name)})
if paddr.get(link.name):
info['permhwaddr'] = paddr[link.name]
@@ -636,24 +635,26 @@
if val and val != defaults.get(opt)))
-def _bondinfo(link, ipaddrs):
- info = _devinfo(link, ipaddrs)
+def _bondinfo(link, routes, ipaddrs):
+ info = _devinfo(link, routes, ipaddrs)
info.update({'hwaddr': link.address, 'slaves': slaves(link.name)})
return info
-def _vlaninfo(link, ipaddrs):
- info = _devinfo(link, ipaddrs)
+def _vlaninfo(link, routes, ipaddrs):
+ info = _devinfo(link, routes, ipaddrs)
info.update({'iface': link.device, 'vlanid': link.vlanid})
return info
-def _devinfo(link, ipaddrs):
+def _devinfo(link, routes, ipaddrs):
ipv4addr, ipv4netmask, ipv4addrs, ipv6addrs = getIpInfo(link.name, ipaddrs)
return {'addr': ipv4addr,
'cfg': getIfaceCfg(link.name),
'ipv4addrs': ipv4addrs,
'ipv6addrs': ipv6addrs,
+ 'gateway': _getGateway(routes, link.name),
+ 'ipv6gateway': _getGateway(routes, link.name, family=6),
'mtu': str(link.mtu),
'netmask': ipv4netmask}
@@ -734,13 +735,30 @@
return addrs
-def _libvirtNets2vdsm(nets, gateways=None, ipv6routes=None,
- ipAddrs=None):
+def _getGateway(routes, dev, family=4):
+ """Returns the default gateway for a device and an address family"""
+ try:
+ gateway, = [r for r in routes[dev] if
+ r['destination'] == 'none' and
+ r['family'] == ('inet6' if family == 6 else 'inet') and
+ r['scope'] == 'universe' and
+ r['table'] == nl_route.MAIN_TABLE]
+ except ValueError: # no default gateway for the device
+ return '::' if family == 6 else ''
+ return gateway['gateway']
+
+
+def _getRoutes():
+ routes = defaultdict(list)
+ for route in nl_route.iter_routes():
+ routes[route['oif']].append(route)
+ return routes
+
+
+def _libvirtNets2vdsm(nets, routes=None, ipAddrs=None):
dhcp4 = getDhclientIfaces(_DHCLIENT_LEASES_GLOBS)
- if gateways is None:
- gateways = getRoutes()
- if ipv6routes is None:
- ipv6routes = getIPv6Routes()
+ if routes is None:
+ routes = _getRoutes()
if ipAddrs is None:
ipAddrs = _getIpAddrs()
d = {}
@@ -748,8 +766,7 @@
try:
d[net] = _getNetInfo(netAttr.get('iface', net),
dhcp4,
- netAttr['bridged'], gateways,
- ipv6routes, ipAddrs,
+ netAttr['bridged'], routes, ipAddrs,
netAttr.get('qosInbound'),
netAttr.get('qosOutbound'))
except KeyError:
@@ -774,27 +791,26 @@
def get(vdsmnets=None):
d = {'bondings': {}, 'bridges': {}, 'networks': {}, 'nics': {},
'vlans': {}}
- gateways = getRoutes()
- ipv6routes = getIPv6Routes()
paddr = permAddr()
ipaddrs = _getIpAddrs()
+ routes = _getRoutes()
if vdsmnets is None:
nets = networks()
- d['networks'] = _libvirtNets2vdsm(nets, gateways, ipv6routes, ipaddrs)
+ d['networks'] = _libvirtNets2vdsm(nets, routes, ipaddrs)
else:
d['networks'] = vdsmnets
for dev in (link for link in getLinks() if not link.isHidden()):
if dev.isBRIDGE():
d['bridges'][dev.name] = \
- _bridgeinfo(dev, gateways, ipv6routes, ipaddrs)
+ _bridgeinfo(dev, routes, ipaddrs)
elif dev.isNICLike():
- d['nics'][dev.name] = _nicinfo(dev, paddr, ipaddrs)
+ d['nics'][dev.name] = _nicinfo(dev, paddr, routes, ipaddrs)
elif dev.isBOND():
- d['bondings'][dev.name] = _bondinfo(dev, ipaddrs)
+ d['bondings'][dev.name] = _bondinfo(dev, routes, ipaddrs)
elif dev.isVLAN():
- d['vlans'][dev.name] = _vlaninfo(dev, ipaddrs)
+ d['vlans'][dev.name] = _vlaninfo(dev, routes, ipaddrs)
_cfgBootprotoCompat(d)
diff --git a/lib/vdsm/netlink/route.py b/lib/vdsm/netlink/route.py
index 389a238..5e60d13 100644
--- a/lib/vdsm/netlink/route.py
+++ b/lib/vdsm/netlink/route.py
@@ -26,6 +26,7 @@
from .link import _nl_link_cache, _link_index_to_name
EXTRA_TABLE_FIELD = 252
+MAIN_TABLE = 254
def iter_routes():
--
To view, visit http://gerrit.ovirt.org/28704
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I5dc4730214efa9eaba8425c3bf4842441b97084f
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Antoni Segura Puimedon <asegurap(a)redhat.com>
9 years, 10 months