Changeset: c80e7f4d832d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/c80e7f4d832d Modified Files: tools/merovingian/ChangeLog.Mar2025 tools/merovingian/daemon/forkmserver.c tools/merovingian/daemon/merovingian.h Branch: Mar2025 Log Message:
Implemented a crash counter in monetdbd. diffs (64 lines): diff --git a/tools/merovingian/ChangeLog.Mar2025 b/tools/merovingian/ChangeLog.Mar2025 --- a/tools/merovingian/ChangeLog.Mar2025 +++ b/tools/merovingian/ChangeLog.Mar2025 @@ -1,3 +1,11 @@ # ChangeLog file for sql/src/backends/monet5/merovingian # This file is updated with mchangelog +* Thu May 22 2025 Sjoerd Mullender <[email protected]> +- When mserver5 is started by monetdbd due to an implicit request + (application trying to connect to a database), and mserver5 crashes + or exits before a connection can be established, monetdbd will stop + trying to start the server after a few attempts. When using an explicit + command to start the server (using monetdb start), monetdbd will always + attempt to start the server. + diff --git a/tools/merovingian/daemon/forkmserver.c b/tools/merovingian/daemon/forkmserver.c --- a/tools/merovingian/daemon/forkmserver.c +++ b/tools/merovingian/daemon/forkmserver.c @@ -322,6 +322,14 @@ forkMserver(const char *database, sabdb* pthread_mutex_unlock(&dp->fork_lock); return(NO_ERR); case SABdbCrashed: + if (!force && dp->crashcount > 4) { + state = (*stats)->state; + msab_freeStatus(stats); + freeConfFile(ckv); + free(ckv); + pthread_mutex_unlock(&dp->fork_lock); + return newErr("too many startup failures for database %s: fix database and try `monetdb start %s'", database, database); + } t = localtime(&info.lastcrash); strftime(tstr, sizeof(tstr), "%Y-%m-%d %H:%M:%S", t); secondsToString(upmin, info.minuptime, 1); @@ -809,6 +817,10 @@ forkMserver(const char *database, sabdb* if (dp->pid == -1) { state = (*stats)->state; + /* do this while we still have the lock */ + if (!force) + dp->crashcount++; + pthread_mutex_unlock(&_mero_topdp_lock); pthread_mutex_unlock(&dp->fork_lock); @@ -851,6 +863,8 @@ forkMserver(const char *database, sabdb* } } + dp->crashcount = 0; + pthread_mutex_unlock(&_mero_topdp_lock); pthread_mutex_unlock(&dp->fork_lock); diff --git a/tools/merovingian/daemon/merovingian.h b/tools/merovingian/daemon/merovingian.h --- a/tools/merovingian/daemon/merovingian.h +++ b/tools/merovingian/daemon/merovingian.h @@ -51,6 +51,7 @@ typedef struct _dpair { } input[2]; mtype type; /* type of process */ short flag; /* flag internal to logListener */ + short crashcount; /* number of crashes during startup */ pid_t pid; /* this process' id */ char *dbname; /* the database that this server serves */ pthread_mutex_t fork_lock; _______________________________________________ checkin-list mailing list -- [email protected] To unsubscribe send an email to [email protected]
