<div dir="ltr">Hi, <div><br></div><div>it seams that I cannot build criu-dev (I can still build the master branch):</div><div><br></div><div><div>In file included from soccr/soccr.c:9:0:</div><div>soccr/soccr.h:14:8: error: redefinition of ‘struct tcp_repair_window’</div><div> struct tcp_repair_window {</div><div>        ^~~~~~~~~~~~~~~~~</div><div>In file included from soccr/soccr.c:5:0:</div><div>/usr/include/netinet/tcp.h:319:8: note: originally defined here</div><div> struct tcp_repair_window</div><div>        ^~~~~~~~~~~~~~~~~</div></div><div><br></div><div><br></div><div>Currently using: Linux criu-devel 4.15.0-20-generic<br></div><div><br></div><div>Any idea?</div><div><br></div><div>cheers,</div><div>rodrigo</div></div><div class="gmail_extra"><br><div class="gmail_quote">2018-05-10 17:19 GMT+01:00 Andrei Vagin <span dir="ltr">&lt;<a href="mailto:avagin@virtuozzo.com" target="_blank">avagin@virtuozzo.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Thu, May 10, 2018 at 10:05:37AM +0100, Rodrigo Bruno wrote:<br>
&gt; Hi Andrei and Radostin,<br>
&gt; <br>
&gt; in our last iteration, I sent to Andei a patch to rework the cache-proxy<br>
&gt; code to be single threaded.<br>
&gt; <br>
&gt; Is it possible to merge that patch into CRIU dev?<br>
<br>
</span>Yes, it is. Could you send the last version into the maling list?<br>
<br>
Thanks,<br>
Andrei<br>
<div class="HOEnZb"><div class="h5"><br>
&gt; <br>
&gt; I think it would be easy this way because we would be then working on small<br>
&gt; code changes to fix bugs related to tests failing.<br>
&gt; <br>
&gt; I would be able to help fixing the implementation.<br>
&gt; <br>
&gt; best,<br>
&gt; rodrigo<br>
&gt; <br>
&gt; 2018-05-10 2:10 GMT+01:00 Andrei Vagin &lt;<a href="mailto:avagin@virtuozzo.com">avagin@virtuozzo.com</a>&gt;:<br>
&gt; <br>
&gt; &gt; Hi Radostin,<br>
&gt; &gt;<br>
&gt; &gt; Should we run this test in scripts/travis/travis-tests?<br>
&gt; &gt;<br>
&gt; &gt; Rodrigo has patches, which reworks image proxy &amp; cache to a single<br>
&gt; &gt; thread model. These patches are mostly ready to be merged, but need<br>
&gt; &gt; some work.<br>
&gt; &gt;<br>
&gt; &gt; Would it be interesting for you to finish criu --remote, that we could<br>
&gt; &gt; merge it into the master branch?<br>
&gt; &gt;<br>
&gt; &gt; For that, all tests have to pass, and image and cache have to<br>
&gt; &gt; be single-thread processes.<br>
&gt; &gt;<br>
&gt; &gt; There is one inline comment.<br>
&gt; &gt;<br>
&gt; &gt; On Mon, Feb 12, 2018 at 10:54:05AM +0000, Radostin Stoyanov wrote:<br>
&gt; &gt; &gt; Signed-off-by: Radostin Stoyanov &lt;<a href="mailto:rstoyanov1@gmail.com">rstoyanov1@gmail.com</a>&gt;<br>
&gt; &gt; &gt; ---<br>
&gt; &gt; &gt;  test/others/rpc/remote.py | 86 ++++++++++++++++++++++++++++++<br>
&gt; &gt; +++++++++++++++++<br>
&gt; &gt; &gt;  test/others/rpc/run.sh    | 26 ++++++++++++++<br>
&gt; &gt; &gt;  2 files changed, 112 insertions(+)<br>
&gt; &gt; &gt;  create mode 100644 test/others/rpc/remote.py<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; diff --git a/test/others/rpc/remote.py b/test/others/rpc/remote.py<br>
&gt; &gt; &gt; new file mode 100644<br>
&gt; &gt; &gt; index 00000000..96ce3e21<br>
&gt; &gt; &gt; --- /dev/null<br>
&gt; &gt; &gt; +++ b/test/others/rpc/remote.py<br>
&gt; &gt; &gt; @@ -0,0 +1,86 @@<br>
&gt; &gt; &gt; +#!/usr/bin/env python2<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +import socket, os, imp, sys, errno, signal<br>
&gt; &gt; &gt; +import rpc_pb2 as rpc<br>
&gt; &gt; &gt; +import argparse<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +MAX_MSG_SIZE = 1024<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +parser = argparse.ArgumentParser(<wbr>description=&quot;Test --remote option<br>
&gt; &gt; using CRIU RPC&quot;)<br>
&gt; &gt; &gt; +parser.add_argument(&#39;socket&#39;, type = str, help = &quot;CRIU service socket&quot;)<br>
&gt; &gt; &gt; +parser.add_argument(&#39;dir&#39;, type = str, help = &quot;Directory where CRIU<br>
&gt; &gt; images should be placed&quot;)<br>
&gt; &gt; &gt; +parser.add_argument(&#39;pid&#39;, type = int, help = &quot;PID of process to be<br>
&gt; &gt; dumped&quot;)<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +args = vars(parser.parse_args())<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +# Connect to RPC socket<br>
&gt; &gt; &gt; +s = socket.socket(socket.AF_UNIX, socket.SOCK_SEQPACKET)<br>
&gt; &gt; &gt; +s.connect(args[&#39;socket&#39;])<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +# Open images-dir<br>
&gt; &gt; &gt; +dir_fd = os.open(args[&#39;dir&#39;], os.O_DIRECTORY)<br>
&gt; &gt; &gt; +if dir_fd &lt; 0:<br>
&gt; &gt; &gt; +     print &quot;Failed to open dir %s&quot; % args[&#39;dir&#39;]<br>
&gt; &gt; &gt; +     sys.exit(-1)<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +# Prepare dump request<br>
&gt; &gt; &gt; +req = rpc.criu_req()<br>
&gt; &gt; &gt; +req.type = rpc.DUMP<br>
&gt; &gt; &gt; +req.opts.remote      = True<br>
&gt; &gt; &gt; +req.opts.log_level = 4<br>
&gt; &gt; &gt; +req.opts.pid = args[&#39;pid&#39;]<br>
&gt; &gt; &gt; +req.opts.images_dir_fd       = dir_fd<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +# Send dump request<br>
&gt; &gt; &gt; +s.send(req.SerializeToString(<wbr>))<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +# Receive responce<br>
&gt; &gt; &gt; +resp = rpc.criu_resp()<br>
&gt; &gt; &gt; +resp.ParseFromString(s.recv(<wbr>MAX_MSG_SIZE))<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +# Reconnect to RPC socket<br>
&gt; &gt; &gt; +s.close()<br>
&gt; &gt; &gt; +s = socket.socket(socket.AF_UNIX, socket.SOCK_SEQPACKET)<br>
&gt; &gt; &gt; +s.connect(args[&#39;socket&#39;])<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +if resp.type != rpc.DUMP:<br>
&gt; &gt; &gt; +     print &#39;Unexpected dump msg type&#39;<br>
&gt; &gt; &gt; +     sys.exit(-1)<br>
&gt; &gt; &gt; +else:<br>
&gt; &gt; &gt; +     if resp.success:<br>
&gt; &gt; &gt; +             print &#39;Dump Success&#39;<br>
&gt; &gt; &gt; +     else:<br>
&gt; &gt; &gt; +             print &#39;Dump Fail&#39;<br>
&gt; &gt; &gt; +             sys.exit(-1)<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +req                  = rpc.criu_req()<br>
&gt; &gt; &gt; +req.type             = rpc.RESTORE<br>
&gt; &gt; &gt; +req.opts.remote      = True<br>
&gt; &gt; &gt; +req.opts.log_level = 4<br>
&gt; &gt; &gt; +req.opts.images_dir_fd       = dir_fd<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +# Send restore request<br>
&gt; &gt; &gt; +s.send(req.SerializeToString(<wbr>))<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +# Receive response<br>
&gt; &gt; &gt; +resp         = rpc.criu_resp()<br>
&gt; &gt; &gt; +resp.ParseFromString(s.recv(<wbr>MAX_MSG_SIZE))<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +# Close RPC socket<br>
&gt; &gt; &gt; +s.close()<br>
&gt; &gt; &gt; +# Close fd of images dir<br>
&gt; &gt; &gt; +os.close(dir_fd)<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +if resp.type != rpc.RESTORE:<br>
&gt; &gt; &gt; +     print &#39;Unexpected restore msg type&#39;<br>
&gt; &gt; &gt; +     sys.exit(-1)<br>
&gt; &gt; &gt; +else:<br>
&gt; &gt; &gt; +     if resp.success:<br>
&gt; &gt; &gt; +             print &#39;Restore success&#39;<br>
&gt; &gt; &gt; +             print &quot;PID of the restored program is %d\n&quot; %<br>
&gt; &gt; (resp.restore.pid)<br>
&gt; &gt; &gt; +             # Kill restored process<br>
&gt; &gt; &gt; +             os.kill(resp.restore.pid, signal.SIGTERM)<br>
&gt; &gt; &gt; +     else:<br>
&gt; &gt; &gt; +             print &#39;Restore fail&#39;<br>
&gt; &gt; &gt; +             sys.exit(-1)<br>
&gt; &gt; &gt; diff --git a/test/others/rpc/run.sh b/test/others/rpc/run.sh<br>
&gt; &gt; &gt; index ed99addb..5364cc90 100755<br>
&gt; &gt; &gt; --- a/test/others/rpc/run.sh<br>
&gt; &gt; &gt; +++ b/test/others/rpc/run.sh<br>
&gt; &gt; &gt; @@ -76,6 +76,31 @@ function test_errno {<br>
&gt; &gt; &gt;       setsid ./errno.py build/criu_service.socket build/imgs_errno &lt;<br>
&gt; &gt; /dev/null &amp;&gt;&gt; build/output_errno<br>
&gt; &gt; &gt;  }<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; +function test_remote {<br>
&gt; &gt; &gt; +     mkdir -p build/imgs_remote<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +     title_print &quot;Run image-cache&quot;<br>
&gt; &gt; &gt; +     ${CRIU} image-cache -v4 -o dump-loop.log -D build/imgs_remote<br>
&gt; &gt; --port 9996 &amp;<br>
&gt; &gt; &gt; +     CACHE_PID=${!}<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +     title_print &quot;Run image-proxy&quot;<br>
&gt; &gt; &gt; +     ${CRIU} image-proxy -v4 -o dump-loop.log -D build/imgs_remote<br>
&gt; &gt; --address localhost --port 9996 &amp;<br>
&gt; &gt;<br>
&gt; &gt; How do you wait when image-cache creates a listen socket?<br>
&gt; &gt;<br>
&gt; &gt; &gt; +     PROXY_PID=${!}<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +     title_print &quot;Run loop.sh&quot;<br>
&gt; &gt; &gt; +     setsid ./loop.sh &lt; /dev/null &amp;&gt; build/loop.log &amp;<br>
&gt; &gt; &gt; +     LOOP_PID=${!}<br>
&gt; &gt; &gt; +     echo &quot;Start loop with pid ${P}&quot;<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +     title_print &quot;Run dump/restore with --remote test&quot;<br>
&gt; &gt; &gt; +     ./remote.py build/criu_service.socket build/imgs_remote $P &lt;<br>
&gt; &gt; /dev/null &amp;&gt;&gt; build/output_remote<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt; +     # Clean up on failure<br>
&gt; &gt; &gt; +     kill -SIGTERM ${LOOP_PID}<br>
&gt; &gt; &gt; +     kill -SIGTERM ${CACHE_PID}<br>
&gt; &gt; &gt; +     kill -SIGTERM ${PROXT_PID}<br>
&gt; &gt; &gt; +}<br>
&gt; &gt; &gt; +<br>
&gt; &gt; &gt;  trap &#39;echo &quot;FAIL&quot;; stop_server&#39; EXIT<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;  start_server<br>
&gt; &gt; &gt; @@ -85,6 +110,7 @@ test_py<br>
&gt; &gt; &gt;  test_restore_loop<br>
&gt; &gt; &gt;  test_ps<br>
&gt; &gt; &gt;  test_errno<br>
&gt; &gt; &gt; +test_remote<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;  stop_server<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; --<br>
&gt; &gt; &gt; 2.14.3<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; ______________________________<wbr>_________________<br>
&gt; &gt; &gt; CRIU mailing list<br>
&gt; &gt; &gt; <a href="mailto:CRIU@openvz.org">CRIU@openvz.org</a><br>
&gt; &gt; &gt; <a href="https://lists.openvz.org/mailman/listinfo/criu" rel="noreferrer" target="_blank">https://lists.openvz.org/<wbr>mailman/listinfo/criu</a><br>
&gt; &gt;<br>
</div></div></blockquote></div><br></div>