package Ġorg . opense arch . index . trans log Ċ Ċ import Ġorg . opense arch . common . unit . Byte Size Value Ċ import Ġorg . opense arch . index . Index Settings Ċ import Ġorg . opense arch . index . seq no . Retention Lease Ċ import Ġorg . opense arch . index . seq no . Retention Le ases Ċ import Ġorg . opense arch . replication . Replication Plugin Ċ import Ġjava . io . IOException Ċ import Ġjava . util . function . Supplier Ċ Ċ class ĠRep lication Trans log Deletion Policy ( ĊĠĠĠ Ġindex Settings : ĠIndex Settings , ĊĠĠĠ Ġprivate Ġval Ġretention Le ases Supplier : ĠSupplier < Retention Le ases > Ċ ) Ġ: ĠTrans log Deletion Policy () Ġ{ ĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġprivate Ġvar Ġtrans log P run ing Enabled : ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Settings . is Soft Delete Enabled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠRep lication Plugin . RE PLICATION _ INDEX _ TRANS LOG _ PR UN ING _ ENABLED _ SETTING . get ( index Settings . settings ) ĊĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġprivate Ġvar Ġreplication Retention Size InBytes : ĠLong Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRep lication Plugin . RE PLICATION _ INDEX _ TRANS LOG _ RET ENT ION _ SIZE . get ( index Settings . settings ). bytes ĊĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġprivate Ġvar Ġretention Size InBytes : ĠLong Ġ= Ġindex Settings . trans log Retention Size . bytes ĊĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġprivate Ġvar Ġretention Age In Millis : ĠLong Ġ= Ġindex Settings . trans log Retention Age . millis ĊĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġprivate Ġvar Ġretention Total Files : ĠInt Ġ= Ġindex Settings . trans log Retention Total Files ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġindex Settings . scoped Settings . add Settings Update Consumer ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRep lication Plugin . RE PLICATION _ INDEX _ TRANS LOG _ PR UN ING _ ENABLED _ SETTING ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġvalue : ĠBoolean Ġ-> Ġtrans log P run ing Enabled Ġ= Ġif Ġ( index Settings . is Soft Delete Enabled ) Ġvalue Ġelse Ġfalse Ġ} ĊĊĠĠĠĠĠĠĠ Ġindex Settings . scoped Settings . add Settings Update Consumer ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRep lication Plugin . RE PLICATION _ INDEX _ TRANS LOG _ RET ENT ION _ SIZE ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġvalue : ĠByte Size Value Ġ-> Ġreplication Retention Size InBytes Ġ= Ġvalue . bytes Ġ} ĊĊĠĠĠĠĠĠĠ Ġindex Settings . scoped Settings . add Settings Update Consumer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIndex Settings . INDEX _ TRANS LOG _ RET ENT ION _ SIZE _ SETTING ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġvalue : ĠByte Size Value Ġ-> Ġretention Size InBytes Ġ= Ġif ( index Settings . is Soft Delete Enabled ) Ġ- 1 Ġelse Ġvalue . bytes Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Retention Size InBytes (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( getIndex Trans log P run ing Enabled ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġreplication Retention Size InBytes ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġretention Size InBytes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Index Trans log P run ing Enabled (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrans log P run ing Enabled ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Retention Size InBytes ( bytes : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġretention Size InBytes Ġ= Ġbytes ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Retention Age In Millis ( age In Millis : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġretention Age In Millis Ġ= Ġage In Millis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Retention Total Files ( retention Total Files : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . retention Total Files Ġ= Ġretention Total Files ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġreturns Ġthe Ġminimum Ġtrans log Ġgeneration Ġthat Ġis Ġstill Ġrequired Ġby Ġthe Ġsystem . ĠAny Ġgeneration Ġbelow ĊĠĠĠĠ Ġ* Ġthe Ġreturned Ġvalue Ġmay Ġbe Ġsafely Ġdeleted ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġreaders Ġcurrent Ġtrans log Ġreaders ĊĠĠĠĠ Ġ* Ġ@ param Ġwriter Ġ Ġcurrent Ġtrans log Ġwriter ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġmin Trans log Gen Required ( readers : ĠList < Trans log Reader >, Ġwriter : ĠTrans log Writer ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmin Trans log Gen Required ( readers , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Index Trans log P run ing Enabled (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Retention Size InBytes (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretention Age In Millis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretention Total Files , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Trans log Gen Required By Locks , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretention Le ases Supplier ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġmin Trans log Gen Required ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreaders : ĠList < Trans log Reader >, Ġwriter : ĠTrans log Writer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrans log P run ing Enabled : ĠBoolean , Ġretention Size InBytes : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretention Age In Millis : ĠLong , Ġretention Total Files : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin Trans log Gen Required By Locks : ĠLong , Ġretention Le ases Supplier : ĠSupplier < Retention Le ases > ĊĠĠĠĠĠĠĠ Ġ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin By Size : ĠLong Ġ= Ġget Min Trans log Gen By Size ( readers , Ġwriter , Ġretention Size InBytes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmin By Retention Le ases And Size Ġ= ĠLong . MAX _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( trans log P run ing Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġretention Ġsize Ġis Ġspecified , Ġsize Ġtakes Ġprecedence . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin By Retention Le ases : ĠLong Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Min Trans log Gen By Retention Lease ( readers , Ġwriter , Ġretention Le ases Supplier ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin By Retention Le ases And Size Ġ= Ġmin By Size . coerce At Least ( min By Retention Le ases ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin By Age Ġ= Ġget Min Trans log Gen By Age ( readers , Ġwriter , Ġretention Age In Millis , ĠSystem . currentTimeMillis ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin By Age And Size Ġ= Ġif Ġ( min By Size Ġ== ĠLong . MIN _ VALUE Ġ&& Ġmin By Age Ġ== ĠLong . MIN _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġboth Ġsize Ġand Ġage Ġare Ġdisabled ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLong . MAX _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin By Age . coerce At Least ( min By Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin By Num Files Ġ= Ġget Min Trans log Gen By Total Files ( readers , Ġwriter , Ġretention Total Files ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin By Locks : ĠLong Ġ= Ġmin Trans log Gen Required By Locks ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin By Trans log Gen Settings Ġ= Ġmin By Age And Size . coerce At Least ( min By Num Files ). coerce At Most ( min By Locks ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġretention Ġsize Ġis Ġspecified , Ġsize Ġtakes Ġprecedence . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmin By Trans log Gen Settings . coerce At Most ( min By Retention Le ases And Size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Min Trans log Gen By Retention Lease ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreaders : ĠList < Trans log Reader >, Ġwriter : ĠTrans log Writer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretention Le ases Supplier : ĠSupplier < Retention Le ases > ĊĠĠĠĠĠĠĠ Ġ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmin Gen : ĠLong Ġ= Ġwriter . get Generation (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġminimum Ret aining SequenceNumber : ĠLong Ġ= Ġretention Le ases Supplier . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. lease s () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map To Long ( Retention Lease :: ret aining SequenceNumber ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. min () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. orElse ( Long . MAX _ VALUE ); ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġreaders . size Ġ- Ġ 1 Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreader : ĠTrans log Reader Ġ= Ġreaders [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( reader . min Seq No Ġ<= Ġminimum Ret aining SequenceNumber Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreader . max Seq No Ġ>= Ġminimum Ret aining SequenceNumber ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Gen Ġ= Ġmin Gen . coerce At Most ( reader . get Generation ()); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmin Gen ; ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }