-í Ú„?cs×dZdklZdkZdkZdkZdkZdkZdkZdk l Z dk l Z dk lZlZdklZdklZlZlZdklZd klZdkZd klZd klZlZd kl Z l!Z!l"Z"d k#l$Z$dk%l&Z&dk'l(Z(l)Z)da*d„Z+ei,e-e-d„Z.defd„ƒYZ/dfd„ƒYZ0dfd„ƒYZ1dfd„ƒYZ2dei3fd„ƒYZ4d„Z5dei3fd„ƒ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_reprsZSScsdtiƒ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$ti|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.pyslog7ssStorageServerErrorcstZdZRS(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;s s ZEOStoragecsÄtZdZeiZgZded„Zd„Z d„Z d„Z d„Z d„Z eied„Zd „Zed „Zd „Zd „Zd „Zd„Zd„Zd„Zd„Zd„Zd„Zdd„Zd„Zdd„Zd„Zd„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'„Z-d(„Z.d)„Z/d*„Z0d+„Z1d,„Z2ed-„Z3d.„Z4d/„Z5RS(0s7Proxy to underlying storage for a single remote client.ics¸||_t|_t|_t|_t|_t|_d|_t|_ ||_ d|_ d|_ d|_ t|_d|_||_h|_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‡scsî|ii|_|ii|_|ii|_|ii|_|ii|_|ii|_|ii|_y|ii }Wnt j onNX|ƒ}|i i|ƒx0|iƒD]"}t||t|i|ƒƒqµW|ii|_dS(s'Delegate several methods to the storageN(sselfsstorages versionEmptysversionss getSerialshistorysloads loadSerialsmodifiedInVersionsgetExtensionMethodssfnsAttributeErrorsds _extensionssupdateskeyssnamessetattrsgetattrslastTransaction(sselfsdsfnsname((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pyssetup_delegationŠs&   cs |io tƒ‚n|itjoTtiƒiii }|i d|t i ƒ|tj o|t|ƒ‚ndSn|ii|joutiƒiii }|i d|t|ƒt|iiƒft i ƒ|tj o||ii|ƒ‚ndSndSdS(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    (  cs1|ii}| p |djotSn|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  cs|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ƒdQs( sselfs read_onlys ReadOnlyErrorsstoragesundostransaction_idsoidssservers invalidates storage_idsNonesmap(sselfstransaction_idsoids((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysundoKs  cst|ii|||ƒSdS(N(s run_in_threadsselfsstoragesundoInfosfirstslastsspec(sselfsfirstslastsspec((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysundoInfoWscst|ii||ƒSdS(N(s run_in_threadsselfsstoragesundoLogsfirstslast(sselfsfirstslast((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysundoLogZscsì|io tƒ‚n|itj oB|ii|jo|idt|ƒƒdSn tdƒ‚nt ƒ|_}||_||_ ||_ ||_g|_g|_tƒ|_||_||_d|_|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§|i|ƒ odSn|iid8_|iid7_|ii|iƒ|ii ƒ}|i o,|i i ||i||i |iƒƒn|iƒ|SdS(Ni(sselfs _check_tidsidsstatss 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  csl|i|ƒ odSn|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 csdt|_|iiƒ|io@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 om|ii}xZtt|ƒƒD]F}||\}}||jo#||=|i dt|ƒƒPnq*Wn|i o;|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     csB|i|dtƒ|iid7_|ii||||ƒdS(Nsexci( sselfs _check_tidsidsStorageTransactionErrorsstatssstoresstxnlogsstoresoidsserialsdatasversion(sselfsoidsserialsdatasversionsid((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysstorea²scsBˆ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 csHˆ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 csNˆ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 csHˆ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 csEd|_|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 sît}y%|ii|||||i ƒ}Wn5t t fj o ‚nBt j o}d|_t|tƒo?|iid7_|idt|ƒt|ƒftiƒnt|tƒ o4tiƒ} |id| d tid| ƒ~ ntiƒ}d|_y|i |dƒWn6dt!|ƒ}|i|tiƒt#|ƒ}nX|}n)X|djo|i$i%||fƒn|t&jo3|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       !cs<|ii|iƒ|iodSn|ii|iƒSdS(N(sselfsclients serialnossserialss store_failedsstoragestpc_votes transaction(sself((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys_votes cs]|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ƒq)~}|i i |ƒ|oAgi}|D]}|||fƒqm~}|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_commitVersionscs]|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~||_|iioGtƒ}|iii||fƒ|i dt |iiƒƒ|Sn|i dt i ƒ|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   csè|iidjo d}nd}|i||ii|iiƒfdtiƒ|i|i |i |i ƒ|ii ƒ\}}x0t|ƒD]"}|i|iƒŒ oPnqW|iƒ}|tj o|i|ƒn|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 "     csx‰|iio{|iiidƒ\}}|i||ƒoI|iio't|iiƒ}|i d|ƒn|i dƒdSnqWdS(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_waitingMs   csVy|i|ƒWn:|iddtidtiƒƒ|i i ƒdSnXdSdS(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ƒtZdZeZeZeZdde e e e e d„Z d„Z d„Z d„Z fe d„Zd„Zd „Zd „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 sè||_||_tƒdigi} |iƒD]=\} } | d| | i ƒodpd| i ƒfƒq3~ ƒ}t d|ii|odpd|fƒx|iƒD]} g| _q´W||_||_||_| |_t|_|o|i|ƒng|_||_h|_|i|d|iƒ|_ h|_!h|_"xd|ii#ƒD]S} t$ƒ|i!| <|tjo t&ƒ}nt(|ƒ}|i)ƒ||i"| Wx/ti iƒD]}y|iƒWnnXqbWdS(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 csBx;|iiƒD]*}|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 "    sStubTimeoutThreadcstZd„Zd„ZRS(NcsdS(N((sselfsclient((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysbegin€scsdS(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 TimeoutThreadcs2tZdZd„Zd„Zd„Zd„ZRS(s5Monitors transaction progress and generates timeouts.csWtii|ƒ|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    csR|iiƒz0||_tiƒ|i|_|iiƒWd|ii ƒXdS(N( sselfs_condsacquiresclients_clientstimes_timeouts _deadlinesnotifysrelease(sselfsclient((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysbegin•s  cs8|iiƒzt|_t|_Wd|iiƒXdS(N(sselfs_condsacquiresNones_clients _deadlinesrelease(sselfsclient((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pysend¡s   csØxÑdoÉ|iiƒz_x"|itjo|iiƒqW|itiƒ}|djo t|_n|i‰Wd|ii ƒX|djo.ˆi d|i ƒ|i i‡d†ƒnti|ƒqWdS(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  cs$t||ƒ}|iƒ|iSdS(N(sSlowMethodThreadsmethodsargsstsstartsdelay(smethodsargsst((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys run_in_threadÂs sSlowMethodThreadcs tZdZd„Zd„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. cs2tii|ƒ||_||_tƒ|_ dS(N( s threadingsThreads__init__sselfsmethods_methodsargss_argssMTDelaysdelay(sselfsmethodsargs((s9/usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys__init__Ôs  csqy|i|iŒ}WnDttfj o ‚n: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                 ÿÿ+ÿ<