diff --git a/backend/resources/climit.edn b/backend/resources/climit.edn index 7d8234499b..3d1ae7f770 100644 --- a/backend/resources/climit.edn +++ b/backend/resources/climit.edn @@ -38,5 +38,11 @@ :create-file-snapshot/global {:permits 3} - :create-file-snapshot/by-profile - {:permits 1 :queue 2 :timeout 60000}} +:create-file-snapshot/by-profile +{:permits 1 :queue 2 :timeout 60000} + +:import-binfile/global +{:permits 4} + +:import-binfile/by-profile +{:permits 1 :queue 2}} diff --git a/backend/src/app/rpc/commands/binfile.clj b/backend/src/app/rpc/commands/binfile.clj index 313391e76a..f4665c7e44 100644 --- a/backend/src/app/rpc/commands/binfile.clj +++ b/backend/src/app/rpc/commands/binfile.clj @@ -21,6 +21,7 @@ [app.loggers.webhooks :as-alias webhooks] [app.media :as media] [app.rpc :as-alias rpc] + [app.rpc.climit :as-alias climit] [app.rpc.commands.files :as files] [app.rpc.commands.media :as media-cmd] [app.rpc.commands.projects :as projects] @@ -144,7 +145,9 @@ ::webhooks/event? true ::sse/stream? true - ::sm/params schema:import-binfile} + ::sm/params schema:import-binfile + ::climit/id [[:import-binfile/by-profile ::rpc/profile-id] + [:import-binfile/global]]} [{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id project-id version upload-id] :as params}] (projects/check-edition-permissions! pool profile-id project-id) (let [version (or version 3) diff --git a/backend/test/backend_tests/rpc_binfile_test.clj b/backend/test/backend_tests/rpc_binfile_test.clj index 5ebf83bf18..a99f531648 100644 --- a/backend/test/backend_tests/rpc_binfile_test.clj +++ b/backend/test/backend_tests/rpc_binfile_test.clj @@ -9,6 +9,7 @@ [app.common.schema :as sm] [app.common.uuid :as uuid] [app.rpc :as-alias rpc] + [app.rpc.climit :as-alias climit] [app.rpc.commands.binfile :as binfile] [backend-tests.helpers :as th] [clojure.test :as t] @@ -40,3 +41,10 @@ ;; (Currently this will fail because file-id is still in schema) (t/is (false? (validator params-with-file-id)) "params with file-id should be rejected"))) + +(t/deftest import-binfile-has-concurrency-limit + ;; N1-10: import-binfile must have a concurrency limit to prevent + ;; connection pool exhaustion from concurrent imports + (let [mdata (meta #'binfile/sm$import-binfile)] + (t/is (some? (::climit/id mdata)) + "import-binfile must have ::climit/id metadata")))