[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-users] Xen 4.2.2 /etc/init.d/xendomains save and restore of domains does not work


  • To: "greve-ml@xxxxxxxxxx" <greve-ml@xxxxxxxxxx>
  • From: Ian Murray <murrayie@xxxxxxxxxxx>
  • Date: Mon, 1 Jul 2013 18:09:37 +0100 (BST)
  • Cc: xen-users <xen-users@xxxxxxxxxxxxx>, "andreas.greve@xxxxxxxxxx" <andreas.greve@xxxxxxxxxx>
  • Delivery-date: Mon, 01 Jul 2013 17:10:37 +0000
  • Domainkey-signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.co.uk; h=X-YMail-OSG:Received:X-Rocket-MIMEInfo:X-Mailer:References:Message-ID:Date:From:Reply-To:Subject:To:Cc:In-Reply-To:MIME-Version:Content-Type:Content-Transfer-Encoding; b=m6OknWBR1+twFvWkWyiO9ogsvsNt5bRyBFxKrsE1iuLCj9ikxlH3N4Dv21lqCEHaWk7y36dsv4UOiPDdLRNgaFCL47rLRe1HBAn3/oYAB/+ayEUEwzSW35ma1QMLgZ69b8vHgZEMnvJKHYZhWrSlqSPB4sv+hm/3f1EvJhcPSR8=;
  • List-id: Xen user discussion <xen-users.lists.xen.org>




----- Original Message -----
> From: Andreas Greve <greve-ml@xxxxxxxxxx>
> To: Ian Murray <murrayie@xxxxxxxxxxx>
> Cc: greve-ml@xxxxxxxxxx; xen-users <xen-users@xxxxxxxxxxxxx>; 
> andreas.greve@xxxxxxxxxx
> Sent: Monday, 1 July 2013, 17:44
> Subject: Re: [Xen-users] Xen 4.2.2 /etc/init.d/xendomains save and restore
 of domains does not work
> 
> I have an idea.
> 
> assumptions:
> 
> SXP format:
> root@srv01:~# xl create --quiet --dryrun --defconfig 
> /etc/xen/auto/03_gnomedag | head -10
> (domain
>          (domid -1)
>          (create_info)
>          (hvm 0)
>          (hap <default>)
>          (oos <default>)
>          (ssidref 0)
>          (name gnomedag)
>          (uuid <unknown>)
>          (cpupool Pool-0)
> [...]
> )
> root@srv01:~#
> 
> JSON format:
> xl create --quiet --dryrun --defconfig /etc/xen/auto/03_gnomedag | head -10
> {
>      "domid": null,
>      "config": {
>          "c_info": {
>              "type": "pv",
>              "hap": "<default>",
>              "oos": "<default>",
>              "ssidref": 0,
>              "name": "gnomedag",
>              "uuid": "d9a9eba0-e7b8-4d16-ad6e-bb4cac05fd14",
> [...]
> }
> 
> Let use sed  pattern address ranges to distinguish between JSON and SXP.
> 
> 
> xl create --quiet --dryrun --defconfig /etc/xen/auto/03_gnomedag \
> |  sed -n -e '/^[{]$/,/^[}]$/ { s/^.*"name": 
> "\(.*\)",$/\1/p }
> /^[(]domain$/,/^[)]$/ { s/^.*(name \(.*\))$/\1/p }'
> 
> /^[{]$/,/^[}]$/  identify JSON
> /^[(]domain$/,/^[)]$/  identify SXP
> 
> the line break between ...\1/p} and /^[(]domain$... is syntactical 
> needed by sed.
> 
> 
> sed -n -e '/^[{]$/,$ { s/^.*"name": 
> "\(.*\)",$/\1/p }
> /^[(]domain$/,$ { s/^.*(name \(.*\))$/\1/p }' < json.out
> 
> in the example above  ,$ in the address range part  means until  end of file
> 
> For the JSON filter perhaps you can use somthing like this
> /^[ ]*"c_info": [{]$/,$
> as address range because `"c_info": {´ is comes close before 
> `"name:" 
> "gnomedag"´ but I
> know not enough about xl to estimate if that is always true.
> 
> but further I have to look at the stop() function at the block
> 
>      if test "$XENDOMAINS_AUTO_ONLY" = "true"; then
>         eval
>         [...]
>      fi
> 
> for bad side effects of the now working rdnames() -> rdname()

You've gone beyond my sed/regex skills so I can't really assist on the above. I 
think the best thing is for you to try to get it into a working patch and I'd 
be happy to test it, then you could submit it to the dev list for inclusion. 
Also beware that there is an bug in xl list -l in sxp format. The domain id 
comes out as -1 for a running domain. I agreed to adapt a commit as a backport 
when we discussed this on dev list.


> 
> 
> 
> On 07/01/13 16:51, Ian Murray wrote:
>> 
>> 
>> 
>>  ----- Original Message -----
>>>  From: Andreas Greve<greve-ml@xxxxxxxxxx>
>>>  To: Ian Murray<murrayie@xxxxxxxxxxx>
>>>  Cc: andreas.greve@xxxxxxxxxx; xen-users<xen-users@xxxxxxxxxxxxx>
>>>  Sent: Monday, 1 July 2013, 14:59
>>>  Subject: Re: [Xen-users] Xen 4.2.2 /etc/init.d/xendomains save and 
> restore
>>    of domains does not work
>>>  first sorry that I explained it bad but my English is not very well:
>>> 
>>>  second I realize why you could not reproduce my problems under xl JSON
>>>  format:
>>>  short: my symlink names in $XENDOMAINS_AUTO differ from the 
> "real"
>>>  domain name. Later more about that
>>> 
>>>  Problem description detail:
>>> 
>>>  File: /etc/init.d/xendomains (from 4.3 git
>>>  commit543a2657182dbb9237d1feeb1d3193096ab2cb2d )
>>> 
>>>  The sed "expression in function rdname()
>>> 
>>>  rdname()
>>>  {
>>>        NM=$($CMD create --quiet --dryrun --defconfig "$1" |
>>>             sed -n 's/^.*(name \(.*\))$/\1/p')
>>>  }
>>> 
>>>        called by
>>> 
>>>  is_running $dom
>>> 
>>>       called from
>>> 
>>>  start
>>> 
>>>       in the if block
>>> 
>>>  if contains_something "$XENDOMAINS_AUTO"
>>>  then
>>>  [....]
>>>  if [ $? -eq 0 ] || is_running $dom; then
>>> 
>>>        works only for the SXP format and not for the  JSON format. For
>>>  JSON fromat the funktion is_running $dom  will nearly always return 
> false
>>> 
>>> 
>>>  Example to show that:
>>> 
>>>  root@srv01:~# xl create --quiet --dryrun --defconfig
>>>  /etc/xen/auto/03_gnomedag | head -10
>>>  {
>>>        "domid": null,
>>>        "config": {
>>>            "c_info": {
>>>                "type": "pv",
>>>                "hap": "<default>",
>>>                "oos": "<default>",
>>>                "ssidref": 0,
>>>                "name": "gnomedag",
>>>                "uuid": 
> "2d33d9c8-7efe-4060-8e61-b47af2796a5c",
>>>  root@srv01:~#
>>> 
>>> 
>>>  root@srv01:~# xl create --quiet --dryrun --defconfig
>>>  /etc/xen/auto/03_gnomedag \
>>>  | sed -n 's/^.*(name \(.*\))$/\1/p'
>>>  root@srv01:~#
>>> 
>>> 
>>>  So $NM will always be empty and is_running() will nearly always return
>>>  false;
>>> 
>>>  is_running()
>>>  {
>>>        rdname $1
>>>        RC=1
>>>        name=;id=
>>>        while read LN; do
>>>            parseln "$LN" || continue
>>>            if test $id = 0; then continue; fi
>>>            case $name in
>>>                ($NM)
>>>                RC=0
>>>                ;;
>>>            esac
>>>        done<  <($CMD list -l | grep "$LIST_GREP")
>>>        return $RC
>>>  }
>>> 
>>> 
>>>  In contrast my sed "expression" will work for JSON format but 
> not for
>>>  SXP (Yes with that you are right. Sorry ! Up to now I did not know or
>>>  have forgotten that xl supports both formats).
>>  I went through the exact same the week before last.
>> 
>>>  root@srv01:~# xl create --quiet --dryrun --defconfig
>>>  /etc/xen/auto/03_gnomedag \
>>>  | sed -n 's/^.*"name": 
> "\(.*\)",$/\1/p'
>>>  gnomedag
>>>  root@srv01:~#
>>> 
>>>  That is what I expected for JSON format.
>>> 
>>> 
>>>  I found why our both test have different results for the JSON fromat:
>>> 
>>>  On my System (historical reason) the name of the symlinks in
>>>  $XENDOMAINS_AUTO/* differ from the "real" domain name 
> (example: domain
>>> 
>>>  name: gnomedag   symlink name: /etc/xen/auto/03_gnomedag ->
>>>  /etc/xen/gnomedag.cfg).
>>> 
>>>            shortdom=$(echo $dom | sed -n
>>>  's/^.*\/\(.*\)$/\1/p')
>>>            echo $saved_domains | grep -w $shortdom>  /dev/null
>>>            if [ $? -eq 0 ] || is_running $dom; then
>>>                  echo -n "(skip)"
>>>            else
>>> 
>>>  In your configuration the restored domain names  are filtered by the
>>>  echo ... | grep -w ... instruction. So
>>>  is_running $dom is never called for them. So you will never see the
>>>  semantical error produced  by rdname().
>>> 
>>>  In my system  the "real" domain name stored  in saved_domains 
> differ
>>>  from the value in $dom. So
>>>  is_running $dom is always called and always returns false. Which leads
>>>  to a "second start" of the already restored domain.
>>> 
>>  Right, I understand in principle. I will need to look at the script again 
> to understand in detail, but am happy to accept your word on it. :) What you 
> say 
> makes sense to me.
>> 
>> 
>> 
>>>  In the moment I have no good idea how to combine the two needed sed
>>>  expressions for the rdname() function
>>> 
>>>  sed -n 's/^.*(name \(.*\))$/\1/p'     #SXP
>>> 
>>>  sed -n 's/^.*"name": 
> "\(.*\)",$/\1/p'
>>>  #JSON
>>> 
>>  Could we not have somthing like (pseudo)
>>  sedresult = cmd... | sed... (name
>>  if sedresult = "" then
>>       sedresult = cmd ... | sed... "name":
>>  fi
>> 
>>  then either way sedresult should be blank for ones it should be and 
> populated for those where it should be?
>> 
>>  A discussion on the dev list with David Sutton and Ian Campbell concluded 
> that the whole thing should probably be re-written from scratch because the 
> SXP 
> vs JSON has made this script quite scrappy. There are still issues with the 
> handling of zombies, as $state isn't populated and can't be using xl 
> list -l
>> 
>> 
>>> 
>>>  On 07/01/13 02:06, Ian Murray wrote:
>>>>>     I download the file by from git and give him a chance. It 
> works
>>>>>    nearly perfect.
>>>>>    On xendomains stop there was all ok.
>>>>> 
>>>>>    On xendomains start it restores the saved domains but after 
> that it
>>>>>    tries to start them again and produce some error messages 
> like domain
>>>>>    is already running.
>>>>> 
>>>>    It appears to be working fine for me. I am running 4.3 rc 6 + 
> next
>>>>    commit. Rather than saying the output has changed for xl, I think 
> you
>>>>    may be referring to the fact that xl now can output JSON as well 
> as
>>>>    xm's SXP. Having said this, xendomains works both properly 
> for me both
>>>>    using JSON and SXP although I am not sure why the skipping of the
>>>>    autostart domains is working when I select JSON in xl.conf. 
> Certainly
>>>>    the xl ... sed line fails when I execute it manually when using 
> JSON.
>>>> 
>>>>    I think your solution is not the right approach because xl can 
> produce
>>>>    JSON and SXP format and that is defined in xl.conf. Your solution 
> will
>>>>    have a problem when setting xl to produce SXP, I think.
>>>> 
>>>>   root@xen6:/etc/xen/auto# service xendomains stop
>>>>    Shutting down Xen domains:
>>>>    ubuntu-email(save)................................
>>>>     vpn2(save)....
>>>>     *   [done]
>>>>   root@xen6:/etc/xen/auto# service xendomains start
>>>>    Restoring Xen domains: ubuntu-email vpn2
>>>>    Starting auto Xen domains: ubuntu-email(skip) vpn2(skip) *  
> [done]
>>>> 
>>>>    Not tested against xm as I have no means to do so.
>>>> 
>>>> 
>>>>>    The reason is  the sed script in rdname() does not work with 
> xl output.
>>>>>    I'll changed it in the way as you have done with HEADCOMP 
> (see the
>>>>>    diff below).
>>>>>    After that all was nice for me
>>>>> 
>>>>> 
>>>>>    ------------------------------------------------
>>>>>   root@srv01:/etc/init.d# diff -u .xendomains.4.3.original 
> xendomains
>>>>>    --- .xendomains.4.3.original    2013-06-30 20:54:14.000000000 
> +0200
>>>>>    +++ xendomains  2013-06-30 23:27:44.000000000 +0200
>>>>>    @@ -31,11 +31,13 @@
>>>>> 
>>>>>     CMD=${SBINDIR}/xm
>>>>>     HEADCOMP="LinuxGuestRecord"
>>>>>    +RDNAMESED='s/^.*(name \(.*\))$/\1/p'
>>>>>     $CMD list&>  /dev/null
>>>>>     if test $? -ne 0
>>>>>     then
>>>>>            CMD=${SBINDIR}/xl
>>>>>            HEADCOMP="Xen saved domain"
>>>>>    +        RDNAMESED='s/^.*"name":
>>>  "\(.*\)",$/\1/p'
>>>>>     fi
>>>>> 
>>>>>     $CMD list&>  /dev/null
>>>>>    @@ -185,8 +187,8 @@
>>>>>     # read name from xen config file
>>>>>     rdname()
>>>>>     {
>>>>>    -    NM=$($CMD create --quiet --dryrun --defconfig 
> "$1" |
>>>>>    -         sed -n 's/^.*(name 
> \(.*\))$/\1/p')
>>>>>    +    NM=$( $CMD create --quiet --dryrun --defconfig 
> "$1" |
>>>>>    +         sed -n "${RDNAMESED}" )
>>>>>     }
>>>>> 
>>>>>     rdnames()
>>>>>    ----------------------------------------------------
>>>>> 
>>>>>>    I am surprised you did not have issue with 4.2.1 because 
> the header
>>>>>>    issues have been present ever since xl became the 
> default/preferred
>>>>>>    toolstack, unless your Xen 4.2.1 came from a third-party.
>>>>>    Your are right I remember that there were some problems with 
> 4.2.1
>>>>>    too. As I switched from 4.1 to 4.2.1.
>>>>> 
>>>>>    Sorry at that time I had not much time. If I remember right, 
> I fixed
>>>>>    that in any way for me, but forget to report.
>>>>> 
>>>>>    Thanks for your help. I learned a lot about bash (bla) seams 
> to be
>>>>>    equal to bla) in case instructions. That was new for me.
>>>>> 
>>>>> 
>>>>>    Best wishes
>>>>> 
>>>>> 
>>>>>    Andreas
>>>>> 
>>>>>>    _______________________________________________
>>>>>>    Xen-users mailing list
>>>>>>   Xen-users@xxxxxxxxxxxxx
>>>>>>   http://lists.xen.org/xen-users
>>>>> 
> 

_______________________________________________
Xen-users mailing list
Xen-users@xxxxxxxxxxxxx
http://lists.xen.org/xen-users


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.