Martin Pool has proposed merging lp:~mbp/launchpad/ec2-tmpfs into lp:launchpad with lp:~mwhudson/launchpad/ec2-land-instance-type-option as a prerequisite.
Requested reviews: Launchpad code reviewers (launchpad-reviewers) For more details, see: https://code.launchpad.net/~mbp/launchpad/ec2-tmpfs/+merge/82355 This tweaks a few things in the ec2 image: * make root be data=writeback etc so perhaps faster * put some disposable data on tmpfs * correctly terminate instances on error! (fixes the "error 400" you may have seen) * suppress spurious alarming "_connect: connection refused" during startup I need to actually run a test through the result before this could be called done. -- https://code.launchpad.net/~mbp/launchpad/ec2-tmpfs/+merge/82355 Your team Launchpad code reviewers is requested to review the proposed merge of lp:~mbp/launchpad/ec2-tmpfs into lp:launchpad.
=== modified file 'lib/devscripts/ec2test/instance.py' --- lib/devscripts/ec2test/instance.py 2011-11-16 05:39:10 +0000 +++ lib/devscripts/ec2test/instance.py 2011-11-16 05:39:10 +0000 @@ -77,6 +77,8 @@ . /etc/lsb-release +mount -o remount,data=writeback,commit=3600,async,relatime / + cat >> /etc/apt/sources.list << EOF deb http://ppa.launchpad.net/launchpad/ubuntu $DISTRIB_CODENAME main deb http://ppa.launchpad.net/bzr/ubuntu $DISTRIB_CODENAME main @@ -84,6 +86,33 @@ deb-src http://us.ec2.archive.ubuntu.com/ubuntu/ $DISTRIB_CODENAME main EOF +export DEBIAN_FRONTEND=noninteractive + +echo contents of fstab before editing +cat /etc/fstab +# Put some io-intensive disposable directories on ramdisks; the machine is disposable +# anyhow. These must only be things whose content is not required to persist +# between the machine being started and it being used: so you can't put +# /var/launchpad here because the contents are used by spawned instances. +for d in /tmp /var/tmp /var/lib/postgresql +do + [ -d $d ] || mkdir $d + echo "$d $d tmpfs defaults 0 0" >> /etc/fstab + mount $d +done +sed -ie 's/ext3[ \t]*defaults/data=writeback,commit=3600,async,relatime/' /etc/fstab +echo contents of fstab after edit: +cat /etc/fstab + +# Add the keys for the three PPAs added to sources.list above. +apt-key adv --recv-keys --keyserver pool.sks-keyservers.net 2af499cb24ac5f65461405572d1ffb6c0a5174af +apt-key adv --recv-keys --keyserver pool.sks-keyservers.net ece2800bacf028b31ee3657cd702bf6b8c6c1efd +apt-key adv --recv-keys --keyserver pool.sks-keyservers.net cbede690576d1e4e813f6bb3ebaf723d37b19b80 + +aptitude update +aptitude -y install language-pack-en # Do this first so later things don't complain about locales +aptitude -y full-upgrade + # This next part is cribbed from rocketfuel-setup dev_host() { sed -i \"s/^127.0.0.88.*$/&\ ${hostname}/\" /etc/hosts @@ -126,15 +155,7 @@ 127.0.0.99 bazaar.launchpad.dev ' >> /etc/hosts -# Add the keys for the three PPAs added to sources.list above. -apt-key adv --recv-keys --keyserver pool.sks-keyservers.net 2af499cb24ac5f65461405572d1ffb6c0a5174af -apt-key adv --recv-keys --keyserver pool.sks-keyservers.net ece2800bacf028b31ee3657cd702bf6b8c6c1efd -apt-key adv --recv-keys --keyserver pool.sks-keyservers.net cbede690576d1e4e813f6bb3ebaf723d37b19b80 - -aptitude update -aptitude -y full-upgrade - -DEBIAN_FRONTEND=noninteractive apt-get -y install launchpad-developer-dependencies apache2 apache2-mpm-worker +apt-get -y install launchpad-developer-dependencies apache2 apache2-mpm-worker # Create the ec2test user, give them passwordless sudo. adduser --gecos "" --disabled-password ec2test @@ -298,7 +319,8 @@ self._ec2test_user_has_keys = False else: raise BzrCommandError( - 'failed to start: %s\n' % self._boto_instance.state) + 'failed to start: %s: %r\n' % ( + self._boto_instance.state, self._boto_instance.state_reason)) def shutdown(self): """Shut down the instance.""" @@ -307,9 +329,10 @@ return self._boto_instance.update() if self._boto_instance.state not in ('shutting-down', 'terminated'): - # terminate instance - self._boto_instance.stop() + self.log("terminating %s..." % self._boto_instance) + self._boto_instance.terminate() self._boto_instance.update() + self.log(" done\n") self.log('instance %s\n' % (self._boto_instance.state,)) @property @@ -322,24 +345,31 @@ """Connect to the instance as `user`. """ ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(AcceptAllPolicy()) + self.log('ssh connect to %s: ' % self.hostname) connect_args = { 'username': username, 'pkey': self.private_key, 'allow_agent': False, 'look_for_keys': False, } - for count in range(10): + for count in range(20): try: ssh.connect(self.hostname, **connect_args) - except (socket.error, paramiko.AuthenticationException), e: - self.log('_connect: %r\n' % (e,)) + except (socket.error, paramiko.AuthenticationException, EOFError), e: + self.log('.') + if getattr(e, 'errno') == errno.ECONNREFUSED: + # Pretty normal if the machine has started but sshd isn't + # up yet. Don't make a fuss. + time.sleep(1) + continue + self.log('ssh _connect: %r\n' % (e,)) if count < 9: time.sleep(5) - self.log('retrying...') else: raise else: break + self.log(' ok!\n') return EC2InstanceConnection(self, username, ssh) def _upload_local_key(self, conn, remote_filename):
_______________________________________________ Mailing list: https://launchpad.net/~launchpad-reviewers Post to : [email protected] Unsubscribe : https://launchpad.net/~launchpad-reviewers More help : https://help.launchpad.net/ListHelp

