package Ġno . nav . sy fo . util Ċ Ċ import Ġcom . fasterxml . jackson . databind . Deserialization Feature Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . databind . Serialization Feature Ċ import Ġcom . fasterxml . jackson . datatype . js r 3 1 0 . Java Time Module Ċ import Ġcom . fasterxml . jackson . module . kotlin . jackson ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġio . ktor . client . HttpClient Ċ import Ġio . ktor . client . request . get Ċ import Ġio . ktor . util . K tor Experimental API Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġno . nav . sy fo . Environment Ċ import Ġno . nav . sy fo . log Ċ import Ġjava . net . Inet Address Ċ Ċ @ K tor Experimental API Ċ class ĠPod Leader Coordinator ( ĊĠĠĠ Ġprivate Ġval Ġenv : ĠEnvironment Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdont _ look _ for _ leader Ġ= Ġ" dont _ look _ for _ leader " ĊĊĠĠĠ Ġprivate Ġval ĠobjectMapper : ĠObjectMapper Ġ= Ġj ack son ObjectMapper (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġregister Module ( Java Time Module ()) ĊĠĠĠĠĠĠĠ Ġconfigure ( Deserialization Feature . FAIL _ ON _ UNKNOWN _ PROPERTIES , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġconfigure ( Deserialization Feature . ACCEPT _ EMPTY _ STRING _ AS _ NULL _ OBJECT , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġconfigure ( Serialization Feature . WRITE _ DAT ES _ AS _ TIMESTAMP S , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ K tor Experimental API ĊĠĠĠ Ġprivate Ġval Ġclient Ġ= ĠHttpClient Ġ{} ĊĊĠĠĠ Ġfun Ġis Leader (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġenv . elect or Path ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( url Ġ== Ġdont _ look _ for _ leader ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Opt ing Ġnot Ġto Ġlook Ġfor Ġleader , Ġreturning Ġtrue , Ġelect or Ġurl Ġwas :$ url ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhttp Path Ġ= Ġget Http Path ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Looking Ġfor Ġleader Ġat Ġurl :$ http Path ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . get < String >( url String Ġ= Ġhttp Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleader : ĠLeader Ġ= ĠobjectMapper . readValue ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhostname : ĠString Ġ= ĠInet Address . getLocal Host (). host Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( hostname Ġ== Ġleader . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Pod Ġwith Ġ$ hostname Ġis Ġthe Ġleader ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Pod Ġwith Ġ$ hostname Ġis Ġnot Ġleader , Ġleader Ġis :${ leader . name }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error (" Exception Ġcaught Ġwhile Ġlooking Ġfor Ġleader , Ġexception :$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Http Path ( url : ĠString ): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( url . startsWith (" http :// ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġurl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ" http :// $ url " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠLeader ( val Ġname : ĠString ) Ċ } Ċ