-í Ú„?cs:dZdklZdkZdkZdkZdkZdkZdkZ dk l Z !dk l Z "dk lZlZ#dklZ$dklZlZlZ%dklZ&d klZ(dkZ)d klZ*d klZlZ+d kl Z l!Z!l"Z",d k#l$Z$-dk%l&Z&.dk'l(Z(l)Z)0da*2d„Z+7ei,e-e-d„Z.;defd„ƒYZ/>dfd„ƒYZ0gdfd„ƒYZ1~dfd„ƒYZ2†dei3fd„ƒYZ4Âd„Z5Çdei3fd„ƒYZ6dS( sThe StorageServer class and the exception that it may raise. This server acts as a front-end for one or more real storages, like file storage or Berkeley storage. XXX Need some basic access control-- a declaration of the methods exported for invocation by the server. (s nested_scopesN(s ClientStub(s CommitLog(s StorageStatss StatsServer(s Dispatcher(sManagedServerConnectionsDelaysMTDelay(strigger(s AuthError(sResolvedSerial(s StorageErrorsStorageTransactionError(sTransactionErrors ReadOnlyErrors ConflictError(s referencesf(s Transaction(su64soid_reprsZSScs 2345dtiƒadS(s?Internal helper to reset the logging label (e.g. after fork()).sZSS:%sN(sossgetpids_label(((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys set_label2scs-789ti|pt||d|ƒdS(s,Internal helper to log a message using zLOG.serrorN(szLOGsLOGslabels_labelslevelsmessageserror(smessageslevelslabelserror((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pyslog7ssStorageServerErrorcs;tZdZ<RS(s8Error reported when an unpickleable exception is raised.(s__name__s __module__s__doc__(((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysStorageServerError;ss ZEOStoragecsT>tZdZ?BeiZFgZHded„Z^d„Z dd„Z gd„Z rd„Z }d„Z ‡eied„ZŠd „Z£ed „Z¸d „ZÁd „ZÝd „Zèd„Zíd„Zðd„Zd„Z d„Z*d„Z0dd„Z;d„ZCdd„ZKd„ZWd„Z Zd„Z!]d„Z"vd„Z#…d„Z$Žd„Z%›d „Z&²d!„Z'ºd"„Z(Ád#„Z)Èd$„Z*Ïd%„Z+Öd&„Z,Üd'„Z-d(„Z. d)„Z/d*„Z0d+„Z1,d,„Z29ed-„Z3Md.„Z4Zd/„Z5RS(0s7Proxy to underlying storage for a single remote client.icsôHI||_Kt|_Lt|_Mt|_Nt|_Ot|_Pd|_Qt|_ R||_ Sd|_ Td|_ Ud|_ Vt|_Wd|_X||_Zh|_[x'|iD[]}\t|i|i( sselfs transactionsreprsidstidsstorages _transactionsstidsNones __class__s__name__sname(sselfsnamestidsstid((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys__repr__}s  ) cs&‡ˆti|i||d|ƒdS(Nserror(szLOGsLOGsselfs log_labelslevelsmsgserror(sselfsmsgslevelserror((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pyslog‡scsIŠ‹Œ|ii|_|ii|_Ž|ii|_|ii|_|ii|_‘|ii|_’|ii|_“y”|ii }Wn•t j o šnXœ|ƒ}|i i|ƒžxX|iƒDž]G}Ÿtot||ƒ pt‚ t||t|i|ƒƒqåW¡|ii|_dS(s'Delegate several methods to the storageN(sselfsstorages versionEmptysversionss getSerialshistorysloads loadSerialsmodifiedInVersionsgetExtensionMethodssfnsAttributeErrorsds _extensionssupdateskeyssnames __debug__shasattrsAssertionErrorssetattrsgetattrslastTransaction(sselfsdsfnsname((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pyssetup_delegationŠs&  "#cs>£¤|io¥tƒ‚n¦|itjoc§tiƒiii }¨|i d|t i ƒ©|tj oª|t|ƒ‚n¬dSn­|ii|jo‡®tiƒiii }¯|i d|t|ƒt|iiƒf±t i ƒ²|tj o³||ii|ƒ‚nµdSn¶dSdS(Nsno current transaction: %s()is(%s(%s) invalid; current transaction = %si(sselfs read_onlys ReadOnlyErrors transactionsNonessyss _getframesf_backsf_codesco_namescallerslogszLOGsPROBLEMsexcstidsidsrepr(sselfstidsexcscaller((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys _check_tid£s   +  csC¸»¼|ii}½| p |djo ¾tSn¿|SdS(s„Return string specifying name of authentication module to use. The module name should be auth_%s where %s is auth_protocol.snoneN(sselfsservers auth_protocolsprotocolsNone(sselfsprotocol((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysgetAuthProtocol¸s  csIÁÇÈ|io|i oÉtd‚nË|itj o Ì|idƒÍtd‚nÎ|ii i |ƒ}Ï|tjo(Ð|id|ƒÑtd|‚nÓ| o|i p |i ƒoÔtƒ‚nÖ|i p||_ ×||_ Ø||_Ù|iƒÚ|ii|Û|ƒ\|_|_dS(søSelect the storage that this client will use This method must be the first one called by the client. For authenticated storages this method will be called by the client immediately after authentication is finished. s+Client was never authenticated with server!sduplicate register() callsunknown storage_id: %ssunknown storage: %sN(sselfs auth_realms authenticateds AuthErrorsstoragesNoneslogs ValueErrorsserversstoragessgets storage_ids read_onlys isReadOnlys ReadOnlyErrorssetup_delegationsregister_connectionstimeoutsstats(sselfs storage_ids read_onlysstorage((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysregisterÁs$"   cs‰ÝÞht|iƒd<|iiƒd<|iiƒd<|iiƒd<|iiƒd<|iiƒd<|iƒd|idt|ƒƒ@|iid|i t Af|i ƒƒdS(Nspack(time=%s) started...spack(time=%s) completei( sselfslogsreprstimesstoragespacks referencesfsservers invalidates storage_idsNones get_size_info(sselfstime((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys _pack_impl;s idcs~CDE|ioFtƒ‚nG|djo Hd}nIgi}t|ƒDI]}||ii ƒƒqW~SdS(s8Return a sequence of n new oids, where n defaults to 100iiN( sselfs read_onlys ReadOnlyErrorsnsappends_[1]srangesisstoragesnew_oid(sselfsns_[1]si((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysnew_oidsCs  csƒKL|ioMtƒ‚nN|ii|ƒ}O|o9P|ii||i t Qt d„|ƒƒR|SnSfSdS(Ncs Q|dfS(Ns(soid(soid((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysQs( sselfs read_onlys ReadOnlyErrorsstoragesundostransaction_idsoidssservers invalidates storage_idsNonesmap(sselfstransaction_idsoids((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysundoKs   cs#WXt|ii|||ƒSdS(N(s run_in_threadsselfsstoragesundoInfosfirstslastsspec(sselfsfirstslastsspec((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysundoInfoWscs Z[t|ii||ƒSdS(N(s run_in_threadsselfsstoragesundoLogsfirstslast(sselfsfirstslast((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysundoLogZscs(]^|io_tƒ‚n`|itj oNa|ii|jo%b|idt|ƒƒcdSnetdƒ‚nht ƒ|_}i||_j||_ k||_ l||_ng|_og|_ptƒ|_q||_r||_sd|_t|iid7_dS(Nsduplicate tpc_begin(%s)s9Multiple simultaneous tpc_begin requests from one client.ii(sselfs read_onlys ReadOnlyErrors transactionsNonesidslogsreprsStorageTransactionErrors Transactionstsusers descriptionsexts _extensionsserialss invalidateds CommitLogstxnlogstidsstatuss store_failedsstatss active_txns(sselfsidsusers descriptionsextstidsstatusst((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys tpc_begin]s&           csævw|i|ƒ o xdSnyto|ipt‚z|iid8_{|iid7_||i i |i ƒ}|i i ƒ}~|io2|ii||i|€|i|iƒƒn|iƒƒ|SdS(Ni(sselfs _check_tidsids __debug__slockedsAssertionErrorsstatss active_txnsscommitssstorages tpc_finishs transactionslastTransactionstids invalidatedsservers invalidates storage_ids get_size_infos_clear_transaction(sselfsidstid((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys tpc_finishvs   cs„…†|i|ƒ o ‡dSnˆ|iid8_‰|iid7_Š|io‹|ii|i ƒnŒ|i ƒdS(Ni( sselfs _check_tidsidsstatss active_txnssabortsslockedsstorages tpc_aborts transactions_clear_transaction(sselfsid((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys tpc_abort…s  csŽt|_‘|iiƒ’|ioO“d|_”|ii|ƒ•t|i_ –|i dƒ™|i ƒndS(Nis!Transaction released storage lock( sNonesselfs transactionstxnlogscloseslockedstimeoutsendsstatss lock_timeslogs_handle_waiting(sself((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys_clear_transactionŽs   csë›|i o…Ÿ|ii} xltt|ƒƒD ]U}¡||\}}¢||jo,£||=¤|i dt|ƒƒ¦Pnq6Wn¨|i oD©|i i d8_ ª|i id7_«|i|i iƒndS(NsAClosed connection removed from waiting list. Clients waiting: %d.i(sselfslockedsstorages_waitingswaitingsrangeslensisdszslogs transactionsstatss active_txnssabortss tpc_abortsid(sselfsdsiszswaiting((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys_abort›s   csN²³|i|dtƒ´|iid7_µ|ii||||ƒdS(Nsexci( sselfs _check_tidsidsStorageTransactionErrorsstatssstoresstxnlogsstoresoidsserialsdatasversion(sselfsoidsserialsdatasversionsid((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysstorea²scsQº»ˆi|dtƒ¼ˆio½ˆiƒSn¿ˆi‡d†ƒSdS(Nsexccs ¿ˆiƒS(N(sselfs_vote((sself(s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys¿s(sselfs _check_tidsidsStorageTransactionErrorslockeds_votes_wait(sselfsid((sselfs9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysvoteºs csWÁˆi|dtƒÃˆioĈiˆƒSnƈi‡‡d†ƒSdS(NsexccsƈiˆƒS(N(sselfs _abortVersionssrc((ssrcsself(s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysÆs(sselfs _check_tidsidsStorageTransactionErrorslockeds _abortVersionssrcs_wait(sselfssrcsid((sselfssrcs9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys abortVersionÁs cs]ÈɈi|dtƒÊˆioˈiˆˆƒSn͈i‡‡‡d†ƒSdS(Nsexccs͈iˆˆƒS(N(sselfs_commitVersionssrcsdest((sdestssrcsself(s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysÍs( sselfs _check_tidsidsStorageTransactionErrorslockeds_commitVersionssrcsdests_wait(sselfssrcsdestsid((sselfssrcsdests9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys commitVersionÈs csWÏЈi|dtƒÑˆioÒˆiˆƒSnÔˆi‡‡d†ƒSdS(NsexccsÔˆiˆƒS(N(sselfs_transactionalUndostrans_id((sselfstrans_id(s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysÔs(sselfs _check_tidsidsStorageTransactionErrorslockeds_transactionalUndostrans_ids_wait(sselfstrans_idsid((sselfstrans_ids9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pystransactionalUndoÏs csTÖ×d|_Ø|ii|ƒÙtiƒ|i_Ú|ii|||ƒdS(Ni( sselfslockedstimeoutsbeginstimesstatss lock_timesstorages tpc_beginstxnstidsstatus(sselfstxnstidsstatus((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys _tpc_beginÖs c sTÜÝt}Þy+ß|ii||||à|i ƒ}Wnwát t fj o â‚n„ãt j oG}äd|_åt|tƒoHæ|iid7_ç|idt|ƒt|ƒfètiƒnét|tƒ o@ëtiƒ} ì|id| d ítid| ƒî~ nñtiƒ}òd|_óyô|i |dƒWnBõödt!|ƒ}÷|i|tiƒøt#|ƒ}nXú|}n/Xü|djoý|i$i%||fƒnþ|t&jo9ÿ|ii'd7_'|idt|ƒtiƒn|i(i%||fƒ|tjSdS( Nisconflict error oid=%s msg=%ssstore error: %s, %siserrors%Couldn't pickle storage exception: %sssconflict resolved oid=%s()sNoneserrsselfsstoragesstoresoidsserialsdatasversions transactions newserials SystemExitsKeyboardInterrupts Exceptions store_faileds isinstances ConflictErrorsstatss conflictsslogsoid_reprsstrszLOGsBLATHERsTransactionErrorssyssexc_infosERRORscPicklesPicklerspicklersfastsdumpsreprsmsgsStorageServerErrors invalidatedsappendsResolvedSerialsconflicts_resolvedsserials( sselfsoidsserialsdatasversionspicklersmsgserrs newserialsexc_info((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys_storeÜsB   "  $csK|ii|iƒ |io  dSn |ii|iƒSdS(N(sselfsclients serialnossserialss store_failedsstoragestpc_votes transaction(sself((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys_votes  cso |ii||iƒ}gi}|D]}|||fƒq/~}|i i |ƒ|SdS(N( sselfsstorages abortVersionssrcs transactionsoidssappends_[1]soidsinvs invalidatedsextend(sselfssrcs_[1]soidsinvsoids((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys _abortVersion s "csÆ|ii|||iƒ}gi}|D]}|||fƒq2~}|i i |ƒ|oJgi}|D]}|||fƒq‚~}|i i |ƒn|SdS(N( sselfsstorages commitVersionssrcsdests transactionsoidssappends_[1]soidsinvs invalidatedsextend(sselfssrcsdests_[1]soidsinvsoids((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys_commitVersions" "cso|ii||iƒ}gi}|D]}||t fƒq/~}|i i |ƒ |SdS(N( sselfsstoragestransactionalUndostrans_ids transactionsoidssappends_[1]soidsNonesinvs invalidatedsextend(sselfstrans_ids_[1]soidsinvsoids((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys_transactionalUndos "cs™,.||_/|iioS0tƒ}1|iii||fƒ2|i dt |iiƒƒ4|Sn$6|i dt i ƒ7|i ƒSdS(Ns=Transaction blocked waiting for storage. Clients waiting: %d.s"Transaction acquired storage lock.(sthunksselfs_thunksstorages _transactionsDelaysds_waitingsappendslogslenszLOGsBLATHERs_restart(sselfsthunksd((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys_wait,s    cs9;|iidjo <d}n >d}?|i||ii|iiƒf@dtiƒA|i|i |i |i ƒB|ii ƒ\}}Cx9t|ƒDC](}E|i|iƒŒ oFPnq«WG|iƒ}H|tj oI|i|ƒnK|SdS(Nis4Preparing to commit transaction: %d object, %d bytess5Preparing to commit transaction: %d objects, %d bytesslevel(sselfstxnlogsstoresstemplateslogssizeszLOGsBLATHERs _tpc_begins transactionstidsstatuss get_loadersloadssloadersrangesis_storesloads_thunksrespsdelaysNonesreply(sselfsdelaysistemplatesloadssrespsloader((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys_restart9s  %  cs®MOx¡O|iioP|iiidƒ\}}Q|i||ƒoXR|iio-St|iiƒ}T|i d|ƒnW|i dƒXdSnq WdS(Nis3Blocked transaction restarted. Clients waiting: %dsBlocked transaction restarted.( sselfsstorages_waitingspopsdelays zeo_storages_restart_otherslensnslog(sselfsdelaysns zeo_storage((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys_handle_waitingMscsqZ]y^|i|ƒWnI_`|idadtidtiƒƒb|i i ƒcdSnXedSdS(Ns-Unexpected error handling waiting transactionslevelserrorii( s zeo_storages_restartsdelaysselfslogszLOGsWARNINGssyssexc_infos connectionsclose(sselfs zeo_storagesdelay((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys_restart_otherZs  (6s__name__s __module__s__doc__s ClientStubs ClientStoragesClientStorageStubClasss extensionssNones__init__s finish_auths set_databasesnotifyConnectedsnotifyDisconnecteds__repr__szLOGsINFOslogssetup_delegations _check_tidsgetAuthProtocolsregistersget_infos get_size_infosgetExtensionMethodsszeoLoadsgetInvalidationss zeoVerifys endZeoVerifyspacks _pack_implsnew_oidssundosundoInfosundoLogs tpc_begins tpc_finishs tpc_aborts_clear_transactions_abortsstoreasvotes abortVersions commitVersionstransactionalUndos _tpc_begins_stores_votes _abortVersions_commitVersions_transactionalUndos_waits_restarts_handle_waitings_restart_other(((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys ZEOStorage>s^            !              (    s StorageServercsªgtZdZoseZteZueZwdde e e e e d„Z àd„Z d„Z d„Z (fe d„ZHd„Zbd „Zud „ZRS( s3The server side implementation of ZEO. The StorageServer is the 'manager' for incoming connections. Each connection is associated with its own ZEOStorage instance (defined below). The StorageServer may handle multiple storages; each ZEOStorage instance only handles a single storage. iidc sTw¶¸||_¹||_ºtƒ»digi} |iƒD¾]=\} } | d| | i ƒodpd| i ƒfƒqE~ ƒ}¿t d|ii|odpd|fƒÁx#|iƒDÁ]} Âg| _qÏWÃ||_Ä||_Å||_Æ| |_Çt|_È|oÉ|i|ƒnËg|_Ì||_Íh|_Î|i|Ïd|iƒ|_ Ðh|_!Ñh|_"Òxy|ii#ƒDÒ]e} Ót$ƒ|i!| <Ô|tjoÖt&ƒ}nØt(|ƒ}Ù|i)ƒÚ||i"| |oJ?t|iƒ|ijo@|id=nA|ii||fƒnBxx|ii|fƒDB]^}C|o ||j oD|i i ||ƒn(E|tj oF|i i|ƒnqsWdS(sEInternal: broadcast info and invalidations to clients. This is called from several ZEOStorage methods. This can do three different things: - If the invalidated argument is non-empty, it broadcasts invalidateTransaction() messages to all clients of the given storage except the current client (the conn argument). - If the invalidated argument is empty and the info argument is a non-empty dictionary, it broadcasts info() messages to all clients of the given storage, including the current client. - If both the invalidated argument and the info argument are non-empty, it broadcasts invalidateTransaction() messages to all clients except the current, and sends an info() message to the current client. iN(s invalidatedslensselfsinvqs invq_boundsappendstids connectionssgets storage_idspsconnsclientsinvalidateTransactionsinfosNone(sselfsconns storage_idstids invalidatedsinfosp((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys invalidate(s  csHPR|i oStdƒTtgfSnV|idd}W||jo4Xtdt|ƒt|ƒfƒYtgfSn[h}\x>|iD\]0\}}]x|D]]}^d||ti iƒDo]*}pyq|iƒWn rsnXq}WdS(s}Close the dispatcher so that there are no new connections. This is only called from the test suite, AFAICT. N( sselfs dispatchersclosesmonitorsNonesstoragessvaluessstoragesasyncores socket_mapss(sselfsssstorage((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys close_serverbs  csTuyzxD|iiƒDz]0}{|i|jo||i|iƒnqWdS(s|Internal: remove the given connection from self.connections. This is the inverse of register_connection(). N(sselfs connectionssvaluessclsconnsobjsremove(sselfsconnscl((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys close_connus  (s__name__s __module__s__doc__s DispatchersDispatcherClasss ZEOStoragesZEOStorageClasssManagedServerConnectionsManagedServerConnectionClasssNones__init__s _setup_authsnew_connectionsregister_connections invalidatesget_invalidationss close_servers close_conn(((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys StorageServergs   !i "    sStubTimeoutThreadcs#~tZ€d„Zƒd„ZRS(Ncs €dS(N((sselfsclient((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysbegin€scs ƒ„dS(N((sselfsclient((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysendƒs(s__name__s __module__sbeginsend(((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysStubTimeoutThread~s  s TimeoutThreadcsD†tZdZ‡Œd„Z•d„Z¡d„Z­d„ZRS(s5Monitors transaction progress and generates timeouts.csoŒtii|ƒŽ|idƒ||_t|_‘t|_ ’ti ƒ|_ “t ƒ|_ dS(Ni(s threadingsThreads__init__sselfs setDaemonstimeouts_timeoutsNones_clients _deadlines Conditions_condstriggers_trigger(sselfstimeout((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys__init__Œs   cs‹•˜|iiƒ™zZšto|itjpt‚›||_œtiƒ|i |_ |ii ƒWdžŸ|ii ƒXdS(N( sselfs_condsacquires __debug__s_clientsNonesAssertionErrorsclientstimes_timeouts _deadlinesnotifysrelease(sselfsclient((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysbegin•s! cs¡¤|iiƒ¥z^¦to|itj pt‚§to|i|jpt‚¨t|_©t|_Wdª«|ii ƒXdS(N( sselfs_condsacquires __debug__s_clientsNonesAssertionErrorsclients _deadlinesrelease(sselfsclient((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysend¡s!! cs­¯x¯doö°|iiƒ±zt²x(²|itjo³|iiƒq/W´|itiƒ}µ|djo·t|_n¸|i‰Wd¹º|ii ƒX»|djo4¼ˆi d|i ƒ¾|i i‡d†ƒnÀti|ƒq WdS(Niis$Transaction timeout after %s secondscs¾ˆiiƒS(N(sclients connectionsclose((sclient(s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys¾s(sselfs_condsacquires _deadlinesNoneswaitstimeshowlongs_clientsclientsreleaseslogs_timeouts_triggers pull_triggerssleep(sselfsclientshowlong((sclients9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysrun­s" (s__name__s __module__s__doc__s__init__sbeginsendsrun(((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys TimeoutThread†s  cs0ÂÃt||ƒ}Ä|iƒÅ|iSdS(N(sSlowMethodThreadsmethodsargsstsstartsdelay(smethodsargsst((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys run_in_threadÂs sSlowMethodThreadcs,ÇtZdZÌÔd„ZÚd„ZRS(s®Thread to run potentially slow storage methods. Clients can use the delay attribute to access the MTDelay object used to send a zrpc response at the right time. csAÔÕtii|ƒÖ||_×||_Øtƒ|_ dS(N( s threadingsThreads__init__sselfsmethods_methodsargss_argssMTDelaysdelay(sselfsmethodsargs((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys__init__Ôs  cs‰ÚÛyÜ|i|iŒ}WnPÝttfj o Þ‚nCßtj o à|iit i ƒƒnXâ|ii |ƒdS(N( sselfs_methods_argssresults SystemExitsKeyboardInterrupts Exceptionsdelayserrorssyssexc_infosreply(sselfsresult((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysrunÚs (s__name__s __module__s__doc__s__init__srun(((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysSlowMethodThreadÇs (7s__doc__s __future__s nested_scopessasyncorescPicklesosssyss threadingstimesZEOs ClientStubs ZEO.CommitLogs CommitLogs ZEO.monitors StorageStatss StatsServersZEO.zrpc.servers DispatchersZEO.zrpc.connectionsManagedServerConnectionsDelaysMTDelaysZEO.zrpc.triggerstriggersZEO.Exceptionss AuthErrorszLOGsZODB.ConflictResolutionsResolvedSerialsZODB.POSExceptions StorageErrorsStorageTransactionErrorsTransactionErrors ReadOnlyErrors ConflictErrorsZODB.referencesfs referencesfsZODB.Transactions Transactions ZODB.utilssu64soid_reprs_labels set_labelsINFOsNoneslogsStorageServerErrors ZEOStorages StorageServersStubTimeoutThreadsThreads TimeoutThreads run_in_threadsSlowMethodThread(%sSlowMethodThreadscPickles Transactionsasyncores nested_scopess ClientStubsResolvedSerials referencesfsu64s set_labels ZEOStoragesDelays ConflictErrorsMTDelayssyss run_in_threadsManagedServerConnections StorageStatssoid_reprsStorageServerErrors AuthErrorsStorageTransactionErrors StatsServerslogsStubTimeoutThreads Dispatchers threadingstriggers ReadOnlyErrorstimeszLOGs TimeoutThreads CommitLogs StorageErrorsossTransactionErrors StorageServer((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys?sD          ÿÿ+ÿ<