From ccf5ade94380fbaaa5c670223e3c73f73ae427f7 Mon Sep 17 00:00:00 2001 From: prabatuty Date: Thu, 2 Jun 2011 15:38:31 +0000 Subject: [PATCH] moving server source files to server folder --- src/tools/Makefile.in | 73 +++- src/tools/csqlasyncserver.cxx | 640 --------------------------- src/tools/csqlcacheserver.cxx | 872 ------------------------------------- src/tools/csqlcheckpointserver.cxx | 139 ------ src/tools/csqlreplserver.cxx | 118 ----- src/tools/csqlserver.cxx | 468 -------------------- src/tools/csqlsqlserver.cxx | 142 ------ 7 files changed, 53 insertions(+), 2399 deletions(-) delete mode 100644 src/tools/csqlasyncserver.cxx delete mode 100644 src/tools/csqlcacheserver.cxx delete mode 100644 src/tools/csqlcheckpointserver.cxx delete mode 100644 src/tools/csqlreplserver.cxx delete mode 100644 src/tools/csqlserver.cxx delete mode 100644 src/tools/csqlsqlserver.cxx diff --git a/src/tools/Makefile.in b/src/tools/Makefile.in index ba5e95dc..91520256 100644 --- a/src/tools/Makefile.in +++ b/src/tools/Makefile.in @@ -54,6 +54,7 @@ am_applyofflinelogs_OBJECTS = applyofflinelogs.$(OBJEXT) applyofflinelogs_OBJECTS = $(am_applyofflinelogs_OBJECTS) applyofflinelogs_DEPENDENCIES = \ $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sql/libcsqlsql.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ @@ -67,6 +68,7 @@ applyofflinelogs_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ am_cachetable_OBJECTS = cachetable.$(OBJEXT) cachetable_OBJECTS = $(am_cachetable_OBJECTS) cachetable_DEPENDENCIES = $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sql/libcsqlsql.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ @@ -80,6 +82,7 @@ cachetable_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ am_cacheverify_OBJECTS = cacheverify.$(OBJEXT) cacheverify_OBJECTS = $(am_cacheverify_OBJECTS) cacheverify_DEPENDENCIES = $(top_builddir)/src/sql/libcsqlsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ $(top_builddir)/src/sqlnetwork/libcsqlsqlnw.la \ @@ -94,6 +97,7 @@ cacheverify_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ am_catalog_OBJECTS = catalog.$(OBJEXT) catalog_OBJECTS = $(am_catalog_OBJECTS) catalog_DEPENDENCIES = $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sql/libcsqlsql.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ @@ -107,6 +111,7 @@ catalog_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ am_checkpoint_OBJECTS = checkpoint.$(OBJEXT) checkpoint_OBJECTS = $(am_checkpoint_OBJECTS) checkpoint_DEPENDENCIES = $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sql/libcsqlsql.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ @@ -120,6 +125,7 @@ checkpoint_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ am_csql_OBJECTS = isql.$(OBJEXT) csql_OBJECTS = $(am_csql_OBJECTS) csql_DEPENDENCIES = $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sql/libcsqlsql.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ @@ -133,6 +139,7 @@ csql_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ am_csqlasyncserver_OBJECTS = csqlasyncserver.$(OBJEXT) csqlasyncserver_OBJECTS = $(am_csqlasyncserver_OBJECTS) csqlasyncserver_DEPENDENCIES = $(top_builddir)/src/sql/libcsqlsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ $(top_builddir)/src/gateway/libcsqlgw.la \ @@ -147,6 +154,7 @@ csqlasyncserver_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ am_csqlcacheserver_OBJECTS = csqlcacheserver.$(OBJEXT) csqlcacheserver_OBJECTS = $(am_csqlcacheserver_OBJECTS) csqlcacheserver_DEPENDENCIES = $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sql/libcsqlsql.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ @@ -161,6 +169,7 @@ am_csqlcheckpointserver_OBJECTS = csqlcheckpointserver.$(OBJEXT) csqlcheckpointserver_OBJECTS = $(am_csqlcheckpointserver_OBJECTS) csqlcheckpointserver_DEPENDENCIES = \ $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sql/libcsqlsql.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ @@ -173,13 +182,15 @@ csqlcheckpointserver_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(CXXFLAGS) $(csqlcheckpointserver_LDFLAGS) $(LDFLAGS) -o $@ am_csqlds_OBJECTS = csqlds.$(OBJEXT) csqlds_OBJECTS = $(am_csqlds_OBJECTS) -csqlds_DEPENDENCIES = $(top_builddir)/src/storage/libcsql.la +csqlds_DEPENDENCIES = $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la csqlds_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(csqlds_LDFLAGS) $(LDFLAGS) -o $@ am_csqldump_OBJECTS = csqldump.$(OBJEXT) csqldump_OBJECTS = $(am_csqldump_OBJECTS) csqldump_DEPENDENCIES = $(top_builddir)/src/sql/libcsqlsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ $(top_builddir)/src/gateway/libcsqlgw.la \ @@ -194,6 +205,7 @@ csqldump_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ am_csqlserver_OBJECTS = csqlserver.$(OBJEXT) csqlserver_OBJECTS = $(am_csqlserver_OBJECTS) csqlserver_DEPENDENCIES = $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sql/libcsqlsql.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ @@ -207,6 +219,7 @@ csqlserver_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ am_csqlsqlserver_OBJECTS = csqlsqlserver.$(OBJEXT) csqlsqlserver_OBJECTS = $(am_csqlsqlserver_OBJECTS) csqlsqlserver_DEPENDENCIES = $(top_builddir)/src/sql/libcsqlsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ $(top_builddir)/src/gateway/libcsqlgw.la \ @@ -221,6 +234,7 @@ csqlsqlserver_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ am_icsql_OBJECTS = icsql-isql.$(OBJEXT) icsql_OBJECTS = $(am_icsql_OBJECTS) icsql_DEPENDENCIES = $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sql/libcsqlsql.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ @@ -234,6 +248,7 @@ icsql_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ am_recover_OBJECTS = recover.$(OBJEXT) recover_OBJECTS = $(am_recover_OBJECTS) recover_DEPENDENCIES = $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sql/libcsqlsql.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ @@ -247,6 +262,7 @@ recover_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ am_redo_OBJECTS = redo.$(OBJEXT) redo_OBJECTS = $(am_redo_OBJECTS) redo_DEPENDENCIES = $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sql/libcsqlsql.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ @@ -405,6 +421,7 @@ INCLUDES = -I$(top_srcdir)/include $(all_includes) -I$(top_srcdir)/src/sql METASOURCES = AUTO csql_SOURCES = isql.cxx csql_LDADD = $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sql/libcsqlsql.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ @@ -417,19 +434,21 @@ csql_LDFLAGS = -lrt -lpthread -lcrypt -lodbc -lreadline -lcurses -ldl icsql_SOURCES = isql.cxx icsql_CPPFLAGS = -DNO_READLINE_LIB icsql_LDADD = $(top_builddir)/src/storage/libcsql.la \ - $(top_builddir)/src/sql/libcsqlsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ + $(top_builddir)/src/sql/libcsqlsql.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ $(top_builddir)/src/adapter/libcsqlodbcadapter.la \ $(top_builddir)/src/gateway/libcsqlgw.la \ $(top_builddir)/src/cache/libcacheload.la \ - $(top_builddir)/src/sqlnetwork/libcsqlsqlnw.la + $(top_builddir)/src/sqlnetwork/libcsqlsqlnw.la -icsql_LDFLAGS = -lrt -lpthread -lcrypt -lodbc -lcurses -ldl +icsql_LDFLAGS = -lrt -lpthread -lcrypt -lodbc -ldl redo_SOURCES = redo.cxx redo_LDADD = $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sql/libcsqlsql.la \ - $(top_builddir)/src/sqllog/libcsqlsqllog.la \ + $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ $(top_builddir)/src/adapter/libcsqlodbcadapter.la \ $(top_builddir)/src/gateway/libcsqlgw.la \ @@ -439,17 +458,19 @@ redo_LDADD = $(top_builddir)/src/storage/libcsql.la \ redo_LDFLAGS = -lrt -lpthread -lcrypt -lodbc -lreadline -lcurses -ldl applyofflinelogs_SOURCES = applyofflinelogs.cxx applyofflinelogs_LDADD = $(top_builddir)/src/storage/libcsql.la \ - $(top_builddir)/src/sql/libcsqlsql.la \ - $(top_builddir)/src/sqllog/libcsqlsqllog.la \ - $(top_builddir)/src/network/libcsqlnw.la \ - $(top_builddir)/src/adapter/libcsqlodbcadapter.la \ - $(top_builddir)/src/gateway/libcsqlgw.la \ - $(top_builddir)/src/cache/libcacheload.la \ - $(top_builddir)/src/sqlnetwork/libcsqlsqlnw.la + $(top_builddir)/src/base/libcsqlbase.la \ + $(top_builddir)/src/sql/libcsqlsql.la \ + $(top_builddir)/src/sqllog/libcsqlsqllog.la \ + $(top_builddir)/src/network/libcsqlnw.la \ + $(top_builddir)/src/adapter/libcsqlodbcadapter.la \ + $(top_builddir)/src/gateway/libcsqlgw.la \ + $(top_builddir)/src/cache/libcacheload.la \ + $(top_builddir)/src/sqlnetwork/libcsqlsqlnw.la applyofflinelogs_LDFLAGS = -lrt -lpthread -lcrypt -lodbc -ldl recover_SOURCES = recover.cxx recover_LDADD = $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sql/libcsqlsql.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ @@ -461,6 +482,7 @@ recover_LDADD = $(top_builddir)/src/storage/libcsql.la \ recover_LDFLAGS = -lcrypt -lrt -lpthread -lodbc -ldl checkpoint_SOURCES = checkpoint.cxx checkpoint_LDADD = $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sql/libcsqlsql.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ @@ -472,6 +494,7 @@ checkpoint_LDADD = $(top_builddir)/src/storage/libcsql.la \ checkpoint_LDFLAGS = -lcrypt -lrt -lpthread -lcrypt -lodbc -ldl catalog_SOURCES = catalog.cxx catalog_LDADD = $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sql/libcsqlsql.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ @@ -482,6 +505,7 @@ catalog_LDADD = $(top_builddir)/src/storage/libcsql.la \ catalog_LDFLAGS = -lcrypt -lrt -ldl cachetable_LDADD = $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sql/libcsqlsql.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ @@ -493,6 +517,7 @@ cachetable_LDADD = $(top_builddir)/src/storage/libcsql.la \ cachetable_LDFLAGS = -lcrypt -lodbc -lrt -ldl cachetable_SOURCES = cachetable.cxx cacheverify_LDADD = $(top_builddir)/src/sql/libcsqlsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ $(top_builddir)/src/sqlnetwork/libcsqlsqlnw.la \ @@ -505,6 +530,7 @@ cacheverify_LDADD = $(top_builddir)/src/sql/libcsqlsql.la \ cacheverify_LDFLAGS = -lrt -lpthread -lcrypt -lodbc -ldl cacheverify_SOURCES = cacheverify.cxx csqlserver_LDADD = $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sql/libcsqlsql.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ @@ -516,6 +542,7 @@ csqlserver_LDADD = $(top_builddir)/src/storage/libcsql.la \ csqlserver_LDFLAGS = -lrt -lpthread -lcrypt -lodbc -ldl csqlserver_SOURCES = csqlserver.cxx csqlasyncserver_LDADD = $(top_builddir)/src/sql/libcsqlsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ $(top_builddir)/src/gateway/libcsqlgw.la \ @@ -528,6 +555,7 @@ csqlasyncserver_LDADD = $(top_builddir)/src/sql/libcsqlsql.la \ csqlasyncserver_LDFLAGS = -lrt -lpthread -lcrypt -lodbc -ldl csqlasyncserver_SOURCES = csqlasyncserver.cxx csqlsqlserver_LDADD = $(top_builddir)/src/sql/libcsqlsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ $(top_builddir)/src/gateway/libcsqlgw.la \ @@ -540,6 +568,7 @@ csqlsqlserver_LDADD = $(top_builddir)/src/sql/libcsqlsql.la \ csqlsqlserver_LDFLAGS = -lrt -lpthread -lcrypt -lodbc -ldl csqlsqlserver_SOURCES = csqlsqlserver.cxx csqldump_LDADD = $(top_builddir)/src/sql/libcsqlsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ $(top_builddir)/src/gateway/libcsqlgw.la \ @@ -552,6 +581,7 @@ csqldump_LDADD = $(top_builddir)/src/sql/libcsqlsql.la \ csqldump_LDFLAGS = -lrt -lpthread -lcrypt -lodbc -ldl csqldump_SOURCES = csqldump.cxx csqlcacheserver_LDADD = $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la \ $(top_builddir)/src/sql/libcsqlsql.la \ $(top_builddir)/src/sqllog/libcsqlsqllog.la \ $(top_builddir)/src/network/libcsqlnw.la \ @@ -563,17 +593,20 @@ csqlcacheserver_LDADD = $(top_builddir)/src/storage/libcsql.la \ csqlcacheserver_LDFLAGS = -lcrypt -lodbc -lrt -lpthread -ldl csqlcacheserver_SOURCES = csqlcacheserver.cxx csqlcheckpointserver_LDADD = $(top_builddir)/src/storage/libcsql.la \ - $(top_builddir)/src/sql/libcsqlsql.la \ - $(top_builddir)/src/sqllog/libcsqlsqllog.la \ - $(top_builddir)/src/network/libcsqlnw.la \ - $(top_builddir)/src/adapter/libcsqlodbcadapter.la \ - $(top_builddir)/src/gateway/libcsqlgw.la \ - $(top_builddir)/src/cache/libcacheload.la \ - $(top_builddir)/src/sqlnetwork/libcsqlsqlnw.la + $(top_builddir)/src/base/libcsqlbase.la \ + $(top_builddir)/src/sql/libcsqlsql.la \ + $(top_builddir)/src/sqllog/libcsqlsqllog.la \ + $(top_builddir)/src/network/libcsqlnw.la \ + $(top_builddir)/src/adapter/libcsqlodbcadapter.la \ + $(top_builddir)/src/gateway/libcsqlgw.la \ + $(top_builddir)/src/cache/libcacheload.la \ + $(top_builddir)/src/sqlnetwork/libcsqlsqlnw.la csqlcheckpointserver_LDFLAGS = -lcrypt -lodbc -lrt -lpthread -ldl csqlcheckpointserver_SOURCES = csqlcheckpointserver.cxx -csqlds_LDADD = $(top_builddir)/src/storage/libcsql.la +csqlds_LDADD = $(top_builddir)/src/storage/libcsql.la \ + $(top_builddir)/src/base/libcsqlbase.la + csqlds_LDFLAGS = -lcrypt -ldl csqlds_SOURCES = csqlds.cxx all: all-am diff --git a/src/tools/csqlasyncserver.cxx b/src/tools/csqlasyncserver.cxx deleted file mode 100644 index 56b6d30e..00000000 --- a/src/tools/csqlasyncserver.cxx +++ /dev/null @@ -1,640 +0,0 @@ -/*************************************************************************** - * 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 -#include -#include -#include -#include -#include -#include -#include //for BindSqlField -#include -#include - -typedef struct FailedStmtObject { - int stmtId; - DbRetVal eType; -} FailStmt; - -typedef struct item ITEM; - -struct item -{ - ITEM *next; - void *data; -}; - -// please dont touch the following code for queIterator -typedef class queueIterator -{ - ITEM *head; - ITEM *iter; - ITEM *processed; - public: - queueIterator(ITEM *hd) { head = iter = hd; processed = NULL; } - inline void *next(ITEM *hd) - { - if (head == NULL) { head = iter = hd; } - if (head != hd) head = hd; - ITEM *elem = iter; - if (iter == NULL && processed) { - if (processed->next != NULL) { - processed = processed->next; - iter = processed; - elem = iter; - } else { return NULL; } - } - processed = elem; - printDebug(DM_CacheServer, "Processed ITEM: %X", processed); - iter = iter->next; - return &elem->data; - } -} QITER; - -class queue -{ - ITEM *head; - int nItems; - // array of msg indexes processed, First index for first thread and so on. - // As and when the msg is read from the queue by each of the threads - // respcective slot is filled with that index - long long *processedMsgIndexArray; - long long minProcessedMsgIndex; - long long qIndex; - long long lastFreedIndex; - QITER **qIter; - Mutex qMutex; - public: - queue(int asySites) - { - nItems = 0; head = NULL; processedMsgIndexArray = NULL; - qIndex = 0; qIter = NULL; minProcessedMsgIndex = 0; - lastFreedIndex = 0; - qMutex.init("Q"); - int size = sizeof (long long) * asySites; - processedMsgIndexArray = (long long *) malloc(size); - memset(processedMsgIndexArray, 0, size); - qIter = (QITER **) malloc(sizeof (QITER *) * asySites); - for (int i = 0; i < asySites; i++) qIter[i] = new QITER(head); - } - ~queue() {} - int push(void *log, int len) - { - // log includes size of long (msgType) + size of (Msg data); - // 2nd parameter len is the size of (Msg data) excluding size of long - - // long long for Msg Index - // int for size of the msg data - // long for msgType - // len bytes for msg data - int logSize = sizeof(long long) + sizeof(int) + sizeof(long) + len; - ITEM *item = (ITEM *) malloc(sizeof(ITEM) - sizeof(void *) - + os::align(logSize)); - item->next = NULL; - char *ptr = (char *) &item->data; - *(long long *) ptr = ++qIndex; ptr += sizeof (long long); - *(int*) ptr= len; ptr += sizeof (int); - int sizeOfMsg = len + sizeof(long); - memcpy(ptr, log, sizeOfMsg); - if (head == NULL) { nItems++; head = item; return 0; } - ITEM *p = head; - while (p->next != NULL) p = p->next; - p->next = item; - nItems++; - return 0; - } - int size() { return nItems; } - void *readNextMessage(int thrIndex) - { - if (head == NULL) return NULL; - else return qIter[thrIndex]->next(head); - } - inline void updateProcessedIndex(int thrInd, int processedIndex) - { - processedMsgIndexArray[thrInd] = processedIndex; - } - inline long long findMinIndexForFree(int asySites) - { - long long minIndex = processedMsgIndexArray[0]; - for (int i=1; i < asySites; i++) { - if (minIndex > processedMsgIndexArray[i]) { - minIndex = processedMsgIndexArray[i]; - } - } - return minIndex-1; - } - void freeMessagesFromQueue(int asySites) - { - long long minIndex = findMinIndexForFree(asySites); - if (minIndex <= lastFreedIndex) return; - ITEM *elem = head; - ITEM *freeFrom = head; - ITEM *freeUptoThis = NULL; - long long ind = 0; - while (elem != NULL) { - ind = * (long long *) &elem->data; - if (ind == minIndex) { - freeUptoThis = elem; - head = elem->next; - break; - } - elem = elem->next; - } - ITEM *toFree = elem = freeFrom; - while (elem != freeUptoThis) { - toFree = elem; - elem = elem->next; - if (toFree) { ::free(toFree); nItems--; } - printDebug(DM_CacheServer, "FREED %X", toFree); - } - if (elem) { ::free(elem); nItems--; } - printDebug(DM_CacheServer, "FREED %X", elem); - lastFreedIndex = minIndex; - } -}; - -typedef class queue QUE; - -class ThreadInputData -{ - public: - int thrIndex; - ThreadInputData() { thrIndex = 0; } -}; - -void *startThread(void *p); - -void printUsage() -{ - printf("Usage: csqlasyncserver \n"); - printf("Description: Start the csql Async server.\n"); - return; -} - -DbRetVal processMessage(void *str, int len, void *conn, void *hashBucketPtr, - SqlApiImplType flag, List *prepareFailList); -void *freeMsgFromQueue(void *p); -DbRetVal handlePrepare(void *str, void *conn, void *stmtBuckets, - SqlApiImplType flag, List *prepareFailList); -DbRetVal handleCommit(void *str, int len, void *conn, void *stmtBuckets, - List *prepareFailList); -DbRetVal handleFree(void *str, void *stmtBuckets, List *prepareFailList); -DbRetVal writeToConfResFile(void *data, int len, void *stmtBuckets, char *dsn); - -//Globals -QUE *que = NULL; -int srvStop =0; -int msgKey = 0; -ThreadInputData **thrInput; -pthread_t freeThrId = 0; - -static void sigTermHandler(int sig) -{ - printf("Received signal %d\nStopping the server\n", sig); - os::msgctl(msgKey, IPC_RMID, NULL); - srvStop = 1; -} - -int main(int argc, char **argv) -{ - int c = 0, opt = 0; - while ((c = getopt(argc, argv, "?")) != EOF) { - switch (c) { - case '?' : { opt = 10; break; } //print help - default: opt=10; - } - }//while options - - if (opt == 10) { printUsage(); return 0; } - - os::signal(SIGINT, sigTermHandler); - os::signal(SIGTERM, sigTermHandler); - - Conf::config.readAllValues(os::getenv("CSQL_CONFIG_FILE")); - msgKey = os::msgget(Conf::config.getMsgKey(), 0666); - if (msgKey == -1) { - printf("Message Queue creation failed\n"); - return 4; - } - - //Only single cache async updation is supported hence hard coded. - int asyncSites = 1; - - // Create and Initialize repl server queue - que = new queue(asyncSites); - - pthread_t *thrId =new pthread_t [asyncSites]; - int thrInfoSize = sizeof(ThreadInputData *) * asyncSites; - thrInput = (ThreadInputData **) malloc(thrInfoSize); - - int i=0; - if(Conf::config.useCache() && Conf::config.getCacheMode()==ASYNC_MODE) { - thrInput[i] = new ThreadInputData(); - thrInput[i]->thrIndex = i; - pthread_create(&thrId[i], NULL, &startThread, thrInput[i]); - i++; - } - pthread_create(&freeThrId, NULL, freeMsgFromQueue, (void *) asyncSites); - struct timeval timeout; - int msgSize = Conf::config.getAsyncMsgMax(); - char str[8192]; - - while (!srvStop) { - timeout.tv_sec = 5; - timeout.tv_usec = 0; - os::select(0, 0, 0, 0, &timeout); - printDebug(DM_CacheServer, "waiting for message"); - while(true) { - // pick messages from message que with key msgKey - long size = os::msgrcv(msgKey, str, msgSize, 0, 0666|IPC_NOWAIT); - printDebug(DM_CacheServer, "Received msg size = %d", size); - if (size == -1 || srvStop) break; - // push the received msg to the repl server queue - que->push(str, size); - } - } - delete[] thrId; - printf("Replication Server Exiting\n"); - return 0; -} - -void *startThread(void *thrInfo) -{ - DbRetVal rv = OK; - DbRetVal proMsgRetVal = OK; - void *msg=NULL; - ThreadInputData *thrInput = (ThreadInputData *)thrInfo; - List prepareFailList; - SqlApiImplType flag = CSqlAdapter; - int thrInd = thrInput->thrIndex; - printDebug(DM_CacheServer, "SqlAdapter Thread created"); - AbsSqlConnection *conn = SqlFactory::createConnection(flag); - - void *stmtBuckets = malloc (STMT_BUCKET_SIZE * sizeof(StmtBucket)); - memset(stmtBuckets, 0, STMT_BUCKET_SIZE * sizeof(StmtBucket)); - printDebug(DM_CacheServer, "stmtbuckets: %x", stmtBuckets); - - struct timeval timeout, tval; - while (1) { - while (1) { - rv = conn->connect(I_USER, I_PASS); - if (rv == OK) break; - printError(rv, "Unable to connect to peer site"); - timeout.tv_sec = 10; - timeout.tv_usec = 0; - os::select(0, 0, 0, 0, &timeout); - } - while (1) { - while (1) { - if (proMsgRetVal != ErrNoConnection) { - msg = NULL; - msg = que->readNextMessage(thrInd); - } - if (msg != NULL) break; - tval.tv_sec = 5; - tval.tv_usec = 1000; - os::select(0, 0, 0, 0, &tval); - } - long long index = *(long long *) msg; - printDebug(DM_CacheServer, "Received message with index: %lld", - index); - int length = *(int *)((char *)msg+sizeof(long long)); - char *msgptr = (char *)msg + sizeof(long long) + sizeof(int); - printDebug(DM_CacheServer, "entering process message"); - proMsgRetVal = processMessage(msgptr, length, conn, stmtBuckets, - flag, &prepareFailList); - if (proMsgRetVal == ErrNoConnection) break; - printDebug(DM_CacheServer, "Processed message with index: %lld", - index); - //store processed index in the processed index array - que->updateProcessedIndex(thrInd, index); - printDebug(DM_CacheServer, "Updated processed index %lld", index); - } - } - return NULL; -} - -DbRetVal processMessage(void *str, int len, void *conn, void *stmtBuckets, - SqlApiImplType flag, List *prepareFailList) -{ - long type = *(long *) str; - printDebug(DM_CacheServer, "type = %d\n", type); - char *data = (char *) str + sizeof(long); - if (type == 1) return handlePrepare(data, conn, stmtBuckets, flag, - prepareFailList); - else if (type == 2) return handleCommit(data, len, conn, stmtBuckets, - prepareFailList); - else if (type == 3) return handleFree(data, stmtBuckets, prepareFailList); -} - -void *freeMsgFromQueue(void *nAsync) -{ - int asySites = (int)(long)nAsync; - struct timeval tval; - printDebug(DM_CacheServer, "Waiting for free the q elements"); - while (1) { - que->freeMessagesFromQueue(asySites); - tval.tv_sec = 5; - tval.tv_usec = 0; - os::select(0, 0, 0, 0, &tval); - } - return NULL; -} - -DbRetVal handlePrepare(void *data, void *conn, void *stmtBuckets, - SqlApiImplType flag, List *prepareFailList) -{ - DbRetVal rv = OK; - AbsSqlConnection *con = (AbsSqlConnection *)conn; - AbsSqlStatement *stmt = SqlFactory::createStatement(flag); - stmt->setConnection(con); - char *ptr = (char *) data; - int length = *(int *) ptr; ptr += sizeof(int); - int txnId = *(int *) ptr; ptr += sizeof(int); - int stmtId = *(int *) ptr; ptr += sizeof(int); - char *tblName = ptr; ptr += IDENTIFIER_LENGTH; - char *stmtstr = (char *)data + 3 * sizeof(int) + IDENTIFIER_LENGTH; - int i = 1; - - unsigned int mode = TableConf::config.getTableMode(tblName); - bool isCached = TableConf::config.isTableCached(mode); - - if ((flag == CSqlAdapter) && !isCached) { - FailStmt *fst = new FailStmt(); - fst->stmtId = stmtId; - fst->eType = ErrNotCached; - prepareFailList->append(fst); - return OK; - } - - printDebug(DM_CacheServer, "stmt str: %s", stmtstr); - rv = stmt->prepare(stmtstr); - if (rv != OK) { - FailStmt *fst = new FailStmt(); - fst->stmtId = stmtId; - fst->eType = rv; - prepareFailList->append(fst); - return rv; - } - Recovery recovery; - recovery.setStmtBucket(stmtBuckets); - recovery.addToHashTable(stmtId, stmt, stmtstr); - printDebug(DM_CacheServer, "returning from prepare"); - return rv; -} - -DbRetVal handleCommit(void *data, int len, void *conn, void *stmtBuckets, - List *prepareFailList) -{ - DbRetVal rv = OK; - AbsSqlConnection *con = (AbsSqlConnection *)conn; - // get dsn if adapter to write into conflict resolution file - char *dsstring = NULL; - SqlOdbcConnection *adCon = (SqlOdbcConnection *) con; - dsstring = adCon->dsString; - char *ptr = (char *) data; - int datalen = *(int *) ptr; ptr += sizeof(int); - int txnId = *(int *) ptr; ptr += sizeof(int); - FailStmt *elem = NULL; - rv = con->beginTrans(); - if (rv != OK) { - printError(rv, "Begin trans failed"); - return rv; - } - Recovery recovery; - recovery.setStmtBucket(stmtBuckets); - while ((ptr - (char *)data) < len) { - int stmtId = *(int *)ptr; - ptr += sizeof(int); - AbsSqlStatement *stmt = recovery.getStmtFromHashTable(stmtId); - printDebug(DM_CacheServer, "commit: stmtId: %d", stmtId); - printDebug(DM_CacheServer, "commit: stmtbuckets: %x", stmtBuckets); - printDebug(DM_CacheServer, "commit: stmt: %x", stmt); - ExecType type = (ExecType) (*(int *) ptr); - ptr += sizeof(int); - if (type == SETPARAM) { - int parampos = *(int *) ptr; - ptr += sizeof(int); - int isNull = *(int *) ptr; - if (isNull == 0) { - DataType dataType = (DataType) ( *(int *) ptr); - ptr += sizeof(int); - int length = *(int *) ptr; - ptr += sizeof(int); - void *value = ptr; - ptr += length; - if (stmt != NULL) - SqlStatement::setParamValues(stmt, parampos, - dataType, length, (char *)value); - } else { if (stmt != NULL) stmt->setNull(parampos); } - } else { - // start executing and committing for all active connections - int rows; - if (stmt != NULL) rv = stmt->execute(rows); - if (rv != OK) { - printError(rv, "Execute failed with return value %d", rv); - if (rv == ErrNoConnection) return rv; - else { - // write to conflict resolution file - writeToConfResFile(data, len, stmtBuckets, dsstring); - con->rollback(); - return OK; - } - } - if (stmt == NULL) { - ListIterator it = prepareFailList->getIterator(); - bool found = false; - while (it.hasElement()) { - elem = (FailStmt *) it.nextElement(); - if (elem->stmtId == stmtId) { found = true; break; } - } - if (! found) continue; // for local table - if ((elem->eType == ErrNotCached) || - elem->eType == ErrNotExists) - continue; - else { - // write to conflict resolution file - writeToConfResFile(data, len, stmtBuckets, dsstring); - con->rollback(); - return OK; - } - } - } - } - rv = con->commit(); - if (rv != OK) { printDebug(DM_CacheServer, "commit failed"); } - else { printDebug(DM_CacheServer, "commit passed"); } - return OK; -} - -DbRetVal handleFree(void *data, void *stmtBuckets, List *prepareFailList) -{ - DbRetVal rv = OK; - char *ptr = (char *) data; - int len = *(int *) ptr; ptr += sizeof(int); - int txnId = *(int *) ptr; ptr += sizeof(int); - int stmtId = *(int *)ptr; - Recovery recovery; - recovery.setStmtBucket(stmtBuckets); - AbsSqlStatement *stmt = recovery.getStmtFromHashTable(stmtId); - FailStmt *elem = NULL; - if (stmt == NULL) { - ListIterator failListIter = prepareFailList->getIterator(); - while (failListIter.hasElement()) { - elem = (FailStmt *) failListIter.nextElement(); - if (elem->stmtId == stmtId) break; - } - failListIter.reset(); - prepareFailList->remove(elem); - return OK; - } - rv = stmt->free(); - if (rv != OK) { - printError(rv, "HandleFree failed with return vlaue %d", rv); - return rv; - } - recovery.removeFromHashTable(stmtId); - printDebug(DM_CacheServer, "Freed the statement from hashTable"); - return OK; -} - -DbRetVal writeToConfResFile(void *data, int len, void *stmtBuckets, char *dsn) -{ - DbRetVal rv = OK; - bool isPrmStmt=false; - char confResFile[1024]; - sprintf(confResFile, "%s", Conf::config.getConflResoFile()); - int fd = open(confResFile, O_WRONLY|O_CREAT| O_APPEND, 0644); - if (fd < 0) { - printError(ErrOS, "Could not create conflict Resolution file"); - return ErrOS; - } - char buffer[1024]; - char paramStmtString[1024]; - - char *ptr = (char *) data; - int datalen = *(int *) ptr; ptr += sizeof(int); - int txnId = *(int *) ptr; ptr += sizeof(int); - strcpy(buffer, "SET AUTOCOMMIT OFF;\n"); - int ret = os::write(fd, buffer, strlen(buffer)); - if (ret != strlen(buffer)) { - printError(ErrOS, "Write error into conf resolution file"); - return ErrOS; - } - bool first = true; - int counter = 0; // if at all the statement is parameterized - int nop = 0; - int pos = 0; - while ((ptr - (char *)data) < len) { - int stmtId = *(int *)ptr; - ptr += sizeof(int); - int bucketNo = stmtId % STMT_BUCKET_SIZE; - StmtBucket *buck = (StmtBucket *) stmtBuckets; - StmtBucket *stmtBucket = &buck[bucketNo]; - StmtNode *node = NULL; - ListIterator it = stmtBucket->bucketList.getIterator(); - while(it.hasElement()) { - node = (StmtNode *) it.nextElement(); - if(stmtId == node->stmtId) break; - } - printf("DEBUG:node = %x\n", node); - ExecType type = (ExecType) (*(int *) ptr); - ptr += sizeof(int); - if (type == SETPARAM) { - isPrmStmt = true; - if (first) { - first = false; - sprintf(paramStmtString, "%s", node->stmtstr); - char *it = node->stmtstr; - } - int parampos = *(int *)ptr; - ptr += sizeof(int); - DataType dataType = (DataType) ( *(int *) ptr); - ptr += sizeof(int); - int length = *(int *) ptr; - ptr += sizeof(int); - void *value = ptr; - ptr += length; - char * it = paramStmtString; - int prntdChars = 0; - - while (*it != '\0') { - if (*it == '?') { - pos++; - if(pos != parampos) { it++; continue; } - else { - *it++ = ' '; - strcpy(buffer,it); - switch (dataType) { - case typeString: case typeBinary: case typeDate: - case typeTime: case typeTimeStamp: - *it++ = '\''; - AllDataType::convertToString(it, value, dataType, length); - prntdChars = AllDataType::printVal(value, dataType,length); - it += prntdChars; - *it++ = '\''; - break; - default: - AllDataType::convertToString(it, value, dataType, length); - prntdChars = AllDataType::printVal(value, dataType,length); - it += prntdChars; - - } - sprintf(it, " %s", buffer); - //strcpy(buffer, paramStmtString); - break; - } - } else { it++; } - } - } else { - if (!isPrmStmt) { - sprintf(buffer, "%s", node->stmtstr); - buffer[strlen(buffer)] = '\n'; - ret = os::write(fd, buffer, strlen(node->stmtstr)+1); - if(ret != strlen(node->stmtstr)+1) { - printError(ErrOS, "Write error into conf resolution file"); - return ErrOS; - } - } else { - strcpy(buffer, paramStmtString); - isPrmStmt = false; - first = true; - pos = 0; - int strlength = strlen(buffer); - buffer[strlen(buffer)] = '\n'; - ret = os::write(fd, buffer, strlength+1); - if(ret != strlength+1) { - printError(ErrOS, "Write error into conf resolution file"); - return ErrOS; - } - } - } - } - strcpy(buffer, "COMMIT;\n\n"); - ret = os::write(fd, buffer, strlen(buffer)); - if(ret != strlen(buffer)) { - printError(ErrOS, "Write error into conf resolution file"); - return ErrOS; - } - close(fd); -} diff --git a/src/tools/csqlcacheserver.cxx b/src/tools/csqlcacheserver.cxx deleted file mode 100644 index 4349f6c8..00000000 --- a/src/tools/csqlcacheserver.cxx +++ /dev/null @@ -1,872 +0,0 @@ -/*************************************************************************** - * 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 -#include -#include - -#define STMTBUCKETS dsnThrInfo->stmtBuckets -#define CSQLCONNECT dsnThrInfo->csqlcon -#define TRDBCONNECT dsnThrInfo->targetcon -#define CACHELIST dsnThrInfo->cacheTableList -#define DSN dsnThrInfo->dsn -#define TSELSTMT dsnThrInfo->targetSelStmt -#define TDELSTMT dsnThrInfo->targetDelStmt -#define TABLENAME_ARRAY dsnThrInfo->tableName -#define PKID_ARRAY dsnThrInfo->pkid -#define OPERATION_ARRAY dsnThrInfo->operation -#define CACHEID_ARRAY dsnThrInfo->cacheid -#define AUTOID_ARRAY dsnThrInfo->autoid - -#define PKID PKID_ARRAY[row] -#define OPERATION OPERATION_ARRAY[row] -#define CACHEID CACHEID_ARRAY[row] -#define AUTOID AUTOID_ARRAY[row] - -typedef class CachedTableStmtNode -{ - public: - char tableName[IDENTIFIER_LENGTH]; - AbsSqlStatement *adptStmt; - AbsSqlStatement *insStmt; - AbsSqlStatement *delStmt; - CachedTableStmtNode(const char *tname, AbsSqlStatement *ast, AbsSqlStatement *ist) - { - strcpy(tableName, tname); adptStmt = ast; - insStmt = ist; delStmt = NULL; - } - CachedTableStmtNode(const char *tname, AbsSqlStatement *dst) - { - strcpy(tableName, tname); adptStmt = NULL; - insStmt = NULL; delStmt = dst; - } - ~CachedTableStmtNode() - { - if (insStmt) { insStmt->free(); delete insStmt; } - if (delStmt) { delStmt->free(); delete delStmt; } - if (adptStmt) { adptStmt->free(); delete adptStmt; } - } -} CTStmtNode; - -int insert(char *table, int pkid, void *thrInfo); -int remove(char *table, int pkid, void *thrInfo); -int getRecordsFromTargetDb(void *thrInfo); -void createCacheTableList(AbsSqlConnection *tcon, List *cacheTableList); -DbRetVal getPKFieldName(char *tblName,char *fldName, List *cacheTableList); -DbRetVal getCacheField(char *tblName,char *fldName, List *cacheTableList); -DbRetVal getCacheProjField(char *tblName,char *fielflist, List *cacheTableList); -DbRetVal getCacheCondition(char *tblName,char *condition, List *cacheTableList); -void *fillBindBuffer(TDBInfo tName, DataType type, void *valBuf, int length=0); -int srvStop =0; -static void sigTermHandler(int sig) -{ - printf("Received signal %d\nStopping the server\n", sig); - srvStop = 1; -} - -void printUsage() -{ - printf("Usage: csqlcacheserver \n"); - printf("Description: Start the csql caching server.\n"); - return; -} - -void addToHashTable(char *tableName, AbsSqlStatement *adHdl, AbsSqlStatement *insHdl, void *stmtBuckets) -{ - unsigned int hval = Util::hashString(tableName); - int bucketNo = hval % STMT_BUCKET_SIZE; - StmtBucket *buck = (StmtBucket *) stmtBuckets; - StmtBucket *stmtBucket = &buck[bucketNo]; - CTStmtNode *node = new CTStmtNode(tableName, adHdl, insHdl); - stmtBucket->bucketList.append(node); - return; -} - -void addToHashTable(char *tableName, AbsSqlStatement *delHdl, void *stmtBuckets) -{ - unsigned int hval = Util::hashString(tableName); - int bucketNo = hval % STMT_BUCKET_SIZE; - StmtBucket *buck = (StmtBucket *) stmtBuckets; - StmtBucket *stmtBucket = &buck[bucketNo]; - CTStmtNode *node = new CTStmtNode(tableName, delHdl); - stmtBucket->bucketList.append(node); - return; -} - -void removeFromHashTable(char *tableName, void *stmtBuckets) -{ - unsigned int hval = Util::hashString(tableName); - int bucketNo = hval % STMT_BUCKET_SIZE; - StmtBucket *buck = (StmtBucket *) stmtBuckets; - StmtBucket *stmtBucket = &buck[bucketNo]; - CTStmtNode *node = NULL, *delNode = NULL; - ListIterator it = stmtBucket->bucketList.getIterator(); - while(it.hasElement()) { - node = (CTStmtNode *) it.nextElement(); - if(strcmp(node->tableName, tableName) == 0) { delNode = node; break; } - } - it.reset(); - if (delNode != NULL) { - stmtBucket->bucketList.remove(delNode); - delete delNode; - } - return; -} - -CTStmtNode *getStmtFromHashTable(char *tableName, void *stmtBuckets) -{ - unsigned int hval = Util::hashString(tableName); - int bucketNo = hval % STMT_BUCKET_SIZE; - StmtBucket *buck = (StmtBucket *) stmtBuckets; - StmtBucket *stmtBucket = &buck[bucketNo]; - if (stmtBucket == NULL) return NULL; - CTStmtNode *node = NULL; - ListIterator it = stmtBucket->bucketList.getIterator(); - while(it.hasElement()) { - node = (CTStmtNode *) it.nextElement(); - if(strcmp(node->tableName, tableName) == 0) return node; - } - return NULL; -} - -void freeAllStmtHandles(void *stmtBuckets) -{ - if (NULL == stmtBuckets) return; - StmtBucket *buck = (StmtBucket *) stmtBuckets; - CTStmtNode *node = NULL; - for (int i=0; i bucketList.getIterator(); - while(it.hasElement()) { - node = (CTStmtNode *)it.nextElement(); - delete node; - } - stmtBucket->bucketList.reset(); - } - ::free(stmtBuckets); -} - -//MultiDSN Section -class DsnThrInput -{ - public: - char dsn[IDENTIFIER_LENGTH]; - char tdb[IDENTIFIER_LENGTH]; - char uname[IDENTIFIER_LENGTH]; - char pname[IDENTIFIER_LENGTH]; - void *stmtBuckets; - AbsSqlConnection *csqlcon; - AbsSqlConnection *targetcon; - AbsSqlStatement *targetSelStmt; - AbsSqlStatement *targetDelStmt; - List cacheTableList; - //Arrays for result set fetch - char **tableName; - int *pkid; - int *operation; - int *cacheid; - int *autoid; - DsnThrInput *next; - DsnThrInput() - { - dsn[0]='\0'; tdb[0]='\0'; uname[0]='\0'; pname[0]='\0'; next = NULL; - stmtBuckets = NULL; cacheTableList.init(); - csqlcon = NULL; targetcon = NULL; - targetSelStmt = NULL; targetDelStmt = NULL; - tableName = NULL; pkid = NULL; operation = NULL; cacheid = NULL; - autoid = NULL; - } - ~DsnThrInput() - { - if (tableName) free(tableName); - if (pkid) free(pkid); - if (operation) free(operation); - if (cacheid) free(cacheid); - if (autoid) free(autoid); - } -}; - -void *startThread(void *p);// Function is used for Thread -DsnThrInput **multiDsnArray; - -int main(int argc, char **argv) -{ - int c = 0, opt = 0; - while ((c = getopt(argc, argv, "?")) != EOF) - { - switch (c) - { - case '?' : { opt = 10; break; } //print help - default: opt=10; - - } - }//while options - - if (opt == 10) { - printUsage(); - return 0; - } - - os::signal(SIGINT, sigTermHandler); - os::signal(SIGTERM, sigTermHandler); - - Conf::config.readAllValues(os::getenv("CSQL_CONFIG_FILE")); - - DbRetVal rv=OK; - - // Reading "csqlds.conf file" - FILE *fp = NULL; - fp = fopen(Conf::config.getDsConfigFile(),"r"); - if(fp==NULL){ - printError(ErrSysInit,"csqlds.conf file does not exist"); - exit(1); - } - struct DsnThrInput *head=NULL, *pnode=NULL; - - char dsnname[IDENTIFIER_LENGTH];dsnname[0]='\0'; - char tdbname[IDENTIFIER_LENGTH];tdbname[0] = '\0'; - char username[IDENTIFIER_LENGTH];username[0]='\0'; - char password[IDENTIFIER_LENGTH];password[0]='\0'; - int totalDsn=0; - - // Populate the List - while (!feof(fp)) { - int inputItems = fscanf(fp,"%s %s %s %s\n", - dsnname,username,password,tdbname); - if (inputItems != 4) { - printError(ErrNotExists, "No Entry found in csqlds.conf file"); - return 1; - } - DsnThrInput *dsnThrInput = new DsnThrInput(); - totalDsn++; - strcpy(dsnThrInput->dsn,dsnname); - strcpy(dsnThrInput->uname,username); - strcpy(dsnThrInput->pname,password); - strcpy(dsnThrInput->tdb,tdbname); - dsnThrInput->next=NULL; - - if(pnode==NULL) {head=dsnThrInput; pnode=dsnThrInput;} - else { pnode->next=dsnThrInput; pnode=pnode->next; } - } - fclose(fp); - - bool singleThread = (totalDsn == 1); - - pthread_t *thrId = NULL; - - pnode=head; - - if (!singleThread) { - thrId =new pthread_t [totalDsn]; - multiDsnArray = (DsnThrInput **) - malloc (sizeof(DsnThrInput *) * totalDsn); - for (int i = 0; i < totalDsn; i++) { - multiDsnArray[i] = pnode; - pthread_create(&thrId[i], NULL, &startThread, multiDsnArray[i]); - pnode=pnode->next; - } - // Pthread_join - for(int i=0; isetNoMsgLog(true); - rv = CSQLCONNECT->connect(I_USER, I_PASS); - if (rv != OK) return NULL; - TRDBCONNECT = SqlFactory::createConnection(CSqlAdapter); - SqlOdbcConnection *dsn = (SqlOdbcConnection*) TRDBCONNECT; - dsn->setDsName(DSN);//line added - struct timeval timeout, tval; - timeout.tv_sec = Conf::config.getCacheWaitSecs(); - timeout.tv_usec = 0; - CACHELIST.init(); -reconnect: - while(!srvStop) { - rv = TRDBCONNECT->connect(I_USER, I_PASS); - if (rv != OK) { - printError(ErrSysInternal, "Unable to connect to target database:%s", DSN); - tval.tv_sec = timeout.tv_sec; - tval.tv_usec = timeout.tv_usec; - os::select(0, 0, 0, 0, &tval); - } else break; - if (srvStop) { - CSQLCONNECT->disconnect(); delete CSQLCONNECT; - TRDBCONNECT->disconnect(); delete TRDBCONNECT; - return NULL; - } - } - if (srvStop) { - CSQLCONNECT->disconnect(); delete CSQLCONNECT; - TRDBCONNECT->disconnect(); delete TRDBCONNECT; - return NULL; - } - if (!Conf::config.useCache()) - { - printError(ErrSysInternal, "Cache is set to OFF in csql.conf file\n"); - CSQLCONNECT->disconnect(); delete CSQLCONNECT; - TRDBCONNECT->disconnect(); delete TRDBCONNECT; - return NULL; - } - - int ret = 0; - struct stat ofstatus,nfstatus; - ret=stat(Conf::config.getTableConfigFile(),&ofstatus); - createCacheTableList(TRDBCONNECT, &CACHELIST); - while(!srvStop) - { - tval.tv_sec = timeout.tv_sec; - tval.tv_usec = timeout.tv_usec; - ret = os::select(0, 0, 0, 0, &tval); - printf("Checking for cache updates\n"); - if (srvStop) break; - ret=stat(Conf::config.getTableConfigFile(),&nfstatus); - if(ofstatus.st_mtime != nfstatus.st_mtime) - { - ListIterator it = CACHELIST.getIterator(); - while (it.hasElement()) delete it.nextElement(); - CACHELIST.reset(); - createCacheTableList(TRDBCONNECT, &CACHELIST); - ofstatus.st_mtime = nfstatus.st_mtime; - } - if((ret = getRecordsFromTargetDb(thrInfo)) == 1) { - if (srvStop) break; - TRDBCONNECT->disconnect(); - ListIterator it = CACHELIST.getIterator(); - while (it.hasElement()) delete it.nextElement(); - CACHELIST.reset(); - goto reconnect; - } - } - - freeAllStmtHandles(STMTBUCKETS); - TRDBCONNECT->disconnect(); delete TRDBCONNECT; - CSQLCONNECT->disconnect(); - delete CSQLCONNECT; - - ListIterator it = CACHELIST.getIterator(); - while (it.hasElement()) delete it.nextElement(); - CACHELIST.reset(); - return NULL; -} - -int getRecordsFromTargetDb(void *thrInfo) -{ - DsnThrInput *dsnThrInfo = (DsnThrInput *)thrInfo; - int rows =0; - DbRetVal rv = OK; - int ret =0; - char StmtStr[1024]; - int cacheId = Conf::config.getSiteID(); - TSELSTMT = SqlFactory::createStatement(CSqlAdapter); - TSELSTMT->setConnection(TRDBCONNECT); - TDELSTMT = SqlFactory::createStatement(CSqlAdapter); - TDELSTMT->setConnection(TRDBCONNECT); - //rv = delstmt->prepare("DELETE from csql_log_int where id=?;"); - sprintf(StmtStr, "SELECT * FROM csql_log_int where cacheid = %d;", cacheId); - - SqlOdbcStatement *oselstmt = (SqlOdbcStatement *) TSELSTMT; - rv = oselstmt->prepareForResultSet(StmtStr); - if (rv != OK) { - printError(ErrSysInternal, "Statement prepare failed. TDB may be down"); - return 1; - } - - int noOfRowsFetched = 0; - int nLogRecords = Conf::config.getNoOfRowsToFetchFromTDB(); - if (TABLENAME_ARRAY == NULL) { - TABLENAME_ARRAY = (char **) malloc(nLogRecords * IDENTIFIER_LENGTH); - PKID_ARRAY = (int *) malloc(nLogRecords * sizeof(int)); - OPERATION_ARRAY = (int *) malloc(nLogRecords * sizeof(int)); - CACHEID_ARRAY = (int *) malloc(nLogRecords * sizeof(int)); - AUTOID_ARRAY = (int *) malloc(nLogRecords * sizeof(int)); - } - memset(TABLENAME_ARRAY, 0, nLogRecords * IDENTIFIER_LENGTH); - memset(PKID_ARRAY, 0, nLogRecords * sizeof(int)); - memset(OPERATION_ARRAY, 0, nLogRecords * sizeof(int)); - memset(CACHEID_ARRAY, 0, nLogRecords * sizeof(int)); - memset(AUTOID_ARRAY, 0, nLogRecords * sizeof(int)); - - oselstmt->setResultSetInfo(nLogRecords); - - oselstmt->rsBindField(1, TABLENAME_ARRAY); - oselstmt->rsBindField(2, PKID_ARRAY); - oselstmt->rsBindField(3, OPERATION_ARRAY); - oselstmt->rsBindField(4, CACHEID_ARRAY); - oselstmt->rsBindField(5, AUTOID_ARRAY); - - sprintf(StmtStr, "DELETE from csql_log_int where id=?;"); - rv = TDELSTMT->prepare(StmtStr); - if (rv != OK) { - printError(ErrSysInternal, "Statement prepare failed. TDB may be down"); - TSELSTMT->free(); TDELSTMT->free(); delete TSELSTMT; delete TDELSTMT; - return 1; - } - int retVal =0; - TDBInfo tdbname = ((SqlOdbcConnection*)TRDBCONNECT)->getTrDbName(); - rv = TRDBCONNECT->beginTrans(); - rv = oselstmt->executeForResultSet(); - if (rv != OK) { - printError(ErrSysInit, "Unable to execute stmt in target db"); - TRDBCONNECT->rollback(); - TSELSTMT->free(); TDELSTMT->free(); - delete TSELSTMT; delete TDELSTMT; - return 1; - } - bool found = false; - do { - rv = oselstmt->fetchScroll(&noOfRowsFetched); - int row = 0; - /* display each row */ - for (row = 0; row < noOfRowsFetched; row++) { - char *tblName = (char *) TABLENAME_ARRAY + IDENTIFIER_LENGTH * row; - /*printf( "Row %d>", row ); - printf( " %s <>", tblName); - printf( " %d <>", PKID); - printf( " %d <>", OPERATION); - printf( " %d <>", CACHEID); - printf( " %d <>", AUTOID); - printf( "\n" ); */ - Util::trimEnd(tblName); - logFiner(Conf::logger, "Row value is Table:%s PK:%d OP:%d CID:%d\n", tblName, PKID, OPERATION, CACHEID); - - if (OPERATION == 2) { //DELETE - retVal = remove(tblName,PKID, thrInfo); - logFinest(Conf::logger, "DELETE %s %d", tblName, PKID); - } //DELETE - else { - retVal = insert(tblName, PKID, thrInfo); - logFinest(Conf::logger, "INSERT %s %d", tblName, PKID); - - } - if (retVal) ret =2; - TDELSTMT->setIntParam(1, AUTOID); - rv = TDELSTMT->execute(rows); - if (rv != OK) { - printError(ErrSysInternal, "Log record table:%s PK:%d RowID:%d not deleted from the target db %d\n", tblName, PKID, AUTOID, rv); - TRDBCONNECT->rollback(); - break; - } - } - } while (rv == OK && noOfRowsFetched == nLogRecords); - TSELSTMT->close(); - TDELSTMT->close(); - TRDBCONNECT->commit(); - TSELSTMT->free(); TDELSTMT->free(); delete TSELSTMT; delete TDELSTMT; - return ret; -} - -int insert(char *tablename, int pkid, void *thrInfo) -{ - DsnThrInput *dsnThrInfo = (DsnThrInput *)thrInfo; - DbRetVal rv = OK; - List fNameList; - AbsSqlStatement *astmt = NULL; - SqlOdbcStatement *ostmt = NULL; - AbsSqlStatement *istmt = NULL; - SqlStatement *sqlstmt = NULL; - TDBInfo tdbname = ((SqlOdbcConnection*)TRDBCONNECT)->getTrDbName(); - CTStmtNode *node = getStmtFromHashTable(tablename, STMTBUCKETS); - if ((node == NULL) || (node && node->insStmt == NULL)) { - astmt = SqlFactory::createStatement(CSqlAdapter); - astmt->setConnection(TRDBCONNECT); - istmt = SqlFactory::createStatement(CSqlLog); - istmt->setConnection(CSQLCONNECT); - sqlstmt = (SqlStatement *) istmt->getInnerStatement(); - char insStmt[1024]; - char pkfieldname[128]; pkfieldname[0]='\0'; - DbRetVal rv=getCacheField(tablename, pkfieldname, &CACHELIST); - if (rv!=OK) { - rv = getPKFieldName(tablename, pkfieldname, &CACHELIST); - if (rv != OK) { - } - } - //Util::str_tolower(pkfieldname); - char fieldlist[IDENTIFIER_LENGTH]; - char condition[IDENTIFIER_LENGTH]; - char sbuf[1024]; - rv=getCacheProjField(tablename,fieldlist, &CACHELIST); - if(rv!=OK){ - rv=getCacheCondition(tablename,condition, &CACHELIST); - if(rv!=OK){ - sprintf(sbuf, "SELECT * FROM %s where %s = ?;", tablename, pkfieldname); - } else { - sprintf(sbuf, "SELECT * FROM %s where %s = ? and %s ;", tablename, pkfieldname, condition); - } - } else { - rv=getCacheCondition(tablename,condition, &CACHELIST); - if(rv!=OK){ - sprintf(sbuf, "SELECT %s FROM %s where %s = ?;",fieldlist,tablename, pkfieldname); - } else { - sprintf(sbuf, "SELECT %s FROM %s where %s = ? and %s;",fieldlist,tablename, pkfieldname, condition); - } - } - //TODO::get the primary key field name from the table interface. need to implement it - //printf("Select String from adapter\n: *****%s\n", sbuf); - rv = astmt->prepare(sbuf); - if (rv != OK) return 2; - char *ptr = insStmt; - sprintf(ptr,"INSERT INTO %s VALUES(", tablename); ptr += strlen(ptr); - bool firstFld = true; - fNameList = sqlstmt->getFieldNameList(tablename, rv); - int noOfFields = fNameList.size(); - while (noOfFields--) { - if (firstFld) { - firstFld = false; - sprintf(ptr,"?", tablename); ptr += strlen(ptr); - } else { - sprintf(ptr, ",?"); ptr += strlen(ptr); - } - } - sprintf(ptr, ");"); ptr += strlen(ptr); - //printf("ins stmt: '%s'\n", insStmt); - rv = istmt->prepare(insStmt); - if (rv != OK) { return 2; } - if(node == NULL) addToHashTable(tablename, astmt, istmt, STMTBUCKETS); - else { - node->adptStmt = astmt; - node->insStmt = istmt; - } - } else { - istmt = node->insStmt; - astmt = node->adptStmt; - sqlstmt = (SqlStatement *) istmt->getInnerStatement(); - fNameList = sqlstmt->getFieldNameList(tablename, rv); - } - List valBufList; - ListIterator fNameIter = fNameList.getIterator(); - FieldInfo *info = new FieldInfo(); - int fcount =0; void *valBuf; int fieldsize=0; - void *buf[128];//TODO:resticts to support only 128 fields in table - for (int i=0; i < 128; i++) buf[i]= NULL; - DataType dType[128]; - Identifier *elem = NULL; - BindBuffer *bBuf = NULL; - while (fNameIter.hasElement()) { - elem = (Identifier*) fNameIter.nextElement(); - sqlstmt->getFieldInfo(tablename, (const char*)elem->name, info); - valBuf = AllDataType::alloc(info->type, info->length); - os::memset(valBuf,0,info->length); - bBuf = (BindBuffer *) SqlStatement::fillBindBuffer(tdbname, info->type, valBuf, info->length); - valBufList.append(bBuf); - dType[fcount] = info->type; - buf[fcount] = bBuf->csql; - astmt->bindField(fcount+1, buf[fcount]); - fcount++; - } - delete info; - int rows=0; - astmt->setIntParam(1, pkid); - int retValue = astmt->execute(rows); - if (retValue && rows != 1) { - printError(ErrSysInit, "Unable to execute statement at target db\n"); - return ErrSysInit; - } - ListIterator bindIter = valBufList.getIterator(); - if (astmt->fetch() != NULL) { - ostmt = (SqlOdbcStatement *) astmt; - ostmt->setNullInfo(istmt); - if(tdbname == postgres){ - for (int i=0; i < fcount; i++) { - if(dType[i] == typeString) Util::trimRight((char *)buf[i]); - } - } - //setXXXParams to be called here - int pos = 1; - while (bindIter.hasElement()) { - bBuf = (BindBuffer *) bindIter.nextElement(); - SqlStatement::setParamValues(istmt, pos++, bBuf->type, - bBuf->length, bBuf->csql); - } - CSQLCONNECT->beginTrans(); - int rows = 0; - rv = istmt->execute(rows); - if (rv != OK) { - printf ("execute failed \n"); - //printf(" STMT: %s\n",insStmt); - return 3; - } - CSQLCONNECT->commit(); - //printf("successfully inserted value with pkid = %d\n", pkid); - //Note:insert may fail if the record is inserted from this cache - } - astmt->close(); - //for (int i=0; i < fcount; i++) free(buf[i]); - ListIterator iter = valBufList.getIterator(); - while (iter.hasElement()){ - bBuf = (BindBuffer*) iter.nextElement(); - delete bBuf; - } - valBufList.reset(); - iter = fNameList.getIterator(); - while (iter.hasElement()) delete iter.nextElement(); - fNameList.reset(); - - return 0; -} -int remove(char *tablename, int pkid, void *thrInfo) -{ - DsnThrInput *dsnThrInfo = (DsnThrInput *)thrInfo; - DbRetVal rv = OK; - List fNameList; - SqlOdbcStatement *ostmt = NULL; - AbsSqlStatement *dstmt = NULL; - SqlStatement *sqlstmt = NULL; - TDBInfo tdbname = ((SqlOdbcConnection*)TRDBCONNECT)->getTrDbName(); - CTStmtNode *node = getStmtFromHashTable(tablename, STMTBUCKETS); - if (node == NULL || (node && node->delStmt == NULL)) { - dstmt = SqlFactory::createStatement(CSqlLog); - dstmt->setConnection(CSQLCONNECT); - sqlstmt = (SqlStatement *) dstmt->getInnerStatement(); - char delStmt[1024]; - char pkfieldname[128]; pkfieldname[0]='\0'; - DbRetVal rv=getCacheField(tablename, pkfieldname, &CACHELIST); - if (rv!=OK) { - rv = getPKFieldName(tablename, pkfieldname, &CACHELIST); - if (rv != OK) { - } - } - Util::str_tolower(pkfieldname); - sprintf(delStmt, "DELETE FROM %s where %s = ?;", tablename, pkfieldname); - //printf("Delete stmt: %s\n", delStmt); - rv = dstmt->prepare(delStmt); - if (rv != OK) return 2; - if (node == NULL) addToHashTable(tablename, dstmt, STMTBUCKETS); - else { node->delStmt = dstmt; } - } else { dstmt = node->delStmt; } - dstmt->setIntParam(1, pkid); - - rv = CSQLCONNECT->beginTrans(); - if (rv != OK) return 2; - int rows = 0; - //printf("DEBUG: pkid = %d\n", pkid); - rv = dstmt->execute(rows); - if (rv != OK || rows !=1) - { - CSQLCONNECT->rollback(); - //printf("DEBUG: delete stmt execute failed in csql = %d\n", rv); -// printError(ErrSysInternal, "Delete failed for stmt %s\n", delStmt); - return 3; - } - rv = CSQLCONNECT->commit(); - return 0; -} - -void createCacheTableList(AbsSqlConnection *tcon, List *cacheTableList) -{ - AbsSqlStatement *stmt = SqlFactory::createStatement(CSqlAdapter); - stmt->setConnection(tcon); - SqlOdbcStatement *ostmt = (SqlOdbcStatement*) stmt; - FILE *fp; - fp = fopen(Conf::config.getTableConfigFile(),"r"); - if( fp == NULL ) { - printError(ErrSysInit, "csqltable.conf file does not exist"); - fclose(fp); - } - char tablename[IDENTIFIER_LENGTH]; - char fieldname[IDENTIFIER_LENGTH]; - char condition[IDENTIFIER_LENGTH]; - char field[IDENTIFIER_LENGTH]; - char dsnName[IDENTIFIER_LENGTH]; - char pkfield[IDENTIFIER_LENGTH]; - - int mode; - while(!feof(fp)) - { - pkfield[0]='\0'; - int items = fscanf(fp,"%d %s %s %s %s %s \n",&mode,tablename,fieldname,condition,field,dsnName); - if (items != 6) break; - CacheTableInfo *cacheTable=new CacheTableInfo(); - cacheTable->setTableName(tablename); - cacheTable->setFieldName(fieldname); - cacheTable->setProjFieldList(field); - cacheTable->setCondition(condition); - ostmt->getPrimaryKeyFieldName(tablename, pkfield); - cacheTable->setPKField(pkfield); - cacheTableList->append(cacheTable); - } - // printf("Table %s is not cached\n",tabname); - fclose(fp); - delete stmt; -} - -DbRetVal getCacheCondition(char *tblName,char *condition, List *cacheTableList) -{ - ListIterator iter=cacheTableList->getIterator(); - CacheTableInfo *cacheTable; - while(iter.hasElement()) - { - cacheTable=(CacheTableInfo*)iter.nextElement(); - if(strcmp(cacheTable->getTableName(),tblName)==0){ - if(strcmp(cacheTable->getCondition(),"NULL")!=0) - { - strcpy(condition,cacheTable->getCondition()); - return OK; - } - } - } - return ErrNotExists; -} - -DbRetVal getCacheProjField(char *tblName,char *fieldlist, List *cacheTableList) -{ - ListIterator iter=cacheTableList->getIterator(); - CacheTableInfo *cacheTable; - while(iter.hasElement()) - { - cacheTable=(CacheTableInfo*)iter.nextElement(); - if(strcmp(cacheTable->getTableName(),tblName)==0){ - if(strcmp(cacheTable->getProjFieldList(),"NULL")!=0) - { - strcpy(fieldlist,cacheTable->getProjFieldList()); - return OK; - } - } - } - return ErrNotExists; -} -DbRetVal getCacheField(char *tblName,char *fldName, List *cacheTableList) -{ - ListIterator iter=cacheTableList->getIterator(); - CacheTableInfo *cacheTable; - while(iter.hasElement()) - { - cacheTable=(CacheTableInfo*)iter.nextElement(); - if(strcmp(cacheTable->getTableName(),tblName)==0){ - if(strcmp(cacheTable->getFieldName(),"NULL")!=0) - { - strcpy(fldName,cacheTable->getFieldName()); - return OK; - } - } - - } - return ErrNotExists; -} - -DbRetVal getPKFieldName(char *tblName, char *pkFldName, List *cacheTableList) -{ - ListIterator iter=cacheTableList->getIterator(); - CacheTableInfo *cacheTable; - while(iter.hasElement()) - { - cacheTable=(CacheTableInfo*)iter.nextElement(); - if(strcmp(cacheTable->getTableName(),tblName)==0){ - strcpy(pkFldName, cacheTable->getPKFieldName()); - return OK; - } - } - return ErrNotExists; -} - -/* -void *fillBindBuffer(TDBInfo tdbName, DataType type, void *valBuf, int length) -{ - BindBuffer *bBuf = NULL; - switch(type) - { - case typeDate: - bBuf = new BindBuffer(); - bBuf->csql = valBuf; - bBuf->type = typeDate; - bBuf->length = sizeof(DATE_STRUCT); - bBuf->targetdb = malloc(bBuf->length); - memset(bBuf->targetdb, 0, bBuf->length); - valBuf = bBuf->targetdb; - break; - case typeTime: - bBuf = new BindBuffer(); - bBuf->csql = valBuf; - bBuf->type = typeTime; - bBuf->length = sizeof(TIME_STRUCT); - bBuf->targetdb = malloc(bBuf->length); - memset(bBuf->targetdb, 0, bBuf->length); - valBuf = bBuf->targetdb; - break; - case typeTimeStamp: - bBuf = new BindBuffer(); - bBuf->csql = valBuf; - bBuf->type = typeTimeStamp; - bBuf->length = sizeof(TIMESTAMP_STRUCT); - bBuf->targetdb = malloc(bBuf->length); - memset(bBuf->targetdb, 0, bBuf->length); - valBuf = bBuf->targetdb; - break; - case typeLongLong: - { - if( tdbName == postgres || tdbName == oracle ) - { - bBuf = new BindBuffer(); - bBuf->type = typeLongLong; - bBuf->length = 40; - bBuf->csql = valBuf; - bBuf->targetdb = AllDataType::alloc(typeString,bBuf->length); - memset(bBuf->targetdb, 0, bBuf->length); - valBuf = bBuf->targetdb; - break; - }else - { - bBuf = new BindBuffer(); - bBuf->type = type; - bBuf->csql = valBuf; - bBuf->length = length; - break; - } - } - case typeVarchar: - case typeString: - { - bBuf = new BindBuffer(); - bBuf->type = typeString; - bBuf->csql = valBuf; - bBuf->length = length+1; - break; - } - default: - bBuf = new BindBuffer(); - bBuf->type = type; - bBuf->csql = valBuf; - bBuf->length = length; - break; - } - return bBuf; -}*/ diff --git a/src/tools/csqlcheckpointserver.cxx b/src/tools/csqlcheckpointserver.cxx deleted file mode 100644 index 40510356..00000000 --- a/src/tools/csqlcheckpointserver.cxx +++ /dev/null @@ -1,139 +0,0 @@ -/*************************************************************************** - * 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; -} -static void sigChildHandler(int sig) -{ - os::signal(SIGCHLD, sigChildHandler); - int stat; - waitpid(-1, &stat, WNOHANG); - //TODO::move waitpid to os wrapper -} - - -void printUsage() -{ - printf("Usage: csqlcheckpointserver \n"); - printf("Description: Start the csql checkpoint server.\n"); - return; -} -DbRetVal takeCheckpoint() -{ - char fileName[MAX_FILE_LEN]; - sprintf(fileName, "%s/csql.db.cur", Conf::config.getDbFile()); - if (::access(fileName, F_OK) != 0 ) return OK; - int fileSize = os::getFileSize(fileName); - logFine(Conf::logger, "Redo log file size %d", fileSize); - if (fileSize < Conf::config.getChkptRedoLimit()) return OK; - - Connection conn; - DbRetVal rv = conn.open(I_USER, I_PASS); - if (rv != OK) return rv; - DatabaseManager *dbMgr = conn.getDatabaseManager(); - NanoTimer timer; - timer.reset(); - timer.start(); - int tries = 0, totalTries=10; - while(tries < totalTries) { - rv = dbMgr->checkPoint(); - if (rv == ErrLoadingOn) { - conn.close(); - timer.stop(); - return rv; - } - if (rv == ErrLockTimeOut) { - os::sleep(1); //sleep for 1 second - } else if (rv != OK) { - printError(rv, "checkpoint: failed"); - conn.close(); - timer.stop(); - return rv; - }else if (rv == OK) break; - tries++; - } - timer.stop(); - if (rv != ErrLockTimeOut) { - logFine(Conf::logger, "Checkpoint taken %lld microsecs", timer.avg()/1000); - //printf("Time Taken for checkpoint %lld\n", timer.avg()/1000/1000); - } else { - logFine(Conf::logger, "Checkpoint:Could not get TXN consistent point"); - } - conn.close(); - return OK; -} -int main(int argc, char **argv) -{ - int c = 0, opt = 0; - while ((c = getopt(argc, argv, "?")) != EOF) - { - switch (c) - { - case '?' : { opt = 10; break; } //print help - default: opt=10; - - } - }//while options - - if (opt == 10) { - printUsage(); - return 0; - } - SessionImpl session; - DbRetVal rv = session.readConfigFile(); - if (rv != OK) - { - printError(ErrSysInternal,"Unable to read the configuration file \n"); - return 1; - } - os::signal(SIGINT, sigTermHandler); - os::signal(SIGTERM, sigTermHandler); - os::signal(SIGCHLD, sigChildHandler); - - if (!Conf::config.useDurability()) - { - printError(ErrSysInternal, "Durablity is set to OFF in csql.conf file\n"); - return 1; - } - logFine(Conf::logger, "CSQL Checkpoint server started"); - int ret = 0; - struct timeval timeout, tval; - timeout.tv_sec = Conf::config.getChkptSecs(); - tval.tv_usec = 0; - - while(!srvStop) - { - tval.tv_sec = timeout.tv_sec; - ret = os::select(0, 0, 0, 0, &tval); - if (srvStop) break; - takeCheckpoint(); - } - printf("Csql Checkpoint Daemon Exiting\n"); - logFine(Conf::logger, "CSQL Checkpoint server exiting"); - return 0; -} diff --git a/src/tools/csqlreplserver.cxx b/src/tools/csqlreplserver.cxx deleted file mode 100644 index 866addb1..00000000 --- a/src/tools/csqlreplserver.cxx +++ /dev/null @@ -1,118 +0,0 @@ -/*************************************************************************** - * 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 //for BindSqlField -#include - -int srvStop =0; -static void sigTermHandler(int sig) -{ - printf("Received signal %d\nStopping the server\n", sig); - srvStop = 1; -} - -void printUsage() -{ - printf("Usage: csqlreplserver \n"); - printf("Description: Start the csql replication server.\n"); - return; -} -int main(int argc, char **argv) -{ - int c = 0, opt = 0; - while ((c = getopt(argc, argv, "?")) != EOF) - { - switch (c) - { - case '?' : { opt = 10; break; } //print help - default: opt=10; - - } - }//while options - - if (opt == 10) { - printUsage(); - return 0; - } - - os::signal(SIGINT, sigTermHandler); - os::signal(SIGTERM, sigTermHandler); - - bool end = false; - SqlNetworkHandler::type = CSql; - SqlNetworkHandler::conn = SqlFactory::createConnection(CSql); - DbRetVal rv = SqlNetworkHandler::conn->connect("root", "manager"); - if (rv != OK) return 1; - //if (!Conf::config.useReplication()) - { - printf("Replication is set to OFF in csql.conf file\n"); - SqlNetworkHandler::conn->disconnect(); - return 1; - } - - - FILE *fp = NULL; - int nwid =0; - char hostname[IDENTIFIER_LENGTH]; - int port=0; - //fp = fopen(Conf::config.getReplConfigFile(),"r"); - if( fp == NULL ) { - printError(ErrSysInit, "Invalid path/filename for REPL_CONFIG_FILE.\n"); - SqlNetworkHandler::conn->disconnect(); - return 1; - } - fclose(fp); - NetworkServer *nwServer; - - nwServer = new UDPServer(); - - nwServer->setServerPort(port); - rv = nwServer->start(); - if (rv != OK) { - printf("Unable to start the server\n"); - return 1; - } - printf("Replication server started\n"); - fd_set fdset; - int ret = 0; - struct timeval timeout, tval; - timeout.tv_sec = 5; - timeout.tv_usec = 0; - - while(!srvStop) - { - FD_ZERO(&fdset); - FD_SET(nwServer->getSocket(), &fdset); - tval.tv_sec = timeout.tv_sec; - tval.tv_usec = timeout.tv_usec; - ret = os::select(nwServer->getSocket()+1, &fdset, 0, 0, &tval); - if (ret > 0) { - nwServer->handleClient(); - } - printf("Server Waiting for clients\n"); - } - printf("Replication Server Exiting\n"); - nwServer->stop(); - SqlNetworkHandler::conn->disconnect(); - delete SqlNetworkHandler::conn; - return 0; -} diff --git a/src/tools/csqlserver.cxx b/src/tools/csqlserver.cxx deleted file mode 100644 index 597c88f4..00000000 --- a/src/tools/csqlserver.cxx +++ /dev/null @@ -1,468 +0,0 @@ -/*************************************************************************** - * 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 -#include -char* version = "csql-linux-i686-3.0GA"; -int srvStop =0; -pid_t asyncpid=0; -pid_t sqlserverpid=0; -pid_t cachepid=0; -pid_t chkptpid=0; -bool recoverFlag=false; -bool monitorServer= false; -SessionImpl *session = NULL; -static void sigTermHandler(int sig) -{ - printf("Received signal %d\nStopping the server\n", sig); - srvStop = 1; - monitorServer=false; -} -static void sigChildHandler(int sig) -{ - os::signal(SIGCHLD, sigChildHandler); - int stat; - waitpid(-1, &stat, WNOHANG); - //TODO::move waitpid to os wrapper -} - -bool checkDead(pid_t pid) -{ - int ret = os::kill(pid, 0); - if (ret == -1) { - if (errno == EPERM) - printError(ErrWarning, "No permission to check process %d is alive."); - else - return true; - } - 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(Conf::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 - sysdb->recoverMutex(info->has_[i]); - //srvStop = 1; - //return ErrSysFatal; - } - } - TransactionManager *tm = new TransactionManager(); - LockManager *lm = new LockManager(sysdb); - if (info->thrTrans_.trans_ != NULL && info->thrTrans_.trans_->status_ == TransRunning) - { - printf("Rollback Transaction %x\n", info->thrTrans_.trans_); - tm->rollback(lm, info->thrTrans_.trans_); - info->thrTrans_.trans_->status_ = TransNotUsed; - } - 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* tInfo = sysdb->getThreadInfo(0); - int i=0; - ThreadInfo* freeSlot = NULL; - for (; i < Conf::config.getMaxProcs(); i++) - { - //check whether it is alive - if (tInfo->pid_ !=0 && checkDead(tInfo->pid_)) releaseAllResources(sysdb, tInfo); - tInfo++; - } - 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* tInfo = sysdb->getThreadInfo(0); - int i=0, count =0; - ThreadInfo* freeSlot = NULL; - for (; i < Conf::config.getMaxProcs(); i++) - { - if (tInfo->pid_ !=0 ) { - logFine(Conf::logger, "Registered Procs: %d %lu\n", tInfo->pid_, tInfo->thrid_); - printf("Client process with pid %d is still registered\n", tInfo->pid_); - if( tInfo->pid_ != asyncpid && tInfo->pid_ != cachepid && - tInfo->pid_ != sqlserverpid) - count++; - } - tInfo++; - } - sysdb->releaseProcessTableMutex(false); - if (count) return ErrSysInternal; else return OK; -} -void startCacheServer() -{ - char execName[1024]; - sprintf(execName, "%s/bin/csqlcacheserver", os::getenv("CSQL_INSTALL_ROOT")); - if (srvStop) return; - //printf("filename is %s\n", execName); - cachepid = os::createProcess(execName, "csqlcacheserver"); - if (cachepid != -1) - printf("Cache Receiver Started\t [PID=%d]\n",cachepid); - return; -} - -void startServiceClient() -{ - char execName[1024]; - sprintf(execName, "%s/bin/csqlsqlserver", os::getenv("CSQL_INSTALL_ROOT")); - //printf("filename is %s\n", execName); - if (srvStop) return; - sqlserverpid = os::createProcess(execName, "csqlsqlserver"); - if (sqlserverpid != -1) - printf("Network Server Started\t [PID=%d] [PORT=%d]\n", sqlserverpid,Conf::config.getPort()); - - return; -} - -void startAsyncServer() -{ - char execName[1024]; - sprintf(execName, "%s/bin/csqlasyncserver", os::getenv("CSQL_INSTALL_ROOT")); - //printf("filename is %s\n", execName); - if (srvStop) return; - asyncpid = os::createProcess(execName, "csqlasyncserver"); - if (asyncpid != -1) - printf("Async Cache Server Started [PID=%d]\n", asyncpid); - return; -} -void startCheckpointServer() -{ - char execName[1024]; - sprintf(execName, "%s/bin/csqlcheckpointserver", os::getenv("CSQL_INSTALL_ROOT")); - if (srvStop) return; - chkptpid = os::createProcess(execName, "csqlcheckpointserver"); - if (chkptpid != -1) { - printf("Checkpoint Server Started [PID=%d]\n", chkptpid); - logFine(Conf::logger, "Checkpoint Server Started pid:%d", chkptpid); - } - return; -} - -int recoverAndCheckPoint() -{ - char dbRedoFileName[MAX_FILE_LEN]; - char dbChkptSchema[MAX_FILE_LEN]; - char dbChkptMap[MAX_FILE_LEN]; - char dbChkptData[MAX_FILE_LEN]; - char dbBackupFile[MAX_FILE_LEN]; - char cmd[1024]; - - //check for check point file if present recover - sprintf(dbChkptSchema, "%s/db.chkpt.schema1", Conf::config.getDbFile()); - if (FILE *file = fopen(dbChkptSchema, "r")) { - fclose(file); - sprintf(cmd, "cp -f %s %s/db.chkpt.schema", dbChkptSchema, - Conf::config.getDbFile()); - int ret = system(cmd); - if (ret != 0) { - printError(ErrOS, "backup schema file: Recovery failed."); - return 1; - } - } - - sprintf(dbChkptMap, "%s/db.chkpt.map1", Conf::config.getDbFile()); - if (FILE *file = fopen(dbChkptMap, "r")) { - fclose(file); - sprintf(cmd, "cp -f %s %s/db.chkpt.map", dbChkptMap, - Conf::config.getDbFile()); - int ret = system(cmd); - if (ret != 0) { - printError(ErrOS, "backup map file: Recovery failed."); - return 2; - } - } - - int chkptID= Database::getCheckpointID(); - sprintf(dbChkptData, "%s/db.chkpt.data%d", Conf::config.getDbFile(), - chkptID); - sprintf(dbBackupFile, "%s/db.chkpt.data1", Conf::config.getDbFile()); - - FILE *fl = NULL; - if (!Conf::config.useMmap() && (fl = fopen(dbBackupFile, "r"))) { - fclose(fl); - sprintf(cmd, "cp -f %s/db.chkpt.data1 %s", Conf::config.getDbFile(), - dbChkptData); - int ret = system(cmd); - if (ret != 0) { - printError(ErrOS, "backup data file. Recovery failed."); - return 3; - } - } - if (FILE *file = fopen(dbChkptData, "r")) { - fclose(file); - int ret = system("recover"); - if (ret != 0) { - printError(ErrSysInternal, "recover: Recovery failed\n"); - return 4; - } - } - - //check for redo log file if present apply redo logs - sprintf(dbRedoFileName, "%s/csql.db.cur", Conf::config.getDbFile()); - if (FILE *file = fopen(dbRedoFileName, "r")) { - fclose(file); - int ret = system("redo -a"); - if (ret != 0) { - printError(ErrSysInternal, "redo: Recovery failed.\n"); - return 5; - } - DatabaseManager *dbMgr = session->getDatabaseManager(); - DbRetVal rv = dbMgr->checkPoint(); - if (rv != OK) { - printError(ErrSysInternal,"checkpoint: Recovery failed."); - return 6; - } - } - return 0; -} - -DbRetVal recoverCachedTables() -{ - printf("Database server recovering cached tables...\n"); - logFine(Conf::logger, "Recovering Cached tables"); - int ret = system("cachetable -R"); - if (ret != 0) { - printError(ErrSysInternal, "cachetable: Recovery failed %d\n", ret); - return ErrSysInternal; - } - printf("Cached Tables recovered\n"); - logFine(Conf::logger, "Cache Tables Recovery Complete"); -} - -void printUsage() -{ - printf("Usage: csqlserver [-c] [-v]\n"); - printf(" v -> print the version.\n"); - printf(" c -> recover all cached tables from the target database.\n"); - printf("Description: Start the csql server and initialize the database.\n"); - return; -} - -int main(int argc, char **argv) -{ - int c = 0, opt = 0; - bool freshStart = false; - while ((c = getopt(argc, argv, "cvi?")) != EOF) - { - switch (c) - { - case '?' : { opt = 10; break; } //print help - case 'c' : { opt = 1; break; } //recover all the tables from cache - case 'v' : { opt = 2; break; } //print version - case 'i' : { freshStart = true; break; } - default: opt=10; - } - }//while options - - if (opt == 10) { printUsage(); return 0; } - else if (opt ==2) { printf("%s\n",version); return 0; } - - session = new SessionImpl(); - DbRetVal rv = session->readConfigFile(); - if (rv != OK) - { - printf("Unable to read the configuration file \n"); - delete session; - return 1; - } - - if (freshStart) { - char cmd[1024]; - sprintf(cmd, "rm -rf %s/*", Conf::config.getDbFile()); - int ret = system(cmd); - if (ret != 0) { delete session; return 2; } - if (Conf::config.useDurability()) { - FILE *fp = fopen(Conf::config.getTableConfigFile(), "w+"); - fclose(fp); - } - } - - os::signal(SIGINT, sigTermHandler); - os::signal(SIGTERM, sigTermHandler); - os::signal(SIGCHLD, sigChildHandler); - rv = Conf::logger.startLogger(Conf::config.getLogFile(), true); - if (rv != OK) - { - printf("Unable to start the Conf::logger\n"); - delete session; - return 2; - } - bool isInit = true; - logFine(Conf::logger, "Server Started"); - int ret = session->initSystemDatabase(); - if (0 != ret) { - printf("Attaching to exising database\n"); - logFine(Conf::logger, "Attaching to existing database instance"); - isInit = false; - delete session; - session = new SessionImpl(); - ret = session->open(DBAUSER, DBAPASS); - if (ret !=0) { - printError(ErrSysInternal, - "Unable to attach to existing database\n"); - Conf::logger.stopLogger(); - session->destroySystemDatabase(); - delete session; - return 3; - } - } - bool end = false; - struct timeval timeout, tval; - timeout.tv_sec = 5; - timeout.tv_usec = 0; - Database* sysdb = session->getSystemDatabase(); - recoverFlag = false; - - GlobalUniqueID UID; - if (isInit) UID.create(); - - if(isInit && Conf::config.useDurability()) { - ret = recoverAndCheckPoint(); - if (ret) { - Conf::logger.stopLogger(); - session->destroySystemDatabase(); - delete session; - return 4; - } - } - recoverFlag = true; - - bool isAsyncReq = Conf::config.useCache() && - Conf::config.getCacheMode() == ASYNC_MODE; - bool isCacheReq = Conf::config.useCache() && Conf::config.useTwoWayCache() - && Conf::config.getCacheMode() != OFFLINE_MODE; - bool isSQLReq = Conf::config.useCsqlSqlServer(); - bool isChkptReq = Conf::config.useDurability(); - - if (isInit && !Conf::config.useDurability() && Conf::config.useCache()) { - rv = recoverCachedTables(); - if (rv != OK) { - Conf::logger.stopLogger(); - session->destroySystemDatabase(); - delete session; - return 5; - } - } - - //TODO:: kill all the child servers and restart if !isInit - - if(isSQLReq) startServiceClient(); - if (isAsyncReq) { - int msgid = os::msgget(Conf::config.getMsgKey(), 0666); - if (msgid != -1) os::msgctl(msgid, IPC_RMID, NULL); - startAsyncServer(); - } - if (isCacheReq) startCacheServer(); - if(isChkptReq) startCheckpointServer(); - - printf("Database Server Started...\n"); - logFine(Conf::logger, "Database Server Started"); - monitorServer= Conf::config.useMonitorServers(); - -reloop: - 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); - if (srvStop) break; - if (monitorServer) { - if (isCacheReq && cachepid !=0 && checkDead(cachepid)) { - logFine(Conf::logger, "Cache Receiver Died pid:%d", cachepid); - startCacheServer(); - } - if (isAsyncReq && asyncpid !=0 && checkDead(asyncpid)) { - logFine(Conf::logger, "Async Server Died pid:%d", asyncpid); - int msgid = os::msgget(Conf::config.getMsgKey(), 0666); - if (msgid != -1) os::msgctl(msgid, IPC_RMID, NULL); - startAsyncServer(); - } - if (isSQLReq && sqlserverpid !=0 && checkDead(sqlserverpid)) { - logFine(Conf::logger, "Network Server Died pid:%d", sqlserverpid); - startServiceClient(); - } - if (isChkptReq && chkptpid !=0 && checkDead(chkptpid)) { - logFine(Conf::logger, "Checkpoint Server Died pid:%d", chkptpid); - startCheckpointServer(); - } - } - } - if (logActiveProcs(sysdb) != OK) {srvStop = 0; - monitorServer= Conf::config.useMonitorServers(); - goto reloop; - } - if (cachepid) os::kill(cachepid, SIGTERM); - if(asyncpid) os::kill(asyncpid, SIGTERM); - if (sqlserverpid) os::kill(sqlserverpid, SIGTERM); - if (chkptpid) os::kill(chkptpid, SIGTERM); - - if (Conf::config.useDurability() && Conf::config.useMmap()) { - //ummap the memory - char *startAddr = (char *) sysdb->getMetaDataPtr(); - msync(startAddr + Conf::config.getMaxSysDbSize(), - Conf::config.getMaxDbSize(), MS_SYNC); - munmap(startAddr + Conf::config.getMaxSysDbSize(), - Conf::config.getMaxDbSize()); - } - logFine(Conf::logger, "Server Exiting"); - printf("Server Exiting\n"); - logFine(Conf::logger, "Server Ended"); - UID.destroy(); - session->destroySystemDatabase(); - Conf::logger.stopLogger(); - delete session; - return 0; -} diff --git a/src/tools/csqlsqlserver.cxx b/src/tools/csqlsqlserver.cxx deleted file mode 100644 index 3d07b47f..00000000 --- a/src/tools/csqlsqlserver.cxx +++ /dev/null @@ -1,142 +0,0 @@ -/*************************************************************************** - * 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 -#include //for BindSqlField -#include - -int srvStop =0; -bool gateway = false; -static void sigTermHandler(int sig) -{ - printf("Received signal %d\nStopping the server\n", sig); - srvStop = 1; -} - -void printUsage() -{ - printf("Usage: csqlsqlserver \n"); - printf("Description: Start the csql network server.\n"); - return; -} -int main(int argc, char **argv) -{ - int c = 0, opt = 0; - while ((c = getopt(argc, argv, "g?")) != EOF) - { - switch (c) - { - case '?' : { opt = 10; break; } //print help - case 'g' : { gateway = true; break; } - default: opt=10; - - } - }//while options - - if (opt == 10) { - printUsage(); - return 0; - } - 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); - os::signal(SIGCHLD, SIG_IGN); - - bool end = false; - SqlNetworkHandler::stmtID = 0; - if (!Conf::config.useCsqlSqlServer()) - { - printf("Sql Network Server is set to OFF in csql.conf file\n"); - return 1; - } -/* - FILE *fp = NULL; - int nwid =0; - char hostname[IDENTIFIER_LENGTH]; - int port=0; - fp = fopen(Conf::config.getReplConfigFile(),"r"); - if( fp == NULL ) { - printError(ErrSysInit, "Invalid path/filename for REPL_CONFIG_FILE.\n"); - SqlNetworkHandler::conn->disconnect(); - return 1; - } - bool found =false; - while(!feof(fp)) { - fscanf(fp, "%d:%d:%s\n", &nwid, &port, hostname); - printf( "%d:%d:%s\n", nwid, port, hostname); - if (nwid == Conf::config.getNetworkID()) { found = true; break;} - } - fclose(fp); - if (!found) - { - printf("Info not found in REPL_CONFIG_FILE for nwid %d\n", - Conf::config.getNetworkID()); - SqlNetworkHandler::conn->disconnect(); - return 1; - } -*/ - int port = 0; - if ((port = Conf::config.getPort()) <= 1024) - { - printf("Invalid port Number\n"); - return 1; - } - NetworkServer *nwServer; - nwServer = new TCPServer(); - - nwServer->setServerPort(port); - rv = nwServer->start(); - if (rv != OK) { - printf("Unable to start the server\n"); - delete nwServer; - return 1; - } - // printf("Network Server Started"); - fd_set fdset; - int ret = 0; - struct timeval timeout, tval; - timeout.tv_sec = 5; - timeout.tv_usec = 0; - - while(!srvStop) - { - FD_ZERO(&fdset); - FD_SET(nwServer->getSocket(), &fdset); - tval.tv_sec = timeout.tv_sec; - tval.tv_usec = timeout.tv_usec; - ret = os::select(nwServer->getSocket()+1, &fdset, 0, 0, &tval); - if (ret > 0) { - nwServer->handleClient(); - } - // printf("Server Waiting for clients\n"); - } - printf("Csql Network Daemon Exiting\n"); - nwServer->stop(); - delete nwServer; - return 0; -} -- 2.11.4.GIT