package Ġink . an ur . log . pre log Ċ Ċ import Ġink . an ur . log . common . Log Item And Offset Ċ import Ġink . an ur . mutex . Re entrant Locker Ċ import Ġink . an ur . pojo . log . base . Log Item Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . util . concurrent . Concurrent Navig able Map Ċ import Ġjava . util . concurrent . Concurrent Skip List Map Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠAn ur ĠI j uo Kar u K as Ġon Ġ 2 0 1 9 / 7 / 1 2 Ċ Ġ* Ċ Ġ* Ġ åĨħåŃĺ çīĪ é¢Ħ æĹ¥å¿Ĺ ï¼Į ä¸»è¦ģ çĶ¨äºİ åŃĲ èĬĤçĤ¹ ä¸į æĸŃ ä»İ leader èĬĤçĤ¹ åĲĮæŃ¥ é¢Ħ æ¶Īæģ¯ Ċ Ġ*/ Ċ class ĠByte Buf Pre Log ( val Ġgeneration : ĠLong ) Ġ: ĠRe entrant Locker () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Byte Buf Pre Log :: class . java ) ĊĊĠĠĠ Ġprivate Ġval Ġpre Log : ĠConcurrent Navig able Map < Long , ĠLog Item And Offset > Ġ= ĠConcurrent Skip List Map () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå°Ĩ æ¶Īæģ¯ æ·»åĬł åĪ° åĨħåŃĺ ä¸Ń ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġappend ( log Item : ĠLog Item , Ġoffset : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpre Log [ offset ] Ġ= ĠLog Item And Offset ( log Item , Ġoffset ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ æŃ¤ æ¶Īæģ¯ ä¹ĭåīį çļĦ æ¶Īæģ¯ ï¼Ī åĮħæĭ¬ Ġtarget Offset Ġ è¿Ļä¸Ģ æĿ¡ ï¼ī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Before ( target Offset : ĠLong ): ĠPre Log Meta ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġpre Log . head Map ( target Offset , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( result . size Ġ== Ġ 0 ) Ġnull Ġelse ĠPre Log Meta ( result . first Key (), Ġresult . last Key (), Ġresult . values ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¸ ¢ å¼ĥ ä¹ĭåīį çļĦ æ¶Īæģ¯ ä»¬ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdiscard Before ( target Offset : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiscard Map Ġ= Ġpre Log . head Map ( target Offset , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġdiscard Map . size ĊĠĠĠĠĠĠĠ Ġfor Ġ( key Ġin Ġdiscard Map . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpre Log . remove ( key ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . debug (" ä¸ ¢ å¼ĥ ä¸ĸ ä»£ Ġ{} Ġå°ı äºİ çŃīäºİ Ġ{} ĠçļĦ åħ± Ġ{} Ġ æĿ¡ é¢Ħ æĹ¥å¿Ĺ ï¼Į åĽł åħ¶ å·²ç»ı æıĲäº¤ åĪ° æķ°æį® å¼ķ æĵ İ ", Ġgeneration , Ġtarget Offset , Ġcount ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpre Log . size Ġ== Ġ 0 ĊĠĠĠ Ġ} Ċ Ċ }