On Thu, Oct 10, 2019 at 1:10 PM Francesco Romani <[email protected]> wrote:

> On 10/10/19 10:44 AM, Gianluca Cecchi wrote:
>
> On Thu, Oct 10, 2019 at 9:56 AM Francesco Romani <[email protected]>
> wrote:
>
>>
>> The only way Vdsm will not pause the VM is if libvirt+qemu never reports
>> any ioerror, which is something I'm not sure is possible and that I'd never
>> recommend anyway.
>>
>> Vdsm always tries hard to be super-careful with respect possible data
>> corruption.
>>
>>
>> OK.
> In case of storage not accessible for a bunch of seconds is more a matter
> of I/O blocked than data corruption.
>
>
> True, but we can know only ex-poste that the storage was just temporarily
> unavailable, don't we?
>
>
> yes but I would like to have an option to say: don't do anything for X
seconds, both at host level and guest level.
X could be 5 seconds, or 10 seconds or 20 seconds.... according to several
needs.


> If no other host powers on the VM I think there is no risk of data
> corruption itself, or at least no more than when you have a physical server
> and for some reason the I/O operations to its physical disks (local or on a
> SAN) are blocked for some tens of seconds.
>
>
> IMO, a storage unresponsive for tens of seconds is something which should
> be uncommon and very alarming in every circumstances, especially for
> physical servers.
>
> What i'm trying to say is that yes, there probabily are ways to sidestep
> this behaviour, but I think this is the wrong direction and adds fragility
> rather than convenience to the system.
>
In general I agree with you on this



>
> So I think that if I want in any way to modify behavior I have to change
> the options so that I keep "report" for both write and read errors on
> virtual disks.
>
>
> Yep. I don't remember what Engine allows. Worst case you can use an hook,
> but once again this is making things a bit more fragile.
>
>
> I'm only experimenting to see possible different options to manage
> "temporary" problems at storage level, that often resolve without manual
> actions in tens of seconds, sometimes due to uncorrect operations at levels
> managed by other teams (network, storage, ecc).
>
>
> I think the best option is improve the current behaviour: learn why Vdsm
> fails to unpause the VM and improve here.
>
>
>
yes, I'm just experimenting on possible options and their pros & cons

I see that on my 4.3.6 environment with plain CentOS 7.7 hosts the qemu-kvm
process is spawned with "werror=stop,rerror=stop" for all virtual disks
I didn't find any related option in VM edit page

In my Fedora 30 when I start a VM (with virt-manager or "virsh start") I
see that the options are not present in command line and based on qemu-kvm
manual page:
"
The default setting is werror=enospc and rerror=report
"

In the mean time I created a wrapper script for qemu-kvm that changes
command line

1)
from werror=stop to werror=report
and
from rerror=stop to rerror=report

This seems worse, in the sense that the VM is not paused at all, as
expected, but strange behavior inside it
>From host point of view:
[root@ov300 ~]# virsh -r list
 Id    Name                           State
----------------------------------------------------
 7     mydbsrv                        running

I suddenly get in VM /var/log/messsages something like

Oct 10 12:42:55 mydbsrv kernel: sd 2:0:0:1: [sdc] FAILED Result:
hostbyte=DID_OK driverbyte=DRIVER_SENSE
Oct 10 12:42:55 mydbsrv kernel: sd 2:0:0:1: [sdc] FAILED Result:
hostbyte=DID_OK driverbyte=DRIVER_SENSE
Oct 10 12:42:55 mydbsrv kernel: sd 2:0:0:1: [sdc] Sense Key : Aborted
Command [current]
Oct 10 12:42:55 mydbsrv kernel: sd 2:0:0:1: [sdc] Add. Sense: I/O process
terminated
Oct 10 12:42:55 mydbsrv kernel: sd 2:0:0:1: [sdc] CDB: Write(10) 2a 00 03
07 a8 78 00 00 08 00
Oct 10 12:42:55 mydbsrv kernel: blk_update_request: I/O error, dev sdc,
sector 50833528
Oct 10 12:42:55 mydbsrv kernel: EXT4-fs warning (device dm-3):
ext4_end_bio:322: I/O error -5 writing to inode 1573304 (offset 0 size 0
starting block 6353935)
Oct 10 12:42:55 mydbsrv kernel: Buffer I/O error on device dm-3, logical
block 6353935
Oct 10 12:42:55 mydbsrv kernel: sd 2:0:0:1: [sdc] FAILED Result:
hostbyte=DID_OK driverbyte=DRIVER_SENSE
Oct 10 12:42:55 mydbsrv kernel: sd 2:0:0:1: [sdc] Sense Key : Aborted
Command [current]
Oct 10 12:42:55 mydbsrv kernel: sd 2:0:0:1: [sdc] Add. Sense: I/O process
terminated
Oct 10 12:42:55 mydbsrv kernel: sd 2:0:0:1: [sdc] CDB: Write(10) 2a 00 03
07 a8 98 00 00 08 00
Oct 10 12:42:55 mydbsrv kernel: blk_update_request: I/O error, dev sdc,
sector 50833560
Oct 10 12:42:55 mydbsrv kernel: EXT4-fs warning (device dm-3):
ext4_end_bio:322: I/O error -5 writing to inode 1573308 (offset 0 size 0
starting block 6353939)
...

and only shell builtin commands apparently working inside VM making
necessary anyway a power off (from engine) and power on

[root@mydbsrv ~]# uptime
-bash: uptime: command not found
[root@mydbsrv ~]# df -h
-bash: df: command not found
[root@mydbsrv ~]# id
-bash: id: command not found
[root@mydbsrv ~]# ll
-bash: ls: command not found
[root@mydbsrv ~]#
[root@mydbsrv ~]# jobs
[root@mydbsrv ~]# ps
-bash: ps: command not found
[root@mydbsrv ~]# sync
-bash: sync: command not found
[root@mydbsrv ~]# pwd
/root
[root@mydbsrv ~]# ls
-bash: ls: command not found
[root@mydbsrv ~]# /bin/ls
-bash: /bin/ls: Input/output error
[root@mydbsrv ~]# type mount
-bash: type: mount: not found
[root@mydbsrv ~]# /bin/mount -o remount,rw /myfs
-bash: /bin/mount: Input/output error
[root@mydbsrv ~]# tail /var/log/messages
-bash: tail: command not found
[root@mydbsrv ~]# cat /var/log/messages
-bash: cat: command not found
[root@mydbsrv ~]# echo some_word
some_word
[root@mydbsrv ~]#

even after storage accessible again the wrong behavior continues.

2)
from werror=stop to werror=ignore
and
from rerror=stop to rerror=ignore

This is the more non-intrusive approach in respect of VM in my opinion,
letting it discover itself there is a problem.
In this case I get inside /var/log/messages of VM

Oct 10 12:54:00 mydbsrv chronyd[4133]: Selected source 131.175.12.3
Oct 10 12:54:00 mydbsrv chronyd[4133]: System clock wrong by 1.065994
seconds, adjustment started
Oct 10 12:54:00 mydbsrv systemd: Time has been changed
Oct 10 12:54:00 mydbsrv chronyd[4133]: System clock was stepped by 1.065994
seconds
Oct 10 12:54:23 mydbsrv kernel: EXT4-fs error (device dm-3):
ext4_mb_generate_buddy:757: group 289, block bitmap and bg descriptor
inconsistent: 30748 vs 28302 free clusters
Oct 10 12:54:23 mydbsrv kernel: EXT4-fs error (device dm-3):
ext4_mb_generate_buddy:757: group 290, block bitmap and bg descriptor
inconsistent: 31999 vs 32768 free clusters
Oct 10 12:54:23 mydbsrv kernel: EXT4-fs error (device dm-3):
ext4_mb_generate_buddy:757: group 291, block bitmap and bg descriptor
inconsistent: 28880 vs 32768 free clusters
Oct 10 12:54:23 mydbsrv kernel: EXT4-fs error (device dm-3):
ext4_mb_generate_buddy:757: group 292, block bitmap and bg descriptor
inconsistent: 32478 vs 32768 free clusters
Oct 10 12:54:23 mydbsrv kernel: EXT4-fs error (device dm-3):
ext4_mb_generate_buddy:757: group 293, block bitmap and bg descriptor
inconsistent: 32698 vs 32768 free clusters
Oct 10 12:54:23 mydbsrv kernel: EXT4-fs error (device dm-3):
ext4_mb_generate_buddy:757: group 294, block bitmap and bg descriptor
inconsistent: 32151 vs 32768 free clusters
Oct 10 12:54:23 mydbsrv kernel: EXT4-fs error (device dm-3):
ext4_mb_generate_buddy:757: group 295, block bitmap and bg descriptor
inconsistent: 31925 vs 32768 free clusters
Oct 10 12:54:23 mydbsrv kernel: EXT4-fs error (device dm-3):
ext4_mb_generate_buddy:757: group 296, block bitmap and bg descriptor
inconsistent: 32468 vs 32768 free clusters
Oct 10 12:54:23 mydbsrv kernel: EXT4-fs error (device dm-3):
ext4_mb_generate_buddy:757: group 0, block bitmap and bg descriptor
inconsistent: 32768 vs 1496 free clusters
Oct 10 12:54:23 mydbsrv kernel: EXT4-fs error (device dm-3):
ext4_mb_generate_buddy:757: group 1, block bitmap and bg descriptor
inconsistent: 32768 vs 279 free clusters
Oct 10 12:54:23 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_mb_generate_buddy:757: group 112, block bitmap and bg descriptor
inconsistent: 32767 vs 23733 free clusters
Oct 10 12:54:23 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_find_dest_de:1829: inode #928680: block 3679007: comm ora_m000_test:
bad entry in directory: rec_len is smaller than minimal - offset=0(0),
inode=0, rec_len=0, name_len=0
Oct 10 12:54:23 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_find_dest_de:1829: inode #928680: block 3679007: comm ora_m002_test:
bad entry in directory: rec_len is smaller than minimal - offset=0(0),
inode=0, rec_len=0, name_len=0
Oct 10 12:54:23 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_find_dest_de:1829: inode #928680: block 3679007: comm ora_m005_test:
bad entry in directory: rec_len is smaller than minimal - offset=0(0),
inode=0, rec_len=0, name_len=0
Oct 10 12:54:27 mydbsrv kernel: JBD2: Spotted dirty metadata buffer (dev =
dm-3, blocknr = 0). There's a risk of filesystem corruption in case of
system crash.
Oct 10 12:54:28 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_find_dest_de:1829: inode #928680: block 3679007: comm ora_cjq0_test:
bad entry in directory: rec_len is smaller than minimal - offset=0(0),
inode=0, rec_len=0, name_len=0
Oct 10 12:54:31 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_find_dest_de:1829: inode #928680: block 3679007: comm ora_pmon_test:
bad entry in directory: rec_len is smaller than minimal - offset=0(0),
inode=0, rec_len=0, name_len=0
Oct 10 12:54:49 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_find_dest_de:1829: inode #928680: block 3679007: comm ora_reco_test:
bad entry in directory: rec_len is smaller than minimal - offset=0(0),
inode=0, rec_len=0, name_len=0
Oct 10 12:54:49 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_find_dest_de:1829: inode #928680: block 3679007: comm ora_tmon_test:
bad entry in directory: rec_len is smaller than minimal - offset=0(0),
inode=0, rec_len=0, name_len=0
Oct 10 12:54:56 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_find_dest_de:1829: inode #928680: block 3679007: comm ora_dia0_test:
bad entry in directory: rec_len is smaller than minimal - offset=0(0),
inode=0, rec_len=0, name_len=0
Oct 10 12:54:58 mydbsrv kernel: EXT4-fs error: 49 callbacks suppressed
Oct 10 12:54:58 mydbsrv kernel: EXT4-fs error (device dm-3):
ext4_mb_generate_buddy:757: group 192, block bitmap and bg descriptor
inconsistent: 32379 vs 24527 free clusters
Oct 10 12:54:58 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_find_dest_de:1829: inode #928680: block 3679007: comm ora_tt00_test:
bad entry in directory: rec_len is smaller than minimal - offset=0(0),
inode=0, rec_len=0, name_len=0
Oct 10 12:55:07 mydbsrv chronyd[4133]: Selected source 131.175.12.6
Oct 10 12:55:21 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_find_dest_de:1829: inode #928680: block 3679007: comm ora_gen1_test:
bad entry in directory: rec_len is smaller than minimal - offset=0(0),
inode=0, rec_len=0, name_len=0
Oct 10 12:55:22 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_find_dest_de:1829: inode #928680: block 3679007: comm ora_mman_test:
bad entry in directory: rec_len is smaller than minimal - offset=0(0),
inode=0, rec_len=0, name_len=0
Oct 10 12:55:22 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_find_dest_de:1829: inode #928680: block 3679007: comm ora_psp0_test:
bad entry in directory: rec_len is smaller than minimal - offset=0(0),
inode=0, rec_len=0, name_len=0
Oct 10 12:55:22 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_find_dest_de:1829: inode #928680: block 3679007: comm ora_dbrm_test:
bad entry in directory: rec_len is smaller than minimal - offset=0(0),
inode=0, rec_len=0, name_len=0
Oct 10 12:55:22 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_find_dest_de:1829: inode #928680: block 3679007: comm ora_pxmn_test:
bad entry in directory: rec_len is smaller than minimal - offset=0(0),
inode=0, rec_len=0, name_len=0
Oct 10 12:55:22 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_find_dest_de:1829: inode #928680: block 3679007: comm ora_smco_test:
bad entry in directory: rec_len is smaller than minimal - offset=0(0),
inode=0, rec_len=0, name_len=0
Oct 10 12:55:22 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_find_dest_de:1829: inode #928680: block 3679007: comm ora_mmnl_test:
bad entry in directory: rec_len is smaller than minimal - offset=0(0),
inode=0, rec_len=0, name_len=0
Oct 10 12:55:26 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_find_dest_de:1829: inode #928680: block 3679007: comm ora_lgwr_test:
bad entry in directory: rec_len is smaller than minimal - offset=0(0),
inode=0, rec_len=0, name_len=0
Oct 10 12:55:26 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_find_dest_de:1829: inode #928680: block 3679007: comm ora_gen0_test:
bad entry in directory: rec_len is smaller than minimal - offset=0(0),
inode=0, rec_len=0, name_len=0
Oct 10 12:55:26 mydbsrv kernel: EXT4-fs error (device dm-2):
ext4_find_dest_de:1829: inode #928680: block 3679007: comm ora_mmon_test:
bad entry in directory: rec_len is smaller than minimal - offset=0(0),
inode=0, rec_len=0, name_len=0

and then when the 100 seconds of artificial storage access inhibition ends,
the VM is able again to be accessible.

[root@mydbsrv ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@mydbsrv ~]# uptime
 12:56:36 up 3 min,  1 user,  load average: 0.28, 0.38, 0.17
[root@mydbsrv ~]#

[root@mydbsrv log]# time dd if=/dev/zero bs=1024k count=10240
of=/myfs/testfile
10240+0 records in
10240+0 records out
10737418240 bytes (11 GB) copied, 60.785 s, 177 MB/s

real 1m1.771s
user 0m0.016s
sys 0m10.459s
[root@mydbsrv log]#

Obviously, as mentioned in messages, this behavior could potentially lead
to fs/journal corruption...
Gianluca
_______________________________________________
Users mailing list -- [email protected]
To unsubscribe send an email to [email protected]
Privacy Statement: https://www.ovirt.org/site/privacy-policy/
oVirt Code of Conduct: 
https://www.ovirt.org/community/about/community-guidelines/
List Archives: 
https://lists.ovirt.org/archives/list/[email protected]/message/Z6KNYBC4ZZG7MTIESWBY2GES66ML5KDM/

Reply via email to