From 67a31949037990513021d30659fac72a76e226a9 Mon Sep 17 00:00:00 2001 From: Joe Nelson Date: Mon, 7 Dec 2015 16:40:12 -0800 Subject: [PATCH 1/4] Release all db connections on ctrl-c Fixes #268 --- postgrest.cabal | 1 + src/PostgREST/Main.hs | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/postgrest.cabal b/postgrest.cabal index 6ad23dfa6..54ab5b78c 100644 --- a/postgrest.cabal +++ b/postgrest.cabal @@ -61,6 +61,7 @@ executable postgrest , HTTP, http-types , MissingH , Ranged-sets + , unix >= 2.7 && < 3 hs-source-dirs: src other-modules: Paths_postgrest diff --git a/src/PostgREST/Main.hs b/src/PostgREST/Main.hs index 8faec1be8..a331f197f 100644 --- a/src/PostgREST/Main.hs +++ b/src/PostgREST/Main.hs @@ -10,7 +10,9 @@ import PostgREST.Error (pgErrResponse, PgError) import PostgREST.Middleware import PostgREST.DbStructure -import Control.Monad (unless) +import Control.Concurrent (myThreadId) +import Control.Exception.Base (throwTo, AsyncException(..)) +import Control.Monad (unless, void) import Control.Monad.IO.Class (liftIO) import Data.Aeson (encode) import Data.Functor.Identity @@ -26,6 +28,7 @@ import Network.Wai.Middleware.RequestLogger (logStdout) import System.IO (BufferMode (..), hSetBuffering, stderr, stdin, stdout) +import System.Posix.Signals import Web.JWT (secret) isServerVersionSupported :: H.Session P.Postgres IO Bool @@ -69,6 +72,13 @@ main = do <> show minimumPgVersion) ) supportedOrError + tid <- myThreadId + void $ installHandler keyboardSignal (Catch $ do + putStrLn "\nReleasing connection pool..." + H.releasePool pool + throwTo tid UserInterrupt + ) Nothing + let txSettings = Just (H.ReadCommitted, Just True) dbOrError <- H.session pool $ H.tx txSettings $ getDbStructure (cs $ configSchema conf) dbStructure <- either hasqlError return dbOrError From ca5078b4f8e744901ef55e0624afa4a00e6b802c Mon Sep 17 00:00:00 2001 From: Joe Nelson Date: Mon, 7 Dec 2015 16:40:28 -0800 Subject: [PATCH 2/4] Alphabetize other imports --- src/PostgREST/Main.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PostgREST/Main.hs b/src/PostgREST/Main.hs index a331f197f..c0d2368f5 100644 --- a/src/PostgREST/Main.hs +++ b/src/PostgREST/Main.hs @@ -6,9 +6,9 @@ import PostgREST.Config (AppConfig (..), minimumPgVersion, prettyVersion, readOptions) -import PostgREST.Error (pgErrResponse, PgError) -import PostgREST.Middleware import PostgREST.DbStructure +import PostgREST.Error (PgError, pgErrResponse) +import PostgREST.Middleware import Control.Concurrent (myThreadId) import Control.Exception.Base (throwTo, AsyncException(..)) From 3bc1ad0133690155d10616cb0e2bebe245765e9f Mon Sep 17 00:00:00 2001 From: Joe Nelson Date: Mon, 7 Dec 2015 16:55:45 -0800 Subject: [PATCH 3/4] Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 205ffa2f5..10746e8db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Miscalculation of time used for expiring tokens - @calebmer - Remove bcrypt dependency to fix Windows build - @begriffs - Detect relations event when authenticator does not have rights to intermediate tables - @ruslantalpa +- Ensure db connections released on sigint - @begriffs ### Added - Allow order by computed columns - @diogob From 969a95b29b029b88f389105f485b0bb9bd557cdf Mon Sep 17 00:00:00 2001 From: Joe Nelson Date: Mon, 7 Dec 2015 23:34:34 -0800 Subject: [PATCH 4/4] Remove shutdown message which spoils log format --- src/PostgREST/Main.hs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/PostgREST/Main.hs b/src/PostgREST/Main.hs index c0d2368f5..6636d632b 100644 --- a/src/PostgREST/Main.hs +++ b/src/PostgREST/Main.hs @@ -74,7 +74,6 @@ main = do tid <- myThreadId void $ installHandler keyboardSignal (Catch $ do - putStrLn "\nReleasing connection pool..." H.releasePool pool throwTo tid UserInterrupt ) Nothing