• Pavel Emelyanov's avatar
    restore: Introduce the --restore-sibling option · 53957fad
    Pavel Emelyanov authored
    We have a slight mess with how criu restores root task.
    Right now we have the following options.
    
    1) CLI
    	a) Usually
    	task calling criu
    	 `- criu
    	     `- root restored task
    
    	b) when --restore-detached AND root has pdeath_sig
    
    	task calling criu
    	 `- criu
    	 `- root restored task
    
    2) Library/SWRK
    	task using lib/swrk
    	 `- criu
    	 `- root restored task
    
    3) Standalone service
    	a) Usually
    	service
    	 `- service sub task
    	     `- root restored task
    
    	b) when root has pdeath_sig
    	criu service
    	 `- criu sub task
    	 `- root restored task
    
    It would be better is CRIU always restored the root task as sibling,
    but we have 3 constraints:
    
    First, the case 1.a is kept for zdtm to run tests in pid namespaces
    on 3.11, which in turn doesn't allow CLONE_PARENT | CLONE_NEWPID.
    
    Second, CLI w/o --restore-detach waits for the restored task to die and
    this behavior can be "expected" already.
    
    Third, in case of standalone service tasks shouldn't become service's
    children.
    
    And I have one "plan". The p.haul project while live migrating tasks
    on destination node starts a service, which uses library/swrk mode. In
    this case the restored processes become p.haul service's kids which is
    also not great.
    
    That said, here's the option called --restore-child that pairs the
    --restore-detach like this:
    
    * detached AND child:
    
    task
     `- criu restore (exits at the end)
     `- root task
    
    The root task will become task's child.
    This will be default to library/swrk.
    This is what LXC needs.
    
    * detach AND !child
    
    task
     `- criu restore (exits at the end)
         `- root task
    
    The root task will get re-parented to init.
    This will be compatible with 1.3.
    This will be default to standalone service and
    to my wish with the p.haul case.
    
    * !detach AND child
    
    task
     `- criu restore (waits for root task to die)
     `- root task
    
    This should be deprecated, so that criu restore doesn't mess
     with task <-> root task signalling.
    
    * !detach AND !child
    
    task
     `- criu restore (waits for root task to die)
         `- root task
    
    This is how plain criu restore works now.
    Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
    Acked-by: 's avatarTycho Andersen <tycho.andersen@canonical.com>
    Acked-by: 's avatarAndrew Vagin <avagin@openvz.org>
    53957fad
Name
Last commit
Last update
..
asm-generic Loading commit data...
action-scripts.h Loading commit data...
bug.h Loading commit data...
cgroup.h Loading commit data...
compiler.h Loading commit data...
config-base.h Loading commit data...
cpu.h Loading commit data...
cr-service-const.h Loading commit data...
cr-service.h Loading commit data...
cr-show.h Loading commit data...
cr_options.h Loading commit data...
criu-log.h Loading commit data...
criu-plugin.h Loading commit data...
crtools.h Loading commit data...
err.h Loading commit data...
errno.h Loading commit data...
eventfd.h Loading commit data...
eventpoll.h Loading commit data...
fcntl.h Loading commit data...
fdset.h Loading commit data...
fifo.h Loading commit data...
file-ids.h Loading commit data...
file-lock.h Loading commit data...
files-reg.h Loading commit data...
files.h Loading commit data...
fs-magic.h Loading commit data...
fsnotify.h Loading commit data...
image-desc.h Loading commit data...
image.h Loading commit data...
inet_diag.h Loading commit data...
ipc_ns.h Loading commit data...
irmap.h Loading commit data...
kcmp-ids.h Loading commit data...
kcmp.h Loading commit data...
kerndat.h Loading commit data...
libnetlink.h Loading commit data...
list.h Loading commit data...
lock.h Loading commit data...
log.h Loading commit data...
magic.h Loading commit data...
mem.h Loading commit data...
mman.h Loading commit data...
mount.h Loading commit data...
namespaces.h Loading commit data...
net.h Loading commit data...
netfilter.h Loading commit data...
netlink_diag.h Loading commit data...
packet_diag.h Loading commit data...
page-pipe.h Loading commit data...
page-read.h Loading commit data...
page-xfer.h Loading commit data...
pagemap-cache.h Loading commit data...
parasite-syscall.h Loading commit data...
parasite.h Loading commit data...
pid.h Loading commit data...
pipes.h Loading commit data...
plugin.h Loading commit data...
posix-timer.h Loading commit data...
prctl.h Loading commit data...
proc_parse.h Loading commit data...
protobuf-desc.h Loading commit data...
protobuf.h Loading commit data...
pstree.h Loading commit data...
ptrace.h Loading commit data...
rbtree.h Loading commit data...
restorer.h Loading commit data...
rst-malloc.h Loading commit data...
rst_info.h Loading commit data...
servicefd.h Loading commit data...
setproctitle.h Loading commit data...
shmem.h Loading commit data...
sigframe.h Loading commit data...
signalfd.h Loading commit data...
sk-inet.h Loading commit data...
sk-packet.h Loading commit data...
sk-queue.h Loading commit data...
sockets.h Loading commit data...
stats.h Loading commit data...
string.h Loading commit data...
syscall-types.h Loading commit data...
sysctl.h Loading commit data...
sysfs_parse.h Loading commit data...
timerfd.h Loading commit data...
tty.h Loading commit data...
tun.h Loading commit data...
unix_diag.h Loading commit data...
util-pie.h Loading commit data...
util.h Loading commit data...
uts_ns.h Loading commit data...
vdso.h Loading commit data...
vma.h Loading commit data...
xmalloc.h Loading commit data...