ó n®¸Qc@sDdZddlZddlZddlZddlZddlmZdZyeWn'ek r}de fd„ƒYZnXddl Z ddl m Z m Z mZmZmZmZmZer ddlmZejd d krúdd lmZq dd lmZnd e jfd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZ de fd„ƒYZ!de fd „ƒYZ"d!e fd"„ƒYZ#d#e fd$„ƒYZ$d%„Z%e&d&kr@e j'd'd(ƒndS()s-TestCases for multi-threaded access to a DB. iÿÿÿÿN(trandomt-t WindowsErrorcBseZRS((t__name__t __module__(((s,/sys/lib/python2.7/bsddb/test/test_thread.pyRs(tdbtdbutilst test_supporttverboset have_threadstget_new_environment_pathtget_new_database_path(tThreadii(t currentThread(tcurrent_threadtBaseThreadedTestCasecBsGeZejZdZdZdZd„Zd„Z d„Z d„Z RS(icCsËtrtjt_ntƒ|_tjƒ|_ |j ƒ|j j |j|j tj Bƒ|jjd|_tj|j ƒ|_|jr¡|jj|jƒn|jj |j|j|jtj BƒdS(Ns.db(RtsyststdoutRt_deadlock_VerboseFileR thomeDirRtDBEnvtenvt setEnvOptstopentenvflagst DB_CREATEt __class__RtfilenametDBtdt dbsetflagst set_flagstdbtypet dbopenflags(tself((s,/sys/lib/python2.7/bsddb/test/test_thread.pytsetUp&s    cCs.|jjƒ|jjƒtj|jƒdS(N(RtcloseRRtrmtreeR(R"((s,/sys/lib/python2.7/bsddb/test/test_thread.pyttearDown5s  cCsdS(N((R"((s,/sys/lib/python2.7/bsddb/test/test_thread.pyR:scCstj|gdƒS(Ni(tDASHtjoin(R"tkey((s,/sys/lib/python2.7/bsddb/test/test_thread.pytmakeData=s( RRRt DB_UNKNOWNR R!RRR#R&RR*(((s,/sys/lib/python2.7/bsddb/test/test_thread.pyR s    tConcurrentDataStoreBasecBsUeZejZejejBejBZdZdZ dZ d„Z d„Z d„Z RS(iièc CsTtr%dGddGHd|jjGHnt|jƒ}ddl}|j|ƒ|j|j}|j|j}|j |j|j|ƒ|j |j|j|ƒ|j ||dkƒg}x{t |jƒD]j}t d|j d|j|fd d |ƒ}tjdd kr"|jtƒn t|_|j|ƒqÎWg}xŽt |jƒD]}}|||||d !} | jƒ|||||d !} t d|jd|j| | fd d |ƒ} |j| ƒqRWxD|D]<} tjdd kr| jtƒn t| _| jƒqÚWx|D]} | jƒq!Wx|D]} | jƒq<WdS(Ns s-=is(Running %s.test01_1WriterMultiReaders...iÿÿÿÿittargettargstnames reader %diis writer %d(RRRtrangetrecordsRtshuffletwriterstreaderst assertEqualt assertTruetxrangeR t readerThreadRRt version_infot setDaemontTruetdaemontappendtsortt writerThreadtstartR(( R"tkeysRtrecords_per_writertreaders_per_writerR4txtrtR3tatbtwttt((s,/sys/lib/python2.7/bsddb/test/test_thread.pyttest01_1WriterMultiReadersKsN           c Cs$tjddkr%tƒjƒ}n tƒj}trLd|ttfGHnt|ƒt|ƒ}|}x‘|D]‰}d|}t j |j ||j |ƒddƒtrÏ|ddkrÏd|t|fGHn|d 8}|so|j ƒjƒ|}qoqoWtrd |GHntr d |GHndS( Niis%s: creating records %d - %ds%04dt max_retriesi ids%s: records %d - %d finishedis%s: finished creating recordss%s: thread finished(RR9R tgetNameR/RR@tstoptlenRt DeadlockWraptputR*tpop( R"RRAR4R/tcounttcount2RDR)((s,/sys/lib/python2.7/bsddb/test/test_thread.pyR?}s*      c Csætjddkr%tƒjƒ}n tƒj}xœtdƒD]Ž}|jƒ}d}|jƒ}xE|r©|d7}|\}} |j|j |ƒ| ƒ|j ƒ}qeWt rÂd||fGHn|j ƒq>Wt râd|GHndS(Niiiis%s: found %d recordss%s: thread finished( RR9R RLR/R7tcursortfirstR5R*tnextRR$( R"Rt readerNumR/titcRRtrecR)tdata((s,/sys/lib/python2.7/bsddb/test/test_thread.pyR8šs"      (RRRt DB_THREADR!t DB_INIT_CDBt DB_INIT_MPOOLRR4R3R1RJR?R8(((s,/sys/lib/python2.7/bsddb/test/test_thread.pyR,Ds  2 tBTreeConcurrentDataStorecBs#eZejZdZdZdZRS(ii iè(RRRtDB_BTREER R3R4R1(((s,/sys/lib/python2.7/bsddb/test/test_thread.pyR_±s tHashConcurrentDataStorecBs#eZejZdZdZdZRS(ii iè(RRRtDB_HASHR R3R4R1(((s,/sys/lib/python2.7/bsddb/test/test_thread.pyRa¸s tSimpleThreadedBasecBs^eZejZejejBejBZdZdZ dZ d„Z d„Z d„Z d„ZRS(i iiècCs|jjtjƒdS(N(Rt set_lk_detectRtDB_LOCK_DEFAULT(R"((s,/sys/lib/python2.7/bsddb/test/test_thread.pyRÈsc CsTtr%dGddGHd|jjGHnt|jƒ}ddl}|j|ƒ|j|j}|j|j}|j |j|j|ƒ|j |j|j|ƒ|j ||dkƒg}x{t |jƒD]j}t d|j d|j|fd d |ƒ}tjdd kr"|jtƒn t|_|j|ƒqÎWg}xŽt |jƒD]}}|||||d !} | jƒ|||||d !} t d|jd|j| | fd d |ƒ} |j| ƒqRWxD|D]<} tjdd kr| jtƒn t| _| jƒqÚWx|D]} | jƒq!Wx|D]} | jƒq<WdS(Ns s-=is Running %s.test02_SimpleLocks...iÿÿÿÿiR-R.R/s reader %diis writer %d(RRRR0R1RR2R3R4R5R6R7R R8RRR9R:R;R<R=R>R?R@R(( R"RARRBRCR4RDRER3RFRGRHRI((s,/sys/lib/python2.7/bsddb/test/test_thread.pyttest02_SimpleLocksËsL           c Cstjddkr%tƒjƒ}n tƒj}trLd|ttfGHnt|ƒt|ƒ}|}x‘|D]‰}d|}t j |j ||j |ƒddƒtrÏ|ddkrÏd|t|fGHn|d 8}|so|j ƒjƒ|}qoqoWtrd |GHndS( Niis%s: creating records %d - %ds%04dRKi ids%s: records %d - %d finishedis%s: thread finished(RR9R RLR/RR@RMRNRRORPR*RQ( R"RRAR4R/RRRSRDR)((s,/sys/lib/python2.7/bsddb/test/test_thread.pyR?ýs&     c Csçtjddkr%tƒjƒ}n tƒj}|jƒ}d}tj|jddƒ}xQ|r®|d7}|\}}|j |j |ƒ|ƒtj|j ddƒ}q^Wt rÇd||fGHn|j ƒt rãd|GHndS(NiiRKi is%s: found %d recordss%s: thread finished(RR9R RLR/RTRRORUR5R*RVRR$( R"RRWR/RYRRRZR)R[((s,/sys/lib/python2.7/bsddb/test/test_thread.pyR8s       (RRRR\R!R^t DB_INIT_LOCKRR4R3R1RRfR?R8(((s,/sys/lib/python2.7/bsddb/test/test_thread.pyRcÁs   2 tBTreeSimpleThreadedcBseZejZRS((RRRR`R (((s,/sys/lib/python2.7/bsddb/test/test_thread.pyRh-stHashSimpleThreadedcBseZejZRS((RRRRbR (((s,/sys/lib/python2.7/bsddb/test/test_thread.pyRi1stThreadedTransactionsBasecBs‚eZejejBZejejBejBejBej BZ dZ dZ dZ dZd„Zd„Zd„Zd„Zd„ZRS(iiÐcCsdS(N((R"((s,/sys/lib/python2.7/bsddb/test/test_thread.pyREsc Cs¥tr%dGddGHd|jjGHnt|jƒ}ddl}|j|ƒ|j|j}|j|j}|j |j|j|ƒ|j |j|j|ƒ|j ||dkƒg}x{t |jƒD]j}t d|j d|j|fd d |ƒ}tjdd kr"|jtƒn t|_|j|ƒqÎWg}x„t |jƒD]s}|||||d !} |||||d !} t d|jd|j| | fd d |ƒ} |j| ƒqRWt d|jƒ} tjdd krþ| jtƒn t| _| jƒxD|D]<} tjdd krA| jtƒn t| _| jƒqWx|D]} | jƒq_Wx|D]} | jƒqzWt|_| jƒdS(Ns s-=is)Running %s.test03_ThreadedTransactions...iÿÿÿÿiR-R.R/s reader %diis writer %d(RRRR0R1RR2R3R4R5R6R7R R8RRR9R:R;R<R=R?tdeadlockThreadR@R(tFalset doLockDetect(R"RARRBRCR4RDRER3RFRGRHtdtRI((s,/sys/lib/python2.7/bsddb/test/test_thread.pyttest03_ThreadedTransactionsIsZ             c CsŒtjddkr%tƒjƒ}n tƒj}t|ƒt|ƒ}x,t|ƒruy¬|jjd|j ƒ}|| }x_|D]W}d|} |j | |j | ƒ|ƒt r‚|ddkr‚d|t |fGHq‚q‚W|jƒ||}|jƒj ƒWqJtjtjfk rq} t rdtjd krKd|| d fGHqdd|| jd fGHn|jƒqJXqJWt rˆd |GHndS( Niis%04dids%s: records %d - %d finishediis%s: Aborting transaction (%s)is%s: thread finished(ii(RR9R RLR/RNRt txn_begintNonettxnFlagRPR*RR@tcommitRQRtDBLockDeadlockErrortDBLockNotGrantedErrorR.tabort( R"RRAR4R/RRttxntkeys2RDR)tval((s,/sys/lib/python2.7/bsddb/test/test_thread.pyR?„s2      c Cs‹tjddkr%tƒjƒ}n tƒj}t}x;|sty·|jjd|j ƒ}|j |ƒ}d}|j ƒ}xE|rÃ|d7}|\} } |j |j | ƒ| ƒ|jƒ}qWtrÜd||fGHn|jƒ|jƒt}Wq:tjtjfk rp} trYtjd kr@d|| dfGHqYd|| jdfGHn|jƒ|jƒq:Xq:Wtr‡d|GHndS( Niiis%s: found %d recordsiis%s: Aborting transaction (%s)s%s: thread finished(ii(RR9R RLR/RlRRpRqRrRTRUR5R*RVRR$RsR;RRtRuR.Rv( R"RRWR/tfinishedRwRYRRRZR)R[Ry((s,/sys/lib/python2.7/bsddb/test/test_thread.pyR8£s<          cCsxt|_xh|jrstjdƒy7|jjtjtjƒ}t rX|rXd|GHnWq tj k roq Xq WdS(Ng™™™™™™©?s.deadlock: Aborted %d deadlocked transaction(s)( R;RmttimetsleepRt lock_detectRtDB_LOCK_RANDOMtDB_LOCK_CONFLICTRtDBError(R"taborted((s,/sys/lib/python2.7/bsddb/test/test_thread.pyRkÆs      (RRRR\tDB_AUTO_COMMITR!R^Rgt DB_INIT_LOGt DB_INIT_TXNRR4R3R1RrRRoR?R8Rk(((s,/sys/lib/python2.7/bsddb/test/test_thread.pyRj8s   ;  #tBTreeThreadedTransactionscBs#eZejZdZdZdZRS(ii iè(RRRR`R R3R4R1(((s,/sys/lib/python2.7/bsddb/test/test_thread.pyR…Ôs tHashThreadedTransactionscBs#eZejZdZdZdZRS(ii iè(RRRRbR R3R4R1(((s,/sys/lib/python2.7/bsddb/test/test_thread.pyR†Ús tBTreeThreadedNoWaitTransactionscBs,eZejZdZdZdZejZ RS(ii iè( RRRR`R R3R4R1t DB_TXN_NOWAITRr(((s,/sys/lib/python2.7/bsddb/test/test_thread.pyR‡às  tHashThreadedNoWaitTransactionscBs,eZejZdZdZdZejZ RS(ii iè( RRRRbR R3R4R1RˆRr(((s,/sys/lib/python2.7/bsddb/test/test_thread.pyR‰çs  cCsÎtjƒ}trÅ|jtjtƒƒ|jtjtƒƒ|jtjtƒƒ|jtjtƒƒ|jtjt ƒƒ|jtjt ƒƒ|jtjt ƒƒ|jtjt ƒƒndGH|S(Ns-Threads not available, skipping thread tests.( tunittestt TestSuiteR taddTestt makeSuiteR_RaRhRiR…R†R‡R‰(tsuite((s,/sys/lib/python2.7/bsddb/test/test_thread.pyt test_suiteñs t__main__t defaultTestR((t__doc__tosRR{terrnoRR'Rt NameErrort ExceptionRŠttest_allRRRRR R R t threadingR R9R RtTestCaseRR,R_RaRcRhRiRjR…R†R‡R‰RRtmain(((s,/sys/lib/python2.7/bsddb/test/test_thread.pyts@      4$m lœ