Public Vars

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)))