Blob Blame History Raw
From f5bfc641c38ca0dbd37c8993bc74f81c7e0c9b66 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Vr=C3=A1til?= <dvratil@redhat.com>
Date: Tue, 6 May 2014 15:27:07 +0200
Subject: [PATCH 4/7] Fix PostgreSQL startup when akonadiserverrc contains
 empty values

When there are empty configuration options in akonadiserverrc (like Host),
we would still pick them up and use them as valid values, which is wrong,
because then we work with empty socket path etc.

Instead we always replace non-existent and empty config values with the
default ones, so that Akonadi with PostgreSQL is always able to start.
---
 server/src/storage/dbconfigpostgresql.cpp | 27 ++++++++++++++++++++-------
 1 file changed, 20 insertions(+), 7 deletions(-)

diff --git a/server/src/storage/dbconfigpostgresql.cpp b/server/src/storage/dbconfigpostgresql.cpp
index 10460d4..66e4605 100644
--- a/server/src/storage/dbconfigpostgresql.cpp
+++ b/server/src/storage/dbconfigpostgresql.cpp
@@ -29,6 +29,7 @@
 #include <QtSql/QSqlDriver>
 #include <QtSql/QSqlError>
 #include <QtSql/QSqlQuery>
+#include <unistd.h>
 
 #include <unistd.h>
 
@@ -90,13 +91,29 @@ bool DbConfigPostgresql::init( QSettings &settings )
   // read settings for current driver
   settings.beginGroup( driverName() );
   mDatabaseName = settings.value( QLatin1String( "Name" ), defaultDatabaseName() ).toString();
+  if ( mDatabaseName.isEmpty() ) {
+    mDatabaseName = defaultDatabaseName();
+  }
   mHostName = settings.value( QLatin1String( "Host" ), defaultHostName ).toString();
+  if ( mHostName.isEmpty() ) {
+    mHostName = defaultHostName;
+  }
+  // User, password and Options can be empty and still valid, so don't override them
   mUserName = settings.value( QLatin1String( "User" ) ).toString();
   mPassword = settings.value( QLatin1String( "Password" ) ).toString();
   mConnectionOptions = settings.value( QLatin1String( "Options" ), defaultOptions ).toString();
   mServerPath = settings.value( QLatin1String( "ServerPath" ), defaultServerPath ).toString();
+  if ( mInternalServer && mServerPath.isEmpty() ) {
+    mServerPath = defaultServerPath;
+  }
   mInitDbPath = settings.value( QLatin1String( "InitDbPath" ), defaultInitDbPath ).toString();
+  if ( mInternalServer && mInitDbPath.isEmpty() ) {
+    mInitDbPath = defaultInitDbPath;
+  }
   mPgData = settings.value( QLatin1String( "PgData" ), defaultPgData ).toString();
+  if ( mPgData.isEmpty() ) {
+    mPgData = defaultPgData;
+  }
   settings.endGroup();
 
   // store back the default values
@@ -104,12 +121,8 @@ bool DbConfigPostgresql::init( QSettings &settings )
   settings.setValue( QLatin1String( "Name" ), mDatabaseName );
   settings.setValue( QLatin1String( "Host" ), mHostName );
   settings.setValue( QLatin1String( "Options" ), mConnectionOptions );
-  if ( !mServerPath.isEmpty() ) {
-    settings.setValue( QLatin1String( "ServerPath" ), mServerPath );
-  }
-  if ( !mInitDbPath.isEmpty() ) {
-    settings.setValue( QLatin1String( "InitDbPath" ), mInitDbPath );
-  }
+  settings.setValue( QLatin1String( "ServerPath" ), mServerPath );
+  settings.setValue( QLatin1String( "InitDbPath" ), mInitDbPath );
   settings.setValue( QLatin1String( "StartServer" ), mInternalServer );
   settings.endGroup();
   settings.sync();
@@ -203,7 +216,7 @@ void DbConfigPostgresql::startInternalServer()
         break;
       }
 
-      if ( pgCtl.waitForFinished( 500 ) ) {
+      if ( pgCtl.waitForFinished( 500 ) && pgCtl.exitCode() ) {
         akError() << "Database process exited unexpectedly during initial connection!";
         akError() << "executable:" << mServerPath;
         akError() << "arguments:" << arguments;
-- 
1.9.3