1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
cc@s ddlmZddlZddlmZddlZddlmZddlmZddl    m
Z
m Z m Z m Z mZmZmZddlmZddlmZmZddlZed    ƒZddlZyddlZWnek
rddlZnXd
efd „ƒYZdS( iÿÿÿÿ(tThreadN(tsleep(tmylog(tCommFunc(tSingletonObjectt CommonDefinet    FuncGradetGlobalFunctionsterrort
SpeedGradetStat(t MongoDBServer(tSendPackProtocolt
MMORPGPacksConfig.DBConfigtCtrlDBcBséeZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z    d„Z
d    „Z d
„Z d „Z d „Zd „Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(cCstj|d|ƒg|_x9td|ƒD](}d}|jj|tjƒgƒq,W||_d|_d|_    d|_
d|_ t |_ tj|ƒ|_tj|ƒ|_ddg|_tjƒ|_t |_d|_t |_d|_d|_dS(Ntnameit((Rt__init__tpriorityQueueListtxrangetappendtQueuet ctrlDBManagertNonet _CtrlDB__hostt _CtrlDB__portt_CtrlDB__dbNamet_CtrlDB__reconnectCnttFalset_CtrlDB__elegantExitRtFuncGradeManagertfuncGradeManagerR    t SpeedGradeMgrtspeedGradeManagertStatet    threadingtLockt
StateMutextQueueSizeExceedThresholdtBlockCntt    Connectedt
connectiontdb(tselft
threadNametpriorityQueueSizeRtitqueueProcessRequestType((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pyRs*                                              cCsHtjr5|jjƒddg|_|jjƒnddg|_dS(Ni(tDBConfigtMultiThreadingR%tacquireR"trelease(R+tRequest((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pyt
clearState6s
     cCsTtjr;|jjƒ|tjƒg|_|jjƒn|tjƒg|_dS(N(R0R1R%R2ttimeitt default_timerR"R3(R+tcurrentProcessingRequest((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pyt updateState?s
     cCsˆtjr@|jjƒ|jd}|jd}|jjƒn|jd}|jd}|sddStjƒ}d|||||fS(Niis-s)Type = %s, process time = %s secs, %s, %s(R0R1R%R2R"R3R6R7(R+tstatetstartProcessTickt currentTime((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pytgetStateGs          cCs|jS(N(R(R+((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pytGetFuncGradeManagerVscCs|jS(N(R!(R+((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pytGetSpeedGradeMgrYscCs|jj|ƒS(N(Rt GetFuncGrade(R+tfuncName((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pyR@\scCs|jj|ƒS(N(R!t GetSpeedGrade(R+R((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pyRB_scCs t|jƒS(N(tlenR(R+((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pytgetPrioorityQueueCntbscCs|j|djƒS(Ni(Rtqsize(R+tindex((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pytgetPriorityQueueSizeescCsEtjƒjƒ}tj|jƒ_|j|ƒ|jj    |ƒdS(N(
Rt getPackPooltallocRtatInnert getPackHeadttypet    setBufferRt dbRequestPush(R+tbuftsendPack((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pyt sendDBRequesths c    Cs®tjd||||||fƒtjƒjƒ}|j|ƒ||jƒ_||jƒ_||jƒ_    ||jƒ_
||jƒ_ |j |ƒ|j j|ƒdS(NsksendViaSessiondID = %s, sessionID = %s, poolIndex = %s, type = %s, dstSvrType = %s,         srcSvrType = %s(RtdebugRRHRIt setSessionIDRKt    sessionIDt    poolIndexRLt
dstSvrTypet
srcSvrTypeRMRt dbAnswerPush(    R+tsendViaSessiondIDRTRURLRVRWRORP((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pytpackSendns  cCs5tjƒj|jƒƒ}|r1|j|ƒndS(N(R t getServerMgrtFindServerByClientSessionIDt getSessionIDtpushSend(R+tpacktoServer((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pyR^|scCsHxAtdt|jƒƒD]'}|j|d}||krtSqWtS(Ni(RRCRtTrueR(R+t requestTypeR.trequestTypeList((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pyt
canProcess‚s
 cCs||_||_dS(N(RR(R+thosttport((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pyt    setServerŠs    cCs||_||_||_dS(N(Rt_CtrlDB__dbUsert_CtrlDB__dbPwd(R+tdbNametusertpwd((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pyt setDataBaseŽs        cCs d}tj|jƒ|ƒ\}}d}xGtdt|jƒƒD]-}|j|d}||krC|}PqCqCW|dks•|t|jƒkrÂtjdtjd|ƒ}t    j|ƒt
St    j d||fƒ|j d|ƒj ƒ|j|dj|ƒtS(NiiÿÿÿÿRspriorityLV = %s not found!spack type = %s add to queue %ssrequestPush_%si(RtReadBYTEt    getBufferRRCRRt    formatMsgt ERROR_NO_42RRRRRBtRefreshtputRa(R+R_tposRbt
priorityLVR.Rctmsg((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pyt requestPushs  ! cCstjrd}xÅtdt|jƒƒD]«}|j|djƒtjkr¦|jsÓ|jd7_t    |_t
j d|j ƒ||j|djƒfƒqÓq(|j|djƒtj kr(|d7}q(q(W|jr|t|jƒkrt|_t
j d|j ƒƒqnxãtdt|jƒƒD]É}y|j|djƒ}Wntjk
rnq4nX|r4d}tj|jƒ|ƒ\}}|jd|ƒjƒtjƒ}|j|ƒt
jd||jƒfƒtjƒj|ƒ|Sq4WdS(Niis!!!*** %s queue %s size = %ss$!!!*** %s queue resume low balanced!s requestPop_%ss)pop pack from queue(priorityLV = %s) = %s( R0t StartProfileRRCRREtProfileQueueThresholdMaxR&R'RaRtwarningtgetNametProfileQueueThresholdMinRt
get_nowaitRtEmptyRRnRoRBRrR tMMORPGPacket_StacktassignRRt outputStringRRHtfreeR(R+tlowBalanceQueueCntR.R_RtRbtret((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pyt __requestPop¯s8             7       c    CsEx>tr@yb|jsÄtjd|j|jfƒtj|j|jdtƒ|_    |j    |j
|_ t|_tjd|j|jfƒt j |j|jd|j    ƒs±dS|j|j ƒn|jƒ}tjr|dkr*|jròPntdƒwq*n%|dkrPntjƒjd7_d}d}|jƒdkr”d}tj|jƒ|ƒ\}}|j|ƒtjr”t j!ƒ}q”n|j"|j |ƒ}|rtjrþ|rþt j!ƒ|}|tj#dkrþtj$d    ||fƒqþn|j%|ƒntj&d
t'|jƒdƒƒ|r;wnt(j)d t(j*d |j+ƒƒ}tj(|ƒWqtj,j-k
r|j.d7_.tjd |j|j|j.fƒ|j.tj/krþt(j)dt(j0d|j|jfƒ}tj1|ƒdSt}qt(j)d t(j2dt3j4ƒƒ}tj(|ƒqXqWdS(Ns!!!!!!!!!!!connect %s:%stauto_start_requests!!!!!!!!!!!connect %s:%s ok!R)gš™™™™™¹?iig@@s.!!!---request type = %s process time = %s secssend process request type = %dRsfailed to process pack = %ss"try reconnecting %s:%s cnt = %s...tfatalsreconnect %s:%s failed!s%s(5RaR(RtinfoRRtpymongot
ConnectionRR)RR*Rt LoginMongoDBRhRit onConnectedOKt_CtrlDB__requestPopR0R1RRRR
tGetStattDBProcessCountt    getLengthRRnRoR9RxR6R7trequestLogicProcesstProfileThresholdRzR5RRtordRRpt ERROR_NO_43Rterrorst AutoReconnectRtmaxReconnectCntt ERROR_NO_44R‡t ERROR_NO_45t    tracebackt
format_exc(    R+R_RbtprocessStartTickRttresultt processTimeRvt
bConnected((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pyt__requestProcessÑsh        !    !          
          !"#(     "cCs1|jƒtjr-tjd|jƒƒndS(NsThread %s exit!(t_CtrlDB__requestProcessR0R1RRˆR{(R+((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pytruns
    cCstjdƒdS(s×ÓÀàʵÏÖs
unhandled!N(RRz(R+R*R_((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pyR‘scCsdS(s×ÓÀàʵÏÖN((R+R*((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pyRŒscCs:t|_tj|ƒtjd|jƒ|jfƒdS(NsThread %s(%s) start!(RRRtstartRRˆR{tident(R+((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pyR£#s     cCsXtjd|jƒƒt|_x|jƒr<tdƒq#Wtjd|jƒƒdS(NsStoping thread %s...gš™™™™™¹?sThread %s stop OK!(RRˆR{RaRtisAliveR(R+((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pytstop(s
    cCs„tjƒ}||_d|_|jƒ|}|j|jƒ|jƒj|jƒj    |jƒj
|jƒj |jƒj |ƒdS(Ni( R ttagDBToGameServerHeadtTypetSuccesst    GetBufferRZR]RKRTRURLRWRV(R+trecvPackRLtdataRPtsendBuf((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pytsendGameServerString0s         (t__name__t
__module__RR5R9R=R>R?R@RBRDRGRQRZR^RdRgRmRwRR¡R¢R‘RŒR£R¦R®(((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pyRs2                                                                            "    D                    (R#RRttimeRR‰tCommonRRtDBCommonRRRRRR    R
tNetR tProtocolR R Ršt
__import__R0R6t ImportErrortdummy_threadingR(((sO.\TCode\TeamServer\Server4\Servers\PyMongoDataServer\src\LogicProcess\CtrlDB.pyt<module>s   4