xtdb.google_cloud.clj Maven / Gradle / Ivy
(ns xtdb.google-cloud
(:require [xtdb.buffer-pool :as bp]
[xtdb.google-cloud.object-store :as os]
[xtdb.util :as util])
(:import [com.google.cloud.storage StorageOptions StorageOptions$Builder]
[xtdb.api.storage GoogleCloudStorage GoogleCloudStorage$Factory ObjectStore]))
(defmethod bp/->object-store-factory ::object-store [_ {:keys [project-id bucket prefix]}]
(cond-> (GoogleCloudStorage/googleCloudStorage project-id bucket)
prefix (.prefix (util/->path prefix))))
(defn open-object-store ^ObjectStore [^GoogleCloudStorage$Factory factory]
(let [project-id (.getProjectId factory)
bucket (.getBucket factory)
prefix (.getPrefix factory)
prefix-with-version (if prefix (.resolve prefix bp/storage-root) bp/storage-root)
storage-service (-> (StorageOptions/newBuilder)
^StorageOptions$Builder (.setProjectId project-id)
^StorageOptions (.build)
(.getService))]
(os/->GoogleCloudStorageObjectStore storage-service bucket prefix-with-version)))
© 2015 - 2025 Weber Informatics LLC | Privacy Policy