Bug 1145050

Summary: API virNodeGetFreePages need report specific error when node out of range
Product: Red Hat Enterprise Linux 7 Reporter: Jincheng Miao <jmiao>
Component: libvirtAssignee: Michal Privoznik <mprivozn>
Status: CLOSED ERRATA QA Contact: Virtualization Bugs <virt-bugs>
Severity: medium Docs Contact:
Priority: medium    
Version: 7.1CC: dyuan, honzhang, mprivozn, mzhan, rbalakri
Target Milestone: rc   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: libvirt-1.2.8-4.el7 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2015-03-05 07:45:03 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Jincheng Miao 2014-09-22 09:39:51 UTC
description of problem:
For a machine which only has 1 node, calling virNodeGetFreePages
with startCell is '1', virNodeGetFreePages will report:
'An error occurred, but the cause is unknown'.

version:
libvirt-1.2.8-2.el7.x86_64
qemu-kvm-rhev-2.1.0-3.el7.x86_64

How reproducible:
100%

step to reproduce: 
# numactl --hard
available: 1 nodes (0)
node 0 cpus: 0 1 2 3 4 5 6 7
node 0 size: 8134 MB
node 0 free: 6464 MB
node distances:
node   0 
  0:  10

1. test it in python
# python
Python 2.7.5 (default, Feb 11 2014, 07:46:25)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import libvirt
>>> con=libvirt.open(None)
>>> con.getFreePages([4,2048],0,1,0)
{0: {2048: 1, 4: 1654895}}

>>> con.getFreePages([4,2048],0,2,0)
libvirt:  error : An error occurred, but the cause is unknown
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/site-packages/libvirt.py", line 3509, in getFreePages
    if ret is None: raise libvirtError ('virNodeGetFreePages() failed', conn=self)
libvirt.libvirtError: An error occurred, but the cause is unknown

>>> con.getFreePages([4,2048],1,1,0)
libvirt:  error : An error occurred, but the cause is unknown
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/site-packages/libvirt.py", line 3509, in getFreePages
    if ret is None: raise libvirtError ('virNodeGetFreePages() failed', conn=self)
libvirt.libvirtError: An error occurred, but the cause is unknown 

2. test it in virsh
# virsh freepages --cellno 2 --pagesize 4096
error: An error occurred, but the cause is unknown

Expect result:
it raises an error like "start cell 2 is out of range"

Comment 2 Michal Privoznik 2014-09-23 08:32:35 UTC
I've just pushed patches upstream:

commit c46fa72e4090b7884b8c6edaf63f1638eb8e04f8
Author:     Jincheng Miao <jmiao>
AuthorDate: Mon Sep 22 18:14:28 2014 +0800
Commit:     Michal Privoznik <mprivozn>
CommitDate: Tue Sep 23 10:23:20 2014 +0200

    Fix typo of virNodeGetFreePages comment
    
    Signed-off-by: Jincheng Miao <jmiao>

commit 7db19366423dcab388907c12caf766c6e5870d00
Author:     Jincheng Miao <jmiao>
AuthorDate: Mon Sep 22 18:14:27 2014 +0800
Commit:     Michal Privoznik <mprivozn>
CommitDate: Tue Sep 23 10:23:20 2014 +0200

    nodeinfo: report error when given node is out of range
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1145050
    
    Signed-off-by: Jincheng Miao <jmiao>
    Signed-off-by: Michal Privoznik <mprivozn>

commit c3e2d5929c1bfaaeb2ef2df121dc90d767b228f5
Author:     Jincheng Miao <jmiao>
AuthorDate: Mon Sep 22 18:14:26 2014 +0800
Commit:     Michal Privoznik <mprivozn>
CommitDate: Tue Sep 23 10:23:20 2014 +0200

    virsh-host: fix pagesize unit of freepages
    
    The unit of '--pagesize' of freepages is kibibytes.
    
    https://bugzilla.redhat.com/show_bug.cgi?id=1145048
    
    Signed-off-by: Jincheng Miao <jmiao>
    Signed-off-by: Michal Privoznik <mprivozn>

v1.2.8-230-gc46fa72

Comment 5 hongming 2014-11-26 06:45:02 UTC
Verify it as follows. The result is expected. Move its status to VERIFIED.

# rpm -q libvirt libvirt-python
libvirt-1.2.8-8.el7.x86_64
libvirt-python-1.2.8-5.el7.x86_64


[root@localhost ~]# numactl --hard
available: 1 nodes (0)
node 0 cpus: 0 1 2 3
node 0 size: 8013 MB
node 0 free: 5607 MB
node distances:
node   0 
  0:  10 
[root@localhost ~]# python
Python 2.7.5 (default, Feb 11 2014, 07:46:25) 
[GCC 4.8.2 20140120 (Red Hat 4.8.2-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import libvirt
>>> con=libvirt.open(None)
>>> con.getFreePages([4,2048],0,1,0)
{0: {2048: 0, 4: 1434301}}
>>> con.getFreePages([4,2048],0,2,0)
{0: {2048: 0, 4: 1434301}}
>>> con.getFreePages([4,2048],1,1,0)
libvirt:  error : internal error: start cell 1 out of range (0-0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/site-packages/libvirt.py", line 3546, in getFreePages
    if ret is None: raise libvirtError ('virNodeGetFreePages() failed', conn=self)
libvirt.libvirtError: internal error: start cell 1 out of range (0-0)
>>> quit()
[root@localhost ~]# virsh freepages --cellno 2 --pagesize 4096
error: internal error: start cell 2 out of range (0-0)

Comment 7 errata-xmlrpc 2015-03-05 07:45:03 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://rhn.redhat.com/errata/RHSA-2015-0323.html