Change in vdsm[master]: Add man page for vdsm.conf
by Douglas Schilling Landgraf
Douglas Schilling Landgraf has uploaded a new change for review.
Change subject: Add man page for vdsm.conf
......................................................................
Add man page for vdsm.conf
Show to user the vdsm.conf options.
Change-Id: Id8e5a47d484fa06070d4566a39cab8a7a53ea717
Signed-off-by: Douglas Schilling Landgraf <dougsland(a)redhat.com>
---
M debian/vdsm.install
M vdsm.spec.in
M vdsm/Makefile.am
A vdsm/vdsm.conf.5
4 files changed, 400 insertions(+), 0 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/91/22891/1
diff --git a/debian/vdsm.install b/debian/vdsm.install
index ef46ed3..0c2b137 100644
--- a/debian/vdsm.install
+++ b/debian/vdsm.install
@@ -31,6 +31,7 @@
./usr/libexec/vdsm/unpersist-vdsm-hook
./usr/libexec/vdsm/vdsm-gencerts.sh
./usr/libexec/vdsm/vdsmd_init_common.sh
+./usr/share/man/man5/vdsm.conf.5
./usr/share/man/man8/vdsmd.8
./usr/share/vdsm/API.py
./usr/share/vdsm/BindingJsonRpc.py
diff --git a/vdsm.spec.in b/vdsm.spec.in
index 385a29b..364997b 100644
--- a/vdsm.spec.in
+++ b/vdsm.spec.in
@@ -1014,6 +1014,7 @@
%{python_sitelib}/sos/plugins/vdsm.py*
/lib/udev/rules.d/12-vdsm-lvm.rules
/etc/security/limits.d/99-vdsm.conf
+%{_mandir}/man5/vdsm.conf.5*
%{_mandir}/man8/vdsmd.8*
%if 0%{?rhel}
%dir %{_localstatedir}/log/core
diff --git a/vdsm/Makefile.am b/vdsm/Makefile.am
index 3834f55..1c1671e 100644
--- a/vdsm/Makefile.am
+++ b/vdsm/Makefile.am
@@ -89,6 +89,9 @@
vdsm-restore-net-config \
$(NULL)
+dist_man5_MANS = \
+ vdsm.conf.5
+
nodist_man8_MANS = \
vdsmd.8
diff --git a/vdsm/vdsm.conf.5 b/vdsm/vdsm.conf.5
new file mode 100644
index 0000000..98b4ccd
--- /dev/null
+++ b/vdsm/vdsm.conf.5
@@ -0,0 +1,395 @@
+.\"Copyright 2010-2013 Red Hat, Inc. and/or its affiliates.
+.\"
+.\"Licensed to you under the GNU General Public License as published by
+.\"the Free Software Foundation; either version 2 of the License, or
+.\"(at your option) any later version. See the files README and
+.\"LICENSE_GPL_v2 which accompany this distribution.
+.\"
+.\"
+.\" File Name macro definition plagiarized from bash.
+.\"
+.de FN
+\fI\|\\$1\|\fP
+..
+.TH VDSM.CONF 5 "December 6, 2013" "" ""
+.SH NAME
+vdsm.conf \- The configuration file for Virtual Desktops and Servers Manager (VDSM)
+.br
+.SH SYNOPSIS
+.PP
+The
+vdsm\&.conf
+file is a configuration file for VDSM.
+vdsm\&.conf
+contains runtime configuration information for the VDSM\&.
+The complete description of the file format and possible parameters held within are here for reference
+purposes\&.
+.SH "FILE FORMAT"
+.PP
+The file consists of sections and parameters\&. A section begins with the name of the section in square brackets and
+continues until the next section begins\&. Sections contain parameters of the form:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+\fIname\fR = \fIvalue \fR
+.fi
+.if n \{\
+.RE
+.\}
+
+.SH CONFIGURATION BY SECTION (EXAMPLE)
+.PP
+.B [vars]
+
+\fBcore_dump_enable\fR = true
+.br
+Enable core dump
+
+\fBhost_mem_reserve\fR = 256
+.br
+Reserves memory for the host to prevent VMs from using all the physical pages. The values are in Mbytes.
+
+\fBguest_ram_overhead\fR = 65
+
+\fBextra_mem_reserve\fR = 65
+.br
+Memory reserved for non-vds-administered programs.
+
+\fBfake_nics\fR
+.br
+Comma-separated list of fnmatch-patterns for dummy hosts nics to be shown to vdsm.
+
+\fBnic_model\fR = rtl8139,pv
+.br
+NIC model is rtl8139, ne2k_pci pv or any other valid device recognized by kvm/qemu if a coma separated list
+given then a NIC per device will be created.
+
+\fBmigration_timeout\fR = 300
+.br
+Maximum time the destination waits for migration to end. Source waits twice aslong (to avoid races)
+
+\fBmigration_listener_timeout\fR = 30
+.br
+Time to wait (in seconds) for migration destination to start listening before migration begins.
+
+\fBmigration_max_bandwidth\fR = 32
+.br
+Maximum bandwidth for migration, in MiBps, 0 means libvirt's default, since 0.10.x default in libvirt is unlimited
+
+\fBmigration_monitor_intervang\fR = 10
+.br
+How often (in seconds) should the monitor thread pulse, 0 means the thread is disabled
+
+\fBhidden_nics\fR = wlan*,usb*
+.br
+Comma-separated list of fnmatch-patterns for host nics to be hidden from vdsm.
+
+\fBdefault_bridge\fR = engine
+.br
+Default bridge
+
+\fBmigration_downtime\fR = 500
+.br
+Maxmium allowed downtime for live migration in milliseconds (anything below 100ms is ignored) if you do not care about
+liveness of migration, set to a very high value, such as 600000.
+
+\fBmigration_downtime_steps\fR = 10
+.br
+Incremental steps used to reach migration_downtime
+
+\fBmax_outgoing_migrations\fR = 3
+.br
+Maximum concurrent outgoing migrations
+
+\fBsys_shutdown_timeout\fR = 10
+.br
+Destroy and shutdown timeouts (in sec) before completing the action.
+
+\fBuser_shutdown_timeout\fR = 30
+.br
+Grace period (seconds) to let guest user close his applications before shutdown.
+
+\fBguest_agent_timeout\fR = 30
+.br
+Time (in sec) to wait for guest agent.
+
+\fBvm_command_timeout\fR = 60
+.br
+Time to wait (in seconds) for vm to respond to a monitor command, 30 secs is a nice default. Set to 300 if the vm is expected to freeze during cluster failover.
+
+\fBvm_watermark_interval\fR = 2
+.br
+How often should we sample each vm for statistics (seconds).
+
+\fBvm_sample_cpu_interval\fR = 15
+.br
+Interval to collect sampe from CPU
+
+\fBvm_sample_cpu_window\fR = 2
+.br
+Interval to collect from CPU window
+
+\fBvm_sample_disk_interval\fR = 60
+.br
+Interval to collect sample from disk
+
+\fBvm_sample_disk_window\fR = 2
+.br
+Interval to collect disk window
+
+\fBvm_sample_disk_latency_interval\fR = 60
+.br
+Interval to collect disk latency
+
+\fBvm_sample_disk_latency_window\fR = 2
+.br
+Interval to collect disk latency window
+
+\fBvm_sample_net_interval\fR = 5
+.br
+Interval to collect sample from net
+
+\fBvm_sample_net_window\fR = 2
+.br
+Interval to collect sample from net window
+
+\fBtrust_store_path\fR = /etc/pki/vdsm
+.br
+Where the certificates and keys are situated
+
+\fBssl\fR = true
+.br
+Whether to use ssl encryption and authentication.
+
+\fBvds_responsiveness_timeout\fR = 60
+.br
+Responsiveness timeout
+
+\fBvdsm_nice\fR = -5
+.br
+Set vdsm scheduling priority
+
+\fBqemu_drive_cache\fR = none
+.br
+Qemu drive cache
+
+\fBfake_kvm_support\fR = false
+.br
+Emulate kvm support
+
+\fBxmlrpc_enable\fR = true
+.br
+Enable the xmlrpc server
+
+\fBjsonrpc_enable\fR = true
+.br
+Enable the JSON RPC server
+
+\fBreport_host_threads_as_cores\fR = false
+.br
+Count each cpu hyperthread as an individual core
+
+\fBlibvirt_env_variable_log_filters\fR
+.br
+Specify the log filters to track libvirt calls
+
+\fBlibvirt_env_variable_log_outputs\fR
+.br
+Specify the output to track libvirt calls
+
+.B [ksm]
+.br
+\fBksm_monitor_thread\fR = true
+.br
+KSM Monitor
+
+.br
+.B [mom]
+.br
+\fBconf\fR = /etc/vdsm/mom.conf
+.br
+Mom conf file
+.br
+
+.B [irs]
+.br
+\fBirs_enable\fR = true
+.br
+Enable IRS
+
+\fBrepository\fR = path to repository
+.br
+Image Repository
+
+\fBhsm_tasks\fR = (repository)/hsm
+.br
+hsm dir
+
+\fBimages\fR = images/
+.br
+images dir
+
+\fBirsd\fR = (images)/irsd
+.br
+irsd dir
+
+\fBimages_check_times\fR = 0
+.br
+Image repository check period (seconds).
+
+\fBvolume_utilization_percent\fR = 50
+.br
+Volume utilization percent
+
+\fBvolume_utilization_chunk_mb\fR = 1024
+.br
+Volume utilization chunk of mb
+
+\fBvol_size_sample_interval\fR = 60
+.br
+How often should the volume size be checked (seconds).
+
+\fBsd_validate_timeout\fR = 80
+.br
+Storage domain validate timeout, the maximum number of seconds to wait until all the domains will be validated.
+
+\fBscsi_rescan_minimal_timeout\fR = 2
+.br
+The minimum number of seconds to wait for scsi scan to return.
+
+\fBscsi_rescan_maximal_timeout\fR = 30
+.br
+The maximal number of seconds to wait for scsi scan to return.
+
+\fBsd_health_check_delay\fR = 10
+.br
+Storage domain health check delay, the amount of seconds to wait between two successive run of the domain health check.
+
+\fBnfs_mount_options\fR = soft,nosharecache
+.br
+NFS mount options, comma-separated list (NB: no white space allowed!)
+
+\fBpools_data_dir\fR = /var/run/vdsm/pools
+.br
+Pool data dir
+
+\fBvol_extend_policy\fR = ON
+.br
+Volume extend policy
+
+\fBlock_util_path\fR = /usr/libexec/vdsm
+.br
+Block util path
+
+\fBlock_cmd\fR = spmprotect.sh
+.br
+The lock command
+
+\fBfree_lock_cmd\fR = spmstop.sh
+.br
+The free lock command
+
+\fBthread_pool_size\fR = 10
+.br
+Thread pool size
+
+\fBmax_tasks\fR = 500
+.br
+Number max of tasks
+
+\fBlvm_dev_whitelist\fR
+.br
+LVM whitelist
+
+\fBmd_backup_versions\fR = 30
+.br
+Versions of backup
+
+\fBmd_backup_dir\fR = /var/log/vdsm/backup
+.br
+Backup dir
+
+\fBmaximum_allowed_pvs\fR = 8
+.br
+The number of PVs per VG has a hard-coded limit of 10.
+
+\fBrepo_stats_cache_refresh_timeout\fR = 300
+.br
+Repo stats cache refresh
+
+\fBtask_resource_default_timeout\fR = 120000
+.br
+Task resource default timeout
+
+\fBprepare_image_timeout\fR = 600000
+.br
+Prepare image timeout
+
+\fBgc_blocker_force_collect_interval\fR = 60
+.br
+Force collect interval
+
+\fBmaximum_domains_in_pool\fR = 100
+.br
+Process pool configuration.
+
+\fBprocess_pool_size\fR = 100
+.br
+Pool size
+
+\fBprocess_pool_timeout\fR = 60
+.br
+Pool timeout
+
+\fBprocess_pool_grace_period\fR = 2
+.br
+Pool grace period
+
+\fBprocess_pool_max_slots_per_domain\fR = 10
+.br
+Max slots per domain
+
+\fBiscsi_default_ifaces\fR = default
+.br
+Comma seperated ifaces to connect with. i.e. iser,default
+
+\fBuse_volume_leases\fR = false
+.br
+Whether to use the volume leases or not.
+
+.B [address]
+.br
+\fBmanagement_port\fR = 54321
+.br
+Port on which the vdsmd server listens to network clients
+
+\fBss_pool_timeoutjson_port\fR = 4044
+.br
+Port on which the vdsmd Json RPC server listens to network clients
+
+\fBmanagement_ip\fR
+.br
+IP address of management server
+
+\fBguests_gateway_ip\fR
+.br
+Guests gateway IP address
+
+.SH "SEE ALSO"
+.PP
+
+\fBvdsClient\fR(1),
+\fBvdsmd\fR(8)
+
+.SH AUTHOR
+VDSM was written by Ayal Baron, Barak Azulay, Cyril Plisko, Dan Kenigsberg,
+Doron Fediuck, Igor Lvovsky, Saggi Mizrahi, Shahar Frank, Simon Grinberg and
+others.
+
+.SH BUGS
+Report bugs to <http://bugzilla.redhat.com>
+
+.SH COPYRIGHT
+Copyright 2010-2013 Red Hat, Inc. License GPLv2: GNU GPL Version 2 <http://gnu.org/licenses/gpl.html>.
--
To view, visit http://gerrit.ovirt.org/22891
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Id8e5a47d484fa06070d4566a39cab8a7a53ea717
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Douglas Schilling Landgraf <dougsland(a)redhat.com>
9 years, 5 months
Change in vdsm[master]: vdsm: expose hostdev via vdsClient
by Martin Polednik
Martin Polednik has uploaded a new change for review.
Change subject: vdsm: expose hostdev via vdsClient
......................................................................
vdsm: expose hostdev via vdsClient
Exposes current API verb hostdevListByCaps by vdsClient,
using pretty tree graphical structure.
Change-Id: I1e4dd1a1ee9af0d1873a081c115289ad2e52204f
Signed-off-by: Martin Polednik <mpolednik(a)redhat.com>
---
M client/vdsClient.py
1 file changed, 31 insertions(+), 3 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/16/32316/1
diff --git a/client/vdsClient.py b/client/vdsClient.py
index 35f4ca5..18776cb 100644
--- a/client/vdsClient.py
+++ b/client/vdsClient.py
@@ -117,16 +117,33 @@
print "\t%s = %s" % (element, conf[element])
-def printDict(dict, pretty=True):
+def printDict(dict, pretty=True, depth=0):
keys = dict.keys()
keys.sort()
for element in keys:
if pretty:
representation = pp.pformat(dict[element]).replace(
- '\n', '\n\t' + ' ' * len(element + ' = '))
+ '\n', '\n\t' + ' ' * len(element + ' = ') + '\t' * depth)
else:
representation = dict[element]
- print "\t%s = %s" % (element, representation)
+ print '\t' * depth + '\t%s = %s' % (element, representation)
+
+
+def printDevices(devices, pretty=True):
+ roots = [device for device in devices if
+ devices[device]['params'].get('parent', None) not in devices]
+
+ _printChildDevices(devices, roots, pretty)
+
+
+def _printChildDevices(devices, roots, pretty=True, depth=1):
+ for root in roots:
+ printDict({root: devices[root]}, pretty, depth)
+
+ _printChildDevices(
+ devices, [device for device in devices if
+ devices[device]['params'].get('parent', None) == root],
+ pretty, depth + 1)
def printStats(list):
@@ -199,6 +216,8 @@
printStats(response['statsList'])
elif 'info' in response:
printDict(response['info'], self.pretty)
+ elif 'deviceList' in response:
+ printDevices(response['deviceList'], self.pretty)
else:
printDict(response['status'], self.pretty)
sys.exit(response['status']['code'])
@@ -520,6 +539,9 @@
def do_getAllVmStats(self, args):
return self.ExecAndExit(self.s.getAllVmStats())
+
+ def do_hostdevListByCaps(self, args):
+ return self.ExecAndExit(self.s.hostdevListByCaps(args))
def desktopLogin(self, args):
vmId, domain, user, password = tuple(args[:4])
@@ -2138,6 +2160,12 @@
('',
'Get Statistics info for all existing VMs'
)),
+ 'hostdevListByCaps': (serv.do_hostdevListByCaps,
+ ('[<caps>]',
+ 'Get available devices on host with given '
+ 'capability. Leave caps empty to list all '
+ 'devices.'
+ )),
'getVGList': (serv.getVGList,
('storageType',
'List of all VGs.'
--
To view, visit http://gerrit.ovirt.org/32316
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I1e4dd1a1ee9af0d1873a081c115289ad2e52204f
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Martin Polednik <mpolednik(a)redhat.com>
9 years, 5 months
Change in vdsm[master]: vdsm: add functionality to release host devices
by Martin Polednik
Martin Polednik has uploaded a new change for review.
Change subject: vdsm: add functionality to release host devices
......................................................................
vdsm: add functionality to release host devices
Release call (libvirt's reAttach call) is mandatory to properly
reattach device back to host.
Change-Id: I77000c76ece87bf7335045429eab207a89badae9
Signed-off-by: Martin Polednik <mpolednik(a)redhat.com>
---
M vdsm/hostdev.py
1 file changed, 11 insertions(+), 0 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/91/32391/1
diff --git a/vdsm/hostdev.py b/vdsm/hostdev.py
index 7ad5695..ef28d4e 100644
--- a/vdsm/hostdev.py
+++ b/vdsm/hostdev.py
@@ -24,6 +24,9 @@
from vdsm import libvirtconnection
+DETACHABLE_DEVICES = ('usb', 'pci')
+
+
def _parse_device_params(device_xml):
params = {}
@@ -116,3 +119,11 @@
del(devices[device_name])
return devices
+
+
+def release(device_name):
+ device = libvirtconnection.get().nodeDeviceLookupByName(device_name)
+ device_params = _parse_device_params(device)
+
+ if device_params['capability'] in DETACHABLE_DEVICES:
+ device.reAttach()
--
To view, visit http://gerrit.ovirt.org/32391
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I77000c76ece87bf7335045429eab207a89badae9
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Martin Polednik <mpolednik(a)redhat.com>
9 years, 5 months
Change in vdsm[master]: vdsm: add functionality to acquire host devices
by Martin Polednik
Martin Polednik has uploaded a new change for review.
Change subject: vdsm: add functionality to acquire host devices
......................................................................
vdsm: add functionality to acquire host devices
Acquire call (libvirt's dettach call) is mandatory to properly
detach device from host.
Change-Id: I530fed56831314286942b8afa62900208812bfb5
Signed-off-by: Martin Polednik <mpolednik(a)redhat.com>
---
M vdsm/hostdev.py
1 file changed, 13 insertions(+), 0 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/89/32389/1
diff --git a/vdsm/hostdev.py b/vdsm/hostdev.py
index 7ad5695..896fe95 100644
--- a/vdsm/hostdev.py
+++ b/vdsm/hostdev.py
@@ -24,6 +24,9 @@
from vdsm import libvirtconnection
+DETACHABLE_DEVICES = ('usb', 'pci')
+
+
def _parse_device_params(device_xml):
params = {}
@@ -116,3 +119,13 @@
del(devices[device_name])
return devices
+
+
+def acquire(device_name):
+ device = libvirtconnection.get().nodeDeviceLookupByName(device_name)
+ device_params = _parse_device_params(device)
+
+ if device_params['capability'] in DETACHABLE_DEVICES:
+ device.dettach()
+
+ return device_params
--
To view, visit http://gerrit.ovirt.org/32389
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I530fed56831314286942b8afa62900208812bfb5
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Martin Polednik <mpolednik(a)redhat.com>
9 years, 5 months
Change in vdsm[master]: tests: sampling: add initial HostStatsThread tests
by fromani@redhat.com
Francesco Romani has uploaded a new change for review.
Change subject: tests: sampling: add initial HostStatsThread tests
......................................................................
tests: sampling: add initial HostStatsThread tests
This patch adds a unit test to HostStatsThread.
Change-Id: Ic4e5765364cf46e1ebfaac72aa5f75c80e83779e
Relates-To: https://bugzilla.redhat.com/1113948
Signed-off-by: Francesco Romani <fromani(a)redhat.com>
---
M tests/samplingTests.py
M vdsm/virt/sampling.py
2 files changed, 37 insertions(+), 1 deletion(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/66/29566/1
diff --git a/tests/samplingTests.py b/tests/samplingTests.py
index 2ff703e..5126f69 100644
--- a/tests/samplingTests.py
+++ b/tests/samplingTests.py
@@ -21,6 +21,8 @@
import os
import tempfile
import shutil
+import threading
+import time
from vdsm import ipwrapper
import virt.sampling as sampling
@@ -111,3 +113,37 @@
s1 = sampling.InterfaceSample(lo)
s1.operstate = 'x'
self.assertEquals('operstate:x', s1.connlog_diff(s0))
+
+
+class HostStatsThread(TestCaseBase):
+ FAILED_SAMPLE = 3 # random 'small' value
+ STOP_SAMPLE = 6 # ditto
+
+ def setUp(self):
+ self._hs = None
+ self._sampleCount = 0
+ self._samplingDone = threading.Event()
+
+ def testContinueWithErrors(self):
+ """
+ bz1113948: do not give up on errors != TimeoutError
+ """
+ def WrapHostSample(pid):
+ self._sampleCount += 1
+ if self._sampleCount == self.FAILED_SAMPLE:
+ raise ValueError
+ if self._sampleCount == self.STOP_SAMPLE:
+ self._hs.stop()
+ self._samplingDone.set()
+ return None # sampling.HostSample(pid)
+
+ def nosleep(seconds):
+ pass
+
+ with MonkeyPatchScope([(sampling, 'HostSample', WrapHostSample),
+ (time, 'sleep', nosleep)]):
+ self._hs = sampling.HostStatsThread(self.log)
+ self._hs.start()
+ self._samplingDone.wait()
+ self._hs.stop()
+ self.assertTrue(self._sampleCount >= self.STOP_SAMPLE)
diff --git a/vdsm/virt/sampling.py b/vdsm/virt/sampling.py
index 5f04f27..ccb0672 100644
--- a/vdsm/virt/sampling.py
+++ b/vdsm/virt/sampling.py
@@ -507,7 +507,7 @@
exc_info=True)
except Exception:
self._log.exception("Error while sampling stats")
- self._stopEvent.wait(self.SAMPLE_INTERVAL_SEC)
+ time.sleep(self.SAMPLE_INTERVAL_SEC)
@utils.memoized
def _boot_time(self):
--
To view, visit http://gerrit.ovirt.org/29566
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic4e5765364cf46e1ebfaac72aa5f75c80e83779e
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Francesco Romani <fromani(a)redhat.com>
9 years, 5 months
Change in vdsm[master]: unit_tests: Make run_tests_local.sh not be a generated file
by asegurap@redhat.com
Antoni Segura Puimedon has uploaded a new change for review.
Change subject: unit_tests: Make run_tests_local.sh not be a generated file
......................................................................
unit_tests: Make run_tests_local.sh not be a generated file
It is perfectly possible to simplify run_tests_local.sh.in so that
it does not use macros and this at the same time will allow for
testing subdirectories to use it.
Change-Id: Ie20647b9a7b447b8ed4082f7cefab2146150594e
Signed-off-by: Antoni S. Puimedon <asegurap(a)redhat.com>
---
A tests/run_tests_local.sh
D tests/run_tests_local.sh.in
2 files changed, 15 insertions(+), 10 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/32/27632/1
diff --git a/tests/run_tests_local.sh b/tests/run_tests_local.sh
new file mode 100755
index 0000000..b282c10
--- /dev/null
+++ b/tests/run_tests_local.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+if [ -z "$PYTHON_EXE" ]; then
+ ENV_BIN="/usr/bin/env"
+ PYTHON_EXE="python2"
+fi
+
+# The following line is taken from http://stackoverflow.com/a/246128/206009
+# it sets DIR to the path of the directory that contains this bash script
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+
+if [ ! -f "$DIR/jsonrpc-tests.server.crt" ] || [ ! -f "$DIR/jsonrpc-tests.server.csr" ] || [ ! -f "$DIR/jsonrpc-tests.server.key" ]; then
+ $DIR/makecert.sh
+fi
+
+PYTHONDONTWRITEBYTECODE=1 LC_ALL=C PYTHONPATH="$DIR/../lib:$DIR/../vdsm:$DIR/../client:$DIR/../vdsm_api:$PYTHONPATH" $ENV_BIN "$PYTHON_EXE" $DIR/testrunner.py --local-modules $@
diff --git a/tests/run_tests_local.sh.in b/tests/run_tests_local.sh.in
deleted file mode 100644
index 0a229c0..0000000
--- a/tests/run_tests_local.sh.in
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-if [ -z "$PYTHON_EXE" ]; then
- PYTHON_EXE="@PYTHON@"
-fi
-
-if [ ! -f @top_srcdir(a)/tests/jsonrpc-tests.server.crt ] || [ ! -f @top_srcdir(a)/tests/jsonrpc-tests.server.csr ] || [ ! -f @top_srcdir(a)/tests/jsonrpc-tests.server.key ]; then
- @top_srcdir(a)/tests/makecert.sh
-fi
-
-PYTHONDONTWRITEBYTECODE=1 LC_ALL=C PYTHONPATH="@top_srcdir@/lib:@top_srcdir@/vdsm:@top_srcdir@/client:@top_srcdir@/vdsm_api:$PYTHONPATH" "$PYTHON_EXE" @top_srcdir(a)/tests/testrunner.py --local-modules $@
--
To view, visit http://gerrit.ovirt.org/27632
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie20647b9a7b447b8ed4082f7cefab2146150594e
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Antoni Segura Puimedon <asegurap(a)redhat.com>
9 years, 5 months
Change in vdsm[master]: netinfo: Displays active slave for the bond in getVdsCaps
by gcheresh@redhat.com
Genadi Chereshnya has uploaded a new change for review.
Change subject: netinfo: Displays active slave for the bond in getVdsCaps
......................................................................
netinfo: Displays active slave for the bond in getVdsCaps
Adding active slave field for the bond in the getVdsCaps
Displays an active slave if exists or displays '' when there is no active slave
Change-Id: Ib6c40755c361523a28cbd68af110e3b20cb9ae25
Signed-off-by: Genadi Chereshnya <gcheresh(a)redhat.com>
---
M lib/vdsm/netinfo.py
1 file changed, 10 insertions(+), 0 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/15/32915/1
diff --git a/lib/vdsm/netinfo.py b/lib/vdsm/netinfo.py
index 6864871..58f6b74 100644
--- a/lib/vdsm/netinfo.py
+++ b/lib/vdsm/netinfo.py
@@ -66,6 +66,7 @@
NET_PATH = '/sys/class/net'
BONDING_MASTERS = '/sys/class/net/bonding_masters'
BONDING_SLAVES = '/sys/class/net/%s/bonding/slaves'
+BONDING_ACTIVE_SLAVE = '/sys/class/net/%s/bonding/active_slave'
BONDING_OPT = '/sys/class/net/%s/bonding/%s'
BRIDGING_OPT = '/sys/class/net/%s/bridge/%s'
_BONDING_FAILOVER_MODES = frozenset(('1', '3'))
@@ -167,6 +168,14 @@
def slaves(bonding):
return open(BONDING_SLAVES % bonding).readline().split()
+
+
+def active_slave(bonding):
+ """
+ :param bonding:
+ :return: active slave when one exists or '' otherwise
+ """
+ return open(BONDING_ACTIVE_SLAVE % bonding).readline().rstrip()
def bondOpts(bond, keys=None):
@@ -575,6 +584,7 @@
def _bondinfo(link):
return {'hwaddr': link.address, 'slaves': slaves(link.name),
+ 'active_slave': active_slave(link.name),
'opts': _getBondingOptions(link.name)}
--
To view, visit http://gerrit.ovirt.org/32915
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib6c40755c361523a28cbd68af110e3b20cb9ae25
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Genadi Chereshnya <gcheresh(a)redhat.com>
9 years, 5 months
Change in vdsm[master]: multipath: Disable queuing on all multipath devices
by Nir Soffer
Nir Soffer has uploaded a new change for review.
Change subject: multipath: Disable queuing on all multipath devices
......................................................................
multipath: Disable queuing on all multipath devices
We specify "no_path_retry fail" in multipath configuration, but this
setting is used only for devices which do not specify their own settings
in multipath built-in device database.
For example, as we can see in "multipath -ll" output, this device is
using the queue_if_no_path feature:
# multipath -ll
360060160f4a030003268ab211002e411 dm-1 DGC ,VRAID
size=30G features='1 queue_if_no_path' hwhandler='1 emc' wp=rw
|-+- policy='service-time 0' prio=4 status=active
| `- 4:0:3:1 sde 8:64 active ready running
`-+- policy='service-time 0' prio=1 status=enabled
`- 4:0:2:1 sdc 8:32 active ready running
This particular device is using "no_path_retry 60" in multipath built-in
database. Using 5 seconds timeout, this means that any read or write to
this device may cause the process to block in D state for 5 minutes.
This issue causes lvm to block for many minutes when a device which is
*not* used by vdsm is unmapped on the storage server. On the next lvm
refresh, when lvm look for available pvs, it will block for 5 minutes on
such device. This is the root cause of many bugs since the first
versions of vdsm.
Unfortunately, multipath does not provide way to override the built-in
device database in multipath configuration. I tried several partly
working solutions:
- Implement the "no_path_retry fail" in vdsm, by not adding devices
without active path to lvm filter. This should work for most cases,
but is not the right place to fix this problem.
http://gerrit.ovirt.org/31875
- Add a special (.*) device configuration matching all devices and
overriding the no_path_retry option. This works - but also overrides
other device configuration.
- Use disablequeuing multipathd command line option. This works - until
multipathd service is reloaded.
This patch adds a udev rule for multipath devices, invoked after a
device is added or changed, disabling queuing for the device. This is
the same solution we use for configuring lvm volumes and setting
permissions on volumes. To disable queuing, I'm using dmsetup, as
documented in multipath administration guide.
Change-Id: I6bfe68f4a8d233afe1bb787ce028ffb4c167469b
Bug-Url: https://bugzilla.redhat.com/880738
Signed-off-by: Nir Soffer <nsoffer(a)redhat.com>
---
M .gitignore
M configure.ac
M debian/rules
M debian/vdsm.install
M vdsm.spec.in
A vdsm/storage/vdsm-multipath.rules.in
6 files changed, 31 insertions(+), 0 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/77/32277/1
diff --git a/.gitignore b/.gitignore
index 5890806..fca4f2e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -61,6 +61,7 @@
vdsm/storage/protect/safelease
vdsm/storage/lvm.env
vdsm/storage/vdsm-lvm.rules
+vdsm/storage/vdsm-multipath.rules
vdsm/sudoers.vdsm
vdsm/svdsm.logger.conf
vdsm/vdscli.py
diff --git a/configure.ac b/configure.ac
index 6f00217..f40d57a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -338,6 +338,7 @@
vdsm/storage/imageRepository/Makefile
vdsm/storage/protect/Makefile
vdsm/storage/vdsm-lvm.rules
+ vdsm/storage/vdsm-multipath.rules
vdsm/virt/Makefile
vdsm_hooks/Makefile
vdsm_hooks/checkimages/Makefile
diff --git a/debian/rules b/debian/rules
index b32b160..6e37104 100755
--- a/debian/rules
+++ b/debian/rules
@@ -40,6 +40,9 @@
# Install the lvm rules
install -Dm 0644 vdsm/storage/vdsm-lvm.rules \
$(destdir)/lib/udev/rules.d/61-vdsm-lvm.rules
+ # Install the multipath rules
+ install -Dm 0644 vdsm/storage/vdsm-multipath.rules \
+ $(destdir)/lib/udev/rules.d/99-vdsm-multipath.rules
install -Dm 0644 vdsm/limits.conf \
$(destdir)/etc/security/limits.d/99-vdsm.conf
install -Dm 0644 init/upstart/vdsmd.upstart \
diff --git a/debian/vdsm.install b/debian/vdsm.install
index b1840ec..ae807fc 100644
--- a/debian/vdsm.install
+++ b/debian/vdsm.install
@@ -21,6 +21,7 @@
./etc/vdsm/svdsm.logger.conf
./etc/vdsm/vdsm-tmpfiles.conf
./lib/udev/rules.d/61-vdsm-lvm.rules
+./lib/udev/rules.d/99-vdsm-multipath.rules
./usr/lib/python2.7/dist-packages/sos/plugins/vdsm.py
./usr/lib/python2.7/dist-packages/vdsmapi.py
./usr/libexec/vdsm/curl-img-wrap
diff --git a/vdsm.spec.in b/vdsm.spec.in
index 323b586..3c20f01 100644
--- a/vdsm.spec.in
+++ b/vdsm.spec.in
@@ -657,6 +657,10 @@
install -Dm 0644 vdsm/storage/vdsm-lvm.rules \
%{buildroot}%{_udevrulesdir}/12-vdsm-lvm.rules
+# Install the multipath rules
+install -Dm 0644 vdsm/storage/vdsm-multipath.rules \
+ %{buildroot}%{_udevrulesdir}/99-vdsm-multipath.rules
+
install -Dm 0644 vdsm/limits.conf \
%{buildroot}/etc/security/limits.d/99-vdsm.conf
@@ -1133,6 +1137,7 @@
%endif
%{python_sitelib}/sos/plugins/vdsm.py*
%{_udevrulesdir}/12-vdsm-lvm.rules
+%{_udevrulesdir}/99-vdsm-multipath.rules
/etc/security/limits.d/99-vdsm.conf
%{_mandir}/man8/vdsmd.8*
%if 0%{?rhel}
diff --git a/vdsm/storage/vdsm-multipath.rules.in b/vdsm/storage/vdsm-multipath.rules.in
new file mode 100644
index 0000000..8fdd503
--- /dev/null
+++ b/vdsm/storage/vdsm-multipath.rules.in
@@ -0,0 +1,20 @@
+#
+# Copyright 2014 Red Hat, Inc. and/or its affiliates.
+#
+# Licensed to you under the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version. See the files README and
+# LICENSE_GPL_v2 which accompany this distribution.
+#
+
+# Vdsm udev rules for multipath devices.
+#
+# Ensure that multipath devices use no_path_retry fail, instead of
+# no_path_retry queue, which is hardcoded in multipath configuration for some
+# devices.
+#
+# See https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/...
+# section 5.6. ISSUES WITH QUEUE_IF_NO_PATH FEATUR.
+#
+
+ACTION=="add|change", ENV{DM_UUID}=="mpath-?*", RUN+="@DMSETUP_PATH@ message $env{DM_NAME} 0 fail_if_no_path"
--
To view, visit http://gerrit.ovirt.org/32277
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I6bfe68f4a8d233afe1bb787ce028ffb4c167469b
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Nir Soffer <nsoffer(a)redhat.com>
9 years, 5 months
Change in vdsm[master]: iscsi: Set node.session.timeo.replacement_timeout when creat...
by Nir Soffer
Nir Soffer has uploaded a new change for review.
Change subject: iscsi: Set node.session.timeo.replacement_timeout when creating a node
......................................................................
iscsi: Set node.session.timeo.replacement_timeout when creating a node
ISCSI multipath failover takes too much time, causing storage operations
timeouts in engine, stuck lvm operations in vdsm, and guests marked as
down. This issue is the root cause of many bugs.
The root cause is bad default in iscsi.conf:
node.session.timeo.replacement_timeout = 120
Using this timeout, multipath will wait 120 seconds for SCSI commands
before trying the next path, which may cause another 120 seconds delay
if the device is faulty.
In device-mapper-multipath version 0.4.9-76 and later, multipath
overrides iscsi.conf's default timeout with multipath.conf's timeout,
eliminating this issue. This version is not available on current
supported platforms.
This patch fixes the issue in a simple backward compatible way by
modifying the timeout in the node database when we add a node. This
change affect only devices used by vdsm, leaving the system iscsi
configuration unchanged.
This does not handle the timeout for FC devices, which should be handled
in a different way.
When we require device-mapper-multipath > 0.4.9-76, we can revert this
change.
Change-Id: I021c6f72eb5608cd61772d549eb13a229abb6c0d
Bug-Url: https://bugzilla.redhat.com/980139
Signed-off-by: Nir Soffer <nsoffer(a)redhat.com>
---
M lib/vdsm/constants.py.in
M vdsm/storage/iscsi.py
M vdsm/storage/multipath.py
3 files changed, 20 insertions(+), 2 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/63/32363/1
diff --git a/lib/vdsm/constants.py.in b/lib/vdsm/constants.py.in
index ee379d6..a795afe 100644
--- a/lib/vdsm/constants.py.in
+++ b/lib/vdsm/constants.py.in
@@ -68,6 +68,9 @@
MEGAB = 2 ** 20 # = 1024 ** 2 = 1 MiB
+# Number of seconds the scsi layer will wait before failing IO on a device.
+FAST_IO_FAIL_TIMEOUT = 5
+
#
# Path definitions
#
diff --git a/vdsm/storage/iscsi.py b/vdsm/storage/iscsi.py
index 2975776..e69d0cf 100644
--- a/vdsm/storage/iscsi.py
+++ b/vdsm/storage/iscsi.py
@@ -31,6 +31,7 @@
from collections import namedtuple
import misc
+from vdsm import constants
from vdsm.config import config
import devicemapper
from threading import RLock
@@ -165,6 +166,18 @@
iscsiadm.node_update(iface.name, portalStr, target.iqn,
"node.startup", "manual")
+
+ # In multipath versions before 0.4.9-76, recovery_tmo iscsi sysfs
+ # parameter used iscsi.conf's replacement_timeout (120 seconds)
+ # instead of multipath.conf's fail_io_fast_tmo (5 seconds). This
+ # cause lvm operation to get stuck for multiple minutes when
+ # accessing faulty devices.
+ # See https://bugzilla.redhat.com/980139
+ #
+ # TODO: Remove when device-mapper-multipath > 0.4.9-76
+ iscsiadm.node_update(iface.name, portalStr, target.iqn,
+ "node.session.timeo.replacement_timeout",
+ "%d" % constants.FAST_IO_FAIL_TIMEOUT)
except:
removeIscsiNode(iface, target)
raise
diff --git a/vdsm/storage/multipath.py b/vdsm/storage/multipath.py
index ba98866..a77aec4 100644
--- a/vdsm/storage/multipath.py
+++ b/vdsm/storage/multipath.py
@@ -64,7 +64,7 @@
" no_path_retry fail\n"
" user_friendly_names no\n"
" flush_on_last_del yes\n"
- " fast_io_fail_tmo 5\n"
+ " fast_io_fail_tmo %(fast_io_fail_tmo)d\n"
" dev_loss_tmo 30\n"
" max_fds 4096\n"
"}\n"
@@ -163,7 +163,9 @@
os.path.basename(MPATH_CONF), MAX_CONF_COPIES,
cp=True, persist=True)
with tempfile.NamedTemporaryFile() as f:
- f.write(MPATH_CONF_TEMPLATE % {'scsi_id_path': _scsi_id.cmd})
+ f.write(MPATH_CONF_TEMPLATE % {
+ 'scsi_id_path': _scsi_id.cmd,
+ 'fast_io_fail_tmo': constants.FAST_IO_FAIL_TIMEOUT})
f.flush()
cmd = [constants.EXT_CP, f.name, MPATH_CONF]
rc = misc.execCmd(cmd, sudo=True)[0]
--
To view, visit http://gerrit.ovirt.org/32363
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I021c6f72eb5608cd61772d549eb13a229abb6c0d
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Nir Soffer <nsoffer(a)redhat.com>
9 years, 5 months
Change in vdsm[master]: libnl_wrapper: avoid getting link_cache just for getting ifa...
by asegurap@redhat.com
Antoni Segura Puimedon has uploaded a new change for review.
Change subject: libnl_wrapper: avoid getting link_cache just for getting iface label
......................................................................
libnl_wrapper: avoid getting link_cache just for getting iface label
Change-Id: I0e6aaac0bdb58a0052b25f588e11de03bde3e12f
Signed-off-by: Antoni S. Puimedon <asegurap(a)redhat.com>
---
M lib/vdsm/netlink/addr.py
M lib/vdsm/netlink/link.py
2 files changed, 64 insertions(+), 15 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/49/32949/1
diff --git a/lib/vdsm/netlink/addr.py b/lib/vdsm/netlink/addr.py
index 960f4ee..031a9ee 100644
--- a/lib/vdsm/netlink/addr.py
+++ b/lib/vdsm/netlink/addr.py
@@ -23,7 +23,7 @@
from . import _char_proto, _int_char_proto, _int_proto, _void_proto
from . import LIBNL, LIBNL_ROUTE, _nl_geterror, _pool
from . import _addr_to_str, _af_to_str, _scope_to_str, CHARBUFFSIZE
-from .link import _nl_link_cache, _link_index_to_name
+from .link import _get_link_name_from_index
def iter_addrs():
@@ -31,19 +31,18 @@
in the system."""
with _pool.socket() as sock:
with _nl_addr_cache(sock) as addr_cache:
- with _nl_link_cache(sock) as link_cache: # for index to label
- addr = _nl_cache_get_first(addr_cache)
- while addr:
- yield _addr_info(link_cache, addr)
- addr = _nl_cache_get_next(addr)
+ _index_to_name = partial(_get_link_name_from_index, sock=sock)
+ addr = _nl_cache_get_first(addr_cache)
+ while addr:
+ yield _addr_info(addr, _index_to_name)
+ addr = _nl_cache_get_next(addr)
-def _addr_info(link_cache, addr):
+def _addr_info(addr, _index_to_name):
"""Returns a dictionary with the address information."""
index = _rtnl_addr_get_ifindex(addr)
return {
- 'label': (_rtnl_addr_get_label(addr) or
- _link_index_to_name(link_cache, index)),
+ 'label': _index_to_name(index),
'index': index,
'family': _af_to_str(_rtnl_addr_get_family(addr)),
'prefixlen': _rtnl_addr_get_prefixlen(addr),
diff --git a/lib/vdsm/netlink/link.py b/lib/vdsm/netlink/link.py
index 13d00c4..b25a083 100644
--- a/lib/vdsm/netlink/link.py
+++ b/lib/vdsm/netlink/link.py
@@ -31,12 +31,11 @@
def get_link(name):
"""Returns the information dictionary of the name specified link."""
with _pool.socket() as sock:
- with _nl_link_cache(sock) as cache:
- link = _rtnl_link_get_by_name(cache, name)
- if not link:
- raise IOError(errno.ENODEV, '%s is not present in the system' %
- name)
- return _link_info(cache, link)
+ link = _get_link(sock, name)
+ if not link:
+ raise IOError(errno.ENODEV, '%s is not present in the system' %
+ name)
+ return _link_info(cache, link)
def iter_links():
@@ -97,6 +96,14 @@
return _rtnl_link_operstate2str(state, operstate, sizeof(operstate))
+def _get_link_name_from_index(index, sock=None):
+ link = _get_link(index=index, sock=sock)
+ if link is None:
+ raise IOError(errno.ENODEV, 'Dev with index %s is not present in the '
+ 'system' % index)
+ return _rtnl_link_get_name(link)
+
+
# C function prototypes
# http://docs.python.org/2/library/ctypes.html#function-prototypes
# This helps ctypes know the calling conventions it should use to communicate
@@ -108,6 +115,9 @@
_link_is_vlan = _int_proto(('rtnl_link_is_vlan', LIBNL_ROUTE))
_vlan_get_id = _int_proto(('rtnl_link_vlan_get_id', LIBNL_ROUTE))
_rtnl_link_get_type = _char_proto(('rtnl_link_get_type', LIBNL_ROUTE))
+ _rtnl_link_get_kernel = CFUNCTYPE(c_int, c_void_p, c_int, c_char_p,
+ c_void_p)(('rtnl_link_get_kernel',
+ LIBNL_ROUTE))
def _rtnl_link_alloc_cache(sock):
"""Wraps the new link alloc cache to expose the libnl1 signature"""
@@ -123,14 +133,54 @@
return _vlan_get_id(link)
else:
return -1
+
+ def _get_link(name=None, index=0, sock=None):
+ if name is None and index == 0:
+ raise ValueError('Must specify either a name or an index')
+ link = c_void_p()
+ if sock is None:
+ with _pool.socket() as sock:
+ if name is None:
+ err = _rtnl_link_get_kernel(sock, index, name, byref(link))
+ else:
+ err = _rtnl_link_get_kernel(sock, index, name, byref(link))
+ else:
+ if name is None:
+ err = _rtnl_link_get_kernel(sock, index, name, byref(link))
+ else:
+ err = _rtnl_link_get_kernel(sock, index, name, byref(link))
+ if err:
+ raise IOError(-err, _nl_geterror())
+ return link
else:
from . import _alloc_cache
_link_alloc_cache = _void_proto(('rtnl_link_alloc_cache', LIBNL_ROUTE))
_rtnl_link_alloc_cache = partial(_alloc_cache, _link_alloc_cache)
_rtnl_link_vlan_get_id = _int_proto(('rtnl_link_vlan_get_id', LIBNL_ROUTE))
+ def _get_link(name=None, index=None, sock=None):
+ if name is None and index is None:
+ raise ValueError('Must specify either a name or an index')
+ if sock is None:
+ with _pool.socket() as sock:
+ with _nl_link_cache(sock) as cache:
+ if name is None:
+ link = _rtnl_link_get(cache, index)
+ else:
+ link = _rtnl_link_get_by_name(cache, name)
+ else:
+ with _nl_link_cache(sock) as cache:
+ if name is None:
+ link = _rtnl_link_get(cache, index)
+ else:
+ link = _rtnl_link_get_by_name(cache, name)
+ return link
+
+
_nl_link_cache = partial(_cache_manager, _rtnl_link_alloc_cache)
+_rtnl_link_get = CFUNCTYPE(c_void_p, c_void_p, c_int)((
+ 'rtnl_link_get', LIBNL_ROUTE))
_rtnl_link_get_addr = _void_proto(('rtnl_link_get_addr', LIBNL_ROUTE))
_rtnl_link_get_flags = _int_proto(('rtnl_link_get_flags', LIBNL_ROUTE))
_rtnl_link_get_ifindex = _int_proto(('rtnl_link_get_ifindex', LIBNL_ROUTE))
--
To view, visit http://gerrit.ovirt.org/32949
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I0e6aaac0bdb58a0052b25f588e11de03bde3e12f
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Antoni Segura Puimedon <asegurap(a)redhat.com>
9 years, 6 months