package Ġstreams . utils Ċ Ċ import Ġorg . neo 4 j . dbms . api . Database Management Service Ċ import Ġorg . neo 4 j . exceptions . Un satisfied Dependency Exception Ċ import Ġorg . neo 4 j . kernel . impl . factory . Db ms Info Ċ import Ġorg . neo 4 j . kernel . internal . Graph Database API Ċ import Ġorg . neo 4 j . logging . internal . Log Service Ċ import Ġstreams . extensions . execute Ċ import Ġjava . lang . invoke . Method Handles Ċ import Ġjava . lang . invoke . MethodType ĊĊ Ċ object ĠProcedure Utils Ġ{ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġprivate Ġval Ġcore Metadata : ĠClass < *> ? Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ ĠClass . forName (" com . neo 4 j . ca usal clustering . core . consensus . Core MetaData ") ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠClass NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġprivate Ġval Ġis Leader Method Handle Ġ= Ġcore Metadata ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlookup Ġ= ĠMethod Handles . lookup () ĊĠĠĠĠĠĠĠ Ġlookup . find Virtual ( it , Ġ" is Leader ", ĠMethod Type . method Type ( Boolean :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Type ( MethodType . method Type ( Boolean :: class . java , ĠAny :: class . java )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcluster Member Role ( db : ĠGraph Database API ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfallback : Ġ( Exception ?) Ġ-> ĠString Ġ= Ġ{ Ġe : ĠException ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Log Ġ= Ġdb . dependency Resolver ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. resolve Dependency ( Log Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getUser Log ( Procedure Utils :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe ?. let Ġ{ Ġuser Log . warn (" Cannot Ġcall Ġthe ĠAPIs , Ġtrying Ġwith Ġthe Ġcy pher Ġquery ", Ġe ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġuser Log . warn (" Cannot Ġcall Ġthe ĠAPIs , Ġtrying Ġwith Ġthe Ġcy pher Ġquery ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . execute (" CALL Ġdb ms . cluster . role (\ $ database )", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" database " Ġto Ġdb . database Name ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġit . column As < String >(" role "). next () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexecute Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcore Metadata ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġra ft Machine : ĠAny Ġ= Ġdb . dependency Resolver . resolve Dependency ( core Metadata ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Leader Ġ= Ġis Leader Method Handle !!. invoke Exact ( raft Machine ) Ġas ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Leader ) Ġ" LE ADER " Ġelse Ġ" FOL LOWER " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠUn satisfied Dependency Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" LE ADER " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġ" LE ADER " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġexecute Or Fallback ( execute , Ġfallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Cluster ( db : ĠGraph Database API ): ĠBoolean Ġ= Ġdb . dbms Info () Ġ== ĠDb ms Info . CORE Ġ|| Ġdb . dbms Info () Ġ== ĠDb ms Info . READ _ REPL ICA ĊĊĠĠĠ Ġfun Ġis Cluster ( dbms : ĠDatabase Management Service ): ĠBoolean Ġ= Ġdb ms . list Databases () ĊĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ Ġit Ġ!= ĠStreams Utils . SYSTEM _ DATABASE _ NAME Ġ} ĊĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġdb ms . database ( it ) Ġas ĠGraph Database API Ġ} ĊĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġis Cluster ( it ) Ġ} Ġ?: Ġfalse ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġexecute Or Fallback ( execute : Ġ() Ġ-> ĠT , Ġfallback : Ġ( Exception ?) Ġ-> ĠT ): ĠT Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġexecute () ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfallback ( e ) ĊĠĠĠ Ġ} Ċ }