Changeset 1594

Show
Ignore:
Timestamp:
10/31/08 14:44:24 (2 months ago)
Author:
peet
Message:
  • call mask usage (in commit)
  • frame now is 'oid-resistent' :) Can operate with no oid
  • DB commit in cmask.Resync mode
  • use only primer flags, do not address node flags directly (v0.1, should be rewritten)
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/0.4.7/shell/state/core3.py

    r1590 r1594  
    5454                self.db.preHook = self.preHook 
    5555                self.db.postHook = self.postHook 
     56                self.db.resyncHook = self.resyncHook 
     57 
    5658                self.db.xmlDumpNodeHook = self.xmlDumpNodeHook 
    5759                self.dba = self.db.bus.address 
     
    118120                e.call(node.private_data["module"],"postUp") 
    119121 
     122        def resyncHook(self,node): 
     123                env = frame(node, self.bus, self.envg, {}) 
     124                self.db.commit(node, env, mask = cmask.Resync) 
     125 
     126                result = swrapper() 
     127                result.merge( env.ret ) 
     128                self.runner.perform(None,None,[result,],flags=emask.Background) 
     129                 
     130 
     131 
    120132        def addHook(self,primer,db): 
    121133                 
     
    164176 
    165177 
    166                 if primer.oid.keys(): 
    167                         esoteric = opts() 
    168                         esoteric["db"] = db 
    169                         esoteric["primer"] = primer 
    170                         esoteric["root"] = self.root 
    171                         esoteric["bus"] = self.hbus 
    172                         #esoteric["runner"] = CoreService(module.bus, primer.private_data["runner"].addr) 
    173                         if primer.private_data.has_key("runner"): 
    174                                 if primer.private_data["runner"] is not None: 
    175                                         esoteric["runner"] = CoreService(module.bus,primer.private_data["runner"].addr) 
    176  
    177                         env = frame(primer, self.bus, self.envg, esoteric) 
    178  
    179  
    180                         # call actions 
    181                         env.call(module, "immediate") 
    182  
    183                         if (module.mask & flags.Immediate) or (bypass(pchain) and not (module.mask & flags.Begin)): 
    184                                 primer.flags |= flags.Weak 
    185                                 env.call(module, "pre") 
    186                                 env.call(module, "postUp") 
    187  
    188                                 #if not env.verdict: 
    189                                 #       verdict = False 
    190                                 if env.index: 
    191                                         index = env.index 
    192  
    193                         if (module.mask & flags.Begin): 
    194                                 index = primer.index 
    195  
    196                         result.merge( env.ret ) 
    197                         if (not module.mask & flags.Lexec): 
    198                                 self.runner.perform(None,None,[result,]) 
    199                                 result = swrapper() 
    200                                 while True: 
    201                                         addr = {} 
    202                                         r = self.hbus.get(addr,0.5) 
    203                                         if r: 
    204                                                 result.add_command("loopback",r) 
    205                                                 if r.has_key("retval"): 
    206                                                         break 
     178                esoteric = opts() 
     179                esoteric["db"] = db 
     180                esoteric["primer"] = primer 
     181                esoteric["root"] = self.root 
     182                esoteric["bus"] = self.hbus 
     183                #esoteric["runner"] = CoreService(module.bus, primer.private_data["runner"].addr) 
     184                if primer.private_data.has_key("runner"): 
     185                        if primer.private_data["runner"] is not None: 
     186                                esoteric["runner"] = CoreService(module.bus,primer.private_data["runner"].addr) 
     187 
     188                env = frame(primer, self.bus, self.envg, esoteric) 
     189 
     190 
     191                # call actions 
     192                env.call(module, "immediate") 
     193 
     194                if (module.mask & flags.Immediate) or (bypass(pchain) and not (module.mask & flags.Begin)): 
     195                        primer.flags |= flags.Weak 
     196                        env.call(module, "pre") 
     197                        env.call(module, "postUp") 
     198 
     199                        #if not env.verdict: 
     200                        #       verdict = False 
     201                        if env.index: 
     202                                index = env.index 
     203 
     204                if (module.mask & flags.Begin): 
     205                        index = primer.index 
     206 
     207                result.merge( env.ret ) 
     208                if (not module.mask & flags.Lexec): 
     209                        self.runner.perform(None,None,[result,]) 
     210                        result = swrapper() 
     211                        while True: 
     212                                addr = {} 
     213                                r = self.hbus.get(addr,0.5) 
     214                                if r: 
     215                                        result.add_command("loopback",r) 
     216                                        if r.has_key("retval"): 
     217                                                break 
    207218 
    208219                ### 
  • branches/0.4.7/shell/state/ddb.py

    r1589 r1594  
    7070        def __init__(self, primer, bus=None, envg=None, esoteric=None, f=None): 
    7171 
    72                 assert (bus and envg and esoteric) or f 
     72                assert ( 
     73                        (bus is not None) and 
     74                        (envg is not None) and 
     75                        (esoteric is not None) 
     76                        ) or f 
    7377 
    7478                if not bus: 
     
    8892                self.index = None 
    8993                self.verdict = None 
    90                 self.oid = primer.oid.keys()[0] 
     94                try: 
     95                        self.oid = primer.oid.keys()[0] 
     96                except: 
     97                        self.oid = None 
    9198 
    9299                # debug 
     
    189196                return text 
    190197         
     198        def __repr__(self): 
     199                return "[%s (%s)]" % (self.cn, self.flags) 
    191200 
    192201class node (log): 
     
    205214                self.dsync = {} 
    206215                self.usync = {} 
    207                 self.flags = 0 
    208216                self.private_data = primer.private_data 
    209217                primer.private_data = {} 
    210218                self.merge(primer) 
    211          
     219 
     220        ### 
     221        # 
     222        # Proxy flags property to/from self.primer 
     223        # 
     224        def gf(self): 
     225                return self.primer.flags 
     226        def sf(self,v): 
     227                self.primer.flags = v 
     228        flags = property(gf, sf) 
     229        # 
     230        # Gods only know, why this does not work _here_ :| 
     231        # 
     232        ### 
     233 
    212234        def touch(self): 
    213235                self.creds["mtime"] = time() 
     
    218240 
    219241        def merge(self,primer): 
    220                 for i in ("creds", "comment","children","parents","index","cn","opts","oid","secondary","flags","data"): 
     242                for i in ("creds", "comment","children","parents","index","cn","opts","oid","secondary","data"): 
    221243                        setattr(self,i,getattr(primer,i)) 
    222244 
     
    308330                                yield None 
    309331                        else: 
     332                                # re-commit 
     333                                for i in self.nodeset["root"]: 
     334                                        n = self.get(i) 
     335                                        self.resyncHook(n) 
     336 
    310337                                self.allow() 
    311338                                return 
     
    350377                } 
    351378         
    352         def preHook(self, *argv): 
    353                 return None 
    354          
    355         def updHook(self, *argv): 
    356                 return None 
    357  
    358         def postHook(self, *argv): 
    359                 return None 
    360  
    361         def xmlDumpNodeHook(self, *argv): 
    362                 pass 
     379        def resyncHook(self, *argv):            pass 
     380        def preHook(self, *argv):               pass 
     381        def updHook(self, *argv):               pass 
     382        def postHook(self, *argv):              pass 
     383        def xmlDumpNodeHook(self, *argv):       pass 
     384 
    363385 
    364386        def cleanupWeak(self,i): 
     
    403425                if \ 
    404426                        (node.oid.has_key(oid) and node.flags & flags.Mark) or \ 
     427                        (node.flags & flags.Committed and mask & cmask.Resync) or \ 
    405428                        (mask & cmask.Call): 
    406429                         
     
    408431                                del node.oid[oid] 
    409432 
    410                         node.flags &= ~flags.Mark 
     433                        node.sf(node.flags & ~flags.Mark) 
    411434 
    412435                        try: 
     
    420443                                if n.flags & flags.Begin: 
    421444                                        e = frame(n,f=env) 
    422                                         self.commit(n,e,oid
     445                                        self.commit(n,e,oid,mask
    423446                                        env.ret.extend(e.ret) 
    424447                                else: 
    425                                         self.commit(n,env,oid
     448                                        self.commit(n,env,oid,mask
    426449 
    427450                        self.postHook(node,env,self) 
     451                        node.sf(node.flags | flags.Committed) 
    428452 
    429453 
    430454        def markUp(self,node,oid): 
    431                 node.flags |= flags.Mark 
     455                node.sf(node.flags | flags.Mark) 
    432456                node.oid[oid] = True 
    433457                for i in node.parents: