[Dbconfig-common-devel] Difficult/partial upgrade

Karsten Hilbert Karsten.Hilbert at gmx.net
Sun Feb 20 16:23:51 UTC 2011


On Sat, Feb 19, 2011 at 10:27:32AM +0100, Vincent Bernat wrote:

> There are two parts in the fix:
>  1. I  have commented index creation  in the upgrade file  to avoid that
>     users upgrading to  the new version get a  failed upgrade. The index
>     creation is moved into postinst.

That's clever.

>  2. For users that already upgraded, I force to replay the whole upgrade
>     file without checking for errors.
> 
> The postinst snippet follows (it should hurt some eyes):
> 
> #v+
> 	if [ -n "$2" ] && dpkg --compare-versions "$2" le 0.5.1+dfsg-2; then
> 	    db_get roundcube/dbconfig-upgrade || true
> 	    if [ x"$RET" = x"true" ]; then
> 		if [ x"$dbc_dbtype" = x"mysql" ]; then
> 		    # Ok, we may need to do some upgrade steps.
> 		    echo "Fixing MySQL installation..."
> 		    if dpkg --compare-versions "$2" ge 0.5; then
> 			# Hack (ugly) to replace "mysql" by "mysql -f"
> 			real_mysql="$(which mysql)"
> 			workdir="$(mktemp -d)"
> 			oldpath="$PATH"
> 			cat <<EOF > "$workdir/mysql"
> #!/bin/sh
> "$real_mysql" "\$@" -f
> EOF
> 			chmod +x "$workdir/mysql"
> 			PATH="$workdir:$PATH"
> 			dbc_mysql_exec_file \
> 			    /usr/share/dbconfig-common/data/roundcube/upgrade/mysql/0.5-1 || true
> 			PATH="$oldpath"
> 			rm -rf "$workdir"
>                     fi
> 		    cat <<EOF | while read command; do dbc_mysql_exec_command "$command" || true ; done
> ALTER TABLE \`messages\` ADD INDEX \`index_index\` (\`user_id\`, \`cache_key\`, \`idx\`);
> ALTER TABLE \`contacts\`ADD INDEX \`user_contacts_index\` (\`user_id\`,\`email\`);
> ALTER TABLE \`identities\` ADD INDEX \`user_identities_index\` (\`user_id\`, \`del\`);
> EOF
> 		fi
> 	    fi
> 	fi
> #v-

Hm, why not simply DROP the offending INDEXe before
(re)-creating them and ignoring errors on the drop ?

After all, the worst that might happen is that while the
INDEXs are briefly unavailable some queries would run slower
than normal ...

Karsten
-- 
GPG key ID E4071346 @ gpg-keyserver.de
E167 67FD A291 2BEA 73BD  4537 78B9 A9F9 E407 1346



More information about the Dbconfig-common-devel mailing list