Mark Wu has uploaded a new change for review.
Change subject: Fix return value of shutdown() on failure
......................................................................
Fix return value of shutdown() on failure
Change-Id: Ice01a8db664c8c1a3ca32c15de4865f362e7210e
Signed-off-by: Mark Wu <wudxw(a)linux.vnet.ibm.com>
---
M vdsm/vm.py
1 file changed, 2 insertions(+), 0 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/34/5434/1
--
To view, visit http://gerrit.ovirt.org/5434
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ice01a8db664c8c1a3ca32c15de4865f362e7210e
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Mark Wu <wudxw(a)linux.vnet.ibm.com>
Alon Bar-Lev has uploaded a new change for review.
Change subject: storage: set block schedule elevator using udev
......................................................................
storage: set block schedule elevator using udev
CURRENT IMPLEMENTATION
block schedule elevator is set by bootstrap using modification to kernel
command-lines.
PROBLEMS IN CURRENT IMPLEMENTATION
1. assumption of grub bootloader.
2. assumption of active kernel.
3. assumption of user not override anything.
4. problem to port.
NEW IMPLEMENTATION
Use udev in order to set the block schedule elevator.
User may override behavior using udev rule, no bootloader dependency or
conflict.
The setting is applied also if vdsm is installed manually.
Change-Id: I0a8de1c861bf4570509599b6f47235ed38cc424d
Signed-off-by: Alon Bar-Lev <alonbl(a)redhat.com>
---
M vds_bootstrap/vds_bootstrap.py
M vdsm.spec.in
A vdsm/storage/12-vdsm-elevator.rules
M vdsm/storage/Makefile.am
A vdsm/storage/vdsm-elevator.sh
5 files changed, 31 insertions(+), 3 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/00/8700/1
diff --git a/vds_bootstrap/vds_bootstrap.py b/vds_bootstrap/vds_bootstrap.py
index 867d6f4..9353daf 100755
--- a/vds_bootstrap/vds_bootstrap.py
+++ b/vds_bootstrap/vds_bootstrap.py
@@ -435,7 +435,7 @@
self.message = ''
self.rc = True
- args = ['elevator=deadline']
+ args = []
if rhel6based and not _constantTSC():
args += ['processor.max_cstate=1']
diff --git a/vdsm.spec.in b/vdsm.spec.in
index 4814172..18a3661 100644
--- a/vdsm.spec.in
+++ b/vdsm.spec.in
@@ -382,9 +382,13 @@
install -Dm 0755 vdsm/respawn \
%{buildroot}%{_datadir}/%{vdsm_name}/respawn
-# Install the lvm rules
+# Install the udev rules
install -Dm 0644 vdsm/storage/12-vdsm-lvm.rules \
%{buildroot}/lib/udev/rules.d/12-vdsm-lvm.rules
+install -Dm 0644 vdsm/storage/12-vdsm-elevator.rules \
+ %{buildroot}/lib/udev/rules.d/12-vdsm-elevator.rules
+install -Dm 0755 vdsm/storage/vdsm-elevator.sh \
+ %{buildroot}/lib/udev/vdsm-elevator.sh
install -Dm 0644 vdsm/limits.conf \
%{buildroot}/etc/security/limits.d/99-vdsm.conf
@@ -721,6 +725,8 @@
%{_datadir}/%{vdsm_name}/set-conf-item
%{python_sitelib}/sos/plugins/vdsm.py*
/lib/udev/rules.d/12-vdsm-lvm.rules
+/lib/udev/rules.d/12-vdsm-elevator.rules
+/lib/udev/vdsm-elevator.sh
/etc/security/limits.d/99-vdsm.conf
%{_mandir}/man8/vdsmd.8*
%if 0%{?rhel}
diff --git a/vdsm/storage/12-vdsm-elevator.rules b/vdsm/storage/12-vdsm-elevator.rules
new file mode 100644
index 0000000..38a7607
--- /dev/null
+++ b/vdsm/storage/12-vdsm-elevator.rules
@@ -0,0 +1,12 @@
+#
+# Copyright 2012 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.
+#
+
+# Udev rules for elevator setting.
+
+ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", RUN+="vdsm-elevator.sh deadline"
diff --git a/vdsm/storage/Makefile.am b/vdsm/storage/Makefile.am
index cff09be..5900802 100644
--- a/vdsm/storage/Makefile.am
+++ b/vdsm/storage/Makefile.am
@@ -65,7 +65,9 @@
volume.py
EXTRA_DIST = \
- 12-vdsm-lvm.rules
+ 12-vdsm-lvm.rules \
+ 12-vdsm-elevator.rules \
+ vdsm-elevator.sh
check-local:
PYTHONDONTWRITEBYTECODE=1 $(PYTHON) $(srcdir)/storage_exception.py
diff --git a/vdsm/storage/vdsm-elevator.sh b/vdsm/storage/vdsm-elevator.sh
new file mode 100755
index 0000000..6f2ff85
--- /dev/null
+++ b/vdsm/storage/vdsm-elevator.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+elevator="$1"
+scheduler="/sys/${DEVPATH}/queue/scheduler"
+
+if [ -w "${scheduler}" ]; then
+ echo "${elevator}" > "${scheduler}"
+fi
--
To view, visit http://gerrit.ovirt.org/8700
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I0a8de1c861bf4570509599b6f47235ed38cc424d
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Alon Bar-Lev <alonbl(a)redhat.com>
Dan Yasny has uploaded a new change for review.
Change subject: Signed-off-by: Dan Yasny <dyasny(a)gmail.com>
......................................................................
Signed-off-by: Dan Yasny <dyasny(a)gmail.com>
Cisco VM-FEX support vdsm hooks
Change-Id: I45a7fa46919bb39a648dff190c40618395990e91
Signed-off-by: Dan Yasny <dyasny(a)dy-lappie.usersys.redhat.com>
---
A vdsm_hooks/vmfex/Makefile.am
A vdsm_hooks/vmfex/README
A vdsm_hooks/vmfex/before_vm_migrate_destination.py
A vdsm_hooks/vmfex/before_vm_start.py
4 files changed, 394 insertions(+), 0 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/47/7547/1
diff --git a/vdsm_hooks/vmfex/Makefile.am b/vdsm_hooks/vmfex/Makefile.am
new file mode 100644
index 0000000..b921275
--- /dev/null
+++ b/vdsm_hooks/vmfex/Makefile.am
@@ -0,0 +1,36 @@
+#
+# Copyright 2011 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of 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.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Refer to the README and COPYING files for full details of the license
+#
+
+EXTRA_DIST = \
+ before_vm_migrate_destination.py \
+ before_vm_start.py \
+
+install-data-local:
+ $(MKDIR_P) $(DESTDIR)$(vdsmhooksdir)/before_vm_start
+ $(INSTALL_SCRIPT) $(srcdir)/before_vm_start.py \
+ $(DESTDIR)$(vdsmhooksdir)/before_vm_start/50_vmfex
+ $(MKDIR_P) $(DESTDIR)$(vdsmhooksdir)/before_vm_migrate_destination
+ $(INSTALL_SCRIPT) $(srcdir)/before_vm_migrate_destination.py \
+ $(DESTDIR)$(vdsmhooksdir)/before_vm_migrate_destination/50_vmfex
+
+uninstall-local: uninstall-data-sudoers
+ $(RM) $(DESTDIR)$(vdsmhooksdir)/before_vm_start/50_vmfex
+ $(RM) $(DESTDIR)$(vdsmhooksdir)/before_vm_migrate_destination/50_vmfex
+
diff --git a/vdsm_hooks/vmfex/README b/vdsm_hooks/vmfex/README
new file mode 100644
index 0000000..1eb7629
--- /dev/null
+++ b/vdsm_hooks/vmfex/README
@@ -0,0 +1,61 @@
+vmfex vdsm hook
+===================
+
+Add Cisco VM-FEX Port Profile to Virtual Machine
+Sample:
+ vmfex=NIC1:profile1,NIC2:profile2...
+
+ Will add 2 virtual nics attached to profile1 and profile2 using the vnic
+ MAC addresses specified, replacing the actual NICs assigned to the VM.
+ The mapping is by order of NIC<number> in the parameters, mapped to the
+ order of the "interface" elements in the devices of the VM xml, as well
+ as the NICs defined for a VM in the RHEV-M admin GUI.
+
+Libvirt internals:
+Replace the existing interface xml:
+ <interface type="bridge">
+ <mac address="<mac>"/>
+ <model type="virtio"/>
+ <source bridge="<logical network>"/>
+ </interface>
+
+with the following interface xml:
+ <interface type='network'>
+ <mac address='<mac>'/>
+ <source network='direct-pool'/>
+ <virtualport type='802.1Qbh'>
+ <parameters profileid='<Port Profile>'/>
+ </virtualport>
+ <model type='virtio'/>
+ </interface>
+
+Dynamic network with libvirt (define a NIC pool, so libvirt can assign VMs to NICs dynamically):
+
+ <network>
+ <name>direct-pool</name>
+ <forward mode="passthrough">
+ <interface dev="eth3"/>
+ <interface dev="eth4"/>
+ <interface dev="eth5"/>
+ <interface dev="eth6"/>
+ <interface dev="eth7"/>
+ <interface dev="eth8"/>
+ <interface dev="eth9"/>
+ <interface dev="eth10"/>
+ <interface dev="eth11"/>
+ </forward>
+ </network>
+
+Using libvirt, the network is defined like this:
+
+ virsh net-define /tmp/direct-pool.xml
+ virsh net-start direct-pool
+ virsh net-autostart direct-pool
+
+(where /tmp/direct-pool.xml contains the xml above)
+
+(everything else is autogenerated, and shouldn't be specified
+when defining a guest (but whatever is there after definition
+should be left in place, e.g. the PCI address)). Note that these
+interface definitions are completely static - you never need to modify
+them due to migration, or starting up/shutting down the guest.
diff --git a/vdsm_hooks/vmfex/before_vm_migrate_destination.py b/vdsm_hooks/vmfex/before_vm_migrate_destination.py
new file mode 100755
index 0000000..a80df7f
--- /dev/null
+++ b/vdsm_hooks/vmfex/before_vm_migrate_destination.py
@@ -0,0 +1,109 @@
+#!/usr/bin/python
+
+import os
+import subprocess
+import sys
+import hooking
+import traceback
+import libvirtconnection
+
+'''
+Placed in before_vm_migrate_destination
+
+vmfex hook on migration destination:
+
+Set up a dynamic NIC pool for incoming migrations to use
+
+ <network>
+ <name>direct-pool</name>
+ <forward mode="passthrough">
+ <interface dev="eth3"/>
+ <interface dev="eth4"/>
+ <interface dev="eth5"/>
+ <interface dev="eth6"/>
+ <interface dev="eth7"/>
+ <interface dev="eth8"/>
+ <interface dev="eth9"/>
+ <interface dev="eth10"/>
+ <interface dev="eth11"/>
+ </forward>
+ </network>
+
+Using libvirt, the network is defined like this:
+
+ virsh net-define /tmp/direct-pool.xml
+ virsh net-start direct-pool
+ virsh net-autostart direct-pool
+
+(where /tmp/direct-pool.xml contains the xml above)
+
+(everything else is autogenerated, and shouldn't be specified
+when defining a guest (but whatever is there after definition
+should be left in place, e.g. the PCI address)). Note that these
+interface definitions are completely static - you never need to modify
+them due to migration, or starting up/shutting down the guest.
+
+'''
+
+def getUsableNics():
+ # Scan localhost for physical NICs and return list of physical nics
+ # that have all zeroes MAC
+ # Example ['eth0','eth1']
+ nics = []
+ cmd = "find /sys/devices/pci* | grep '/net/' |grep address"
+ p = subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=True)
+ s = p.stdout.read().split()
+ for i in s:
+ mac = open(i).read().strip()
+ if mac == '00:00:00:00:00:00':
+ nics.append(i.split('/')[-2])
+ return nics
+
+def createDirectPool(conn):
+ xmlstr = """<network> \n <name>direct-pool</name> \n <forward mode="passthrough"> \n """
+ for i in getUsableNics():
+ s = '<interface dev="' + str(i) + '"/> \n'
+ xmlstr += s
+
+ xmlstr += """ </forward> \n </network> """
+ conn.networkDefineXML(xmlstr)
+ dpool = conn.networkLookupByName('direct-pool')
+ dpool.setAutostart(1)
+ dpool.create()
+
+
+
+if os.environ.has_key('vmfex'):
+ try:
+ #connect to libvirtd
+ conn = libvirtconnection.get('qemu:///system')
+
+ #check for running VMs. If there are VMs running, skip creating a dNIC pool
+ if len(conn.listDomainsID()) == 0:
+ #check if direct-pool is created
+ if 'direct-pool' not in conn.listNetworks():
+ createDirectPool(conn)
+ else:
+ if conn.networkLookupByName('direct-pool').isActive() == 0:
+ conn.networkLookupByName('direct-pool').create()
+ conn.networkLookupByName('direct-pool').setAutostart(1)
+
+ #check if the defined dNIC pool didn't change
+ dpool = conn.networkLookupByName('direct-pool')
+ definedNics = []
+ for i in dpool.split():
+ if 'dev=' in i:
+ definedNics.append(str(i.split('=')[1].split('/')[0].strip("'")))
+ #if the defined NIC pool doesn't match the usable NIC list, recreate the network
+ if set(definedNics) != set(getUsableNics()):
+ conn.networkLookupByName('direct-pool').destroy()
+ conn.networkLookupByName('direct-pool').undefine()
+ createDirectPool(conn)
+
+ if 'direct-pool' not in conn.listNetworks():
+ createDirectPool(conn)
+
+ except:
+ sys.stderr.write('vmfex: [unexpected error]: %s\n' % traceback.format_exc())
+ sys.exit(2)
+
diff --git a/vdsm_hooks/vmfex/before_vm_start.py b/vdsm_hooks/vmfex/before_vm_start.py
new file mode 100755
index 0000000..9002e3f
--- /dev/null
+++ b/vdsm_hooks/vmfex/before_vm_start.py
@@ -0,0 +1,188 @@
+#!/usr/bin/python
+
+import os
+import subprocess
+import sys
+import xml
+import hooking
+import traceback
+from xml.dom import minidom
+import libvirtconnection
+
+'''
+Placed in before_vm_start
+
+vmfex hook:
+Add Cisco VM-FEX Port Profile to Virtual Machine
+Sample:
+ vmfex=NIC1:profile1,NIC2:profile2...
+
+ Will add 2 virtual nics attached to profile1 and profile2 using the vnic
+ MAC addresses specified, replacing the actual NICs assigned to the VM.
+ The mapping is by order of NIC<number> in the parameters, mapped to the
+ order of the "interface" elements in the devices of the VM xml, as well
+ as the NICs defined for a VM in the RHEV-M admin GUI.
+
+Libvirt internals:
+Replace the existing interface xml:
+ <interface type="bridge">
+ <mac address="<mac>"/>
+ <model type="virtio"/>
+ <source bridge="<logical network>"/>
+ </interface>
+
+with the following interface xml:
+ <interface type='network'>
+ <mac address='<mac>'/>
+ <source network='direct-pool'/>
+ <virtualport type='802.1Qbh'>
+ <parameters profileid='<Port Profile>'/>
+ </virtualport>
+ <model type='virtio'/>
+ </interface>
+
+Dynamic network with libvirt (define a NIC pool, so libvirt can assign VMs to NICs dynamically):
+
+ <network>
+ <name>direct-pool</name>
+ <forward mode="passthrough">
+ <interface dev="eth3"/>
+ <interface dev="eth4"/>
+ <interface dev="eth5"/>
+ <interface dev="eth6"/>
+ <interface dev="eth7"/>
+ <interface dev="eth8"/>
+ <interface dev="eth9"/>
+ <interface dev="eth10"/>
+ <interface dev="eth11"/>
+ </forward>
+ </network>
+
+Using libvirt, the network is defined like this:
+
+ virsh net-define /tmp/direct-pool.xml
+ virsh net-start direct-pool
+ virsh net-autostart direct-pool
+
+(where /tmp/direct-pool.xml contains the xml above)
+
+(everything else is autogenerated, and shouldn't be specified
+when defining a guest (but whatever is there after definition
+should be left in place, e.g. the PCI address)). Note that these
+interface definitions are completely static - you never need to modify
+them due to migration, or starting up/shutting down the guest.
+
+'''
+
+def getUsableNics():
+ # Scan localhost for physical NICs and return list of physical nics
+ # that have all zeroes MAC
+ # Example ['eth0','eth1']
+ nics = []
+ cmd = "find /sys/devices/pci* | grep '/net/' |grep address"
+ p = subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=True)
+ s = p.stdout.read().split()
+ for i in s:
+ mac = open(i).read().strip()
+ if mac == '00:00:00:00:00:00':
+ nics.append(i.split('/')[-2])
+ return nics
+
+def enumNics(devices):
+ # Given the domxml of VM devices, return the NIC elements numbered 1 through len()+1
+ vnicmap = {}
+ i = 1
+ for interface in devices.getElementsByTagName('interface'):
+ vnicmap[i] = interface
+ i += 1
+ return vnicmap
+
+def createDirectPool(conn):
+ xmlstr = """<network> \n <name>direct-pool</name> \n <forward mode="passthrough"> \n """
+ for i in getUsableNics():
+ s = '<interface dev="' + str(i) + '"/> \n'
+ xmlstr += s
+
+ xmlstr += """ </forward> \n </network> """
+ conn.networkDefineXML(xmlstr)
+ dpool = conn.networkLookupByName('direct-pool')
+ dpool.setAutostart(1)
+ dpool.create()
+
+
+
+if os.environ.has_key('vmfex'):
+ try:
+ #connect to libvirtd
+ conn = libvirtconnection.get('qemu:///system')
+
+ #check for running VMs. If there are VMs running, skip creating a dNIC pool
+ if len(conn.listDomainsID()) == 0:
+ #check if direct-pool is created
+ if 'direct-pool' not in conn.listNetworks():
+ createDirectPool(conn)
+ else:
+ if conn.networkLookupByName('direct-pool').isActive() == 0:
+ conn.networkLookupByName('direct-pool').create()
+ conn.networkLookupByName('direct-pool').setAutostart(1)
+
+ #check if the defined dNIC pool didn't change
+ dpool = conn.networkLookupByName('direct-pool')
+ definedNics = []
+ for i in dpool.split():
+ if 'dev=' in i:
+ definedNics.append(str(i.split('=')[1].split('/')[0].strip("'")))
+ #if the defined NIC pool doesn't match the usable NIC list, recreate the network
+ if set(definedNics) != set(getUsableNics()):
+ conn.networkLookupByName('direct-pool').destroy()
+ conn.networkLookupByName('direct-pool').undefine()
+ createDirectPool(conn)
+
+ if 'direct-pool' not in conn.listNetworks():
+ createDirectPool(conn)
+
+ except:
+ pass
+
+
+ try:
+ #Get the vmfex line
+ vmfex = os.environ['vmfex']
+
+ #Get the VM's xml definition
+ domxml = hooking.read_domxml()
+ devices = domxml.getElementsByTagName('devices')[0]
+ vnicmap = enumNics(devices)
+
+ counter = 0
+
+ for entry in vmfex.split(','):
+ sys.stderr.write('vmfex: adding interface to profile: %s\n' % entry)
+ try:
+ nicnum = int(entry.split(':')[0][3:])
+ profile = entry.split(':')[1]
+ mynic = vnicmap[nicnum]
+ #replace type="bridge" with "network"
+ mynic.setAttribute('type','network')
+
+ source = mynic.getElementsByTagName('source')[0]
+ source.removeAttribute('bridge')
+ source.setAttribute('network', 'direct-pool')
+
+ virtualport = domxml.createElement('virtualport')
+ virtualport.setAttribute('type', '802.1Qbh')
+ mynic.appendChild(virtualport)
+
+ parameters = domxml.createElement('parameters')
+ parameters.setAttribute('profileid', profile)
+ virtualport.appendChild(parameters)
+
+ except:
+ sys.stderr.write('vmfex: Error in vmfex custom property line: %s\n' % entry)
+ sys.exit(2)
+
+ hooking.write_domxml(domxml)
+ except:
+ sys.stderr.write('vmfex: [unexpected error]: %s\n' % traceback.format_exc())
+ sys.exit(2)
+
--
To view, visit http://gerrit.ovirt.org/7547
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I45a7fa46919bb39a648dff190c40618395990e91
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Dan Yasny <dyasny(a)gmail.com>
Mark Wu has uploaded a new change for review.
Change subject: Remove local mount point if storage server connection fails
......................................................................
Remove local mount point if storage server connection fails
Change-Id: Ic7aa1a47b7fa3577e83daa82fbad17fdc2ebd51f
Signed-off-by: Mark Wu <wudxw(a)linux.vnet.ibm.com>
---
M vdsm/storage/storageServer.py
1 file changed, 5 insertions(+), 2 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/98/4298/1
--
To view, visit http://gerrit.ovirt.org/4298
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic7aa1a47b7fa3577e83daa82fbad17fdc2ebd51f
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Mark Wu <wudxw(a)linux.vnet.ibm.com>
Mark Wu has uploaded a new change for review.
Change subject: Bz#839919 remoteFileHandler.py: Add storage into python path
......................................................................
Bz#839919 remoteFileHandler.py: Add storage into python path
pickle need import modules in vdsm/storage, so add it to python path.
Actually it's already done for RPC server side. This patch adds it
for client side, and merge the code.
Change-Id: Id23c3d0be6eb2e2212172613ea8f3b0c58edce06
Signed-off-by: Mark Wu <wudxw(a)linux.vnet.ibm.com>
---
M vdsm/storage/remoteFileHandler.py
1 file changed, 3 insertions(+), 4 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/54/6354/1
--
To view, visit http://gerrit.ovirt.org/6354
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Id23c3d0be6eb2e2212172613ea8f3b0c58edce06
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Mark Wu <wudxw(a)linux.vnet.ibm.com>
Royce Lv has uploaded a new change for review.
Change subject: change misc.retry to make it more general
......................................................................
change misc.retry to make it more general
add argument list to misc.retry to make it usable for function
with arguments.
Change-Id: I2b7d87629762d4d8f248d50fa4da71a0af3645d8
Signed-off-by: Royce Lv <lvroyce(a)linux.vnet.ibm.com>
---
M vdsm/storage/misc.py
M vdsm/supervdsm.py
2 files changed, 4 insertions(+), 3 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/32/4032/1
--
To view, visit http://gerrit.ovirt.org/4032
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I2b7d87629762d4d8f248d50fa4da71a0af3645d8
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Royce Lv <lvroyce(a)linux.vnet.ibm.com>