diff --git a/enterprise/backend/src/metabase_enterprise/audit_db.clj b/enterprise/backend/src/metabase_enterprise/audit_db.clj index 6694fb52ff98e6a02486a433d51f756d1bb217ef..f9506545824dfb090fbcdb8148afa0a86d6ed694 100644 --- a/enterprise/backend/src/metabase_enterprise/audit_db.clj +++ b/enterprise/backend/src/metabase_enterprise/audit_db.clj @@ -249,7 +249,6 @@ (ia-content->plugins (plugins/plugins-dir)) (let [[last-checksum current-checksum] (get-last-and-current-checksum)] (when (should-load-audit? (load-analytics-content) last-checksum current-checksum) - (last-analytics-checksum! current-checksum) (log/info (str "Loading Analytics Content from: " (instance-analytics-plugin-dir (plugins/plugins-dir)))) ;; The EE token might not have :serialization enabled, but audit features should still be able to use it. (let [report (log/with-no-logs @@ -258,7 +257,9 @@ :token-check? false))] (if (not-empty (:errors report)) (log/info (str "Error Loading Analytics Content: " (pr-str report))) - (log/info (str "Loading Analytics Content Complete (" (count (:seen report)) ") entities loaded.")))))) + (do + (log/info (str "Loading Analytics Content Complete (" (count (:seen report)) ") entities loaded.")) + (last-analytics-checksum! current-checksum)))))) (when-let [audit-db (t2/select-one :model/Database :is_audit true)] (adjust-audit-db-to-host! audit-db)))) diff --git a/enterprise/backend/test/metabase_enterprise/audit_db_test.clj b/enterprise/backend/test/metabase_enterprise/audit_db_test.clj index 0a45fcb30568cd2fd63df705f7ea6a3a72cc3180..0912f65297772b7b11e68a293649d0170e27eade 100644 --- a/enterprise/backend/test/metabase_enterprise/audit_db_test.clj +++ b/enterprise/backend/test/metabase_enterprise/audit_db_test.clj @@ -5,6 +5,7 @@ [clojure.string :as str] [clojure.test :refer [deftest is testing use-fixtures]] [metabase-enterprise.audit-db :as audit-db] + [metabase-enterprise.serialization.cmd :as serialization.cmd] [metabase-enterprise.serialization.v2.backfill-ids :as serdes.backfill] [metabase.core :as mbc] [metabase.models.data-permissions :as data-perms] @@ -141,6 +142,17 @@ (is (= :metabase-enterprise.audit-db/no-op (audit-db/ensure-audit-db-installed!)))))))) +(deftest checksum-not-recorded-when-load-fails-test + (mt/test-drivers #{:postgres :h2 :mysql} + (t2/delete! :model/Database :is_audit true) + (testing "If audit content loading throws an exception, the checksum should not be stored" + (audit-db/last-analytics-checksum! 0) + (with-redefs [serialization.cmd/v2-load-internal! (fn [& _] (throw (Exception. "Audit loading failed")))] + (is (thrown-with-msg? Exception + #"Audit loading failed" + (audit-db/ensure-audit-db-installed!))) + (is (= 0 (audit-db/last-analytics-checksum))))))) + (deftest should-load-audit?-test (testing "load-analytics-content + checksums dont match => load" (is (= (#'audit-db/should-load-audit? true 1 3) true)))