Commit Graph

22 Commits

Author SHA1 Message Date
Brion Vibber ec145b73fc Major refactoring of queue handlers to support running multiple sites in one daemon.
Key changes:
* Initialization code moved from common.php to StatusNet class;
  can now switch configurations during runtime.
* As a consequence, configuration files must now be idempotent...
  Be careful with constant, function or class definitions.
* Control structure for daemons/QueueManager/QueueHandler has been refactored;
  the run loop is now managed by IoMaster run via scripts/queuedaemon.php
  IoManager subclasses are woken to handle socket input or polling, and may
  cover multiple sites.
* Plugins can implement notice queue handlers more easily by registering a
  QueueHandler class; no more need to add a daemon.

The new QueueDaemon runs from scripts/queuedaemon.php:

* This replaces most of the old *handler.php scripts; they've been refactored
  to the bare handler classes.
* Spawns multiple child processes to spread load; defaults to CPU count on
  Linux and Mac OS X systems, or override with --threads=N
* When multithreaded, child processes are automatically respawned on failure.
* Threads gracefully shut down and restart when passing a soft memory limit
  (defaults to 90% of memory_limit), limiting damage from memory leaks.
* Support for UDP-based monitoring: http://www.gitorious.org/snqmon

Rough control flow diagram:
QueueDaemon -> IoMaster -> IoManager
                           QueueManager [listen or poll] -> QueueHandler
                           XmppManager [ping & keepalive]
                           XmppConfirmManager [poll updates]

Todo:

* Respawning features not currently available running single-threaded.
* When running single-site, configuration changes aren't picked up.
* New sites or config changes affecting queue subscriptions are not yet
  handled without a daemon restart.
* SNMP monitoring output to integrate with general tools (nagios, ganglia)
* Convert XMPP confirmation message sends to use stomp queue instead of polling
* Convert xmppdaemon.php to IoManager?
* Convert Twitter status, friends import polling daemons to IoManager
* Clean up some error reporting and failure modes
* May need to adjust queue priorities for best perf in backlog/flood cases

Detailed code history available in my daemon-work branch:
http://www.gitorious.org/~brion/statusnet/brion-fixes/commits/daemon-work
2010-01-12 20:45:09 -08:00
Evan Prodromou ae883ceb9b change controlyourself.ca to status.net 2009-08-25 18:19:04 -04:00
Evan Prodromou d35b2d3f3c change laconi.ca to status.net 2009-08-25 18:16:46 -04:00
Evan Prodromou c8b8f07af1 change Laconica and Control Yourself to StatusNet in PHP files 2009-08-25 18:12:20 -04:00
Evan Prodromou 0828fde51c one more shot at servicing queues 2009-07-09 15:25:59 -04:00
Evan Prodromou 43e0b308fd Revert "Let the queue handlers drain their xmpp queues"
This reverts commit fc3442a041.
2009-07-09 13:39:22 -04:00
Evan Prodromou fc3442a041 Let the queue handlers drain their xmpp queues 2009-07-09 13:26:09 -04:00
Evan Prodromou 031146f4c7 yet another select() refinement 2009-07-09 12:49:37 -04:00
Evan Prodromou eccab87044 slightly more robust select() logic 2009-07-09 12:33:38 -04:00
Evan Prodromou 03200235b1 use select() to bring down xmpp latency 2009-07-09 12:09:20 -04:00
Evan Prodromou 1daad01f36 slightly better timing 2009-07-09 11:40:01 -04:00
Evan Prodromou 8aef0e4271 manually re-enqueue failed notices 2009-07-08 17:55:43 -04:00
Evan Prodromou a626f32d8e log errors in handling notices 2009-07-08 01:36:12 -04:00
Evan Prodromou 23e6dafff6 better handling of frames and notices 2009-07-05 11:01:07 -04:00
Evan Prodromou 66a4a60e0b better debug logging in stomp queue manager 2009-07-04 01:43:18 -04:00
Evan Prodromou f63702579a don't say we're connecting if we're not 2009-07-04 01:16:58 -04:00
Evan Prodromou 49c5c6f92b move handling code into queuemanager 2009-07-04 00:31:28 -04:00
Evan Prodromou 3e4be98ff6 add _queueName function 2009-07-03 10:05:07 -04:00
Evan Prodromou e8f27025ba more logging in stompqueuemanager 2009-07-02 12:43:09 -04:00
Evan Prodromou 2325d934a8 add fail() method to stompqueuemanager 2009-07-01 12:10:11 -04:00
Evan Prodromou 7b66a12913 save frames for StompQueueManager 2009-07-01 11:10:23 -04:00
Evan Prodromou e5b758dbbe start of queuemanager code 2009-06-28 14:38:31 -04:00