-í Û„?csdkZdkZdkZdkZdkZdkZdkZdkZdkZdk l Z dk l Z dk lZdklZdefd„ƒYZeedƒo%eifZdeieifZneifZdeifZd eifd „ƒYZd fd „ƒYZdS( N(s ReadOnlyError(slog(strigger(sManagedConnectionsConnectionManagercsztZdZddd„Zd„Zd„Zd„Zd„Zd„Zd „Z d d „Z d „Z d „Z d„Z RS(sKeeps a connection up over timeii´cs†|i|ƒ|_||_||_||_titi ƒƒ|_ t |_ d|_ t |_t |_d|_ti|iƒdS(Ni(sselfs _parse_addrssaddrssaddrlistsclientstminstmaxs threadings ConditionsLockscondsNones connectionsclosedsthreadstriggers thr_asyncs ThreadedAsyncsregister_loop_callbacks set_async(sselfsaddrssclientstminstmax((s7/usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/client.pys__init__"s        csd|ii|ifSdS(Ns <%s for %s>(sselfs __class__s__name__saddrlist(sself((s7/usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/client.pys__repr__1scs’|i|ƒ}|tj o||fgSnbg}xT|D]L}|i|ƒ}|tjotdt|ƒ‚n|i ||fƒq:W|SdS(Nsunknown address in list: %s( sselfs _guess_typesaddrss addr_typesNonesaddrlistsaddrs ValueErrorsreprsappend(sselfsaddrssaddrlistsaddrs addr_type((s7/usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/client.pys _parse_addrs4s  csrt|tiƒo tiSnt|ƒdjo+t|dtiƒot|dtiƒo tiSnt SdS(Niii( s isinstancesaddrstypess StringTypessocketsAF_UNIXslensIntTypesAF_INETsNone(sselfsaddr((s7/usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/client.pys _guess_typeIs  A csõd|_|iiƒz|i}t|_|i}Wd|ii ƒX|tj oIt dƒ|i ƒ|i dƒ|i ƒot ddtiƒnn|tj o|iƒn|itj o|iiƒt|_nti|iƒdS(s6Prevent ConnectionManager from opening new connectionsiNs'CM.close(): stopping and joining threadis(CM.close(): self.thread.join() timed outslevel(sselfsclosedscondsacquiresthreadstsNones connectionsconnsreleaseslogsstopsjoinsisAliveszLOGsWARNINGsclosestriggers ThreadedAsyncsremove_loop_callbacks set_async(sselfstsconn((s7/usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/client.pyscloseUs,             cs_tdt|ƒdtiƒ|i o |itjo#tdƒtƒ|_d|_ ndS(NsCM.set_async(%s)slevelsCM.set_async(): first calli( slogsreprsmapszLOGsDEBUGsselfsclosedstriggersNones thr_async(sselfsmap((s7/usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/client.pys set_asyncns   cs¨|iƒ|iiƒz|i}|i}Wd|iiƒX|t j o |t joB|i }|i ƒ|iiƒz |i}Wd|iiƒXn|t j SdS(s§Attempt a connection to the server without blocking too long. There isn't a crisp definition for too long. When a ClientStorage is created, it attempts to connect to the server. If the server isn't immediately available, it can operate from the cache. This method will start the background connection thread and wait a little while to see if it finishes quickly. N( sselfsconnectscondsacquiresthreadsts connectionsconnsreleasesNones one_attemptseventswait(sselfstsconnsevent((s7/usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/client.pysattempt_connects"        ics|iiƒzÓ|itj odSn|i}|tjoPtdƒt||i |i |i |i ƒ|_}|i dƒ|iƒn|oJxC|itjo2|iidƒ|itjotdƒnq˜WnWd|iiƒX|ondS(Ns$CM.connect(): starting ConnectThreadiis$CM.connect(sync=1): still waiting...(sselfscondsacquires connectionsNonesthreadstslogs ConnectThreadsclientsaddrliststminstmaxs setDaemonsstartssyncswaitsrelease(sselfssyncst((s7/usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/client.pysconnect¥s,      cs^td|ƒ|iiƒz.||_|o t|_n|ii ƒWd|ii ƒXdS(NsCM.connect_done(preferred=%s)( slogs preferredsselfscondsacquiresconns connectionsNonesthreads notifyAllsrelease(sselfsconns preferred((s7/usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/client.pys connect_done¼s   csŠ|iiƒzB||ij otddtiƒdSntdƒt|_Wd|ii ƒX|i i ƒ|i o|i ƒndS(NsCM.close_conn() non-currentslevelsCM.close_conn()(sselfscondsacquiresconns connectionslogszLOGsBLATHERsNonesreleasesclientsnotifyDisconnectedsclosedsconnect(sselfsconn((s7/usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/client.pys close_connÈs     cs3|iiƒz|itj SWd|iiƒXdS(N(sselfscondsacquires connectionsNonesrelease(sself((s7/usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/client.pys is_connectedØs  (s__name__s __module__s__doc__s__init__s__repr__s _parse_addrss _guess_typescloses set_asyncsattempt_connectsconnects connect_dones close_conns is_connected(((s7/usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/client.pysConnectionManagers      $  sWSAEWOULDBLOCKis ConnectThreadcsYtZdZeiiZd„Zd„Zd„Zd„Z d„Z d„Z d„Z RS(sóThread that tries to connect to server given one or more addresses. The thread is passed a ConnectionManager and the manager's client as arguments. It calls testConnection() on the client when a socket connects; that should return 1 or 0 indicating whether this is a preferred or a fallback connection. It may also raise an exception, in which case the connection is abandoned. The thread will continue to run, attempting connections, until a preferred connection is seen and successfully handed over to the manager and client. As soon as testConnection() finds a preferred connection, or after all sockets have been tried and at least one fallback connection has been seen, notifyConnected(connection) is called on the client and connect_done() on the manager. If this was a preferred connection, the thread then exits; otherwise, it keeps trying until it gets a preferred connection, and then reconnects the client using that connection. cs]|idd|ƒ||_||_||_||_||_d|_ti ƒ|_ dS(Nsnames Connect(%s)i( sselfs_ConnectThread__super_initsaddrlistsmgrsclientstminstmaxsstoppeds threadingsEvents one_attempt(sselfsmgrsclientsaddrliststminstmax((s7/usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/client.pys__init__ s      cs d|_dS(Ni(sselfsstopped(sself((s7/usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/client.pysstopscsÓ|i}d}d}x£|i o—|i|ƒ}|iiƒ o|ii ƒd}n|djoPnt i |ƒ|i i ƒotddtiƒnt|d|iƒ}qWtd|iƒƒdS(NiiiKs/CT: still trying to replace fallback connectionslevelisCT: exiting thread: %s(sselfstminsdelayssuccesssattempt_timeoutsstoppedstry_connectings one_attemptsisSetssetstimessleepsmgrs is_connectedslogszLOGsINFOsminstmaxsgetName(sselfsdelayssuccesssattempt_timeout((s7/usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/client.pysruns"      cstdt|iƒƒtiƒ|}|iƒ}x,|i ƒD]}|i djodSnq@Wzˆtiƒ|jodSn|i ||ƒ}|tj o|Sntiƒ|jodSn|i||ƒ}|tj o|SnWdx|i ƒD]}|iƒqúW~XdSdS(s Try connecting to all self.addrlist addresses. Return 1 if a preferred connection was found; 0 if no connection was found; and -1 if a fallback connection was found. If no connection is found within timeout seconds, return 0. s'CT: attempting to connect on %d socketssnotifiediiN(slogslensselfsaddrliststimestimeoutsdeadlines_create_wrappersswrappersskeysswrapsstates_connect_wrapperssrsNones_fallback_wrapperssclose(sselfstimeoutswrapperssrsdeadlineswrap((s7/usr/pkg/lib/python2.2/site-packages/ZEO/zrpc/client.pystry_connecting0s4      cs­h}xœ|iD]‘\}}t|||i|iƒ}|i ƒ|i djo2x|i ƒD]}|i ƒq^Wh||