[PATCH][Wok 01/11] FVT: Package for functional verification testcases.
by archus@linux.vnet.ibm.com
From: Archana Singh <archus(a)linux.vnet.ibm.com>
init python file for fvt package.
Signed-off-by: Archana Singh <archus(a)linux.vnet.ibm.com>
---
tests/fvt/__init__.py | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
create mode 100644 tests/fvt/__init__.py
diff --git a/tests/fvt/__init__.py b/tests/fvt/__init__.py
new file mode 100644
index 0000000..4f44650
--- /dev/null
+++ b/tests/fvt/__init__.py
@@ -0,0 +1,18 @@
+#
+# Project Wok
+#
+# Copyright IBM, Corp. 2016
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
--
2.5.0
8 years, 7 months
[PATCH][Wok 00/11] FVT testcases wok framework
by archus@linux.vnet.ibm.com
From: Archana Singh <archus(a)linux.vnet.ibm.com>
Patch for adding FVT testcases wok framework which can be used across plugins.
The changes are:
1) Added fvt package inside tests directory.
2) Added config file inside fvt package to have session details.
3) restapilib.py to have common classes/methods for REST API calls.
4) fvt_base.py, a base test class to take care of doing
common setup and treadown required for any fvt test cases like
creating/destroying session using config file and restapilib.py.
5) run_test.sh.in script to install all the dependencies and to run all FVT.
6) make file changes to have 'make check-fvt' for running all the FVT.
7) Instruction added in REDME.md for make check-fvt.
Archana Singh (11):
FVT: Package for functional verification testcases.
FVT: Wok level config file to have 'sectionsi required for fvt common
across plugins.
FVT: Lists all dependecies for fvt testcases.
FVT: Common classes/methods for API calls as per config file
configuration.
FVT: Base test class, takes care common actions required for any FVT
test cases.
FVT: Install all the dependencies from requirements.txt and runs FVT
testcases
FVT: Makefile needed for build and run fvt.
FVT: Added fvt as subdirs and check-fvt to run fvt testcases using
make.
FVT: Added FVT Makefile path in AC_CONFIG_FILES list.
FVT: Added check-fvt to run FVT testcases using make and venv dir to
be cleaned.
FVT: Added Readme instruction for running fvt testcases.
Makefile.am | 6 +
configure.ac | 1 +
docs/README.md | 8 +
tests/Makefile.am | 7 +
tests/fvt/Makefile.am | 43 +++
tests/fvt/__init__.py | 18 ++
tests/fvt/config | 7 +
tests/fvt/fvt_base.py | 92 ++++++
tests/fvt/requirements.txt | 23 ++
tests/fvt/restapilib.py | 760 +++++++++++++++++++++++++++++++++++++++++++++
tests/fvt/run_tests.sh.in | 92 ++++++
11 files changed, 1057 insertions(+)
create mode 100644 tests/fvt/Makefile.am
create mode 100644 tests/fvt/__init__.py
create mode 100644 tests/fvt/config
create mode 100644 tests/fvt/fvt_base.py
create mode 100644 tests/fvt/requirements.txt
create mode 100644 tests/fvt/restapilib.py
create mode 100755 tests/fvt/run_tests.sh.in
--
2.5.0
8 years, 7 months
[RFC] [Kimchi] How to handle more than one interface when listing networks
by Socorro Stoppler
Hi All,
When working w/Edit Virtual Network, Lucio pointed out that when more
than one interface is chosen (in the case of VEPA and Passthrough), only one
interface is being shown in the list of Networks either after creation
or editing of the network. User should be able to see all interfaces
for that network.
Here are the options of handling the interfaces:
1. Show only 1 interface on the list and when hovering over interfaces,
show a tooltip that lists all interfaces for that network regardless of
how many are
chosen for that network (e.g. even for ones that can only have one
interface, show tooltip anyways for consistency)
2. Same as #1 except to show 2 interfaces as there's real estate for that
3. Only show tooltip if there's more than 1 or 2 (whichever we decide)
interface(s)
Any other ideas?
Thanks
-Socorro
8 years, 7 months
[PATCH] [Kimchi] Decrease the sleep time for libvirt event timout
by Jose Ricardo Ziviani
- The current 1 second of sleeping time for libvirt event timeout
causes impact in the webserial console because the event is
blocked here for 1sec before arriving there. This commit
decreases this value to a smaller arbitrary value.
Signed-off-by: Jose Ricardo Ziviani <joserz(a)linux.vnet.ibm.com>
---
model/libvirtevents.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/model/libvirtevents.py b/model/libvirtevents.py
index ab5c17d..0876d3a 100644
--- a/model/libvirtevents.py
+++ b/model/libvirtevents.py
@@ -56,4 +56,4 @@ class LibvirtEvents(object):
# Event loop handler used to limit length of waiting for any other event.
def _kimchi_EventTimeout(self, timer, opaque):
- time.sleep(1)
+ time.sleep(0.0001)
--
2.7.4
8 years, 7 months
[PATCH][Kimchi] Improve Kimchi feature tests output
by Rodrigo Trujillo
This patch adds more debug information about feature tests results when
Kimchi loads. Ex.:
- NFS Target Probe support ...: True
- Fibre Channel Host support .: True
- Kernel VFIO support ........: True
- Network Manager running ....: True
- Memory Hotplug support .....: True
- Service Libvirtd running ...: True
- QEMU stream support .......: True
- Libvirt Stream Protocols ..: ['http', 'https', 'ftp', 'ftps', 'tftp']
Then developers/admins will have more information when debugging issues.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo(a)linux.vnet.ibm.com>
---
model/config.py | 25 ++++++++++++++++++++-----
1 file changed, 20 insertions(+), 5 deletions(-)
diff --git a/model/config.py b/model/config.py
index 7889896..36fce74 100644
--- a/model/config.py
+++ b/model/config.py
@@ -87,28 +87,43 @@ class CapabilitiesModel(object):
FeatureTests.enable_libvirt_error_logging()
def _set_depend_capabilities(self):
- wok_log.info("*** Running dependable feature tests ***")
+ wok_log.info("\n*** Kimchi: Running dependable feature tests ***")
conn = self.conn.get()
self.qemu_stream = FeatureTests.qemu_supports_iso_stream()
+ msg = "QEMU stream support .......: %s"
+ wok_log.info(msg % str(self.qemu_stream))
self.libvirt_stream_protocols = []
for p in ['http', 'https', 'ftp', 'ftps', 'tftp']:
if FeatureTests.libvirt_supports_iso_stream(conn, p):
self.libvirt_stream_protocols.append(p)
-
- wok_log.info("*** Dependable feature tests completed ***")
+ msg = "Libvirt Stream Protocols ..: %s"
+ wok_log.info(msg % str(self.libvirt_stream_protocols))
+ wok_log.info("*** Kimchi: Dependable feature tests completed ***\n")
_set_depend_capabilities.priority = 90
def _set_capabilities(self):
- wok_log.info("*** Running feature tests ***")
+ wok_log.info("\n*** Kimchi: Running feature tests ***")
conn = self.conn.get()
self.nfs_target_probe = FeatureTests.libvirt_support_nfs_probe(conn)
+ msg = "NFS Target Probe support ...: %s"
+ wok_log.info(msg % str(self.nfs_target_probe))
self.fc_host_support = FeatureTests.libvirt_support_fc_host(conn)
+ msg = "Fibre Channel Host support .: %s"
+ wok_log.info(msg % str(self.fc_host_support))
self.kernel_vfio = FeatureTests.kernel_support_vfio()
+ msg = "Kernel VFIO support ........: %s"
+ wok_log.info(msg % str(self.kernel_vfio))
self.nm_running = FeatureTests.is_nm_running()
+ msg = "Network Manager running ....: %s"
+ wok_log.info(msg % str(self.nm_running))
self.mem_hotplug_support = FeatureTests.has_mem_hotplug_support(conn)
+ msg = "Memory Hotplug support .....: %s"
+ wok_log.info(msg % str(self.mem_hotplug_support))
self.libvirtd_running = is_libvirtd_up()
- wok_log.info("*** Feature tests completed ***")
+ msg = "Service Libvirtd running ...: %s"
+ wok_log.info(msg % str(self.libvirtd_running))
+ wok_log.info("*** Kimchi: Feature tests completed ***\n")
_set_capabilities.priority = 90
def _qemu_support_spice(self):
--
2.1.0
8 years, 7 months
Re: [Kimchi-devel] [PATCH v4] [Kimchi] Storage Volume management
by Samuel Henrique De Oliveira Guimaraes
-----Original Message-----
From: Aline Manera [mailto:alinefm@linux.vnet.ibm.com]
Sent: terça-feira, 24 de maio de 2016 11:40
To: Samuel Henrique De Oliveira Guimaraes <samuel.guimaraes(a)eldorado.org.br>; sguimaraes943(a)gmail.com; Kimchi Devel <kimchi-devel(a)ovirt.org>
Subject: Re: [Kimchi-devel] [PATCH v4] [Kimchi] Storage Volume management
On 05/24/2016 10:27 AM, Samuel Henrique De Oliveira Guimaraes wrote:
>
> -----Original Message-----
> From: kimchi-devel-bounces(a)ovirt.org
> [mailto:kimchi-devel-bounces@ovirt.org] On Behalf Of Aline Manera
> Sent: segunda-feira, 23 de maio de 2016 17:41
> To: sguimaraes943(a)gmail.com; Kimchi Devel <kimchi-devel(a)ovirt.org>
> Subject: Re: [Kimchi-devel] [PATCH v4] [Kimchi] Storage Volume
> management
>
> Hi Samuel,
>
> Some comments:
>
> 1. When I switch to the "Gallery view" I can see all volumes selected
> and after one second, they are deselected
>
> Hi. I tried to reproduce this here but it is working fine. Tested with Firefox and Chrome and watched for DOM changes and after a minute the checkboxes were still selected. Even If I run an asynchronous task in another Storage Pool it won't change the volumes in another Storage Pool.
I am saying, when you are in the storage volumes list view without any storage volume selected and switch to the gallery view, all the storage volumes appear selected for a second and then the page is refreshed to deselect all them.
Do you mean that black border that appears for a brief second? This is not happening on Chrome but Firefox and IE indeed have this problem. I suspect it is because of the border-color transition to "transparent", as Chrome supports RGBA while Firefox and IE only supports RGB for transitions.
> 2. When you select multiple volumes to perform an action, there is no feedback to user that an operation will be done on those selected volumes.
> I can select others, deselect the ones I have selected before and so. We should block the volume selected, add a loading icon, for example, and a mark check when the operation is completed.
>
> I think my machine is running these tasks too fast so that's why I didn't foresaw this as a requirement. I'll disable the checkboxes and add the spinner icon.
>
> 3. Usually we don't use success messages on Wok and its plugins. Any reason to add them now?
>
> I've added some to System Services and OVS Bridges there was no feedback to the user pointing a change in the tables or that an action was being performed but with multiple selection sometimes it may render multiple messages in the area so I'll remove them.
>
> 4. The message are duplicated. I can see 2 messages when trying to delete multiple items "Volume selected were deleted" + "Volume X was successfully deleted".
>
> See above.
>
> 5. The same messages for delete operation are shown when I wipe volumes.
>
> See above.
>
> 6. The wipe operation will change the allocation value and so it must be updated in the volume box.
>
> You mean the Storage Pool line in the parent table? Once the wipe process is completed the line is updated with 0.0B in the allocated column, however the parent %Used and Allocated columns are not refreshed. Are these two the only fields that should be updated? Should it be done for Clone and Delete as well?
I was talking about the storage volume settings. When I do wipe multiple volumes, only one of them get the settings updated.
I've selected five different .qcow files and wiped them. According to chrome the list refreshed 6 times, the last time when the selectedVolumes array is empty. For large files displaying in MB when I wipe them, they immediately turn the "allocated" column to 0.0B but If I choose to wipe a file in KB, the allocation and capacity has the same value:
Before:
{
"allocation":131072,
"isvalid":false,
"capacity":127314,
"name":"0003-WOK-Deleting-unecessary-files-conflicting-with-new-u.patch",
"format":"raw",
"has_permission":true,
"path":"/root/Downloads/0003-WOK-Deleting-unecessary-files-conflicting-with-new-u.patch",
"used_by":[],
"type":"file"
},
After:
{
"allocation":131072,
"isvalid":true,
"capacity":131072,
"name":"0003-WOK-Deleting-unecessary-files-conflicting-with-new-u.patch",
"format":"raw",
"has_permission":true,
"path":"/root/Downloads/0003-WOK-Deleting-unecessary-files-conflicting-with-new-u.patch",
"used_by":[],
"type":"file"
}
They keep the same value for allocation and capacity.
With a large qcow file:
Before:
{
"allocation":1014439936,
"isvalid":true,
"capacity":8589934592,
"name":"2c2f4ef0-7ce0-4aad-b6c8-b891d21fbf40-0.qcow2",
"format":"qcow2",
"has_permission":true,
"path":"/var/lib/libvirt/images/2c2f4ef0-7ce0-4aad-b6c8-b891d21fbf40-0.qcow2",
"used_by":[
"vm1"
],
"type":"file"
}
After:
{
"allocation":0,
"isvalid":true,
"capacity":1014497280,
"name":"2c2f4ef0-7ce0-4aad-b6c8-b891d21fbf40-0.qcow2",
"format":"raw",
"has_permission":true,
"path":"/var/lib/libvirt/images/2c2f4ef0-7ce0-4aad-b6c8-b891d21fbf40-0.qcow2",
"used_by":[],
"type":"file"
}
Note that the wiped volume capacity has a little bit more of its previous allocation. Is it correct?
About what you said, I agree we should update the storage pool settings as new volumes or deleting volumes may change the storage pool allocation. I think only %used and allocated must be updated.
Ok, will create a new function to replace the old values.
> 7. The scroll bar should only scroll the volumes. It is hard to get back all time to have the Actions menu available.
>
> I'm ok with this for the list view appending a scrollbar on the "table" element but with the Gallery view I think it looks odd. See attached screenshots.
IMO It is OK for me on both views (list and gallery).
Do you have any other idea to have the same behavior on gallery view which does not look odd as you said?
I was trying to attach the scrollbar on the same position as it is today but this doesn't work well with just CSS, I would have to write some lines in JS to keep this parallax effect. I'll keep the same as the screenshots but with different max-height values for list view and gallery view and the scrollbar attached to the tables.
>
> I think that is all from my side.
>
> Regards,
> Aline Manera
>
> On 05/23/2016 12:46 PM, sguimaraes943(a)gmail.com wrote:
>> From: Samuel Guimarães <sguimaraes943(a)gmail.com>
>>
>> This patch adds Storage Volume management functions Wipe, Clone, Resize and Delete with multiple selection. It also includes a filter input for each Storage Pool and Gallery View for Storage Volumes.
>>
>> Changes from [RFC] version:
>>
>> v1:
>> - HTML and CSS
>>
>> v2:
>> - Delete and Wipe with multi-selection
>> - Confirm messages with list of selected volumes when wiping or deleting volumes (requires SCSS/CSS patch sent to Wok)
>> - Filter working
>> - Removed "Add Volume" link from Storage Pool action button
>> - Added "Add Volume" to Volume box action button
>>
>> v3:
>> - Clone function working with multiple selection
>> - Progress bar working for clone and create volume
>> - Temporary volume added to the volumes when cloning
>> - Seamless refresh on the volumes once each task is finished
>> - Fixed issue when list wouldn't refresh when all volumes are removed from the storage pool.
>>
>> v4:
>> - Prevent scroll when Drop-down in volumes list is clicked
>> - Dropdown is not clipped from volumes list when there's only one or two items on the list
>> - Added Media Queries for small screen resolutions
>>
>> Samuel Guimarães (1):
>> Storage Volume management
>>
>> model/storagevolumes.py | 2 +-
>> ui/css/kimchi.css | 369 ++++++++++++++--
>> ui/css/src/modules/_storage.scss | 347 ++++++++++++---
>> ui/js/src/kimchi.api.js | 50 +++
>> ui/js/src/kimchi.storage_main.js | 465 +++++++++++++++++----
>> ui/js/src/kimchi.storagepool_add_volume_main.js | 2 +-
>> ui/js/src/kimchi.storagepool_resize_volume_main.js | 59 +++
>> ui/pages/i18n.json.tmpl | 6 +
>> ui/pages/storagepool-resize-volume.html.tmpl | 51 +++
>> ui/pages/tabs/storage.html.tmpl | 155 +++----
>> 10 files changed, 1249 insertions(+), 257 deletions(-)
>> create mode 100644 ui/js/src/kimchi.storagepool_resize_volume_main.js
>> create mode 100644 ui/pages/storagepool-resize-volume.html.tmpl
>>
> _______________________________________________
> Kimchi-devel mailing list
> Kimchi-devel(a)ovirt.org
> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
8 years, 7 months
[PATCH v4] [Kimchi] Storage Volume management
by sguimaraes943@gmail.com
From: Samuel Guimarães <sguimaraes943(a)gmail.com>
This patch adds Storage Volume management functions Wipe, Clone, Resize and Delete with multiple selection. It also includes a filter input for each Storage Pool and Gallery View for Storage Volumes.
Changes from [RFC] version:
v1:
- HTML and CSS
v2:
- Delete and Wipe with multi-selection
- Confirm messages with list of selected volumes when wiping or deleting volumes (requires SCSS/CSS patch sent to Wok)
- Filter working
- Removed "Add Volume" link from Storage Pool action button
- Added "Add Volume" to Volume box action button
v3:
- Clone function working with multiple selection
- Progress bar working for clone and create volume
- Temporary volume added to the volumes when cloning
- Seamless refresh on the volumes once each task is finished
- Fixed issue when list wouldn't refresh when all volumes are removed from the storage pool.
v4:
- Prevent scroll when Drop-down in volumes list is clicked
- Dropdown is not clipped from volumes list when there's only one or two items on the list
- Added Media Queries for small screen resolutions
Samuel Guimarães (1):
Storage Volume management
model/storagevolumes.py | 2 +-
ui/css/kimchi.css | 369 ++++++++++++++--
ui/css/src/modules/_storage.scss | 347 ++++++++++++---
ui/js/src/kimchi.api.js | 50 +++
ui/js/src/kimchi.storage_main.js | 465 +++++++++++++++++----
ui/js/src/kimchi.storagepool_add_volume_main.js | 2 +-
ui/js/src/kimchi.storagepool_resize_volume_main.js | 59 +++
ui/pages/i18n.json.tmpl | 6 +
ui/pages/storagepool-resize-volume.html.tmpl | 51 +++
ui/pages/tabs/storage.html.tmpl | 155 +++----
10 files changed, 1249 insertions(+), 257 deletions(-)
create mode 100644 ui/js/src/kimchi.storagepool_resize_volume_main.js
create mode 100644 ui/pages/storagepool-resize-volume.html.tmpl
--
1.9.3
8 years, 7 months
Re: [Kimchi-devel] [PATCH V3] [Kimchi] Handle Libvirt host ENOSPC event
by Aline Manera
Hi Lucio,
Some test cases are failing with this patch. Could you fix it and resend?
Thanks,
Aline Manera
---------------------
[alinefm@alinefm-TP440 kimchi]$ sudo cat /tmp/tmp.QLQ6K1z9cG
*** Running feature tests ***
*** Feature tests completed ***
KCHVM0056E: KCHVM0056E
libvirt: error : invalid argument: event callback already tracked
Traceback (most recent call last):
File "/usr/lib64/python2.7/runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib64/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/usr/lib64/python2.7/unittest/__main__.py", line 12, in <module>
main(module=None)
File "/usr/lib64/python2.7/unittest/main.py", line 94, in __init__
self.parseArgs(argv)
File "/usr/lib64/python2.7/unittest/main.py", line 149, in parseArgs
self.createTests()
File "/usr/lib64/python2.7/unittest/main.py", line 158, in createTests
self.module)
File "/usr/lib64/python2.7/unittest/loader.py", line 130, in
loadTestsFromNames
suites = [self.loadTestsFromName(name, module) for name in names]
File "/usr/lib64/python2.7/unittest/loader.py", line 91, in
loadTestsFromName
module = __import__('.'.join(parts_copy))
File "test_livemigration.py", line 91, in <module>
class LiveMigrationTests(unittest.TestCase):
File "test_livemigration.py", line 273, in LiveMigrationTests
@unittest.skipUnless(check_if_vm_migration_test_possible(),
File "test_livemigration.py", line 76, in
check_if_vm_migration_test_possible
inst = model.Model(objstore_loc='/tmp/kimchi-store-test')
File "/home/alinefm/wok/src/wok/plugins/kimchi/model/model.py", line
54, in __init__
self.events.handleEnospc(self.conn)
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtevents.py", line
83, in handleEnospc
libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtconnection.py",
line 67, in wrapper
ret = f(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 4919, in
domainEventRegisterAny
raise libvirtError ('virConnectDomainEventRegisterAny() failed',
conn=self)
libvirt.libvirtError: invalid argument: event callback already tracked
.*** Running feature tests ***
libvirt: Domain Config error : this function is not supported by the
connection driver: virDomainAttachDeviceFlags
*** Feature tests completed ***
cpu_info topology not supported.
libvirt: Node Device Driver error : this function is not supported by
the connection driver: virConnectListAllNodeDevices
libvirt: Node Device Driver error : this function is not supported by
the connection driver: virConnectListAllNodeDevices
libvirt: Node Device Driver error : this function is not supported by
the connection driver: virConnectListAllNodeDevices
..libvirt: error : invalid argument: event callback already tracked
Ecpu_info topology not supported.
libvirt: Node Device Driver error : this function is not supported by
the connection driver: virConnectListAllNodeDevices
libvirt: Node Device Driver error : this function is not supported by
the connection driver: virConnectListAllNodeDevices
libvirt: Node Device Driver error : this function is not supported by
the connection driver: virConnectListAllNodeDevices
.cpu_info topology not supported.
libvirt: Node Device Driver error : this function is not supported by
the connection driver: virConnectListAllNodeDevices
libvirt: Node Device Driver error : this function is not supported by
the connection driver: virConnectListAllNodeDevices
libvirt: Node Device Driver error : this function is not supported by
the connection driver: virConnectListAllNodeDevices
.libvirt: error : invalid argument: event callback already tracked
Eslibvirt: error : invalid argument: event callback already tracked
Elibvirt: error : invalid argument: event callback already tracked
Elibvirt: error : invalid argument: event callback already tracked
Ecpu_info topology not supported.
libvirt: Node Device Driver error : this function is not supported by
the connection driver: virConnectListAllNodeDevices
libvirt: Node Device Driver error : this function is not supported by
the connection driver: virConnectListAllNodeDevices
libvirt: Node Device Driver error : this function is not supported by
the connection driver: virConnectListAllNodeDevices
cpu_info topology not supported.
cpu_info topology not supported.
WOKOBJST0001E: WOKOBJST0001E
.libvirt: error : invalid argument: event callback already tracked
Ecpu_info topology not supported.
libvirt: Node Device Driver error : this function is not supported by
the connection driver: virConnectListAllNodeDevices
libvirt: Node Device Driver error : this function is not supported by
the connection driver: virConnectListAllNodeDevices
libvirt: Node Device Driver error : this function is not supported by
the connection driver: virConnectListAllNodeDevices
WOKOBJST0001E: WOKOBJST0001E
libvirt: Domain Config error : this function is not supported by the
connection driver: virDomainMemoryStats
WOKOBJST0001E: WOKOBJST0001E
libvirt: Domain Config error : this function is not supported by the
connection driver: virDomainMemoryStats
KCHVM0033E: KCHVM0033E
WOKOBJST0001E: WOKOBJST0001E
WOKOBJST0001E: WOKOBJST0001E
WOKOBJST0001E: WOKOBJST0001E
WOKOBJST0001E: WOKOBJST0001E
WOKOBJST0001E: WOKOBJST0001E
WOKOBJST0001E: WOKOBJST0001E
WOKOBJST0001E: WOKOBJST0001E
WOKOBJST0001E: WOKOBJST0001E
WOKOBJST0001E: WOKOBJST0001E
WOKOBJST0001E: WOKOBJST0001E
.libvirt: error : invalid argument: event callback already tracked
Elibvirt: error : invalid argument: event callback already tracked
Elibvirt: error : invalid argument: event callback already tracked
Elibvirt: error : invalid argument: event callback already tracked
Ecpu_info topology not supported.
libvirt: Node Device Driver error : this function is not supported by
the connection driver: virConnectListAllNodeDevices
libvirt: Node Device Driver error : this function is not supported by
the connection driver: virConnectListAllNodeDevices
libvirt: Node Device Driver error : this function is not supported by
the connection driver: virConnectListAllNodeDevices
WOKOBJST0001E: WOKOBJST0001E
libvirt: Domain Config error : this function is not supported by the
connection driver: virDomainMemoryStats
libvirt: Test Driver error : Domain not found
KCHVM0002E: KCHVM0002E
.libvirt: error : invalid argument: event callback already tracked
Elibvirt: error : invalid argument: event callback already tracked
Elibvirt: error : invalid argument: event callback already tracked
Elibvirt: error : invalid argument: event callback already tracked
Elibvirt: error : invalid argument: event callback already tracked
Elibvirt: error : invalid argument: event callback already tracked
E
======================================================================
ERROR: test_delete_running_vm (test_model.ModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_model.py", line 1198, in test_delete_running_vm
inst = model.Model(objstore_loc=self.tmp_store)
File "/home/alinefm/wok/src/wok/plugins/kimchi/model/model.py", line
54, in __init__
self.events.handleEnospc(self.conn)
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtevents.py", line
83, in handleEnospc
libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtconnection.py",
line 67, in wrapper
ret = f(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 4919, in
domainEventRegisterAny
raise libvirtError ('virConnectDomainEventRegisterAny() failed',
conn=self)
libvirtError: invalid argument: event callback already tracked
======================================================================
ERROR: test_image_based_template (test_model.ModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_model.py", line 266, in test_image_based_template
inst = model.Model(objstore_loc=self.tmp_store)
File "/home/alinefm/wok/src/wok/plugins/kimchi/model/model.py", line
54, in __init__
self.events.handleEnospc(self.conn)
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtevents.py", line
83, in handleEnospc
libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtconnection.py",
line 67, in wrapper
ret = f(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 4919, in
domainEventRegisterAny
raise libvirtError ('virConnectDomainEventRegisterAny() failed',
conn=self)
libvirtError: invalid argument: event callback already tracked
======================================================================
ERROR: test_template_creates_user_defined_vol_format_instead_default
(test_model.ModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_model.py", line 753, in
test_template_creates_user_defined_vol_format_instead_default
inst = model.Model(objstore_loc=self.tmp_store)
File "/home/alinefm/wok/src/wok/plugins/kimchi/model/model.py", line
54, in __init__
self.events.handleEnospc(self.conn)
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtevents.py", line
83, in handleEnospc
libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtconnection.py",
line 67, in wrapper
ret = f(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 4919, in
domainEventRegisterAny
raise libvirtError ('virConnectDomainEventRegisterAny() failed',
conn=self)
libvirtError: invalid argument: event callback already tracked
======================================================================
ERROR: test_template_get_default_vol_format_from_conf
(test_model.ModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_model.py", line 728, in
test_template_get_default_vol_format_from_conf
inst = model.Model(objstore_loc=self.tmp_store)
File "/home/alinefm/wok/src/wok/plugins/kimchi/model/model.py", line
54, in __init__
self.events.handleEnospc(self.conn)
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtevents.py", line
83, in handleEnospc
libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtconnection.py",
line 67, in wrapper
ret = f(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 4919, in
domainEventRegisterAny
raise libvirtError ('virConnectDomainEventRegisterAny() failed',
conn=self)
libvirtError: invalid argument: event callback already tracked
======================================================================
ERROR: test_template_uses_qcow2_format_if_no_user_or_default_defined
(test_model.ModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_model.py", line 782, in
test_template_uses_qcow2_format_if_no_user_or_default_defined
inst = model.Model(objstore_loc=self.tmp_store)
File "/home/alinefm/wok/src/wok/plugins/kimchi/model/model.py", line
54, in __init__
self.events.handleEnospc(self.conn)
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtevents.py", line
83, in handleEnospc
libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtconnection.py",
line 67, in wrapper
ret = f(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 4919, in
domainEventRegisterAny
raise libvirtError ('virConnectDomainEventRegisterAny() failed',
conn=self)
libvirtError: invalid argument: event callback already tracked
======================================================================
ERROR: test_vm_cdrom (test_model.ModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_model.py", line 581, in test_vm_cdrom
inst = model.Model(objstore_loc=self.tmp_store)
File "/home/alinefm/wok/src/wok/plugins/kimchi/model/model.py", line
54, in __init__
self.events.handleEnospc(self.conn)
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtevents.py", line
83, in handleEnospc
libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtconnection.py",
line 67, in wrapper
ret = f(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 4919, in
domainEventRegisterAny
raise libvirtError ('virConnectDomainEventRegisterAny() failed',
conn=self)
libvirtError: invalid argument: event callback already tracked
======================================================================
ERROR: test_vm_disk (test_model.ModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_model.py", line 485, in test_vm_disk
inst = model.Model(objstore_loc=self.tmp_store)
File "/home/alinefm/wok/src/wok/plugins/kimchi/model/model.py", line
54, in __init__
self.events.handleEnospc(self.conn)
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtevents.py", line
83, in handleEnospc
libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtconnection.py",
line 67, in wrapper
ret = f(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 4919, in
domainEventRegisterAny
raise libvirtError ('virConnectDomainEventRegisterAny() failed',
conn=self)
libvirtError: invalid argument: event callback already tracked
======================================================================
ERROR: test_vm_edit (test_model.ModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_model.py", line 955, in test_vm_edit
objstore_loc=self.tmp_store)
File "/home/alinefm/wok/src/wok/plugins/kimchi/model/model.py", line
54, in __init__
self.events.handleEnospc(self.conn)
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtevents.py", line
83, in handleEnospc
libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtconnection.py",
line 67, in wrapper
ret = f(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 4919, in
domainEventRegisterAny
raise libvirtError ('virConnectDomainEventRegisterAny() failed',
conn=self)
libvirtError: invalid argument: event callback already tracked
======================================================================
ERROR: test_vm_graphics (test_model.ModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_model.py", line 313, in test_vm_graphics
inst = model.Model(objstore_loc=self.tmp_store)
File "/home/alinefm/wok/src/wok/plugins/kimchi/model/model.py", line
54, in __init__
self.events.handleEnospc(self.conn)
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtevents.py", line
83, in handleEnospc
libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtconnection.py",
line 67, in wrapper
ret = f(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 4919, in
domainEventRegisterAny
raise libvirtError ('virConnectDomainEventRegisterAny() failed',
conn=self)
libvirtError: invalid argument: event callback already tracked
======================================================================
ERROR: test_vm_ifaces (test_model.ModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_model.py", line 365, in test_vm_ifaces
inst = model.Model(objstore_loc=self.tmp_store)
File "/home/alinefm/wok/src/wok/plugins/kimchi/model/model.py", line
54, in __init__
self.events.handleEnospc(self.conn)
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtevents.py", line
83, in handleEnospc
libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtconnection.py",
line 67, in wrapper
ret = f(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 4919, in
domainEventRegisterAny
raise libvirtError ('virConnectDomainEventRegisterAny() failed',
conn=self)
libvirtError: invalid argument: event callback already tracked
======================================================================
ERROR: test_vm_lifecycle (test_model.ModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_model.py", line 142, in test_vm_lifecycle
inst = model.Model(objstore_loc=self.tmp_store)
File "/home/alinefm/wok/src/wok/plugins/kimchi/model/model.py", line
54, in __init__
self.events.handleEnospc(self.conn)
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtevents.py", line
83, in handleEnospc
libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtconnection.py",
line 67, in wrapper
ret = f(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 4919, in
domainEventRegisterAny
raise libvirtError ('virConnectDomainEventRegisterAny() failed',
conn=self)
libvirtError: invalid argument: event callback already tracked
======================================================================
ERROR: test_vm_list_sorted (test_model.ModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_model.py", line 1225, in test_vm_list_sorted
inst = model.Model(objstore_loc=self.tmp_store)
File "/home/alinefm/wok/src/wok/plugins/kimchi/model/model.py", line
54, in __init__
self.events.handleEnospc(self.conn)
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtevents.py", line
83, in handleEnospc
libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtconnection.py",
line 67, in wrapper
ret = f(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 4919, in
domainEventRegisterAny
raise libvirtError ('virConnectDomainEventRegisterAny() failed',
conn=self)
libvirtError: invalid argument: event callback already tracked
======================================================================
ERROR: test_vm_memory_hotplug (test_model.ModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_model.py", line 807, in test_vm_memory_hotplug
inst = model.Model(None, objstore_loc=self.tmp_store)
File "/home/alinefm/wok/src/wok/plugins/kimchi/model/model.py", line
54, in __init__
self.events.handleEnospc(self.conn)
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtevents.py", line
83, in handleEnospc
libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtconnection.py",
line 67, in wrapper
ret = f(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 4919, in
domainEventRegisterAny
raise libvirtError ('virConnectDomainEventRegisterAny() failed',
conn=self)
libvirtError: invalid argument: event callback already tracked
======================================================================
ERROR: test_vm_netboot (test_model.ModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_model.py", line 436, in test_vm_netboot
inst = model.Model(objstore_loc=self.tmp_store)
File "/home/alinefm/wok/src/wok/plugins/kimchi/model/model.py", line
54, in __init__
self.events.handleEnospc(self.conn)
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtevents.py", line
83, in handleEnospc
libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtconnection.py",
line 67, in wrapper
ret = f(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 4919, in
domainEventRegisterAny
raise libvirtError ('virConnectDomainEventRegisterAny() failed',
conn=self)
libvirtError: invalid argument: event callback already tracked
======================================================================
ERROR: test_vm_serial (test_model.ModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_model.py", line 344, in test_vm_serial
inst = model.Model(objstore_loc=self.tmp_store)
File "/home/alinefm/wok/src/wok/plugins/kimchi/model/model.py", line
54, in __init__
self.events.handleEnospc(self.conn)
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtevents.py", line
83, in handleEnospc
libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtconnection.py",
line 67, in wrapper
ret = f(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 4919, in
domainEventRegisterAny
raise libvirtError ('virConnectDomainEventRegisterAny() failed',
conn=self)
libvirtError: invalid argument: event callback already tracked
======================================================================
ERROR: test_vm_storage_provisioning (test_model.ModelTests)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_model.py", line 671, in test_vm_storage_provisioning
inst = model.Model(objstore_loc=self.tmp_store)
File "/home/alinefm/wok/src/wok/plugins/kimchi/model/model.py", line
54, in __init__
self.events.handleEnospc(self.conn)
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtevents.py", line
83, in handleEnospc
libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
File
"/home/alinefm/wok/src/wok/plugins/kimchi/model/libvirtconnection.py",
line 67, in wrapper
ret = f(*args, **kwargs)
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 4919, in
domainEventRegisterAny
raise libvirtError ('virConnectDomainEventRegisterAny() failed',
conn=self)
libvirtError: invalid argument: event callback already tracked
----------------------------------------------------------------------
Ran 25 tests in 15.769s
FAILED (errors=16, skipped=1)
On 05/23/2016 05:46 PM, Lucio Correia wrote:
> When storage pool is out of space and guest requires more,
> guest is paused and nothing is told to the user. This patch
> uses Libvirt Event handling and Asynchronous Notifications
> mechanism to tell web users about what happened.
>
> Signed-off-by: Lucio Correia <luciojhc(a)linux.vnet.ibm.com>
> ---
> i18n.py | 1 +
> model/libvirtevents.py | 25 +++++++++++++++++++++++++
> model/model.py | 3 +++
> 3 files changed, 29 insertions(+)
>
> Changes in v3: rebased with master
>
> diff --git a/i18n.py b/i18n.py
> index 3a5a9d1..2d8390f 100644
> --- a/i18n.py
> +++ b/i18n.py
> @@ -335,6 +335,7 @@ messages = {
> "KCHEVENT0001E": _("Failed to register the default event implementation."),
> "KCHEVENT0002E": _("Failed to register timeout event."),
> "KCHEVENT0003E": _("Failed to Run the default event implementation."),
> + "KCHEVENT0004W": _("I/O error on guest '%(vm)s': storage pool out of space for %(devAlias)s (%(srcPath)s)."),
>
> # These messages (ending with L) are for user log purposes
> "KCHNET0001L": _("Created %(connection)s virtual network '%(name)s'"),
> diff --git a/model/libvirtevents.py b/model/libvirtevents.py
> index ab5c17d..00e9433 100644
> --- a/model/libvirtevents.py
> +++ b/model/libvirtevents.py
> @@ -22,6 +22,9 @@ import libvirt
> import time
>
> from wok.exception import OperationFailed
> +from wok.message import WokMessage
> +from wok.model.notifications import add_notification
> +from wok.utils import wok_log
>
>
> class LibvirtEvents(object):
> @@ -57,3 +60,25 @@ class LibvirtEvents(object):
> # Event loop handler used to limit length of waiting for any other event.
> def _kimchi_EventTimeout(self, timer, opaque):
> time.sleep(1)
> +
> + def event_enospc_cb(self, conn, dom, path, dev, action, reason, args):
> + if reason == "enospc":
> + info = {
> + "vm": dom.name(),
> + "srcPath": path,
> + "devAlias": dev,
> + }
> + add_notification("KCHEVENT0004W", info, '/plugins/kimchi')
> + msg = WokMessage("KCHEVENT0004W", info, '/plugins/kimchi')
> + wok_log.warning(msg.get_text())
> +
> + def handleEnospc(self, conn):
> + """
> + Register Libvirt IO_ERROR_REASON event to handle host ENOSPC
> + """
> + conn.get().domainEventRegisterAny(
> + None,
> + libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON,
> + self.event_enospc_cb,
> + libvirt.VIR_DOMAIN_EVENT_ID_IO_ERROR_REASON
> + )
> diff --git a/model/model.py b/model/model.py
> index ed474d2..327d5a7 100644
> --- a/model/model.py
> +++ b/model/model.py
> @@ -50,6 +50,9 @@ class Model(BaseModel):
> 'eventsloop': self.events}
> models = []
>
> + # Register for Libvirt's host ENOSPC event and notify UI if it happens
> + self.events.handleEnospc(self.conn)
> +
> # Import task model from Wok
> instances = get_instances('wok.model.tasks')
> for instance in instances:
8 years, 7 months