[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
----- 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |