Talk:Collaboration/Team/Processes
Debugging
editMattF says:
Full command for using IDE debugging (with XDebug) of a command line script is something like
$ sudo apt-get install php5-xdebug
$ XDEBUG_CONFIG="remote_enable=1 idekey=emacs \
remote_host=localhost remote_port=9001" php some-script.php
localhost should be replaced with the host's IP (usually 10.0.2.2), if running under Vagrant. If using mwscript or sudo, use --preserve-env. E.g.:
XDEBUG_CONFIG="remote_enable=1 idekey=emacs remote_host=10.0.2.2" sudo -u www-data --preserve-env mwscript extensions/Flow/maintenance/convertLqtPage.php --convertnotifications --srcpage Talk:Yet_Another_LQT Talk:Yet_Another_LQT_Output
IDE key I don't think matters, and you can leave the default port if HHVM isn't taking up 9000.
Scripts and hacks
editThings we do unrelated to the code in git/gerrit.
working with UUIDs
editw:Base 36#Conversion has code to convert to/from Flow's alphadecimal representation of UUIDs in URLs e.g. rs714d9sds75b0e7
. Note JavaScript integers have insufficient precision, e.g.
> parseInt( "rs714d9sds75b0e7", 36);
6.142141599954396e+24
There are online base36 converters, e.g. this one with ads.
mysql
editWe store 88-bit UUIDs in binary(11)
columns, so they appear as garbled strings such as:
�#�����o~p
In mysql, use LOWER( HEX() )
and UNHEX()
, e.g.:
mysql> SELECT LOWER(HEX(definition_id)), definition_name FROM flow_definition;
mysql> UPDATE flow_workflow
-> SET workflow_definition_id = UNHEX('0503AC33637ABBA2F8A9FA')
-> WHERE workflow_type = 'discussion';
There is no (?) mysql function to convert to/from Flow's alphadecimal representation. A UUID object can be converted to hex with getHex. For example ("Topic:Se5ulm02fl2zddtu" would be the page name in this example, only the first char differs in case):
$uuid = Flow\Model\UUID::create( strtolower( 'Se5ulm02fl2zddtu' ) );
var_export( $uuid->getHex() );
Output: '05313710f23bfce993e242'
(20:00) root@localhost:[wiki]> SELECT workflow_namespace, workflow_page_id, workflow_title_text, workflow_name FROM flow_workflow WHERE LOWER(HEX(workflow_id)) = '05313710f23bfce993e242';
+--------------------+------------------+---------------------+---------------+
| workflow_namespace | workflow_page_id | workflow_title_text | workflow_name |
+--------------------+------------------+---------------------+---------------+
| 1 | 75 | Sandbox | |
+--------------------+------------------+---------------------+---------------+
1 row in set (0.00 sec)
Lowercase hex is also an allowed input format for UUID::create.
Determining database, gaining access
editThe configuration of Flow's cross-wiki external database can be opaque.
ssh into MediaWiki server (e.g. deployment-bastion for the Beta cluster or wikitech:terbium for production), then
$ mwscript eval.php --wiki=enwiki var_dump( Flow\Container::get( 'db.factory' )->getDB( DB_SLAVE ) );
this will give you mServer, mDBname, mUser, mPassword to connect from the mysql command line.
E.g. from a labs instance to access the beta cluster,
$ mysql -u mUser -p --host=mServer mDBname (enter mPassword)
Use DB_MASTER
if you need to write to the database.
Clearing cache
editFlow caches topic data which can prevent changes and fixes showing up.
If you're using memcached
sudo restart memcached
If you're using redis (the default in MediaWiki-Vagrant
echo flushdb | redis-cli
However, we can't do this in production. If code you introduce needs to clear the cache, instead your patch should bump $wgFlowCacheVersion
. But note in production the one Flow DB is accessed by wikis running different versions of the Flow code...
Purging problem posts
editIf viewing a board or topic throws exception and the exception log on fluorine contains "Did not load root post UUID>",
you can run ErikB's purge script on tin.eqiad.wmnet:/home/ebernhardson/purge.php
. For example, if Talk:BOARDNAME on mediawiki.org has problems:
tin:$ mwscript eval.php mediawikiwiki Talk:BOARDNAME
> require_once "/home/ebernhardson/purge.php"
Sample output
Skipping mediawikiwiki:lag_times:10.64.16.18:lock Skipping mediawikiwiki:lag_times:db1038:lock Skipping mediawikiwiki:lag_times:10.64.32.18:lock Skipping mediawikiwiki:revisiontext:textid:1133331 Skipping mediawikiwiki:lag_times:10.64.16.154:lock Purging keys: flowdb:flow_workflow:title:v2::BOARDNAME:discussion:mediawikiwiki:1:4.5, flowdb:flow_topic_list:list:rvnx8zltkabnji5j:4.5, flow:tree:subtree:rvnx8zm95io4xdbb:4.5, ...
Counting talk pages
editmysql> SELECT COUNT(*)
FROM page WHERE page_namespace MOD 2 = 1;
mysql> SELECT DISTINCT page_namespace , COUNT(1)
FROM page WHERE page_namespace MOD 2 = 1 GROUP BY 1 ;
Updating labs instances
editYou need to configure ssh in order to log in to hosts on the labs network .eqiad.wmflabs
, see wikitech:Help:Access#Accessing instances with ProxyCommand ssh option (recommended)
ee-flow
editspage has a cron job that updates Flow and Echo, see the /etc/motd
Don't run git as root. We have git configured for group sharing, so it shouldn't be necessary. If you get permission errors, run sudo chmod -R g+w . && sudo chgrp -R project-editor-engagement .
flow-tests
editflow-tests runs wikitech:Labs-vagrant, so you can run labs-vagrant git-update !
Manually
editManually, run something like:
$ ssh flow-tests.eqiad.wmflabs
$ cd /vagrant/mediawiki/extensions/Flow/ && sudo su vagrant
$ make master
to update Flow to a particular gerrit commit:
$ ssh flow-tests.eqiad.wmflabs
$ cd /vagrant/mediawiki/extensions/Flow && sudo su vagrant
$ # Paste the "''Download'' Anonymous HTTP" command line from the gerrit patch
$ git fetch https://gerrit.wikimedia.org/r/mediawiki/extensions/Flow refs/changes/11/166711/4 && git checkout FETCH_HEAD
Beta cluster
edit- remember, access through
deployment-bastion.eqiad.wmflabs
- has its own logging, wikitech:Nova_Resource:Deployment-prep/Log_Files
- logs also available through logstash-beta
Job runner health:
ssh deployment-jobrunner01
less /var/log/mediawiki/jobrunner.log