[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: 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 |