From b2d4bfd0a8f7471c2cbd67f195391436bffcdf63 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Wed, 17 Aug 2022 22:08:01 +0100 Subject: [PATCH] split migration to multiple transactions (trying to prevent Android crash) (#502) --- .../Agent/Store/SQLite/Migrations.hs | 17 +++++++++--- .../Migrations/M20220811_onion_hosts.hs | 26 ------------------- 2 files changed, 14 insertions(+), 29 deletions(-) diff --git a/src/Simplex/Messaging/Agent/Store/SQLite/Migrations.hs b/src/Simplex/Messaging/Agent/Store/SQLite/Migrations.hs index b0f78635a..2f5491674 100644 --- a/src/Simplex/Messaging/Agent/Store/SQLite/Migrations.hs +++ b/src/Simplex/Messaging/Agent/Store/SQLite/Migrations.hs @@ -16,21 +16,27 @@ module Simplex.Messaging.Agent.Store.SQLite.Migrations ) where -import Control.Monad (forM_) +import Control.Monad (forM_, when) import Data.List (intercalate, sortBy) +import Data.List.NonEmpty (NonEmpty) +import qualified Data.Map as M import Data.Ord (comparing) import Data.Text (Text) +import Data.Text.Encoding (decodeLatin1) import Data.Time.Clock (getCurrentTime) import Database.SQLite.Simple (Connection, Only (..), Query (..)) import qualified Database.SQLite.Simple as DB import Database.SQLite.Simple.QQ (sql) import qualified Database.SQLite3 as SQLite3 +import Simplex.Messaging.Agent.Protocol (extraSMPServerHosts) import Simplex.Messaging.Agent.Store.SQLite.Migrations.M20220101_initial import Simplex.Messaging.Agent.Store.SQLite.Migrations.M20220301_snd_queue_keys import Simplex.Messaging.Agent.Store.SQLite.Migrations.M20220322_notifications import Simplex.Messaging.Agent.Store.SQLite.Migrations.M20220608_v2 import Simplex.Messaging.Agent.Store.SQLite.Migrations.M20220625_v2_ntf_mode import Simplex.Messaging.Agent.Store.SQLite.Migrations.M20220811_onion_hosts +import Simplex.Messaging.Encoding.String +import Simplex.Messaging.Transport.Client (TransportHost) data Migration = Migration {name :: String, up :: Text} deriving (Show) @@ -57,11 +63,16 @@ get conn migrations = <$> DB.query_ conn "SELECT name FROM migrations ORDER BY name ASC;" run :: Connection -> [Migration] -> IO () -run conn ms = DB.withImmediateTransaction conn . forM_ ms $ - \Migration {name, up} -> insert name >> execSQL up +run conn ms = forM_ ms $ \Migration {name, up} -> do + DB.withImmediateTransaction conn $ insert name >> execSQL up + when (name == "m20220811_onion_hosts") updateServers where insert name = DB.execute conn "INSERT INTO migrations (name, ts) VALUES (?, ?);" . (name,) =<< getCurrentTime execSQL = SQLite3.exec $ DB.connectionHandle conn + updateServers = forM_ (M.assocs extraSMPServerHosts) $ \(h, h') -> + DB.withImmediateTransaction conn $ + let hs = decodeLatin1 . strEncode $ ([h, h'] :: NonEmpty TransportHost) + in DB.execute conn "UPDATE servers SET host = ? WHERE host = ?" (hs, decodeLatin1 $ strEncode h) initialize :: Connection -> IO () initialize conn = diff --git a/src/Simplex/Messaging/Agent/Store/SQLite/Migrations/M20220811_onion_hosts.hs b/src/Simplex/Messaging/Agent/Store/SQLite/Migrations/M20220811_onion_hosts.hs index 6c48957be..b383ea6f5 100644 --- a/src/Simplex/Messaging/Agent/Store/SQLite/Migrations/M20220811_onion_hosts.hs +++ b/src/Simplex/Messaging/Agent/Store/SQLite/Migrations/M20220811_onion_hosts.hs @@ -13,30 +13,4 @@ ALTER TABLE conn_confirmations ADD COLUMN smp_client_version INTEGER; UPDATE ntf_servers SET ntf_host = 'ntf2.simplex.im,ntg7jdjy2i3qbib3sykiho3enekwiaqg3icctliqhtqcg6jmoh6cxiad.onion' WHERE ntf_host = 'ntf2.simplex.im'; - --- same servers as defined in Simplex.Messaging.Agent.Protocol, line 592 - -UPDATE servers -SET host = 'smp4.simplex.im,o5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion' -WHERE host = 'smp4.simplex.im'; - -UPDATE servers -SET host = 'smp5.simplex.im,jjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion' -WHERE host = 'smp5.simplex.im'; - -UPDATE servers -SET host = 'smp6.simplex.im,bylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion' -WHERE host = 'smp6.simplex.im'; - -UPDATE servers -SET host = 'smp8.simplex.im,beccx4yfxxbvyhqypaavemqurytl6hozr47wfc7uuecacjqdvwpw2xid.onion' -WHERE host = 'smp8.simplex.im'; - -UPDATE servers -SET host = 'smp9.simplex.im,jssqzccmrcws6bhmn77vgmhfjmhwlyr3u7puw4erkyoosywgl67slqqd.onion' -WHERE host = 'smp9.simplex.im'; - -UPDATE servers -SET host = 'smp10.simplex.im,rb2pbttocvnbrngnwziclp2f4ckjq65kebafws6g4hy22cdaiv5dwjqd.onion' -WHERE host = 'smp10.simplex.im'; |]