gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libeufin] branch master updated: exception handling


From: gnunet
Subject: [libeufin] branch master updated: exception handling
Date: Fri, 11 Dec 2020 15:55:10 +0100

This is an automated email from the git hooks/post-receive script.

ms pushed a commit to branch master
in repository libeufin.

The following commit(s) were added to refs/heads/master by this push:
     new 5fed12a  exception handling
5fed12a is described below

commit 5fed12a8f75cf4d8234984542de591ec869def8a
Author: MS <ms@taler.net>
AuthorDate: Fri Dec 11 15:54:37 2020 +0100

    exception handling
---
 nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt  | 10 ++--
 .../tech/libeufin/nexus/server/NexusServer.kt      |  6 +--
 .../src/main/kotlin/tech/libeufin/sandbox/Main.kt  | 13 ++---
 util/src/main/kotlin/Errors.kt                     | 56 ++++++++++++++++++++++
 4 files changed, 66 insertions(+), 19 deletions(-)

diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt 
b/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt
index bc4a7c3..fadb819 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt
@@ -34,6 +34,7 @@ import org.slf4j.LoggerFactory
 import tech.libeufin.nexus.server.serverMain
 import tech.libeufin.util.CryptoUtil.hashpw
 import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
+import execThrowableOrTerminate
 import tech.libeufin.nexus.iso20022.parseCamtMessage
 import tech.libeufin.util.DEFAULT_DB_CONNECTION
 import tech.libeufin.util.XMLUtil
@@ -80,12 +81,9 @@ class ResetTables : CliktCommand("Drop all the tables from 
the database") {
     }
     private val dbConnString by option().default(DEFAULT_DB_CONNECTION)
     override fun run() {
-        try {
+        execThrowableOrTerminate {
             dbDropTables(dbConnString)
             dbCreateTables(dbConnString)
-        } catch (e: Exception) {
-            println("Database ($dbConnString) action was unsuccessful")
-            return
         }
     }
 }
@@ -95,7 +93,9 @@ class Superuser : CliktCommand("Add superuser or change pw") {
     private val username by argument()
     private val password by option().prompt(requireConfirmation = true, 
hideInput = true)
     override fun run() {
-        dbCreateTables(dbConnString)
+        execThrowableOrTerminate {
+            dbCreateTables(dbConnString)
+        }
         transaction {
             val hashedPw = hashpw(password)
             val user = NexusUserEntity.findById(username)
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/server/NexusServer.kt 
b/nexus/src/main/kotlin/tech/libeufin/nexus/server/NexusServer.kt
index 8daab12..60edeb0 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/server/NexusServer.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/server/NexusServer.kt
@@ -27,6 +27,7 @@ import 
com.fasterxml.jackson.databind.exc.MismatchedInputException
 import com.fasterxml.jackson.module.kotlin.KotlinModule
 import com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException
 import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
+import execThrowableOrTerminate
 import io.ktor.application.ApplicationCall
 import io.ktor.application.ApplicationCallPipeline
 import io.ktor.application.call
@@ -209,11 +210,8 @@ fun requireBankConnection(call: ApplicationCall, 
parameterKey: String): NexusBan
 }
 
 fun serverMain(dbName: String, host: String) {
-    try {
+    execThrowableOrTerminate {
         dbCreateTables(dbName)
-    } catch (e: Exception) {
-        tech.libeufin.util.logger.error("Could not create tables at database: 
$dbName")
-        return
     }
     val client = HttpClient {
         expectSuccess = false // this way, it does not throw exceptions on != 
200 responses.
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt 
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
index cad95dd..907f77e 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
@@ -61,6 +61,7 @@ import com.github.ajalt.clikt.core.subcommands
 import com.github.ajalt.clikt.output.CliktHelpFormatter
 import com.github.ajalt.clikt.parameters.options.default
 import com.github.ajalt.clikt.parameters.options.option
+import execThrowableOrTerminate
 import io.ktor.request.*
 import tech.libeufin.sandbox.BankAccountTransactionsTable.amount
 import tech.libeufin.sandbox.BankAccountTransactionsTable.creditorBic
@@ -100,12 +101,9 @@ class ResetTables : CliktCommand("Drop all the tables from 
the database") {
     }
     private val dbConnString by option().default(DEFAULT_DB_CONNECTION)
     override fun run() {
-        try {
+        execThrowableOrTerminate {
             dbDropTables(dbConnString)
             dbCreateTables(dbConnString)
-        } catch (e: Exception) {
-            println("Database ($dbConnString) action was unsuccessful")
-            return
         }
     }
 }
@@ -176,12 +174,7 @@ fun main(args: Array<String>) {
 }
 
 fun serverMain(dbName: String) {
-    try {
-        dbCreateTables(dbName)
-    } catch (e: Exception) {
-        logger.error("Could not create tables at database: $dbName")
-        return
-    }
+    execThrowableOrTerminate { dbCreateTables(dbName) }
     val server = embeddedServer(Netty, port = 5000) {
         install(CallLogging) {
             this.level = Level.DEBUG
diff --git a/util/src/main/kotlin/Errors.kt b/util/src/main/kotlin/Errors.kt
new file mode 100644
index 0000000..eac3656
--- /dev/null
+++ b/util/src/main/kotlin/Errors.kt
@@ -0,0 +1,56 @@
+import kotlin.system.exitProcess
+
+/*
+ * This file is part of LibEuFin.
+ * Copyright (C) 2019 Stanisci and Dold.
+
+ * LibEuFin is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3, or
+ * (at your option) any later version.
+
+ * LibEuFin is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General
+ * Public License for more details.
+
+ * You should have received a copy of the GNU Affero General Public
+ * License along with LibEuFin; see the file COPYING.  If not, see
+ * <http://www.gnu.org/licenses/>
+ */
+
+/**
+ * Helper function that wraps throwable code and
+ * (1) prints the error message and (2) terminates
+ * the current process, should one exception occur.
+ *
+ * Note: should be called when it is REALLY required
+ * to stop the process when the exception cannot be
+ * handled.  Notably, when the database cannot be reached.
+ */
+fun execThrowableOrTerminate(func: () -> Unit) {
+    try {
+        func()
+    } catch (e: Exception) {
+        println(e.message)
+        exitProcess(1)
+    }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]