~divmod-dev/divmod.org/public-navigation-2988

« back to all changes in this revision

Viewing changes to Mantissa/xmantissa/interstore.py

  • Committer: exarkun
  • Date: 2009-07-16 00:24:40 UTC
  • Revision ID: svn-v4:866e43f7-fbfc-0310-8f2a-ec88d1da2979:trunk:17771
Merge mantissa-scheduler-2923

Author: exarkun
Reviewer: mithrandi
Fixes: #2923

Remove all code from Mantissa which instantiates Schedulers or SubSchedulers and
upgrade away persistent attributes which refer to existing such items.  Replace
this with simple adaption of Stores to IScheduler.

Show diffs side-by-side

added added

removed removed

Lines of Context:
67
67
 
68
68
from epsilon.expose import Exposer
69
69
 
70
 
from axiom.item import Item
 
70
from axiom.iaxiom import IScheduler
 
71
from axiom.item import Item, declareLegacyItem
71
72
from axiom.errors import UnsatisfiedRequirement
72
73
from axiom.attributes import text, bytes, integer, AND, reference, inmemory
73
74
from axiom.dependency import dependsOn, requiresFromSite
74
75
from axiom.userbase import LoginSystem, LoginMethod
75
 
from axiom.scheduler import SubScheduler
 
76
from axiom.upgrade import registerUpgrader
76
77
 
77
78
from xmantissa.ixmantissa import (
78
79
    IMessageRouter, IDeliveryConsequence, IMessageReceiver)
520
521
    """
521
522
    A queue of outgoing L{QueuedMessage} objects.
522
523
    """
 
524
    schemaVersion = 2
523
525
    powerupInterfaces = (IMessageRouter,)
524
526
 
525
527
    siteRouter = requiresFromSite(IMessageRouter,
526
528
                                  _createLocalRouter,
527
529
                                  _accidentalSiteRouter)
528
530
 
529
 
    scheduler = dependsOn(SubScheduler)
530
 
 
531
531
    messageCounter = integer(
532
532
        """
533
533
        This counter generates identifiers for outgoing messages.
541
541
        future.  Tell the dependent scheduler to schedule it if it isn't
542
542
        already pending execution.
543
543
        """
544
 
        if len(list(self.scheduler.scheduledTimes(self))) == 0:
545
 
            self.scheduler.schedule(self, self.scheduler.now())
 
544
        sched = IScheduler(self.store)
 
545
        if len(list(sched.scheduledTimes(self))) == 0:
 
546
            sched.schedule(self, sched.now())
546
547
 
547
548
 
548
549
    def routeMessage(self, sender, target, value, messageID):
744
745
            if nextanswer is not None:
745
746
                delay = _RETRANSMIT_DELAY
746
747
        if delay is not None:
747
 
            return self.scheduler.now() + timedelta(seconds=delay)
 
748
            return IScheduler(self.store).now() + timedelta(seconds=delay)
 
749
 
 
750
 
 
751
declareLegacyItem(
 
752
    MessageQueue.typeName, 1,
 
753
    dict(messageCounter=integer(default=0, allowNone=False),
 
754
         scheduler=reference()))
 
755
 
 
756
def upgradeMessageQueue1to2(old):
 
757
    """
 
758
    Copy the C{messageCounter} attribute to the upgraded MessageQueue.
 
759
    """
 
760
    return old.upgradeVersion(
 
761
        MessageQueue.typeName, 1, 2, messageCounter=old.messageCounter)
 
762
 
 
763
registerUpgrader(upgradeMessageQueue1to2, MessageQueue.typeName, 1, 2)
748
764
 
749
765
 
750
766
#### High-level convenience API ####