refactor(rtc): remake rtc-wait-download-graph-info-ready

pull/11293/head
rcmerci 2024-05-05 21:45:47 +08:00
parent 91a1372dfb
commit d3f135c4c2
5 changed files with 40 additions and 42 deletions

View File

@ -150,7 +150,7 @@
^object worker @db-browser/*worker
download-info-uuid (.rtc-request-download-graph worker token graph-uuid)
result (.rtc-wait-download-graph-info-ready
worker nil token download-info-uuid graph-uuid 60000)
worker token download-info-uuid graph-uuid 60000)
{:keys [_download-info-uuid
download-info-s3-url
_download-info-tx-instant

View File

@ -610,16 +610,14 @@
;; ================================================================
(rtc-request-download-graph
[this token graph-uuid]
(js/Promise. (rtc-core2/new-task--request-download-graph token graph-uuid)))
(with-write-transit-str
(js/Promise. (rtc-core2/new-task--request-download-graph token graph-uuid))))
(rtc-wait-download-graph-info-ready
[this repo token download-info-uuid graph-uuid timeout-ms]
(async-util/c->p
(async/go
(let [state (or @rtc-core/*state
(<! (rtc-core/<init-state token false)))]
(ldb/write-transit-str
(<? (rtc-updown/<wait-download-info-ready state download-info-uuid graph-uuid timeout-ms)))))))
[this token download-info-uuid graph-uuid timeout-ms]
(with-write-transit-str
(js/Promise.
(rtc-core2/new-task--wait-download-info-ready token download-info-uuid graph-uuid timeout-ms))))
(rtc-download-graph-from-s3
[this graph-uuid graph-name s3-url]
@ -629,15 +627,18 @@
(rtc-download-info-list
[this token graph-uuid]
(js/Promise. (rtc-core2/new-task--download-info-list token graph-uuid)))
(with-write-transit-str
(js/Promise. (rtc-core2/new-task--download-info-list token graph-uuid))))
(rtc-snapshot-graph
[this token graph-uuid]
(js/Promise. (rtc-core2/new-task--snapshot-graph token graph-uuid)))
(with-write-transit-str
(js/Promise. (rtc-core2/new-task--snapshot-graph token graph-uuid))))
(rtc-snapshot-list
[this token graph-uuid]
(js/Promise. (rtc-core2/new-task--snapshot-list token graph-uuid)))
(with-write-transit-str
(js/Promise. (rtc-core2/new-task--snapshot-list token graph-uuid))))
(rtc-get-block-update-log
[_this block-uuid]

View File

@ -32,7 +32,7 @@
(user-handler/<wrap-ensure-id&access-token
(p/let [token (state/get-auth-id-token)
download-info-uuid (.rtc-request-download-graph worker token graph-uuid)
result (.rtc-wait-download-graph-info-ready worker nil token download-info-uuid graph-uuid timeout-ms)
result (.rtc-wait-download-graph-info-ready worker token download-info-uuid graph-uuid timeout-ms)
{:keys [_download-info-uuid
download-info-s3-url
_download-info-tx-instant

View File

@ -318,6 +318,12 @@
(let [{:keys [get-ws-create-task]} (new-task--get-ws-create--memoized (get-ws-url token))]
(r.upload-download/new-task--download-info-list get-ws-create-task graph-uuid)))
(defn new-task--wait-download-info-ready
[token download-info-uuid graph-uuid timeout-ms]
(let [{:keys [get-ws-create-task]} (new-task--get-ws-create--memoized (get-ws-url token))]
(r.upload-download/new-task--wait-download-info-ready
get-ws-create-task download-info-uuid graph-uuid timeout-ms)))
;;; ================ API (ends) ================
;;; subscribe debug state ;;;

View File

@ -2,7 +2,7 @@
"- upload local graph to remote
- download remote graph"
(:require [cljs-http.client :as http]
[cljs.core.async :as async :refer [<! go-loop]]
[cljs.core.async :as async :refer [<!]]
[cljs.core.async.interop :refer [p->c]]
[clojure.string :as string]
[cognitect.transit :as transit]
@ -10,7 +10,6 @@
[frontend.worker.async-util :include-macros true :refer [<? go-try]]
[frontend.worker.rtc.client :as r.client]
[frontend.worker.rtc.op-mem-layer :as op-mem-layer]
[frontend.worker.rtc.ws :as ws]
[frontend.worker.state :as worker-state]
[frontend.worker.util :as worker-util]
[logseq.common.missionary-util :as c.m]
@ -188,33 +187,25 @@
(r.client/send&recv get-ws-create-task {:action "download-info-list"
:graph-uuid graph-uuid})))
(defn <wait-download-info-ready
[state download-info-uuid graph-uuid timeout-ms]
(let [init-interval 1000
interval 3000
timeout-ch (async/timeout timeout-ms)]
(go-loop [interval-ch (async/timeout init-interval)]
(let [{:keys [timeout retry]}
(async/alt!
timeout-ch {:timeout true}
interval-ch {:retry true}
:priority true)]
(cond
timeout :timeout
retry
(let [{:keys [download-info-list]}
(<? (ws/<send&receive state {:action "download-info-list"
:graph-uuid graph-uuid}))
finished-download-info
(some
(fn [download-info]
(when (and (= download-info-uuid (:download-info-uuid download-info))
(:download-info-s3-url download-info))
download-info))
download-info-list)]
(if finished-download-info
finished-download-info
(recur (async/timeout interval)))))))))
(defn new-task--wait-download-info-ready
[get-ws-create-task download-info-uuid graph-uuid timeout-ms]
(->
(m/sp
(loop []
(m/? (m/sleep 3000))
(let [{:keys [download-info-list]}
(m/? (r.client/send&recv get-ws-create-task {:action "download-info-list"
:graph-uuid graph-uuid}))]
(if-let [found-download-info
(some
(fn [download-info]
(when (and (= download-info-uuid (:download-info-uuid download-info))
(:download-info-s3-url download-info))
download-info))
download-info-list)]
found-download-info
(recur)))))
(m/timeout timeout-ms :timeout)))
(defn <download-graph-from-s3
[graph-uuid graph-name s3-url]