From 2214ad59c57a69dd8c9b6c8fe257f37ccc72c7aa Mon Sep 17 00:00:00 2001 From: prabatuty Date: Tue, 19 Feb 2008 10:48:15 +0000 Subject: [PATCH] Moving csqlserver.cxx from server directory to tools directory --- src/tools/Makefile.am | 8 +-- src/tools/Makefile.in | 30 ++++---- src/tools/csqlserver.cxx | 178 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 197 insertions(+), 19 deletions(-) create mode 100644 src/tools/csqlserver.cxx diff --git a/src/tools/Makefile.am b/src/tools/Makefile.am index 95e302d6..a1e45d2e 100644 --- a/src/tools/Makefile.am +++ b/src/tools/Makefile.am @@ -1,6 +1,6 @@ INCLUDES = -I$(top_srcdir)/include $(all_includes) -I$(top_srcdir)/src/sql METASOURCES = AUTO -bin_PROGRAMS = csql catalog cachetable csqlserver1 +bin_PROGRAMS = csql catalog cachetable csqlserver csql_SOURCES = isql.cxx csql_LDADD = $(top_builddir)/src/server/.libs/libcsql $(top_builddir)/src/sql/.libs/libcsqlsql -lrt -lpthread -lcrypt @@ -12,7 +12,7 @@ cachetable_LDADD = $(top_builddir)/src/cache/libcacheload.la \ cachetable_LDFLAGS = -lcrypt -lodbc cachetable_SOURCES = cachetable.cxx -csqlserver1_LDADD = $(top_builddir)/src/cache/libcacheload.la \ +csqlserver_LDADD = $(top_builddir)/src/cache/libcacheload.la \ $(top_builddir)/src/server/libcsql.la -lrt -lpthread -lcrypt -csqlserver1_LDFLAGS = -lcrypt -lodbc -csqlserver1_SOURCES = csqlserver1.cxx +csqlserver_LDFLAGS = -lcrypt -lodbc +csqlserver_SOURCES = csqlserver.cxx diff --git a/src/tools/Makefile.in b/src/tools/Makefile.in index 1b191622..2f303aae 100644 --- a/src/tools/Makefile.in +++ b/src/tools/Makefile.in @@ -33,7 +33,7 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = csql$(EXEEXT) catalog$(EXEEXT) cachetable$(EXEEXT) \ - csqlserver1$(EXEEXT) + csqlserver$(EXEEXT) subdir = src/tools DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -63,13 +63,13 @@ am_csql_OBJECTS = isql.$(OBJEXT) csql_OBJECTS = $(am_csql_OBJECTS) csql_DEPENDENCIES = $(top_builddir)/src/server/.libs/libcsql \ $(top_builddir)/src/sql/.libs/libcsqlsql -am_csqlserver1_OBJECTS = csqlserver1.$(OBJEXT) -csqlserver1_OBJECTS = $(am_csqlserver1_OBJECTS) -csqlserver1_DEPENDENCIES = $(top_builddir)/src/cache/libcacheload.la \ +am_csqlserver_OBJECTS = csqlserver.$(OBJEXT) +csqlserver_OBJECTS = $(am_csqlserver_OBJECTS) +csqlserver_DEPENDENCIES = $(top_builddir)/src/cache/libcacheload.la \ $(top_builddir)/src/server/libcsql.la -csqlserver1_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ +csqlserver_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ - $(CXXFLAGS) $(csqlserver1_LDFLAGS) $(LDFLAGS) -o $@ + $(CXXFLAGS) $(csqlserver_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles @@ -83,9 +83,9 @@ CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ SOURCES = $(cachetable_SOURCES) $(catalog_SOURCES) $(csql_SOURCES) \ - $(csqlserver1_SOURCES) + $(csqlserver_SOURCES) DIST_SOURCES = $(cachetable_SOURCES) $(catalog_SOURCES) \ - $(csql_SOURCES) $(csqlserver1_SOURCES) + $(csql_SOURCES) $(csqlserver_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -212,11 +212,11 @@ cachetable_LDADD = $(top_builddir)/src/cache/libcacheload.la \ cachetable_LDFLAGS = -lcrypt -lodbc cachetable_SOURCES = cachetable.cxx -csqlserver1_LDADD = $(top_builddir)/src/cache/libcacheload.la \ +csqlserver_LDADD = $(top_builddir)/src/cache/libcacheload.la \ $(top_builddir)/src/server/libcsql.la -lrt -lpthread -lcrypt -csqlserver1_LDFLAGS = -lcrypt -lodbc -csqlserver1_SOURCES = csqlserver1.cxx +csqlserver_LDFLAGS = -lcrypt -lodbc +csqlserver_SOURCES = csqlserver.cxx all: all-am .SUFFIXES: @@ -287,9 +287,9 @@ catalog$(EXEEXT): $(catalog_OBJECTS) $(catalog_DEPENDENCIES) csql$(EXEEXT): $(csql_OBJECTS) $(csql_DEPENDENCIES) @rm -f csql$(EXEEXT) $(CXXLINK) $(csql_OBJECTS) $(csql_LDADD) $(LIBS) -csqlserver1$(EXEEXT): $(csqlserver1_OBJECTS) $(csqlserver1_DEPENDENCIES) - @rm -f csqlserver1$(EXEEXT) - $(csqlserver1_LINK) $(csqlserver1_OBJECTS) $(csqlserver1_LDADD) $(LIBS) +csqlserver$(EXEEXT): $(csqlserver_OBJECTS) $(csqlserver_DEPENDENCIES) + @rm -f csqlserver$(EXEEXT) + $(csqlserver_LINK) $(csqlserver_OBJECTS) $(csqlserver_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -299,7 +299,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cachetable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/catalog.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csqlserver1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csqlserver.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isql.Po@am__quote@ .cxx.o: diff --git a/src/tools/csqlserver.cxx b/src/tools/csqlserver.cxx new file mode 100644 index 00000000..39e52fcd --- /dev/null +++ b/src/tools/csqlserver.cxx @@ -0,0 +1,178 @@ +/*************************************************************************** + * Copyright (C) 2007 by www.databasecache.com * + * Contact: praba_tuty@databasecache.com * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 General Public License for more details. * + * * + ***************************************************************************/ +#include +#include +#include +#include +#include +#include +#include +#include + +int srvStop =0; +static void sigTermHandler(int sig) +{ + printf("Received signal %d\nStopping the server\n", sig); + srvStop = 1; +} + +bool checkDead(pid_t pid) +{ + int ret = os::kill(pid, 0); + if (ret == -1) return true; else return false; +} + +DbRetVal releaseAllResources(Database *sysdb, ThreadInfo *info ) +{ + printf("Releasing all the resources for process %d %lu\n", info->pid_, info->thrid_); + //recover for all the mutexes in has_ + for (int i =0; i < MAX_MUTEX_PER_THREAD; i++) + { + if (info->has_[i] != NULL) + { + printf("Dead Procs: %d %lu holding mutex %x %s) \n", info->pid_, info->thrid_, info->has_[i], info->has_[i]->name); + logFine(logger, "Dead Procs: %d %lu holding mutex %x %s) \n", info->pid_, info->thrid_, info->has_[i], info->has_[i]->name); + //TODO::recovery of mutexes + //info->has_[i]->recoverMutex(); + srvStop = 1; + } + } + TransactionManager *tm = new TransactionManager(); + LockManager *lm = new LockManager(sysdb); + for (int i = 0 ;i < MAX_THREADS_PER_PROCESS; i++) + { + if (info->thrTrans_[i].trans_ != NULL && info->thrTrans_[i].trans_->status_ == TransRunning) + { + printf("Rollback Transaction %x\n", info->thrTrans_[i].trans_); + tm->rollback(lm, info->thrTrans_[i].trans_); + } + } + info->init(); + delete tm; + delete lm; + return OK; +} + +DbRetVal cleanupDeadProcs(Database *sysdb) +{ + DbRetVal rv = sysdb->getProcessTableMutex(false); + if (OK != rv) + { + printError(rv,"Unable to get process table mutex"); + return rv; + } + pid_t pid; + pid = os::getpid(); + pthread_t thrid = os::getthrid(); + + + ThreadInfo* pInfo = sysdb->getThreadInfo(0); + int i=0; + ThreadInfo* freeSlot = NULL; + for (; i < Conf::config.getMaxProcs(); i++) + { + //check whether it is alive + if (pInfo->pid_ !=0 && checkDead(pInfo->pid_)) releaseAllResources(sysdb, pInfo); + pInfo++; + } + sysdb->releaseProcessTableMutex(false); + return OK; +} + + +DbRetVal logActiveProcs(Database *sysdb) +{ + DbRetVal rv = sysdb->getProcessTableMutex(false); + if (OK != rv) + { + printError(rv,"Unable to get process table mutex"); + return rv; + } + ThreadInfo* pInfo = sysdb->getThreadInfo(0); + int i=0; + ThreadInfo* freeSlot = NULL; + for (; i < Conf::config.getMaxProcs(); i++) + { + if (pInfo->pid_ !=0 ) logFine(logger, "Registered Procs: %d %lu\n", pInfo->pid_, pInfo->thrid_); + pInfo++; + } + sysdb->releaseProcessTableMutex(false); + return OK; +} + + + +int main() +{ + SessionImpl session; + DbRetVal rv = session.readConfigFile(); + if (rv != OK) + { + printf("Unable to read the configuration file \n"); + return 1; + } + os::signal(SIGINT, sigTermHandler); + os::signal(SIGTERM, sigTermHandler); + rv = logger.startLogger(Conf::config.getLogFile(), true); + if (rv != OK) + { + printf("Unable to start the logger\n"); + return 2; + } + + logFine(logger, "Server Started"); + int ret = session.initSystemDatabase(); + if (0 != ret) + { + printf(" System Database Initialization failed\n"); + return 3; + } + printf("System Database initialized\n"); + + + bool end = false; + + struct timeval timeout, tval; + timeout.tv_sec = 5; + timeout.tv_usec = 0; + Database* sysdb = session.getSystemDatabase(); + printf("Database server recovering cached tables...\n"); + + system("cachetable -u root -p manager -r"); + + printf("Cached Tables recovered\n"); + + printf("Database server started\n"); + + while(!srvStop) + { + tval.tv_sec = timeout.tv_sec; + tval.tv_usec = timeout.tv_usec; + os::select(0, 0, 0, 0, &tval); + + //send signal to all the registered process..check they are alive + cleanupDeadProcs(sysdb); + + } + + logFine(logger, "Server Exiting"); + logActiveProcs(sysdb); + printf("Server Exiting\n"); + logFine(logger, "Server Ended"); + logger.stopLogger(); + session.destroySystemDatabase(); + return 0; +} -- 2.11.4.GIT