aboutsummaryrefslogtreecommitdiff
path: root/test/com/github/ivarref/yoltq/http_hang_demo.clj
blob: 06d877bd94423319a61e3be298a121273f02bdb4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
(ns com.github.ivarref.yoltq.http-hang-demo
  (:require [datomic.api :as d]
            [com.github.ivarref.yoltq :as yq]
            [com.github.ivarref.yoltq.log-init])
  (:import (java.net.http HttpClient HttpRequest HttpResponse$BodyHandlers)))

(comment
  (do
    (com.github.ivarref.yoltq.log-init/init-logging!
      [[#{"datomic.*" "com.datomic.*" "org.apache.*"} :warn]
       [#{"com.github.ivarref.yoltq.report-queue"} :debug]
       [#{"com.github.ivarref.yoltq.poller"} :info]
       [#{"com.github.ivarref.yoltq*"} :debug]
       [#{"*"} :info]])
    (yq/stop!)
    (let [received (atom [])
          uri (str "datomic:mem://hello-world-" (java.util.UUID/randomUUID))]
      (d/delete-database uri)
      (d/create-database uri)
      (let [conn (d/connect uri)]
        (init! {:conn                          conn
                :error-backoff-time            (Duration/ofSeconds 5)
                :poll-delay                    5
                :system-error-poll-interval    [1 TimeUnit/MINUTES]
                :system-error-callback-backoff (Duration/ofHours 1)
                :max-execute-time              (Duration/ofSeconds 3)
                :on-system-error               (fn [] (log/error "system in error state"))
                :on-system-recovery            (fn [] (log/info "system recovered"))})
        (yq/add-consumer! :slow (fn [_payload]
                                  (log/info "start slow handler...")
                                  ; sudo tc qdisc del dev wlp3s0 root netem
                                  ; sudo tc qdisc add dev wlp3s0 root netem delay 10000ms
                                  ; https://jvns.ca/blog/2017/04/01/slow-down-your-internet-with-tc/
                                  (let [request (-> (HttpRequest/newBuilder)
                                                    (.uri (java.net.URI. "https://postman-echo.com/get"))
                                                    (.timeout (Duration/ofSeconds 10))
                                                    (.GET)
                                                    (.build))]
                                    (log/info "body is:" (-> (.send (HttpClient/newHttpClient) request (HttpResponse$BodyHandlers/ofString))
                                                             (.body))))
                                  (log/info "slow handler is done!")))
        (yq/start!)
        @(d/transact conn [(put :slow {:work 123})])
        #_(dotimes [x 1] @(d/transact conn [(put :q {:work x})]))
        nil))))