Rex Dieter 78fb1bf
From f5bfc641c38ca0dbd37c8993bc74f81c7e0c9b66 Mon Sep 17 00:00:00 2001
Rex Dieter 78fb1bf
From: =?UTF-8?q?Dan=20Vr=C3=A1til?= <dvratil@redhat.com>
Rex Dieter 78fb1bf
Date: Tue, 6 May 2014 15:27:07 +0200
Rex Dieter 78fb1bf
Subject: [PATCH 4/7] Fix PostgreSQL startup when akonadiserverrc contains
Rex Dieter 78fb1bf
 empty values
Rex Dieter 78fb1bf
Rex Dieter 78fb1bf
When there are empty configuration options in akonadiserverrc (like Host),
Rex Dieter 78fb1bf
we would still pick them up and use them as valid values, which is wrong,
Rex Dieter 78fb1bf
because then we work with empty socket path etc.
Rex Dieter 78fb1bf
Rex Dieter 78fb1bf
Instead we always replace non-existent and empty config values with the
Rex Dieter 78fb1bf
default ones, so that Akonadi with PostgreSQL is always able to start.
Rex Dieter 78fb1bf
---
Rex Dieter 78fb1bf
 server/src/storage/dbconfigpostgresql.cpp | 27 ++++++++++++++++++++-------
Rex Dieter 78fb1bf
 1 file changed, 20 insertions(+), 7 deletions(-)
Rex Dieter 78fb1bf
Rex Dieter 78fb1bf
diff --git a/server/src/storage/dbconfigpostgresql.cpp b/server/src/storage/dbconfigpostgresql.cpp
Rex Dieter 78fb1bf
index 10460d4..66e4605 100644
Rex Dieter 78fb1bf
--- a/server/src/storage/dbconfigpostgresql.cpp
Rex Dieter 78fb1bf
+++ b/server/src/storage/dbconfigpostgresql.cpp
Rex Dieter 78fb1bf
@@ -29,6 +29,7 @@
Rex Dieter 78fb1bf
 #include <QtSql/QSqlDriver>
Rex Dieter 78fb1bf
 #include <QtSql/QSqlError>
Rex Dieter 78fb1bf
 #include <QtSql/QSqlQuery>
Rex Dieter 78fb1bf
+#include <unistd.h>
Rex Dieter 78fb1bf
 
Rex Dieter 78fb1bf
 #include <unistd.h>
Rex Dieter 78fb1bf
 
Rex Dieter 78fb1bf
@@ -90,13 +91,29 @@ bool DbConfigPostgresql::init( QSettings &settings )
Rex Dieter 78fb1bf
   // read settings for current driver
Rex Dieter 78fb1bf
   settings.beginGroup( driverName() );
Rex Dieter 78fb1bf
   mDatabaseName = settings.value( QLatin1String( "Name" ), defaultDatabaseName() ).toString();
Rex Dieter 78fb1bf
+  if ( mDatabaseName.isEmpty() ) {
Rex Dieter 78fb1bf
+    mDatabaseName = defaultDatabaseName();
Rex Dieter 78fb1bf
+  }
Rex Dieter 78fb1bf
   mHostName = settings.value( QLatin1String( "Host" ), defaultHostName ).toString();
Rex Dieter 78fb1bf
+  if ( mHostName.isEmpty() ) {
Rex Dieter 78fb1bf
+    mHostName = defaultHostName;
Rex Dieter 78fb1bf
+  }
Rex Dieter 78fb1bf
+  // User, password and Options can be empty and still valid, so don't override them
Rex Dieter 78fb1bf
   mUserName = settings.value( QLatin1String( "User" ) ).toString();
Rex Dieter 78fb1bf
   mPassword = settings.value( QLatin1String( "Password" ) ).toString();
Rex Dieter 78fb1bf
   mConnectionOptions = settings.value( QLatin1String( "Options" ), defaultOptions ).toString();
Rex Dieter 78fb1bf
   mServerPath = settings.value( QLatin1String( "ServerPath" ), defaultServerPath ).toString();
Rex Dieter 78fb1bf
+  if ( mInternalServer && mServerPath.isEmpty() ) {
Rex Dieter 78fb1bf
+    mServerPath = defaultServerPath;
Rex Dieter 78fb1bf
+  }
Rex Dieter 78fb1bf
   mInitDbPath = settings.value( QLatin1String( "InitDbPath" ), defaultInitDbPath ).toString();
Rex Dieter 78fb1bf
+  if ( mInternalServer && mInitDbPath.isEmpty() ) {
Rex Dieter 78fb1bf
+    mInitDbPath = defaultInitDbPath;
Rex Dieter 78fb1bf
+  }
Rex Dieter 78fb1bf
   mPgData = settings.value( QLatin1String( "PgData" ), defaultPgData ).toString();
Rex Dieter 78fb1bf
+  if ( mPgData.isEmpty() ) {
Rex Dieter 78fb1bf
+    mPgData = defaultPgData;
Rex Dieter 78fb1bf
+  }
Rex Dieter 78fb1bf
   settings.endGroup();
Rex Dieter 78fb1bf
 
Rex Dieter 78fb1bf
   // store back the default values
Rex Dieter 78fb1bf
@@ -104,12 +121,8 @@ bool DbConfigPostgresql::init( QSettings &settings )
Rex Dieter 78fb1bf
   settings.setValue( QLatin1String( "Name" ), mDatabaseName );
Rex Dieter 78fb1bf
   settings.setValue( QLatin1String( "Host" ), mHostName );
Rex Dieter 78fb1bf
   settings.setValue( QLatin1String( "Options" ), mConnectionOptions );
Rex Dieter 78fb1bf
-  if ( !mServerPath.isEmpty() ) {
Rex Dieter 78fb1bf
-    settings.setValue( QLatin1String( "ServerPath" ), mServerPath );
Rex Dieter 78fb1bf
-  }
Rex Dieter 78fb1bf
-  if ( !mInitDbPath.isEmpty() ) {
Rex Dieter 78fb1bf
-    settings.setValue( QLatin1String( "InitDbPath" ), mInitDbPath );
Rex Dieter 78fb1bf
-  }
Rex Dieter 78fb1bf
+  settings.setValue( QLatin1String( "ServerPath" ), mServerPath );
Rex Dieter 78fb1bf
+  settings.setValue( QLatin1String( "InitDbPath" ), mInitDbPath );
Rex Dieter 78fb1bf
   settings.setValue( QLatin1String( "StartServer" ), mInternalServer );
Rex Dieter 78fb1bf
   settings.endGroup();
Rex Dieter 78fb1bf
   settings.sync();
Rex Dieter 78fb1bf
@@ -203,7 +216,7 @@ void DbConfigPostgresql::startInternalServer()
Rex Dieter 78fb1bf
         break;
Rex Dieter 78fb1bf
       }
Rex Dieter 78fb1bf
 
Rex Dieter 78fb1bf
-      if ( pgCtl.waitForFinished( 500 ) ) {
Rex Dieter 78fb1bf
+      if ( pgCtl.waitForFinished( 500 ) && pgCtl.exitCode() ) {
Rex Dieter 78fb1bf
         akError() << "Database process exited unexpectedly during initial connection!";
Rex Dieter 78fb1bf
         akError() << "executable:" << mServerPath;
Rex Dieter 78fb1bf
         akError() << "arguments:" << arguments;
Rex Dieter 78fb1bf
-- 
Rex Dieter 78fb1bf
1.9.3
Rex Dieter 78fb1bf