package Ġcom . a ero spike . sky hook . listener Ċ Ċ import Ġcom . a ero spike . client .* Ċ import Ġcom . a ero spike . client . exp . Exp Ċ import Ġcom . a ero spike . client . policy . Record Exists Action Ċ import Ġcom . a ero spike . client . policy . Write Policy Ċ import Ġcom . a ero spike . sky hook . command . Request Command Ċ import Ġcom . a ero spike . sky hook . config . A ero spike Context Ċ import Ġcom . a ero spike . sky hook . handler . CommandHandler Ċ import Ġcom . a ero spike . sky hook . handler . Net ty ResponseWriter Ċ import Ġcom . a ero spike . sky hook . pipeline . A ero spike Channel Initializer Ċ import Ġcom . a ero spike . sky hook . pipeline . A ero spike Channel Initializer . Companion . a ero Ctx Attr Key Ċ import Ġcom . a ero spike . sky hook . pipeline . A ero spike Channel Initializer . Companion . auth Details Attr Key Ċ import Ġcom . a ero spike . sky hook . pipeline . A ero spike Channel Initializer . Companion . client Pool Attr Key Ċ import Ġcom . a ero spike . sky hook . util . Transaction State Ċ import Ġio . netty . channel . Channel HandlerContext Ċ import Ġmu . Kotlin Logging Ċ import Ġjava . io . IOException Ċ Ċ abstract Ġclass ĠBase Listener ( ĊĠĠĠ Ġctx : ĠChannel HandlerContext Ċ ) Ġ: ĠNet ty ResponseWriter ( ctx ), ĠCommand Handler Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġval Ġlog Ġ= ĠKotlin Logging . logger Ġ{} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġarg ValidationError Msg ( cmd : ĠRequest Command ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"${ cmd . command } Ġarguments " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconst Ġval Ġtransaction Timeout Millis Ġ= Ġ 1 0 0 0 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġval Ġupdate Only Policy Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġupdate Only Policy Ġ= Ġget Write Policy () ĊĠĠĠĠĠĠĠ Ġupdate Only Policy . record Exists Action Ġ= ĠRecord Exists Action . UPDATE _ ONLY ĊĠĠĠĠĠĠĠ Ġupdate Only Policy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġval Ġcreate Only Policy Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġupdate Only Policy Ġ= Ġget Write Policy () ĊĠĠĠĠĠĠĠ Ġupdate Only Policy . record Exists Action Ġ= ĠRecord Exists Action . CREATE _ ONLY ĊĠĠĠĠĠĠĠ Ġupdate Only Policy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġval Ġdefault Write Policy : ĠWrite Policy Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġget Write Policy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġval Ġtransaction State : ĠTransaction State Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġctx . channel (). attr ( A ero spike Channel Initializer . transaction Attr Key ). get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġget Write Policy (): ĠWrite Policy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwrite Policy Ġ= ĠWrite Policy () ĊĠĠĠĠĠĠĠ Ġwrite Policy . send Key Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ// Ġtransaction Ġaware ness ĊĠĠĠĠĠĠĠ Ġwrite Policy . filter Exp Ġ= ĠExp . build ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠExp . or ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExp . not ( Exp . bin Exists ( a ero Ctx . transaction Id Bin )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExp . and ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExp . bin Exists ( a ero Ctx . transaction Id Bin ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExp . or ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExp . gt ( Exp . since Update (), ĠExp .` val `( transaction Timeout Millis )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExp . eq ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExp . bin ( a ero Ctx . transaction Id Bin , ĠExp . Type . STRING ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExp .` val `( transaction State . transaction Id Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwrite Policy ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġsystem Bins (): ĠArray < Bin > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf NotNull ( transaction State . transaction Id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBin ( a ero Ctx . transaction Id Bin , Ġit ) ĊĠĠĠĠĠĠĠ Ġ}). to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġsystem Bins ( type : ĠValueType ): ĠArray < Bin > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsystem Bins () Ġ+ ĠBin ( a ero Ctx . type Bin , Ġtype . str ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġsystem Ops (): ĠArray < Operation > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsystem Bins (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOperation . put ( it ) ĊĠĠĠĠĠĠĠ Ġ}. to Typed Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġsystem Ops ( type : ĠValueType ): ĠArray < Operation > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsystem Ops () Ġ+ ĠOperation . put ( Bin ( a ero Ctx . type Bin , Ġtype . str )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġval Ġa ero Ctx : ĠA ero spike Context Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġctx . channel (). attr ( a ero Ctx Attr Key ). get () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġval Ġclient : ĠIA ero spike Client Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġctx . channel (). attr ( client Pool Attr Key ). get (). getClient ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġctx . channel (). attr ( auth Details Attr Key ). get () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprotected Ġopen Ġfun Ġwrite Response ( mapped : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrite Object ( mapped ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprotected Ġopen Ġfun Ġwrite Error ( e : ĠA ero spike Exception ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwrite Error String (" Internal Ġerror ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġon Failure ( exception : ĠA ero spike Exception ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug Ġ{ Ġexception Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Error ( exception ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflush Ctx Transaction Aware () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Ctx ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġcreate Key ( key : ĠValue ): ĠKey Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa ero Key Ġ= ĠKey ( a ero Ctx . namespace , Ġa ero Ctx . set , Ġkey ) ĊĠĠĠĠĠĠĠ Ġif Ġ( transaction State . in Transaction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction State . keys . add ( a ero Key ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġa ero Key ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġcreate Key ( key : ĠByteArray ): ĠKey Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Key ( Value . get ( String ( key ))) ĊĠĠĠ Ġ} Ċ } Ċ