-í
Ú„?c       s:    d  Z    d k l Z  d k Z  d k Z  d k Z  d k Z  d k Z  d k Z   d k	 l
 Z
 ! d k l Z " d k l Z l Z # d k l Z $ d k l Z l Z l Z % d k l Z & d	 k l Z ( d k Z ) d
 k l Z * d k l Z l Z + d k l  Z  l! Z! l" Z" , d k# l$ Z$ - d k% l& Z& . d k' l( Z( l) Z) 0 d a* 2 d „  Z+ 7 e i, e- e- d „ Z. ; d e f d „  ƒ  YZ/ > d f  d „  ƒ  YZ0 gd f  d „  ƒ  YZ1 ~d f  d „  ƒ  YZ2 †d e i3 f d „  ƒ  YZ4 Âd „  Z5 Çd e i3 f d „  ƒ  YZ6 d S(    s  The 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(   s   ManagedServerConnections   Delays   MTDelay(   s   trigger(   s	   AuthError(   s   ResolvedSerial(   s   StorageErrors   StorageTransactionError(   s   TransactionErrors   ReadOnlyErrors   ConflictError(   s   referencesf(   s   Transaction(   s   u64s   oid_reprs   ZSSc      s    2 3 4 5 d t  i ƒ  a d S(   s?   Internal helper to reset the logging label (e.g. after fork()).s   ZSS:%sN(   s   oss   getpids   _label(    (    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys	   set_label2 s   c    s-   7 8 9 t  i | p t | |  d | ƒd S(   s,   Internal helper to log a message using zLOG.s   errorN(   s   zLOGs   LOGs   labels   _labels   levels   messages   error(   s   messages   levels   labels   error(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   log7 s   s   StorageServerErrorc      s   ; t  Z d  Z < RS(   s8   Error reported when an unpickleable exception is raised.(   s   __name__s
   __module__s   __doc__(    (    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   StorageServerError; s   s
   ZEOStoragec      sT  > t  Z d  Z ? B e i Z F g  Z H d e d „ Z ^ d „  Z	 d d „  Z
 g d „  Z r d „  Z } d „  Z ‡ e i e d „ Z Š d	 „  Z £ e d
 „ Z ¸ d „  Z Á d „  Z Ý d „  Z è d „  Z í d „  Z ð d „  Z d „  Z 	d „  Z *d „  Z 0d d „ Z ;d „  Z Cd d „ Z Kd „  Z Wd „  Z  Zd „  Z! ]d „  Z" v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* „  Z0 d+ „  Z1 ,d, „  Z2 9e d- „ Z3 Md. „  Z4 Zd/ „  Z5 RS(0   s7   Proxy to underlying storage for a single remote client.i    c    sô   H I | |  _  K t |  _ L t |  _ M t |  _ N t |  _ O t |  _ P d |  _ Q t |  _	 R | |  _
 S d |  _ T d |  _ U d |  _ V t |  _ W d |  _ X | |  _ Z h  |  _ [ x' |  i D[ ] } \ t |  i | i <qÐ Wd  S(   Ns   uninitializedi    (   s   servers   selfs   Nones   timeouts   statss
   connections   clients   storages
   storage_ids   transactions	   read_onlys   lockeds	   verifyings   store_faileds   _labels	   log_labels   authenticateds
   auth_realms   _extensionss
   extensionss   funcs	   func_name(   s   selfs   servers	   read_onlys
   auth_realms   func(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   __init__H s&    	c    s3   ^ _ |  i o ` d Sn a | |  _ b | Sd  S(   Ni   (   s   selfs
   auth_realms   authenticated(   s   selfs   authenticated(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   finish_auth^ s   c    s   d e | |  _  d  S(   N(   s   databases   self(   s   selfs   database(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   set_databased s   c    sš   g h | |  _ i |  i | ƒ |  _ j | i } k t | t d ƒ ƒ o l | } n- n | \ } } o t | ƒ d t | ƒ } p t d | |  _ d  S(   Ns    s   :s   /(   s   conns   selfs
   connections   ClientStorageStubClasss   clients   addrs
   isinstances   types   labels   hosts   ports   strs   _labels	   log_label(   s   selfs   conns   hosts   addrs   ports   label(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   notifyConnectedg s   c    s~   r u |  i t j	 o( v |  i d |  i ƒ w |  i ƒ  n y |  i d ƒ z |  i t j	 o { |  i i d 8_ n d  S(   Ns"   disconnected during transaction %ss   disconnectedi   (   s   selfs   transactions   Nones   logs   _aborts   statss   clients(   s   self(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   notifyDisconnectedr s   c    s‘   } ~ |  i o t |  i i ƒ }  |  i o) € |  i i o t |  i i i ƒ } n
 ƒ t } „ |  i	 i
 } … d | t |  ƒ | | f Sd  S(   Ns   <%s %X trans=%s s_trans=%s>(   s   selfs   transactions   reprs   ids   tids   storages   _transactions   stids   Nones	   __class__s   __name__s   name(   s   selfs   names   tids   stid(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   __repr__} s   )	c    s&   ‡ ˆ t  i |  i | | d | ƒd  S(   Ns   error(   s   zLOGs   LOGs   selfs	   log_labels   levels   msgs   error(   s   selfs   msgs   levels   error(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   log‡ s   c    sI  Š ‹ Œ |  i i |  _  |  i i |  _ Ž |  i i |  _  |  i i |  _  |  i i |  _ ‘ |  i i |  _ ’ |  i i |  _ “ y ” |  i i	 } Wn • t j
 o
 š n Xœ | ƒ  }  |  i i | ƒ ž xX | i ƒ  Dž ]G } Ÿ t o t |  | ƒ p t ‚   t |  | t |  i | ƒ ƒ qå W¡ |  i i |  _ d S(   s'   Delegate several methods to the storageN(   s   selfs   storages   versionEmptys   versionss	   getSerials   historys   loads
   loadSerials   modifiedInVersions   getExtensionMethodss   fns   AttributeErrors   ds   _extensionss   updates   keyss   names	   __debug__s   hasattrs   AssertionErrors   setattrs   getattrs   lastTransaction(   s   selfs   ds   fns   name(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   setup_delegationŠ s&    	"#c    s>  £ ¤ |  i o ¥ t ƒ  ‚ n ¦ |  i t j oc § t i ƒ  i i i	 } ¨ |  i d | t i ƒ © | t j	 o ª | t | ƒ ‚ n ¬ d Sn ­ |  i i | j o‡ ® t i ƒ  i i i	 } ¯ |  i d | t | ƒ t |  i i ƒ f ± t i ƒ ² | t j	 o ³ | |  i i | ƒ ‚ n µ d Sn ¶ d Sd  S(   Ns   no current transaction: %s()i    s(   %s(%s) invalid; current transaction = %si   (   s   selfs	   read_onlys   ReadOnlyErrors   transactions   Nones   syss	   _getframes   f_backs   f_codes   co_names   callers   logs   zLOGs   PROBLEMs   excs   tids   ids   repr(   s   selfs   tids   excs   caller(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys
   _check_tid£ s    +c    sC   ¸ » ¼ |  i i } ½ | p
 | d j o ¾ t Sn ¿ | Sd S(   s„   Return string specifying name of authentication module to use.

        The module name should be auth_%s where %s is auth_protocol.s   noneN(   s   selfs   servers   auth_protocols   protocols   None(   s   selfs   protocol(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   getAuthProtocol¸ s
   c    sI  Á Ç È |  i o |  i o É t d ‚ n Ë |  i t j	 o  Ì |  i d ƒ Í t d ‚ n Î |  i i	 i
 | ƒ } Ï | t j o( Ð |  i d | ƒ Ñ t d | ‚ n Ó | o |  i p
 | i ƒ  o Ô t ƒ  ‚ n Ö |  i p | |  _ × | |  _ Ø | |  _ Ù |  i ƒ  Ú |  i i | Û |  ƒ \ |  _ |  _ d S(   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!s   duplicate register() calls   unknown storage_id: %ss   unknown storage: %sN(   s   selfs
   auth_realms   authenticateds	   AuthErrors   storages   Nones   logs
   ValueErrors   servers   storagess   gets
   storage_ids	   read_onlys
   isReadOnlys   ReadOnlyErrors   setup_delegations   register_connections   timeouts   stats(   s   selfs
   storage_ids	   read_onlys   storage(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   registerÁ s$   "c    s‰   Ý Þ h  t  |  i ƒ d <|  i i ƒ  d <|  i i ƒ  d <|  i i ƒ  d <|  i i ƒ  d <|  i i ƒ  d <|  i ƒ  d <Sd  S(   Ns   lengths   sizes   names   supportsUndos   supportsVersionss   supportsTransactionalUndos   extensionMethods(	   s   lens   selfs   storages   getSizes   getNames   supportsUndos   supportsVersionss   supportsTransactionalUndos   getExtensionMethods(   s   self(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   get_infoÝ s   c    s2   è é h  t  |  i ƒ d <|  i i ƒ  d <Sd  S(   Ns   lengths   size(   s   lens   selfs   storages   getSize(   s   self(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   get_size_infoè s   c    s   í î |  i Sd  S(   N(   s   selfs   _extensions(   s   self(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   getExtensionMethodsí s   c    sß   ð ñ |  i i d 7_ ò |  i i | ƒ } ó | o" ô |  i i | | ƒ \ } } n ö t
 } } ÷ y" ø |  i i | d ƒ \ } } Wn7 ù t j
 o( ú | o ü t
 } } n þ ‚  n Xÿ | | | | | f Sd  S(   Ni   s    (   s   selfs   statss   loadss   storages   modifiedInVersions   oids   vs   loads   pvs   svs   Nones   ps   ss   KeyError(   s   selfs   oids   ps   pvs   vs   ss   sv(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   zeoLoadð s   
""
c    sp   |  i i | ƒ \ } } | t j o t Sn |  i d t | ƒ t	 | ƒ f ƒ | | f Sd  S(   Ns$   Return %d invalidations up to tid %s(
   s   selfs   servers   get_invalidationss   tids   invtids   invlists   Nones   logs   lens   u64(   s   selfs   tids   invlists   invtid(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   getInvalidationss
   &c    sð   	
|  i o% d |  _ |  i i d 7_ n y |  i i | ƒ } Wn/ t j
 o  |  i	 i
 | d f ƒ nj X#| o1 $| | j o %|  i	 i
 | d f ƒ n n. '| | j o (|  i	 i
 | d f ƒ n d  S(   Ni   s    (   s   selfs	   verifyings   statss   verifying_clientss   storages	   getSerials   oids   oss   KeyErrors   clients   invalidateVerifys   svs   s(   s   selfs   oids   ss   svs   os(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys	   zeoVerify	s   
!c    sI   *+|  i o ,|  i i d 8_ n -d |  _ .|  i i ƒ  d  S(   Ni   i    (   s   selfs	   verifyings   statss   verifying_clientss   clients	   endVerify(   s   self(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   endZeoVerify*s   i   c    s]   02| o 3t |  i | ƒ Sn6 7t i d |  i d | f ƒ } 8| i ƒ  9t	 Sd  S(   Ns   targets   args(
   s   waits   run_in_threads   selfs
   _pack_impls   times	   threadings   Threads   ts   starts   None(   s   selfs   times   waits   t(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   pack0s
   
!c    s|   ;<|  i d t | ƒ ƒ =|  i i | t ƒ >|  i d t | ƒ ƒ @|  i i d |  i	 t
 Af  |  i ƒ  ƒ d  S(   Ns   pack(time=%s) started...s   pack(time=%s) completei    (   s   selfs   logs   reprs   times   storages   packs   referencesfs   servers
   invalidates
   storage_ids   Nones   get_size_info(   s   selfs   time(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys
   _pack_impl;s
   id   c    s~   CDE|  i o Ft ƒ  ‚ n G| d j o Hd } n Ig  i } t | ƒ DI] } | |  i i	 ƒ  ƒ qW ~ Sd S(   s8   Return a sequence of n new oids, where n defaults to 100i    i   N(
   s   selfs	   read_onlys   ReadOnlyErrors   ns   appends   _[1]s   ranges   is   storages   new_oid(   s   selfs   ns   _[1]s   i(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   new_oidsCs    c    sƒ   KL|  i o Mt ƒ  ‚ n N|  i i | ƒ } O| o9 P|  i i |  |  i	 t
 Qt d „  | ƒ ƒ R| Sn Sf  Sd  S(   Nc    s   Q|  d f S(   Ns    (   s   oid(   s   oid(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   <lambda>Qs    (   s   selfs	   read_onlys   ReadOnlyErrors   storages   undos   transaction_ids   oidss   servers
   invalidates
   storage_ids   Nones   map(   s   selfs   transaction_ids   oids(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   undoKs   
c    s#   WXt  |  i i | | | ƒ Sd  S(   N(   s   run_in_threads   selfs   storages   undoInfos   firsts   lasts   spec(   s   selfs   firsts   lasts   spec(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   undoInfoWs   c    s    Z[t  |  i i | | ƒ Sd  S(   N(   s   run_in_threads   selfs   storages   undoLogs   firsts   last(   s   selfs   firsts   last(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   undoLogZs   c    s(  ]^|  i o _t ƒ  ‚ n `|  i t j	 oN a|  i i | j o% b|  i d t | ƒ ƒ cd  Sn et d ƒ ‚ n ht	 ƒ  |  _ } i| | _ j| | _ k| | _ l| | _ ng  |  _ og  |  _ pt ƒ  |  _ q| |  _ r| |  _ sd |  _ t|  i i d 7_ d  S(   Ns   duplicate tpc_begin(%s)s9   Multiple simultaneous tpc_begin requests from one client.i    i   (   s   selfs	   read_onlys   ReadOnlyErrors   transactions   Nones   ids   logs   reprs   StorageTransactionErrors   Transactions   ts   users   descriptions   exts
   _extensions   serialss   invalidateds	   CommitLogs   txnlogs   tids   statuss   store_faileds   statss   active_txns(   s   selfs   ids   users   descriptions   exts   tids   statuss   t(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys	   tpc_begin]s&   c    sæ   vw|  i | ƒ o xd  Sn yt o |  i p t ‚ z|  i i d 8_ {|  i i d 7_ ||  i	 i
 |  i ƒ }|  i	 i ƒ  } ~|  i o2 |  i i |  |  i | €|  i |  i ƒ  ƒ n |  i ƒ  ƒ| Sd  S(   Ni   (   s   selfs
   _check_tids   ids	   __debug__s   lockeds   AssertionErrors   statss   active_txnss   commitss   storages
   tpc_finishs   transactions   lastTransactions   tids   invalidateds   servers
   invalidates
   storage_ids   get_size_infos   _clear_transaction(   s   selfs   ids   tid(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys
   tpc_finishvs   c    s„   …†|  i | ƒ o ‡d  Sn ˆ|  i i d 8_ ‰|  i i d 7_ Š|  i o ‹|  i i |  i	 ƒ n Œ|  i
 ƒ  d  S(   Ni   (   s   selfs
   _check_tids   ids   statss   active_txnss   abortss   lockeds   storages	   tpc_aborts   transactions   _clear_transaction(   s   selfs   id(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys	   tpc_abort…s   c    s   Žt  |  _ ‘|  i i ƒ  ’|  i oO “d |  _ ”|  i i |  ƒ •t  |  i _	 –|  i
 d ƒ ™|  i ƒ  n d  S(   Ni    s!   Transaction released storage lock(   s   Nones   selfs   transactions   txnlogs   closes   lockeds   timeouts   ends   statss	   lock_times   logs   _handle_waiting(   s   self(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   _clear_transactionŽs   c    së   ›|  i o… Ÿ|  i i }  xl t t | ƒ ƒ D ]U } ¡| | \ } } ¢| |  j o, £| | =¤|  i
 d t | ƒ ƒ ¦Pn q6 Wn ¨|  i oD ©|  i i d 8_ ª|  i i d 7_ «|  i |  i i ƒ n d  S(   NsA   Closed connection removed from waiting list. Clients waiting: %d.i   (   s   selfs   lockeds   storages   _waitings   waitings   ranges   lens   is   ds   zs   logs   transactions   statss   active_txnss   abortss	   tpc_aborts   id(   s   selfs   ds   is   zs   waiting(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   _abort›s    	
c    sN   ²³|  i | d t ƒ´|  i i d 7_ µ|  i i | | | | ƒ d  S(   Ns   exci   (   s   selfs
   _check_tids   ids   StorageTransactionErrors   statss   storess   txnlogs   stores   oids   serials   datas   version(   s   selfs   oids   serials   datas   versions   id(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   storea²s   c    sQ   º»ˆ  i | d t ƒ¼ˆ  i o ½ˆ  i ƒ  Sn ¿ˆ  i ‡  d †  ƒ Sd  S(   Ns   excc      s   ¿ˆ  i ƒ  S(   N(   s   selfs   _vote(    (   s   self(    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   <lambda>¿s    (   s   selfs
   _check_tids   ids   StorageTransactionErrors   lockeds   _votes   _wait(   s   selfs   id(    (   s   selfs9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   voteºs   c    sW   ÁÂˆ  i | d t ƒÃˆ  i o Äˆ  i ˆ ƒ Sn Æˆ  i ‡ ‡  d †  ƒ Sd  S(   Ns   excc      s   Æˆ i ˆ  ƒ S(   N(   s   selfs   _abortVersions   src(    (   s   srcs   self(    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   <lambda>Æs    (   s   selfs
   _check_tids   ids   StorageTransactionErrors   lockeds   _abortVersions   srcs   _wait(   s   selfs   srcs   id(    (   s   selfs   srcs9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   abortVersionÁs   c    s]   ÈÉˆ  i | d t ƒÊˆ  i o Ëˆ  i ˆ ˆ ƒ Sn Íˆ  i ‡ ‡ ‡  d †  ƒ Sd  S(   Ns   excc      s   Íˆ i ˆ ˆ  ƒ S(   N(   s   selfs   _commitVersions   srcs   dest(    (   s   dests   srcs   self(    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   <lambda>Ís    (	   s   selfs
   _check_tids   ids   StorageTransactionErrors   lockeds   _commitVersions   srcs   dests   _wait(   s   selfs   srcs   dests   id(    (   s   selfs   srcs   dests9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   commitVersionÈs   c    sW   ÏÐˆ  i | d t ƒÑˆ  i o Òˆ  i ˆ ƒ Sn Ôˆ  i ‡  ‡ d †  ƒ Sd  S(   Ns   excc      s   Ôˆ  i ˆ ƒ S(   N(   s   selfs   _transactionalUndos   trans_id(    (   s   selfs   trans_id(    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   <lambda>Ôs    (   s   selfs
   _check_tids   ids   StorageTransactionErrors   lockeds   _transactionalUndos   trans_ids   _wait(   s   selfs   trans_ids   id(    (   s   selfs   trans_ids9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   transactionalUndoÏs   c    sT   Ö×d |  _ Ø|  i i |  ƒ Ùt i ƒ  |  i _ Ú|  i i | | | ƒ d  S(   Ni   (   s   selfs   lockeds   timeouts   begins   times   statss	   lock_times   storages	   tpc_begins   txns   tids   status(   s   selfs   txns   tids   status(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys
   _tpc_beginÖs   c 
   sT  ÜÝt  } Þy+ ß|  i i | | | | à|  i	 ƒ } Wnwát t f j
 o â‚  n„ãt j
 oG} äd |  _ åt | t ƒ oH æ|  i i d 7_ ç|  i d t | ƒ t | ƒ f èt i ƒ n ét | t ƒ o@ ët i ƒ  }	 ì|  i d |	 d  ít i d |	 ƒî~	 n ñt i ƒ  } òd | _ óy ô| i  | d ƒ WnB õöd t! | ƒ } ÷|  i | t i ƒ øt# | ƒ } n Xú| } n/ Xü| d j o ý|  i$ i% | | f ƒ n þ| t& j o9 ÿ|  i i' d 7_'  |  i d t | ƒ t i ƒ n |  i( i% | | f ƒ | t  j Sd  S(	   Ni   s   conflict error oid=%s msg=%ss   store error: %s, %si   s   errors%   Couldn't pickle storage exception: %ss           s   conflict resolved oid=%s()   s   Nones   errs   selfs   storages   stores   oids   serials   datas   versions   transactions	   newserials
   SystemExits   KeyboardInterrupts	   Exceptions   store_faileds
   isinstances   ConflictErrors   statss	   conflictss   logs   oid_reprs   strs   zLOGs   BLATHERs   TransactionErrors   syss   exc_infos   ERRORs   cPickles   Picklers   picklers   fasts   dumps   reprs   msgs   StorageServerErrors   invalidateds   appends   ResolvedSerials   conflicts_resolveds   serials(
   s   selfs   oids   serials   datas   versions   picklers   msgs   errs	   newserials   exc_info(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   _storeÜsB   	
"
$c    sK   |  i i |  i ƒ 	|  i o 
d  Sn |  i i |  i ƒ Sd  S(   N(   s   selfs   clients	   serialnoss   serialss   store_faileds   storages   tpc_votes   transaction(   s   self(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   _votes   c    so   |  i i | |  i ƒ } g  i } | D] } | | | f ƒ q/ ~ } |  i
 i | ƒ | Sd  S(   N(   s   selfs   storages   abortVersions   srcs   transactions   oidss   appends   _[1]s   oids   invs   invalidateds   extend(   s   selfs   srcs   _[1]s   oids   invs   oids(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   _abortVersions
    "c    sÆ   |  i i | | |  i ƒ } g  i } | D] } | | | f ƒ q2 ~ } |  i i | ƒ | oJ g  i } | D] } | | | f ƒ q‚ ~ } |  i i | ƒ n | Sd  S(   N(   s   selfs   storages   commitVersions   srcs   dests   transactions   oidss   appends   _[1]s   oids   invs   invalidateds   extend(   s   selfs   srcs   dests   _[1]s   oids   invs   oids(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   _commitVersions    "
 "c    so   |  i i | |  i ƒ } g  i } | D] } | | t	 f ƒ q/ ~ } |  i i | ƒ  | Sd  S(   N(   s   selfs   storages   transactionalUndos   trans_ids   transactions   oidss   appends   _[1]s   oids   Nones   invs   invalidateds   extend(   s   selfs   trans_ids   _[1]s   oids   invs   oids(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   _transactionalUndos
    "c    s™   ,.| |  _ /|  i i oS 0t ƒ  } 1|  i i i | |  f ƒ 2|  i	 d t
 |  i i ƒ ƒ 4| Sn$ 6|  i	 d t i ƒ 7|  i ƒ  Sd  S(   Ns=   Transaction blocked waiting for storage. Clients waiting: %d.s"   Transaction acquired storage lock.(   s   thunks   selfs   _thunks   storages   _transactions   Delays   ds   _waitings   appends   logs   lens   zLOGs   BLATHERs   _restart(   s   selfs   thunks   d(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   _wait,s    c    s  9;|  i i d j o <d } n
 >d } ?|  i | |  i i |  i i ƒ  f @d t i ƒA|  i |  i	 |  i
 |  i ƒ B|  i i ƒ  \ } } Cx9 t | ƒ DC]( } E|  i | i ƒ  Œ  o FPn q« WG|  i ƒ  } H| t j	 o I| i | ƒ n K| Sd  S(   Ni   s4   Preparing to commit transaction: %d object, %d bytess5   Preparing to commit transaction: %d objects, %d bytess   level(   s   selfs   txnlogs   storess   templates   logs   sizes   zLOGs   BLATHERs
   _tpc_begins   transactions   tids   statuss
   get_loaders   loadss   loaders   ranges   is   _stores   loads   _thunks   resps   delays   Nones   reply(   s   selfs   delays   is   templates   loadss   resps   loader(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   _restart9s   	% 	c    s®   MOx¡ O|  i i o P|  i i i d ƒ \ } } Q|  i | | ƒ oX R|  i i o- St |  i i ƒ } T|  i	 d | ƒ n W|  i	 d ƒ Xd  Sn q	 Wd  S(   Ni    s3   Blocked transaction restarted.  Clients waiting: %ds   Blocked transaction restarted.(
   s   selfs   storages   _waitings   pops   delays   zeo_storages   _restart_others   lens   ns   log(   s   selfs   delays   ns   zeo_storage(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   _handle_waitingMs    c    sq   Z]y ^| i | ƒ WnI _`|  i d ad t i d t i ƒ  ƒb| i	 i
 ƒ  cd Sn Xed Sd  S(   Ns-   Unexpected error handling waiting transactions   levels   errori    i   (   s   zeo_storages   _restarts   delays   selfs   logs   zLOGs   WARNINGs   syss   exc_infos
   connections   close(   s   selfs   zeo_storages   delay(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   _restart_otherZs   (6   s   __name__s
   __module__s   __doc__s
   ClientStubs   ClientStorages   ClientStorageStubClasss
   extensionss   Nones   __init__s   finish_auths   set_databases   notifyConnecteds   notifyDisconnecteds   __repr__s   zLOGs   INFOs   logs   setup_delegations
   _check_tids   getAuthProtocols   registers   get_infos   get_size_infos   getExtensionMethodss   zeoLoads   getInvalidationss	   zeoVerifys   endZeoVerifys   packs
   _pack_impls   new_oidss   undos   undoInfos   undoLogs	   tpc_begins
   tpc_finishs	   tpc_aborts   _clear_transactions   _aborts   storeas   votes   abortVersions   commitVersions   transactionalUndos
   _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   StorageServerc      sª   gt  Z d  Z ose Z te Z ue Z wd d e	 e	 e	 e	 e	 d „ Z
 àd „  Z d „  Z d „  Z (f  e	 d „ Z Hd „  Z bd	 „  Z ud
 „  Z RS(   s3  The 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.
    i    id   c
    sT  w¶¸| |  _  ¹| |  _ ºt ƒ  »d i g  i } | i ƒ  D¾]= \ }
 } | d |
 | i
 ƒ  o d p d | i ƒ  f ƒ qE ~ ƒ } ¿t d |  i i | o d p d | f ƒ Áx# | i ƒ  DÁ] } Âg  | _ qÏ WÃ| |  _ Ä| |  _ Å| |  _ Æ|	 |  _ Çt |  _ È| o É|  i | ƒ n Ëg  |  _ Ì| |  _ Íh  |  _ Î|  i | Ïd |  i ƒ|  _  Ðh  |  _! Ñh  |  _" Òxy |  i i# ƒ  DÒ]e }
 Ót$ ƒ  |  i! |
 <Ô| t j o Öt& ƒ  } n Øt( | ƒ } Ù| i) ƒ  Ú| |  i" |
 <q²WÛ| o Üt+ | |  i! ƒ |  _, n Þt |  _, d S(   sü
  StorageServer constructor.

        This is typically invoked from the start.py script.

        Arguments (the first two are required and positional):

        addr -- the address at which the server should listen.  This
            can be a tuple (host, port) to signify a TCP/IP connection
            or a pathname string to signify a Unix domain socket
            connection.  A hostname may be a DNS name or a dotted IP
            address.

        storages -- a dictionary giving the storage(s) to handle.  The
            keys are the storage names, the values are the storage
            instances, typically FileStorage or Berkeley storage
            instances.  By convention, storage names are typically
            strings representing small integers starting at '1'.

        read_only -- an optional flag saying whether the server should
            operate in read-only mode.  Defaults to false.  Note that
            even if the server is operating in writable mode,
            individual storages may still be read-only.  But if the
            server is in read-only mode, no write operations are
            allowed, even if the storages are writable.  Note that
            pack() is considered a read-only operation.

        invalidation_queue_size -- The storage server keeps a queue
            of the objects modified by the last N transactions, where
            N == invalidation_queue_size.  This queue is used to
            speed client cache verification when a client disconnects
            for a short period of time.

        transaction_timeout -- The maximum amount of time to wait for
            a transaction to commit after acquiring the storage lock.
            If the transaction takes too long, the client connection
            will be closed and the transaction aborted.

        monitor_address -- The address at which the monitor server
            should listen.  If specified, a monitor server is started.
            The monitor server provides server statistics in a simple
            text format.

        auth_protocol -- The name of the authentication protocol to use.
            Examples are "digest" and "srp".

        auth_database -- The name of the password database filename.
            It should be in a format compatible with the authentication
            protocol used; for instance, "sha" and "srp" require different
            formats.

            Note that to implement an authentication protocol, a server
            and client authentication mechanism must be implemented in a
            auth_* module, which should be stored inside the "auth"
            subdirectory. This module may also define a DatabaseClass
            variable that should indicate what database should be used
            by the authenticator.
        s   , s   %s:%s:%ss   ROs   RWs   %s created %s with storages: %ss   factoryN(-   s   addrs   selfs   storagess	   set_labels   joins   appends   _[1]s   itemss   names   storages
   isReadOnlys   getNames   msgs   logs	   __class__s   __name__s	   read_onlys   valuess   ss   _waitings   auth_protocols   auth_databases
   auth_realms   Nones   databases   _setup_auths   invqs   invalidation_queue_sizes
   invq_bounds   connectionss   DispatcherClasss   new_connections
   dispatchers   statss   timeoutss   keyss   StorageStatss   transaction_timeouts   StubTimeoutThreads   timeouts   TimeoutThreads   starts   monitor_addresss   StatsServers   monitor(   s   selfs   addrs   storagess	   read_onlys   invalidation_queue_sizes   transaction_timeouts   monitor_addresss   auth_protocols   auth_databases
   auth_realms   names   storages   _[1]s   ss   timeouts   msg(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   __init__wsF   ?
L. 	
 	
c    s5  àâd k  l } ä|  i i } æ| | ƒ } ç| o" èt d | | f ƒ éd  Sn ë| \ } } } í| p t | t ƒ o. ît d | | f ƒ ðt |  _ ñd  Sn ò| |  _ ôt d | | f ƒ û| |  i ƒ |  _ ü|  i i |  i j o& ýt d |  i i |  i f ƒ ‚ n d  S(   N(   s
   get_modules    %s: no such an auth protocol: %ss7   %s: %s isn't a valid protocol, must have a StorageClasss   %s: using auth protocol: %ss:   password database realm %r does not match storage realm %r(   s   ZEO.auths
   get_modules   selfs	   __class__s   __name__s   names   protocols   modules   logs   storage_classs   clients   db_classs
   issubclasss
   ZEOStorages   Nones   auth_protocols   ZEOStorageClasss   auth_databases   databases   realms
   auth_realms
   ValueError(   s   selfs   protocols   db_classs   names   modules
   get_modules   clients   storage_class(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   _setup_authàs    c    s®   	|  i o |  i o; 
|  i |  |  i d |  i ƒ} | i |  i ƒ n |  i |  |  i ƒ } |  i | | | |  ƒ } t d | | f ƒ | Sd S(   sË   Internal: factory to create a new connection.

        This is called by the Dispatcher class in ZEO.zrpc.server
        whenever accept() returns a socket for a new incoming
        connection.
        s
   auth_realms   new connection %s: %sN(   s   selfs   auth_protocols   databases   ZEOStorageClasss	   read_onlys
   auth_realms   zstorages   set_databases   ManagedServerConnectionClasss   socks   addrs   cs   log(   s   selfs   socks   addrs   zstorages   c(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   new_connections   c    s    |  i i | ƒ } !| t j o "g  } |  i | <n #| i | ƒ $|  i | } %| i	 d 7_	 &|  i
 | | f Sd S(   s§  Internal: register a connection with a particular storage.

        This is called by ZEOStorage.register().

        The dictionary self.connections maps each storage name to a
        list of current connections for that storage; this information
        is needed to handle invalidation.  This function updates this
        dictionary.

        Returns the timeout and stats objects for the appropriate storage.
        i   N(   s   selfs   connectionss   gets
   storage_ids   ls   Nones   appends   conns   statss   clientss   timeouts(   s   selfs
   storage_ids   conns   statss   l(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   register_connections   c    sÜ   (=>| oJ ?t |  i ƒ |  i j o @|  i d =n A|  i i | | f ƒ n Bxx |  i i | f  ƒ DB]^ } C| o
 | | j	 o D| i i | | ƒ n( E| t j	 o F| i i | ƒ n qs Wd S(   sE  Internal: 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.

        i    N(   s   invalidateds   lens   selfs   invqs
   invq_bounds   appends   tids   connectionss   gets
   storage_ids   ps   conns   clients   invalidateTransactions   infos   None(   s   selfs   conns
   storage_ids   tids   invalidateds   infos   p(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys
   invalidate(s   
 	c    s  HPR|  i o St d ƒ Tt g  f Sn V|  i d d } W| | j o4 Xt d t | ƒ t | ƒ f ƒ Yt g  f Sn [h  } \x> |  i D\]0 \ } } ]x | D]] } ^d | | <q¹ Wq  W_|  i d d } `| | i ƒ  f Sd S(   s5  Return a tid and list of all objects invalidation since tid.

        The tid is the most recent transaction id committed by the server.

        Returns None if it is unable to provide a complete list
        of invalidations for tid.  In this case, client should
        do full cache verification.
        s
   invq emptyi    s   tid to old for invq %s < %si   iÿÿÿÿN(   s   selfs   invqs   logs   Nones   earliest_tids   tids   u64s   oidss   Ls   keys
   latest_tids   keys(   s   selfs   tids   keys   earliest_tids
   latest_tids   Ls   oids(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   get_invalidationsHs    #	 
 	c    s²   bfg|  i i ƒ  h|  i t j	 o i|  i i ƒ  n jx' |  i i ƒ  Dj] } k| i ƒ  qP Wox> t i	 i ƒ  Do]* } py q| i ƒ  Wn rsn Xq} Wd S(   s}   Close the dispatcher so that there are no new connections.

        This is only called from the test suite, AFAICT.
        N(   s   selfs
   dispatchers   closes   monitors   Nones   storagess   valuess   storages   asyncores
   socket_maps   s(   s   selfs   ss   storage(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   close_serverbs    	 	c    sT   uyzxD |  i i ƒ  Dz]0 } {| i | j o || i | i ƒ n q Wd S(   s|   Internal: remove the given connection from self.connections.

        This is the inverse of register_connection().
        N(   s   selfs   connectionss   valuess   cls   conns   objs   remove(   s   selfs   conns   cl(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys
   close_connus
    	(   s   __name__s
   __module__s   __doc__s
   Dispatchers   DispatcherClasss
   ZEOStorages   ZEOStorageClasss   ManagedServerConnections   ManagedServerConnectionClasss   Nones   __init__s   _setup_auths   new_connections   register_connections
   invalidates   get_invalidationss   close_servers
   close_conn(    (    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   StorageServergs   			!i" s   StubTimeoutThreadc      s#   ~t  Z €d „  Z ƒd „  Z RS(   Nc    s
   €d  S(   N(    (   s   selfs   client(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   begin€s   c    s
   ƒ„d  S(   N(    (   s   selfs   client(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   endƒs   (   s   __name__s
   __module__s   begins   end(    (    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   StubTimeoutThread~s   	s   TimeoutThreadc      sD   †t  Z d  Z ‡Œd „  Z •d „  Z ¡d „  Z ­d „  Z RS(   s5   Monitors transaction progress and generates timeouts.c    so   Œt  i i |  ƒ Ž|  i d ƒ | |  _ t |  _ ‘t |  _	 ’t  i
 ƒ  |  _ “t ƒ  |  _ d  S(   Ni   (   s	   threadings   Threads   __init__s   selfs	   setDaemons   timeouts   _timeouts   Nones   _clients	   _deadlines	   Conditions   _conds   triggers   _trigger(   s   selfs   timeout(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   __init__Œs   c    s‹   •˜|  i i ƒ  ™zZ št o |  i t j p t ‚ ›| |  _ œt i ƒ  |  i	 |  _
 |  i i ƒ  Wd  žŸ|  i i ƒ  Xd  S(   N(   s   selfs   _conds   acquires	   __debug__s   _clients   Nones   AssertionErrors   clients   times   _timeouts	   _deadlines   notifys   release(   s   selfs   client(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   begin•s   !c    s   ¡¤|  i i ƒ  ¥z^ ¦t o |  i t j	 p t ‚ §t o |  i | j p t ‚ ¨t |  _ ©t |  _ Wd  ª«|  i i	 ƒ  Xd  S(   N(
   s   selfs   _conds   acquires	   __debug__s   _clients   Nones   AssertionErrors   clients	   _deadlines   release(   s   selfs   client(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   end¡s   !!c    s  ­¯x¯d oö °|  i i ƒ  ±zt ²x( ²|  i t j o ³|  i i ƒ  q/ W´|  i t i ƒ  } µ| d j o ·t |  _ n ¸|  i ‰  Wd  ¹º|  i i
 ƒ  X»| d j o4 ¼ˆ  i d |  i ƒ ¾|  i i ‡  d †  ƒ n Àt i | ƒ q	 Wd  S(   Ni   i    s$   Transaction timeout after %s secondsc      s   ¾ˆ  i i ƒ  S(   N(   s   clients
   connections   close(    (   s   client(    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   <lambda>¾s    (   s   selfs   _conds   acquires	   _deadlines   Nones   waits   times   howlongs   _clients   clients   releases   logs   _timeouts   _triggers   pull_triggers   sleep(   s   selfs   clients   howlong(    (   s   clients9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   run­s"    
 (   s   __name__s
   __module__s   __doc__s   __init__s   begins   ends   run(    (    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   TimeoutThread†s
   	c    s0   ÂÃt  |  | ƒ } Ä| i ƒ  Å| i Sd  S(   N(   s   SlowMethodThreads   methods   argss   ts   starts   delay(   s   methods   argss   t(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   run_in_threadÂs   s   SlowMethodThreadc      s,   Çt  Z d  Z ÌÔd „  Z Úd „  Z RS(   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.
    c    sA   ÔÕt  i i |  ƒ Ö| |  _ ×| |  _ Øt ƒ  |  _	 d  S(   N(
   s	   threadings   Threads   __init__s   selfs   methods   _methods   argss   _argss   MTDelays   delay(   s   selfs   methods   args(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   __init__Ôs   c    s‰   ÚÛy Ü|  i |  i Œ  } WnP Ýt t f j
 o Þ‚  nC ßt j
 o  à|  i i t	 i
 ƒ  ƒ n Xâ|  i i | ƒ d  S(   N(   s   selfs   _methods   _argss   results
   SystemExits   KeyboardInterrupts	   Exceptions   delays   errors   syss   exc_infos   reply(   s   selfs   result(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   runÚs   
(   s   __name__s
   __module__s   __doc__s   __init__s   run(    (    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   SlowMethodThreadÇs   (7   s   __doc__s
   __future__s   nested_scopess   asyncores   cPickles   oss   syss	   threadings   times   ZEOs
   ClientStubs   ZEO.CommitLogs	   CommitLogs   ZEO.monitors   StorageStatss   StatsServers   ZEO.zrpc.servers
   Dispatchers   ZEO.zrpc.connections   ManagedServerConnections   Delays   MTDelays   ZEO.zrpc.triggers   triggers   ZEO.Exceptionss	   AuthErrors   zLOGs   ZODB.ConflictResolutions   ResolvedSerials   ZODB.POSExceptions   StorageErrors   StorageTransactionErrors   TransactionErrors   ReadOnlyErrors   ConflictErrors   ZODB.referencesfs   referencesfs   ZODB.Transactions   Transactions
   ZODB.utilss   u64s   oid_reprs   _labels	   set_labels   INFOs   Nones   logs   StorageServerErrors
   ZEOStorages   StorageServers   StubTimeoutThreads   Threads   TimeoutThreads   run_in_threads   SlowMethodThread(%   s   SlowMethodThreads   cPickles   Transactions   asyncores   nested_scopess
   ClientStubs   ResolvedSerials   referencesfs   u64s	   set_labels
   ZEOStorages   Delays   ConflictErrors   MTDelays   syss   run_in_threads   ManagedServerConnections   StorageStatss   oid_reprs   StorageServerErrors	   AuthErrors   StorageTransactionErrors   StatsServers   logs   StubTimeoutThreads
   Dispatchers	   threadings   triggers   ReadOnlyErrors   times   zLOGs   TimeoutThreads	   CommitLogs   StorageErrors   oss   TransactionErrors   StorageServer(    (    s9   /usr/pkg/lib/python2.2/site-packages/ZEO/StorageServer.pys   ? sD   	ÿ ÿ +ÿ <