Back
alter-var-root (clj)
(source)function
(alter-var-root v f & args)
Atomically alters the root binding of var v by applying f to its
current value plus any args
Examples
typedclojure/typedclojure
(ns ^:no-doc typed.ann.clojure
"Type annotations for the base Clojure distribution."
#?(:cljs (:require-macros [typed.ann-macros.clojure :as macros]))
(:require [clojure.core :as cc]
[typed.clojure :as t]
#?(:clj [typed.ann-macros.clojure :as macros])
#?(:clj typed.ann.clojure.jvm) ;; jvm annotations
#?(:clj clojure.core.typed))
#?(:clj
(:import (clojure.lang PersistentHashSet PersistentList
APersistentMap #_IPersistentCollection
#_ITransientSet
IRef)
(java.util Comparator Collection))))
#?@(:cljs [] :default [
cc/alter-var-root (t/All [x b :..] [(t/Var x) [x b :.. b :-> x] b :.. b :-> x])
footprintanalytics/footprint-web
(ns metabase.driver.impl-test
(:require [clojure.core.async :as a]
[clojure.string :as str]
[clojure.test :refer :all]
[metabase.driver :as driver]
[metabase.driver.impl :as driver.impl]
[metabase.test.util.async :as tu.async]))
(deftest load-driver-namespace-race-condition-test
(testing "Make sure we don't report a driver as being registered if its namespace is in the process of being loaded (#13114)"
(alter-var-root #'driver.impl/hierarchy underive ::race-condition-test :metabase.driver/driver)
;; basic idea for this test is simulate loading a driver namespace on a different thread and have it register
;; itself immediately. Then on another thread we should call `the-initialized-driver`, but it shouldn't return
;; until the namespace has completed loading.
(tu.async/with-open-channels [started-loading-chan (a/promise-chan)]
(let [finished-loading (atom false)]
(with-redefs [driver.impl/require-driver-ns (fn [_]
(driver/register! ::race-condition-test)
(a/>!! started-loading-chan :start)
(Thread/sleep 100)
(reset! finished-loading true))]
;; fire off a separate thread that will start loading the driver
(future (driver/the-initialized-driver ::race-condition-test))
(tu.async/wait-for-result started-loading-chan 500)
(is (= ::race-condition-test
(driver/the-initialized-driver ::race-condition-test)))
(is (= true
@finished-loading)))))))
frenchy64/fully-satisfies
(ns io.github.frenchy64.fully-satisfies.shared-protocol
(:refer-clojure :exclude [defprotocol])
(:require [clojure.core :as cc]))
(defmacro def-shared-protocol
[nme & body]
`(do (cc/defprotocol ~nme ~@body)
(let [protocol-var# (var ~nme)]
(-reset-methods
(alter-var-root protocol-var#
update :method-builders
#(into {}
(map (fn [[^clojure.lang.Var v# build#]]
(let [cache# (clojure.lang.MethodImplCache. (symbol v#) @protocol-var# (keyword (.sym v#)))
^clojure.lang.AFunction f# (build# cache#)
shared-build# (fn [cache#]
(set! (.__methodImplCache f#) cache#)
f#)]
[v# shared-build#])))
%))))
'~nme))
finnishtransportagency/harja
(ns ^:integraatio tarkkailija.palvelin.komponentit.uudelleen-kaynnistaja-test
(:require [clojure.test :refer [deftest testing is use-fixtures]]
[harja.testi :refer :all]
[harja.integraatio :as integraatio]
[harja.palvelin.integraatiot.jms-clientit.apache-classic :as activemq]
[harja.palvelin.tyokalut.tapahtuma-tulkkaus :as tapahtumien-tulkkaus]
[harja.palvelin.asetukset :as a]
[compojure.core :refer [PUT]]
[harja.palvelin.komponentit.http-palvelin :refer [julkaise-reitti poista-palvelu]]
[harja.palvelin.integraatiot.api.tyokalut :as api-tyokalut]
[taoensso.timbre :as log]
[harja.palvelin.tyokalut.jarjestelma :as jarjestelma]
[harja.palvelin.integraatiot.jms :as jms]
[tarkkailija.palvelin.komponentit.uudelleen-kaynnistaja :as uudelleen-kaynnistaja]
[com.stuartsierra.component :as component]
[org.httpkit.fake :refer [with-fake-http]]
[harja.palvelin.integraatiot.tloik.tloik-komponentti :refer [->Tloik]]
[harja.palvelin.integraatiot.integraatioloki :refer [->Integraatioloki]]
[harja.jms-test :refer [feikki-jms]]
[harja.palvelin.integraatiot.tloik.tyokalut :refer :all]
[harja.palvelin.integraatiot.api.ilmoitukset :as api-ilmoitukset]
[harja.palvelin.integraatiot.labyrintti.sms :refer [->Labyrintti]]
[harja.palvelin.integraatiot.jms.tyokalut :as s-tk]
[harja.palvelin.tyokalut.tapahtuma-apurit :as event-apurit]
[harja.palvelin.tyokalut.komponentti-protokollat :as kp]
[compojure.core :as compojure]
[clojure.core.async :as async]
[cheshire.core :as cheshire]
[clojure.string :as clj-str]
[harja.palvelin.komponentit.itmf :as itmf]))
(use-fixtures :each (fn [testit]
(println "POIS KYTKETYT OMINAISUUDET")
(println @a/pois-kytketyt-ominaisuudet)
(swap! a/pois-kytketyt-ominaisuudet disj :itmf-uudelleen-kaynnistys)
(reset! koko-testin-tila {})
(let [jarjestelma-restart-tarkkailija (atom nil)]
(binding [*uudelleen-kaynnistaja-mukaan?* true
*aloitettavat-jmst* #{"itmf"}
*lisattavia-kuuntelijoita?* true
*jms-kaynnistetty-fn* (fn []
(s-tk/itmf-jolokia-jono +tloik-ilmoitusviestijono+ nil :purge)
(s-tk/itmf-jolokia-jono +tloik-ilmoituskuittausjono+ nil :purge))
*kaynnistyksen-jalkeen-hook* (fn []
(reset! jarjestelma-restart-tarkkailija
(event-apurit/tarkkaile-tapahtumaa :harjajarjestelman-restart
{}
(fn [{:keys [palvelin payload]}]
(println "HARJAJÄRJESTELMÄN RESTART")
(println [palvelin payload])
(when (= palvelin event-apurit/host-nimi)
(alter-var-root #'jarjestelma
(fn [harja-jarjestelma]
;(log/debug "harjajarjestelman-restart")
(try (let [uudelleen-kaynnistetty-jarjestelma (jarjestelma/system-restart harja-jarjestelma payload)]
(jms/aloita-jms (:itmf uudelleen-kaynnistetty-jarjestelma))
(if (jarjestelma/kaikki-ok? uudelleen-kaynnistetty-jarjestelma (* 1000 10))
(event-apurit/julkaise-tapahtuma :harjajarjestelman-restart-onnistui tapahtumien-tulkkaus/tyhja-arvo)
(event-apurit/julkaise-tapahtuma :harjajarjestelman-restart-epaonnistui tapahtumien-tulkkaus/tyhja-arvo))
uudelleen-kaynnistetty-jarjestelma)
(catch Throwable t
(log/error "Harjajärjestelmän uudelleen käynnistyksessä virhe: " (.getMessage t) ".\nStack: " (.printStackTrace t))
(event-apurit/julkaise-tapahtuma :harjajarjestelman-restart-epaonnistui tapahtumien-tulkkaus/tyhja-arvo)
nil))))))))
(-> jarjestelma-restart-tarkkailija deref deref))
*ennen-sulkemista-hook* (fn []
(event-apurit/lopeta-tapahtuman-kuuntelu (-> jarjestelma-restart-tarkkailija deref deref)))]
(jarjestelma-fixture testit)))
(swap! a/pois-kytketyt-ominaisuudet conj :itmf-uudelleen-kaynnistys)))
commsor/titanoboa-sample-workflows
;;in both REPLs:
(ns user)
(require '[clojure.core.async :as async :refer [>!! <!!]])
(require '[clojure.pprint :refer [pprint]])
(require '[titanoboa.channel :as ch :refer [with-mq-session with-mq-sessionpool current-session *mq-session*]])
(require '[titanoboa.channel.rmq :as channel])
(alter-var-root #'ch/*mq-session* (constantly (:session session)))