[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 15:51:26 +0100 (BST)
  • Cc: xen-users <xen-users@xxxxxxxxxxxxx>, "andreas.greve@xxxxxxxxxx" <andreas.greve@xxxxxxxxxx>
  • Delivery-date: Mon, 01 Jul 2013 14:52:30 +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=ST1EcyyV+TniOlkwIm9C6zK3mXhxoStDaoDtRe27AzkZwLbO1N3AbtEraFidB0ITuCphrPl68j7YjbkdrFzkDajnBhKIw23lLa5vD6JYv/EJGG5kjm8cauXgaKXlR+Hei/hQD7yk2UFmqSllwVaXlgldE6HWSshxlU2XkwRgYqc=;
  • List-id: Xen user discussion <xen-users.lists.xen.org>




----- 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®.