Fwd: MariaDB replacing MySQL

Honza Horak hhorak at redhat.com
Mon Mar 18 17:12:51 UTC 2013


On 03/15/2013 04:22 PM, James Antill wrote:
> On Wed, 2013-03-13 at 18:08 +0100, Honza Horak wrote:
>> However, in scenarios I tested with packages similar to
>> mysql/MySQL/mariadb it turned out, that we never reach the point where
>> we have to choose one of more alternate providers. The reason is that
>> yum chooses right package before going down to [1] (I tracked the code
>> and it never came to the part _compare_providers).
>
>   Not sure what operation you tested this with, but you probably missed
> something. When installing a virtual provide, the usual code path would
> be:
>
> yum install 'mysql(x86-64)' =>
>    YumBase.install() =>
>      YumBase.bestPacakgesFromList() =>
>        YumBase._bestPackageFromList() =>
>          Depsolve._compare_providers()

James, thanks for your response. You're right, it does call 
_compare_providers() when requesting virtual provide.

<snip>

> 1. We are mixing a _package name_ "mysql" with a provide "mysql", and
> another package name that is different only by capitalization "MySQL".

Now I see it was not the best idea to call it MySQL, but yum sees that 
as two different packages, doesn't it?

> 2. We have multiple providers of "mysql" and an obsolete of
> "mysql" (which, again, is based on package name not provides).
>
> ...now there are certain parts of yum that will see "FOO" as a package
> name before it looks for provides, and thus. will never pick the other
> random packages that also provide "FOO", the relevant ones are that is
> "yum install" and "yum upgrade" both operate this way.

Understood, we'd have to introduce new virtual provides different than 
the former package name, right? However, I don't think it matters in our 
case, since mariadb is obsoleting mysql and it should also be the 
default, so it will behave as we wish in that case (i.e. mariadb is 
chosen by default) -- or do I miss something?

>> The following table shows what actions (cols) yum chose in different
>> scenarios -- i.e packages installed (rows):
>>
>> installed | # yum install mysql | # yum update | # yum shell (*) |
>> ------------------------------------------------------------------
>>     ---     | mariadb (**)        | ---          | MySQL           |
>>     mysql   | mariadb             | mariadb      | MySQL           |
>>     MySQL   | mariadb             | MySQL        | MySQL           |
>>     mariadb | ---                 | mariadb      | MySQL           |
>>
>> (*) "yum shell" is needed in order to install MySQL while removing
>> current implementation if any (mysql or mariadb) in one transaction.
>
>   It's not obvious what you are doing in "yum shell", but rawhide/F19 yum
> also has the swap command (Eg. yum swap MySQL mariadb).

I ran "remove mariadb" and "install MySQL", which is probably what swap 
can do.

> But given the
> results I wouldn't be shocked if this was the one that represented what
> a requires would do.

Sorry, I don't get your point here. Can you explain that a bit, please?

<snip>

>   Given that mariadb and MySQL are forks, and will have similar deps. and
> be on the same arches etc. ... I'd expect compare providers to come down
> to two things:
>
> 1. If all the providers give an "= <version>" for the provide, we'll
> choose the highest provided version (this is not true in el6 atm. ... if
> this is going to happen there). Given the above packaging data, 5.6.x >
> 5.5.x ... thus. MySQL would be preferred.
>
> 2. Shortest name (so MySQL will win).

I see. However, we could do the following adjustments:

1) use epoch in mariadb's "Provides:" (mariadb would win in rule #10 at 
[1])

2) change the name of the original MySQL package from MySQL to 
community-mysql -- then it should be safe to assume mariadb will be used 
before community-mysql. We couldn't use mysql-community because of rule 
#9 at [1] -- when some package would require mysql, then mysql-community 
would have better prefix and thus would be chosen before mariadb.

So, if we do these two changes and if rules documented in [1] won't 
change in the future, we should be able to make yum to choose 
un-ambiguously mariadb before community-mysql. Or is there still some issue?

Regards,
Honza

[1] http://yum.baseurl.org/wiki/CompareProviders


More information about the devel mailing list