Hi Cong, thank you for confirming the fix in your case.

I'm going to go ahead and close this bug as Invalid for nova since it's
not a nova issue, but a ceph configuration issue. If there are any
changes or fixes needed in deployment tools to do the ceph
configuration, please add those projects to this bug.

** Changed in: nova
       Status: Incomplete => Invalid

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1781878

Title:
  VM fails to boot after evacuation when it uses ceph disk

Status in OpenStack Compute (nova):
  Invalid

Bug description:
  Description
  ===========
  If we use Ceph RBD as storage backend and Ceph Disks (image) have 
exclusive-lock feature, when a compute node goes down, the evacuation process 
works fine and nova detects the VM has a disk on a shared storage, so it 
rebuild the VM on another node. But after the evacuation, although nova marks 
the instance as active, the instance fails to boot and encounter a kernel panic 
caused by inability of the kernel to write on disk.

  It is possible to disable exclusive-lock feature on Ceph and the
  evacuation process works fine, but it needed to be enabled in some
  use-cases.

  Also there is a workaround for this problem, we were able to evacuate
  an instance successfully by removing the lock of the disk to the old
  instance using rbd command line, but I think it should be done in the
  code of rbd driver in Nova and Cinder.

  The problem seams to be with the exclusive-lock feature. when a disk
  has exclusive-lock enabled, as soon as a client (the VM) connects and
  writes on disk, Ceph locks the disk for the client (lock-on-write)
  (also if we enable lock-on-read in Ceph conf, it would lock the disk
  on the first read). In the evacuation process, since there is no
  defined process to remove the exclusive-lock from the old VM, when the
  new VM tries to write on the disk, it fails to write since it can't
  get the lock.

  I found similar problem reported for kubernetes when a node goes down and the 
system tries to attach its volume to new Pod.
  https://github.com/openshift/origin/issues/7983#issuecomment-243736437
  There, some people proposed before bringing up the new instance, first 
blacklist the old instance, then unlock the disk and lock it for the new one.

  Steps to reproduce
  ==================
  * Create an instance (with ceph storage backend) and wait for boot
  * Poweroff the Host of the instance
  * Evacuate the instance
  * Check the Console in the dashboard

  Expected result
  ===============
  The instance should boot without any problem.

  Actual result
  =============
  The instance encounter kernel panic and fails to boot.

  Environment
  ===========
  1. Openstack Queens, Nova 17.0.2
  2. hypervisor: Libvirt (v4.0.0) + KVM
  2. Storage: 12.2.4

  Logs & Configs
  ==============
  Console log of the instance after it evacuation:

  [    2.352586] blk_update_request: I/O error, dev vda, sector 18436
  [    2.357199] Buffer I/O error on dev vda1, logical block 2, lost async page 
write
  [    2.363736] blk_update_request: I/O error, dev vda, sector 18702
  [    2.431927] Buffer I/O error on dev vda1, logical block 135, lost async 
page write
  [    2.442673] blk_update_request: I/O error, dev vda, sector 18708
  [    2.449862] Buffer I/O error on dev vda1, logical block 138, lost async 
page write
  [    2.460061] blk_update_request: I/O error, dev vda, sector 18718
  [    2.468022] Buffer I/O error on dev vda1, logical block 143, lost async 
page write
  [    2.477360] blk_update_request: I/O error, dev vda, sector 18722
  [    2.484106] Buffer I/O error on dev vda1, logical block 145, lost async 
page write
  [    2.493227] blk_update_request: I/O error, dev vda, sector 18744
  [    2.499642] Buffer I/O error on dev vda1, logical block 156, lost async 
page write
  [    2.505792] blk_update_request: I/O error, dev vda, sector 35082
  [    2.510281] Buffer I/O error on dev vda1, logical block 8325, lost async 
page write
  [    2.516296] Buffer I/O error on dev vda1, logical block 8326, lost async 
page write
  [    2.522749] blk_update_request: I/O error, dev vda, sector 35096
  [    2.527483] Buffer I/O error on dev vda1, logical block 8332, lost async 
page write
  [    2.533616] Buffer I/O error on dev vda1, logical block 8333, lost async 
page write
  [    2.540085] blk_update_request: I/O error, dev vda, sector 35104
  [    2.545149] blk_update_request: I/O error, dev vda, sector 36236
  [    2.549948] JBD2: recovery failed
  [    2.552989] EXT4-fs (vda1): error loading journal
  [    2.557228] VFS: Dirty inode writeback failed for block device vda1 
(err=-5).
  [    2.563139] EXT4-fs (vda1): couldn't mount as ext2 due to feature 
incompatibilities
  [    2.704190] JBD2: recovery failed
  [    2.708709] EXT4-fs (vda1): error loading journal
  [    2.714963] VFS: Dirty inode writeback failed for block device vda1 
(err=-5).
  mount: mounting /dev/vda1 on /newroot failed: Invalid argument
  umount: can't umount /dev/vda1: Invalid argument
  mcb [info=LABEL=cirros-rootfs dev=/dev/vda1 target=/newroot unmount=cbfail 
callback=check_sbin_init ret=1: failed to unmount
  [    2.886773] JBD2: recovery failed
  [    2.892670] EXT4-fs (vda1): error loading journal
  [    2.900580] VFS: Dirty inode writeback failed for block device vda1 
(err=-5).
  [    2.911330] EXT4-fs (vda1): couldn't mount as ext2 due to feature 
incompatibilities
  [    3.044295] JBD2: recovery failed
  [    3.050363] EXT4-fs (vda1): error loading journal
  [    3.058689] VFS: Dirty inode writeback failed for block device vda1 
(err=-5).
  mount: mounting /dev/vda1 on /newroot failed: Invalid argument
  info: copying initramfs to /dev/vda1
  mount: can't find /newroot in /proc/mounts
  info: initramfs loading root from /dev/vda1
  BusyBox v1.23.2 (2017-11-20 02:37:12 UTC) multi-call binary.

  Usage: switch_root [-c /dev/console] NEW_ROOT NEW_INIT [ARGS]

  Free initramfs and switch to another root fs:
  chroot to NEW_ROOT, delete all in /, move NEW_ROOT to /,
  execute NEW_INIT. PID must be 1. NEW_ROOT must be a mountpoint.

   -c DEV Reopen stdio to DEV after switch

  [    3.170388] Kernel panic - not syncing: Attempted to kill init! 
exitcode=0x00000100
  [    3.170388]
  [    3.186305] CPU: 0 PID: 1 Comm: switch_root Not tainted 4.4.0-28-generic 
#47-Ubuntu
  [    3.198826] Hardware name: OpenStack Foundation OpenStack Nova, BIOS 
1.10.2-1ubuntu1~cloud0 04/01/2014
  [    3.213538]  0000000000000086 000000004cbc7242 ffff88001f63be10 
ffffffff813eb1a3
  [    3.227588]  ffffffff81cb10d8 ffff88001f63bea8 ffff88001f63be98 
ffffffff8118bf57
  [    3.241405]  ffff880000000010 ffff88001f63bea8 ffff88001f63be40 
000000004cbc7242
  [    3.251820] Call Trace:
  [    3.254191]  [<ffffffff813eb1a3>] dump_stack+0x63/0x90
  [    3.258257]  [<ffffffff8118bf57>] panic+0xd3/0x215
  [    3.261865]  [<ffffffff81184e1e>] ? perf_event_exit_task+0xbe/0x350
  [    3.266173]  [<ffffffff81084541>] do_exit+0xae1/0xaf0
  [    3.269989]  [<ffffffff8106b554>] ? __do_page_fault+0x1b4/0x400
  [    3.274408]  [<ffffffff810845d3>] do_group_exit+0x43/0xb0
  [    3.278557]  [<ffffffff81084654>] SyS_exit_group+0x14/0x20
  [    3.282693]  [<ffffffff818276b2>] entry_SYSCALL_64_fastpath+0x16/0x71
  [    3.290709] Kernel Offset: disabled
  [    3.293770] ---[ end Kernel panic - not syncing: Attempted to kill init! 
exitcode=0x00000100
  [    3.293770]

To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1781878/+subscriptions

-- 
Mailing list: https://launchpad.net/~yahoo-eng-team
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yahoo-eng-team
More help   : https://help.launchpad.net/ListHelp

Reply via email to