Change in vdsm[master]: Ifcfg: Fix file writing races
by asegurap@redhat.com
Antoni Segura Puimedon has uploaded a new change for review.
Change subject: Ifcfg: Fix file writing races
......................................................................
Ifcfg: Fix file writing races
On a fast enough computer, it could very well happen that we'd do:
open('foo', 'w').write('moo')
execCmd(['cat', 'foo'])
And that the content that 'cat' would show for foo would not be 'moo'
but whatever was there before the write, due to the file closing
happening at a non deterministic point of time.
How was this horribly edgy case unearthed? Good question!
Let's say we have a bond0 with slaves em2 and em1. We are in the
process of removing the bond completely.
removeNic basically stripes the nic ifcfg file of everything except
the hwaddr, device type, etc. So, if there was previously for nic em1
MASTER=bond0
after removeNic, there is an ifup of em1 (to leave the link state up)
that would still see bond0 as master. That in turn would make
initscripts trigger ifup of bond0, but that ifcfg file no longer
exists, ifup fails, raises an exception, and the whole removal is
rolled back.
Needless to say, this was unfindable with the debugger, as the file
close would be fast enough due to the debugger slowing down operation.
Change-Id: I6aabfbba44f1250f305ef6ec06f715e4782c4d1b
Signed-off-by: Antoni S. Puimedon <asegurap(a)redhat.com>
---
M vdsm/netconf/ifcfg.py
1 file changed, 14 insertions(+), 9 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/50/20050/1
diff --git a/vdsm/netconf/ifcfg.py b/vdsm/netconf/ifcfg.py
index d2032a7..b278183 100644
--- a/vdsm/netconf/ifcfg.py
+++ b/vdsm/netconf/ifcfg.py
@@ -267,7 +267,8 @@
os.makedirs(dirName)
os.chown(dirName, vdsm_uid, 0)
- open(backup, 'w').write(content)
+ with open(backup, 'w') as backupFile:
+ backupFile.write(content)
os.chown(backup, vdsm_uid, 0)
logging.debug("Persistently backed up %s "
"(until next 'set safe config')", backup)
@@ -337,14 +338,15 @@
def restoreAtomicBackup(self):
logging.info("Rolling back configuration (restoring atomic backup)")
- for confFile, content in self._backups.iteritems():
+ for confFilePath, content in self._backups.iteritems():
if content is None:
- utils.rmFile(confFile)
+ utils.rmFile(confFilePath)
logging.debug('Removing empty configuration backup %s',
- confFile)
+ confFilePath)
else:
- open(confFile, 'w').write(content)
- logging.info('Restored %s', confFile)
+ with open(confFilePath, 'w') as confFile:
+ confFile.write(content)
+ logging.info('Restored %s', confFilePath)
def _devType(self, content):
if re.search('^TYPE=Bridge$', content, re.MULTILINE):
@@ -479,7 +481,8 @@
self._backup(fileName)
logging.debug('Writing to file %s configuration:\n%s' % (fileName,
configuration))
- open(fileName, 'w').write(configuration)
+ with open(fileName, 'w') as confFile:
+ confFile.write(configuration)
os.chmod(fileName, 0664)
try:
selinux.restorecon(fileName)
@@ -559,7 +562,8 @@
# create the bonding device to avoid initscripts noise
if bond.name not in open(netinfo.BONDING_MASTERS).read().split():
- open(netinfo.BONDING_MASTERS, 'w').write('+%s\n' % bond.name)
+ with open(netinfo.BONDING_MASTERS, 'w') as bondingMasters:
+ bondingMasters.write('+%s\n' % bond.name)
def addNic(self, nic, **opts):
""" Create ifcfg-* file with proper fields for NIC """
@@ -606,7 +610,8 @@
if line.startswith('HWADDR=')]
l = ['DEVICE=%s\n' % nic, 'ONBOOT=yes\n',
'MTU=%s\n' % netinfo.DEFAULT_MTU] + hwlines
- open(cf, 'w').writelines(l)
+ with open(cf, 'w') as nicFile:
+ nicFile.writelines(l)
except IOError:
pass
--
To view, visit http://gerrit.ovirt.org/20050
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I6aabfbba44f1250f305ef6ec06f715e4782c4d1b
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Antoni Segura Puimedon <asegurap(a)redhat.com>
9 years, 12 months
Change in vdsm[master]: Restart needed services after reconfigure libvirt
by ybronhei@redhat.com
Yaniv Bronhaim has uploaded a new change for review.
Change subject: Restart needed services after reconfigure libvirt
......................................................................
Restart needed services after reconfigure libvirt
Without starting libvirtd service after reconfigure, nwfilter fails
to run.
Change-Id: Icf70a749454ea341d5b52220e16e9567b90431a0
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1013371
Signed-off-by: Yaniv Bronhaim <ybronhei(a)redhat.com>
---
M init/vdsmd_init_common.sh.in
1 file changed, 2 insertions(+), 1 deletion(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/37/19737/1
diff --git a/init/vdsmd_init_common.sh.in b/init/vdsmd_init_common.sh.in
index 38da542..5c8895c 100644
--- a/init/vdsmd_init_common.sh.in
+++ b/init/vdsmd_init_common.sh.in
@@ -55,7 +55,8 @@
task_reconfigure_libvirt(){
- "$VDSM_TOOL" libvirt-configure
+ "$VDSM_TOOL" libvirt-configure &&
+ "$VDSM_TOOL" libvirt-configure-services-restart
}
--
To view, visit http://gerrit.ovirt.org/19737
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Icf70a749454ea341d5b52220e16e9567b90431a0
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Yaniv Bronhaim <ybronhei(a)redhat.com>
9 years, 12 months
Change in vdsm[ovirt-3.3.0]: oop: improve safety for truncateFile
by Federico Simoncelli
Hello Nir Soffer, Sergey Gotliv, Dan Kenigsberg,
I'd like you to do a code review. Please visit
http://gerrit.ovirt.org/20063
to review the following change.
Change subject: oop: improve safety for truncateFile
......................................................................
oop: improve safety for truncateFile
In order to make truncateFile safer and to avoid any confusion on its
behavior:
* a new comment has been added mentioning O_TRUNC and "w" to avoid any
future mistake in this area
* a new test has been added to check the expected outcomes
* the "w" mode has been removed from truncateFile (used in os.fdopen)
to prevent any future reconversion to open(path, "w")
* the risk of a file descriptor leak (for a failing os.fdopen call)
has been removed using the relevant posix calls
Change-Id: Ib71b53498c7bc4ea7a1ab725feb18bc5929f8c85
Signed-off-by: Federico Simoncelli <fsimonce(a)redhat.com>
Reviewed-on: http://gerrit.ovirt.org/20046
Reviewed-by: Nir Soffer <nsoffer(a)redhat.com>
Reviewed-by: Sergey Gotliv <sgotliv(a)redhat.com>
Reviewed-by: Dan Kenigsberg <danken(a)redhat.com>
---
M tests/remoteFileHandlerTests.py
M vdsm/storage/remoteFileHandler.py
2 files changed, 39 insertions(+), 3 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/63/20063/1
diff --git a/tests/remoteFileHandlerTests.py b/tests/remoteFileHandlerTests.py
index 544ec28..a2ca574 100644
--- a/tests/remoteFileHandlerTests.py
+++ b/tests/remoteFileHandlerTests.py
@@ -18,6 +18,8 @@
# Refer to the README and COPYING files for full details of the license
#
import os
+import string
+import tempfile
from vdsm import utils
from testrunner import VdsmTestCase as TestCaseBase
@@ -69,3 +71,29 @@
test = lambda: self.assertFalse(os.path.exists(procPath))
utils.retry(test, AssertionError, timeout=4, sleep=0.1)
+
+
+class RemoteFileHandlerFunctionTests(TestCaseBase):
+ def testTruncateFile(self):
+ fd, path = tempfile.mkstemp()
+ try:
+ os.write(fd, string.ascii_uppercase)
+ os.close(fd)
+
+ # Verifying content
+ data = string.ascii_uppercase
+ self.assertEquals(data, file(path).read())
+
+ # Testing truncate to a larger size
+ data = string.ascii_uppercase + chr(0) * 16
+
+ rhandler.truncateFile(path, len(data))
+ self.assertEquals(data, file(path).read())
+
+ # Testing truncate to a smaller size
+ data = string.ascii_uppercase
+
+ rhandler.truncateFile(path, len(data))
+ self.assertEquals(data, file(path).read())
+ finally:
+ os.unlink(path)
diff --git a/vdsm/storage/remoteFileHandler.py b/vdsm/storage/remoteFileHandler.py
index 47b237b..3a22bc4 100644
--- a/vdsm/storage/remoteFileHandler.py
+++ b/vdsm/storage/remoteFileHandler.py
@@ -335,15 +335,23 @@
def truncateFile(path, size, mode=None, creatExcl=False):
+ # NOTE: Under no circumstance you should add the O_TRUNC
+ # flag here. We rely on the fact that the file content is
+ # not deleted when truncating to a larger size.
+ # Please also note that the "w" option used in open/file
+ # contains O_TRUNC and therefore should not be used here.
flags = os.O_CREAT | os.O_WRONLY
+
if creatExcl:
flags |= os.O_EXCL
fd = os.open(path, flags)
- with os.fdopen(fd, 'w') as f:
+ try:
if mode is not None:
- os.chmod(path, mode)
- f.truncate(size)
+ os.fchmod(fd, mode)
+ os.ftruncate(fd, size)
+ finally:
+ os.close(fd)
def readLines(path):
--
To view, visit http://gerrit.ovirt.org/20063
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib71b53498c7bc4ea7a1ab725feb18bc5929f8c85
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: ovirt-3.3.0
Gerrit-Owner: Federico Simoncelli <fsimonce(a)redhat.com>
Gerrit-Reviewer: Dan Kenigsberg <danken(a)redhat.com>
Gerrit-Reviewer: Nir Soffer <nsoffer(a)redhat.com>
Gerrit-Reviewer: Sergey Gotliv <sgotliv(a)redhat.com>
9 years, 12 months
Change in vdsm[ovirt-3.3.0]: remoteFileHandler: Add create exclusive option for truncateFile
by Federico Simoncelli
Hello Yeela Kaplan, Dan Kenigsberg,
I'd like you to do a code review. Please visit
http://gerrit.ovirt.org/20062
to review the following change.
Change subject: remoteFileHandler: Add create exclusive option for truncateFile
......................................................................
remoteFileHandler: Add create exclusive option for truncateFile
Change-Id: Idfeff348e0f6fc240954e7d304b794dd99ea098c
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=979193
Signed-off-by: Yeela Kaplan <ykaplan(a)redhat.com>
Reviewed-on: http://gerrit.ovirt.org/19022
Reviewed-by: Dan Kenigsberg <danken(a)redhat.com>
---
M vdsm/storage/remoteFileHandler.py
1 file changed, 7 insertions(+), 2 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/62/20062/1
diff --git a/vdsm/storage/remoteFileHandler.py b/vdsm/storage/remoteFileHandler.py
index abe9915..47b237b 100644
--- a/vdsm/storage/remoteFileHandler.py
+++ b/vdsm/storage/remoteFileHandler.py
@@ -334,8 +334,13 @@
return f.writelines(lines)
-def truncateFile(path, size, mode=None):
- with open(path, "w") as f:
+def truncateFile(path, size, mode=None, creatExcl=False):
+ flags = os.O_CREAT | os.O_WRONLY
+ if creatExcl:
+ flags |= os.O_EXCL
+
+ fd = os.open(path, flags)
+ with os.fdopen(fd, 'w') as f:
if mode is not None:
os.chmod(path, mode)
f.truncate(size)
--
To view, visit http://gerrit.ovirt.org/20062
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Idfeff348e0f6fc240954e7d304b794dd99ea098c
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: ovirt-3.3.0
Gerrit-Owner: Federico Simoncelli <fsimonce(a)redhat.com>
Gerrit-Reviewer: Dan Kenigsberg <danken(a)redhat.com>
Gerrit-Reviewer: Yeela Kaplan <ykaplan(a)redhat.com>
9 years, 12 months
Change in vdsm[master]: Changing return method from vdsmd start function
by ybronhei@redhat.com
Yaniv Bronhaim has uploaded a new change for review.
Change subject: Changing return method from vdsmd start function
......................................................................
Changing return method from vdsmd start function
Change-Id: I24985450addd3feb26687d42be741d9f357dc8c5
Signed-off-by: Yaniv Bronhaim <ybronhei(a)redhat.com>
---
M init/sysvinit/vdsmd.init.in
1 file changed, 6 insertions(+), 12 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/84/19884/1
diff --git a/init/sysvinit/vdsmd.init.in b/init/sysvinit/vdsmd.init.in
index 2fd222d..5ccdc3d 100755
--- a/init/sysvinit/vdsmd.init.in
+++ b/init/sysvinit/vdsmd.init.in
@@ -120,28 +120,22 @@
}
start() {
- local ret_val
-
test_already_running && return 0
if [ "${is_coredump}" = "true" ]; then
export DAEMON_COREFILE_LIMIT=unlimited
echo "${CORE_DUMP_PATH}" > "${CORE_PATTERN}"
fi
-
- shutdown_conflicting_srv "${CONFLICTING_SERVICES}"
-
- start_needed_srv "${NEEDED_SERVICES}"
-
- "${VDSMD_INIT_COMMON}" --pre-start
+ shutdown_conflicting_srv "${CONFLICTING_SERVICES}" || return 1
+ start_needed_srv "${NEEDED_SERVICES}" || return 1
+ "${VDSMD_INIT_COMMON}" --pre-start || return 1
echo $"Starting up vdsm daemon: "
NICELEVEL="${NICE_LOWEST}" daemon --user=vdsm "@VDSMDIR@/daemonAdapter" \
-0 /dev/null -1 /dev/null -2 /dev/null --syslog "@VDSMDIR@/respawn" --minlifetime 10 \
- --daemon --masterpid "${RESPAWNPIDFILE}" "${VDSM_BIN}" --pidfile "${PIDFILE}"
- RETVAL=$?
- [ "$RETVAL" = 0 ] && touch "${LOCK_FILE}"
- return "$RETVAL"
+ --daemon --masterpid "${RESPAWNPIDFILE}" "${VDSM_BIN}" --pidfile "${PIDFILE}" || return 1
+ touch "${LOCK_FILE}"
+ return 0
}
stop() {
--
To view, visit http://gerrit.ovirt.org/19884
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I24985450addd3feb26687d42be741d9f357dc8c5
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Yaniv Bronhaim <ybronhei(a)redhat.com>
9 years, 12 months
Change in vdsm[master]: oop: improve safety for truncateFile
by Federico Simoncelli
Federico Simoncelli has uploaded a new change for review.
Change subject: oop: improve safety for truncateFile
......................................................................
oop: improve safety for truncateFile
In order to make truncateFile safer and to avoid any confusion on its
behavior:
* a new comment has been added mentioning O_TRUNC and "w" to avoid any
future mistake in this area
* a new test has been added to check the expected outcomes
* the "w" mode has been removed from truncateFile (used in os.fdopen)
to prevent any future reconversion to open(path, "w")
* the risk of a file descriptor leak (for a failing os.fdopen call)
has been removed using the relevant posix calls
Change-Id: Ib71b53498c7bc4ea7a1ab725feb18bc5929f8c85
Signed-off-by: Federico Simoncelli <fsimonce(a)redhat.com>
---
M tests/remoteFileHandlerTests.py
M vdsm/storage/remoteFileHandler.py
2 files changed, 39 insertions(+), 3 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/46/20046/1
diff --git a/tests/remoteFileHandlerTests.py b/tests/remoteFileHandlerTests.py
index 544ec28..a2ca574 100644
--- a/tests/remoteFileHandlerTests.py
+++ b/tests/remoteFileHandlerTests.py
@@ -18,6 +18,8 @@
# Refer to the README and COPYING files for full details of the license
#
import os
+import string
+import tempfile
from vdsm import utils
from testrunner import VdsmTestCase as TestCaseBase
@@ -69,3 +71,29 @@
test = lambda: self.assertFalse(os.path.exists(procPath))
utils.retry(test, AssertionError, timeout=4, sleep=0.1)
+
+
+class RemoteFileHandlerFunctionTests(TestCaseBase):
+ def testTruncateFile(self):
+ fd, path = tempfile.mkstemp()
+ try:
+ os.write(fd, string.ascii_uppercase)
+ os.close(fd)
+
+ # Verifying content
+ data = string.ascii_uppercase
+ self.assertEquals(data, file(path).read())
+
+ # Testing truncate to a larger size
+ data = string.ascii_uppercase + chr(0) * 16
+
+ rhandler.truncateFile(path, len(data))
+ self.assertEquals(data, file(path).read())
+
+ # Testing truncate to a smaller size
+ data = string.ascii_uppercase
+
+ rhandler.truncateFile(path, len(data))
+ self.assertEquals(data, file(path).read())
+ finally:
+ os.unlink(path)
diff --git a/vdsm/storage/remoteFileHandler.py b/vdsm/storage/remoteFileHandler.py
index f01461f..5b24053 100644
--- a/vdsm/storage/remoteFileHandler.py
+++ b/vdsm/storage/remoteFileHandler.py
@@ -348,15 +348,23 @@
def truncateFile(path, size, mode=None, creatExcl=False):
+ # NOTE: Under no circumstance you should add the O_TRUNC
+ # flag here. We rely on the fact that the file content is
+ # not deleted when truncating to a larger size.
+ # Please also note that the "w" option used in open/file
+ # contains O_TRUNC and therefore should not be used here.
flags = os.O_CREAT | os.O_WRONLY
+
if creatExcl:
flags |= os.O_EXCL
fd = os.open(path, flags)
- with os.fdopen(fd, 'w') as f:
+ try:
if mode is not None:
- os.chmod(path, mode)
- f.truncate(size)
+ os.fchmod(fd, mode)
+ os.ftruncate(fd, size)
+ finally:
+ os.close(fd)
def readLines(path):
--
To view, visit http://gerrit.ovirt.org/20046
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib71b53498c7bc4ea7a1ab725feb18bc5929f8c85
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Federico Simoncelli <fsimonce(a)redhat.com>
9 years, 12 months
Change in vdsm[master]: testrunner P_VDSM path fix
by asegurap@redhat.com
Antoni Segura Puimedon has uploaded a new change for review.
Change subject: testrunner P_VDSM path fix
......................................................................
testrunner P_VDSM path fix
when running run_tests_local.sh the tests that want to find modules
in that would usually be installed to /usr/share/vdsm should look
in $repo_root/vdsm instead of $repo_root.
Change-Id: I7ce18ceacbf95813c587238863e271f200322478
Signed-off-by: Antoni S. Puimedon <asegurap(a)redhat.com>
---
M tests/testrunner.py
1 file changed, 1 insertion(+), 1 deletion(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/20/20020/1
diff --git a/tests/testrunner.py b/tests/testrunner.py
index bf49dd1..2d4dcc9 100644
--- a/tests/testrunner.py
+++ b/tests/testrunner.py
@@ -319,7 +319,7 @@
"instead of installed ones.\n")
if findRemove(sys.argv, "--local-modules"):
from vdsm import constants
- constants.P_VDSM = "../"
+ constants.P_VDSM = "../vdsm/"
# Mock panic() calls for tests
utils.panic = panicMock
--
To view, visit http://gerrit.ovirt.org/20020
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I7ce18ceacbf95813c587238863e271f200322478
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Antoni Segura Puimedon <asegurap(a)redhat.com>
9 years, 12 months
Change in vdsm[master]: Tests: Fixed resource manager stress test
by smizrahi@redhat.com
Saggi Mizrahi has uploaded a new change for review.
Change subject: Tests: Fixed resource manager stress test
......................................................................
Tests: Fixed resource manager stress test
It now should perform more reliably and reduce side effects. Can be now
be run even on weaker hosts though the test will be less effective.
Change-Id: I1ba095724a251968c8d5b2767e6491825d79297e
Signed-off-by: Saggi Mizrahi <smizrahi(a)redhat.com>
---
M tests/resourceManagerTests.py
M vdsm.spec.in
2 files changed, 31 insertions(+), 25 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/52/19252/1
diff --git a/tests/resourceManagerTests.py b/tests/resourceManagerTests.py
index be451d4..908fa98 100644
--- a/tests/resourceManagerTests.py
+++ b/tests/resourceManagerTests.py
@@ -609,18 +609,16 @@
This tests raises thousands of threads and tries to acquire the same
resource.
"""
- resources = []
- requests = []
+ queue = []
procLimit, _ = getrlimit(RLIMIT_NPROC)
procLimit *= 0.5
procLimit = int(procLimit)
threadLimit = threading.Semaphore(procLimit)
- nthreads = procLimit
+ maxedOut = False
def callback(req, res):
- requests.insert(0, req)
- resources.insert(0, res)
+ queue.insert(0, (req, res))
def register():
time.sleep(rnd.randint(0, 4))
@@ -645,31 +643,38 @@
resourceManager.LockType.shared]
threads = []
- for i in range(nthreads):
+ for i in range(procLimit):
+ t = threading.Thread(target=register)
+ try:
+ t.start()
+ except:
+ # Reached thread limit, bail out
+ maxedOut = True
+ break
+
threadLimit.acquire()
- threads.append(threading.Thread(target=register))
- threads[-1].start()
+ threads.append(t)
- while len(threads) > 0:
- for t in threads[:]:
- if not t.isAlive():
- threads.remove(t)
+ n = 0
+ while n < len(threads):
+ for i in reversed(range(len(queue))):
+ f = None
+ if i > 0:
+ f = releaseShared
+ else:
+ f = releaseUnknown
- while len(resources) > 0:
- while len(resources) > 1:
+ if maxedOut:
+ f(*queue.pop())
+ else:
threadLimit.acquire()
- threads.append(
- threading.Thread(target=releaseShared,
- args=[requests.pop(),
- resources.pop()]))
- threads[-1].start()
+ try:
+ threading.Thread(target=f, args=queue.pop()).start()
+ except:
+ threadLimit.release()
+ f(*queue.pop())
- threadLimit.acquire()
- threads.append(
- threading.Thread(target=releaseUnknown,
- args=[requests.pop(),
- resources.pop()]))
- threads[-1].start()
+ n += 1
def tearDown(self):
manager = self.manager
diff --git a/vdsm.spec.in b/vdsm.spec.in
index 4d89517..237be46 100644
--- a/vdsm.spec.in
+++ b/vdsm.spec.in
@@ -98,6 +98,7 @@
Requires: python-inotify
Requires: python-argparse
Requires: python-ethtool >= 0.6-3
+Requires: vdsm-zombiereaper = %{version}-%{release}
Requires: rpm-python
Requires: nfs-utils
Requires: m2crypto
--
To view, visit http://gerrit.ovirt.org/19252
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I1ba095724a251968c8d5b2767e6491825d79297e
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Saggi Mizrahi <smizrahi(a)redhat.com>
9 years, 12 months