Hi Jan,

Oh, that's too bad. I didn't know that MyISAM doesn't support database
clustering. (You might be the first person to run Cargo on a clustered
database - it's good to know that it seems to be working, other than this
one problem.)

You're right that the MyISAM requirement is only for old database versions
- the last version of MySQL that had this problem was 5.6, and that version
came out in 2013, and will stop being supported in a little over a year. I
could have added a new setting like
$wgCargoUseMyISAMForTablesWithSearchtextFields, but that seemed like
overkill, so I decided instead to just remove this code that forces the use
of MyISAM. Hopefully there aren't too many people who (a) are using Cargo
with MySQL <= 5.6 (or its MariaDB equivalent), (b) use InnoDB by default,
(c) use the _pageData or _fileData tables, and (d) will recreate these
tables in the future. If there are, they'll have to either manually re-add
this code in, or update to a more recent DB version.

Anyway, if you get the latest version of the Cargo code, and recreate these
tables, the problems will hopefully be gone.

-Yaron

On Fri, Nov 8, 2019 at 6:52 AM Jan Böhme <j...@idea-sketch.com> wrote:

> Hi,
>
> for our production system I’m using a MariaDB Galera cluster as RDMS
> backend. Though there is a feature to enable (experimental) replication of
> MyISAM tables, this doesn't play well with Cargo. Certain operations
> involving _pageData tables caused the cluster to reach an inconsistent data
> state, thus stopping replication and ultimately falling apart.
>
> I could isolate the cause to the following transaction (which is embedded
> between two inserts for the same thing):
>
> BEGIN /* Wikimedia\Rdbms\Database::begin  */
> SHOW /* Wikimedia\Rdbms\DatabaseMysqlBase::tableExists  */ TABLES LIKE
> 'cargo\_\_staff\_\_NEXT'
> SHOW /* Wikimedia\Rdbms\DatabaseMysqlBase::tableExists  */ TABLES LIKE
> 'cargo\_\_staff\_\_\_files'
> DELETE /* Wikimedia\Rdbms\Database::delete  */ FROM `cargo__staff` WHERE
> `_pageID` = '273'
> DELETE /* Wikimedia\Rdbms\Database::delete  */ FROM `cargo___pageData`
> WHERE `_pageID` = '273'
> COMMIT /* Wikimedia\Rdbms\Database::commit  */
>
> cargo__staff table being InnoDB, cargo___pageData being MyISAM.
> Unfortunately this leads to the delete statement on the InnoDB table not
> being replicated, while the delete on the MyISAM table is. Thus on the
> following insert the row already exists, causing a unique key violation and
> inconsistent cluster state.
>
> Is it really still necessary to use MyISAM for these tables? Full text
> indices are available on InnoDB for quite some time now, so I’m wondering
> whether this still needs to be supported or if it would be possible to make
> both choices available.
>
>
> Best: Jan.
>
>
> --
> idea-sketch
>
> Jan Böhme & Uwe Schützenmeister
> Lößnitzstr. 14
> 01097 Dresden
>
> www.idea-sketch.com <http://www.idea-sketch.com/>
>
> Tel.: +49 . (0)351 . 810 74 250
> Mobil: +49 . (0)179 .53 41 641
>
> _______________________________________________
> MediaWiki-l mailing list
> To unsubscribe, go to:
> https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
>


-- 
WikiWorks · MediaWiki Consulting · http://wikiworks.com
_______________________________________________
MediaWiki-l mailing list
To unsubscribe, go to:
https://lists.wikimedia.org/mailman/listinfo/mediawiki-l

Reply via email to