1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-29 08:21:15 +03:00

Reformat all code to coding standard

This commit is contained in:
Andrew Hutchings
2017-10-26 17:18:17 +01:00
parent 4985f3456e
commit 01446d1e22
1296 changed files with 403852 additions and 353747 deletions

View File

@ -90,373 +90,424 @@ using namespace qfe;
enum StmtType
{
UNKNOWN,
QUERY,
CREATE,
DROP,
SHOW,
UNKNOWN,
QUERY,
CREATE,
DROP,
SHOW,
};
volatile uint32_t SystemSID;
void log(const string &s)
void log(const string& s)
{
cerr << s << endl;
cerr << s << endl;
}
struct QueryMessage
{
QueryMessage() : isValid(false) { }
~QueryMessage() { }
QueryMessage() : isValid(false) { }
~QueryMessage() { }
string toString() const;
string toString() const;
bool isValid;
string queryText;
string defaultSchema;
bool isValid;
string queryText;
string defaultSchema;
};
string QueryMessage::toString() const
{
ostringstream oss;
oss << "valid: " << boolalpha << isValid << ", " <<
"queryText: " << queryText << ", " <<
"defaultSchema: " << defaultSchema;
return oss.str();
ostringstream oss;
oss << "valid: " << boolalpha << isValid << ", " <<
"queryText: " << queryText << ", " <<
"defaultSchema: " << defaultSchema;
return oss.str();
}
ostream& operator<<(ostream& os, const QueryMessage& rhs)
{
os << rhs.toString();
return os;
os << rhs.toString();
return os;
}
class ThreadFunc
{
public:
ThreadFunc(SockType fd) : fFd(fd) { }
~ThreadFunc() { }
ThreadFunc(SockType fd) : fFd(fd) { }
~ThreadFunc() { }
void run();
void operator()() { run(); }
void run();
void operator()()
{
run();
}
private:
ThreadFunc(const ThreadFunc& rhs);
ThreadFunc& operator=(const ThreadFunc& rhs);
ThreadFunc(const ThreadFunc& rhs);
ThreadFunc& operator=(const ThreadFunc& rhs);
SockType fFd;
SockType fFd;
};
bool serverInit()
{
#ifndef _MSC_VER
setsid();
setsid();
//Handle certain signals (we want these to return EINTR so we can throw)
//SIGPIPE
//I don't think we'll get any of these from init (except possibly HUP, but that's an indication
// of bad things anyway)
//SIGHUP?
//SIGUSR1?
//SIGUSR2?
//SIGPOLL?
struct sigaction sa;
memset(&sa, 0, sizeof(struct sigaction));
sa.sa_handler = SIG_IGN;
sigaction(SIGPIPE, &sa, 0);
sigaction(SIGHUP, &sa, 0);
sigaction(SIGUSR1, &sa, 0);
sigaction(SIGUSR2, &sa, 0);
//Handle certain signals (we want these to return EINTR so we can throw)
//SIGPIPE
//I don't think we'll get any of these from init (except possibly HUP, but that's an indication
// of bad things anyway)
//SIGHUP?
//SIGUSR1?
//SIGUSR2?
//SIGPOLL?
struct sigaction sa;
memset(&sa, 0, sizeof(struct sigaction));
sa.sa_handler = SIG_IGN;
sigaction(SIGPIPE, &sa, 0);
sigaction(SIGHUP, &sa, 0);
sigaction(SIGUSR1, &sa, 0);
sigaction(SIGUSR2, &sa, 0);
#ifndef __FreeBSD__
sigaction(SIGPOLL, &sa, 0);
sigaction(SIGPOLL, &sa, 0);
#endif
#if 0
int fd;
close(2);
fd = open("/tmp/qfe.err",O_CREAT|O_TRUNC|O_WRONLY,0644);
if (fd >= 0 && fd != 2)
{
dup2(fd, 2);
close(fd);
}
int fd;
close(2);
fd = open("/tmp/qfe.err", O_CREAT | O_TRUNC | O_WRONLY, 0644);
if (fd >= 0 && fd != 2)
{
dup2(fd, 2);
close(fd);
}
#endif
#endif
return true;
return true;
}
SockType initListenSock(short portNo)
{
SockType listenSock=-1;
SockType listenSock = -1;
#ifdef _MSC_VER
WSAData wsadata;
const WORD minVersion = MAKEWORD(2, 2);
WSAStartup(minVersion, &wsadata);
WSAData wsadata;
const WORD minVersion = MAKEWORD(2, 2);
WSAStartup(minVersion, &wsadata);
#endif
listenSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
idbassert_s(listenSock >= 0, string("socket create error: ") + strerror(errno));
//if (listenSock < 0) throw runtime_error(string("socket create error: ") + strerror(errno));
listenSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
idbassert_s(listenSock >= 0, string("socket create error: ") + strerror(errno));
//if (listenSock < 0) throw runtime_error(string("socket create error: ") + strerror(errno));
#ifndef _MSC_VER
int optval = 1;
setsockopt(listenSock, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast<const char*>(&optval), sizeof(optval));
int optval = 1;
setsockopt(listenSock, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast<const char*>(&optval), sizeof(optval));
#endif
int rc = 0;
struct sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portNo);
const int MaxTries = 5 * 60 / 10;
int tries = 0;
int rc = 0;
struct sockaddr_in serv_addr;
memset(&serv_addr, 0, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons(portNo);
const int MaxTries = 5 * 60 / 10;
int tries = 0;
again:
rc = ::bind(listenSock, (sockaddr*)&serv_addr, sizeof(serv_addr));
if (rc < 0)
{
#ifdef _MSC_VER
int x = WSAGetLastError();
if (x == WSAEADDRINUSE)
#else
if (errno == EADDRINUSE)
#endif
{
//cerr << "Addr in use..." << endl;
if (++tries >= MaxTries)
{
log("Waited too long for socket to bind...giving up");
//cerr << "Waited too long for socket to bind...giving up" << endl;
exit(1);
}
sleep(10);
goto again;
}
idbassert_s(0, string("socket bind error: ") + strerror(errno));
//throw runtime_error(string("socket bind error: ") + strerror(errno));
}
rc = listen(listenSock, 16);
idbassert_s(rc >= 0, string("socket listen error") + strerror(errno));
//if (rc < 0) throw runtime_error(string("socket listen error") + strerror(errno));
rc = ::bind(listenSock, (sockaddr*)&serv_addr, sizeof(serv_addr));
return listenSock;
if (rc < 0)
{
#ifdef _MSC_VER
int x = WSAGetLastError();
if (x == WSAEADDRINUSE)
#else
if (errno == EADDRINUSE)
#endif
{
//cerr << "Addr in use..." << endl;
if (++tries >= MaxTries)
{
log("Waited too long for socket to bind...giving up");
//cerr << "Waited too long for socket to bind...giving up" << endl;
exit(1);
}
sleep(10);
goto again;
}
idbassert_s(0, string("socket bind error: ") + strerror(errno));
//throw runtime_error(string("socket bind error: ") + strerror(errno));
}
rc = listen(listenSock, 16);
idbassert_s(rc >= 0, string("socket listen error") + strerror(errno));
//if (rc < 0) throw runtime_error(string("socket listen error") + strerror(errno));
return listenSock;
}
QueryMessage getNextMsg(SockType fd)
{
QueryMessage msg;
QueryMessage msg;
try {
msg.defaultSchema = socketio::readString(fd);
msg.queryText = socketio::readString(fd);
msg.isValid = true;
} catch (runtime_error& rex) {
cerr << "re reading ctl msg: " << rex.what() << endl;
msg.queryText = "";
} catch (...) {
cerr << "ex reading ctl msg" << endl;
msg.queryText = "";
}
try
{
msg.defaultSchema = socketio::readString(fd);
msg.queryText = socketio::readString(fd);
msg.isValid = true;
}
catch (runtime_error& rex)
{
cerr << "re reading ctl msg: " << rex.what() << endl;
msg.queryText = "";
}
catch (...)
{
cerr << "ex reading ctl msg" << endl;
msg.queryText = "";
}
return msg;
return msg;
}
StmtType guessStatementType(const string& stmt)
{
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
char_separator<char> sep;
tokenizer tokens(stmt, sep);
tokenizer::iterator tok_iter = tokens.begin();
string first_word;
first_word = *tok_iter;
algorithm::to_lower(first_word);
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
char_separator<char> sep;
tokenizer tokens(stmt, sep);
tokenizer::iterator tok_iter = tokens.begin();
string first_word;
first_word = *tok_iter;
algorithm::to_lower(first_word);
if (first_word == "select")
return QUERY;
if (first_word == "create")
return CREATE;
if (first_word == "drop")
return DROP;
if (first_word == "show")
return SHOW;
if (first_word == "select")
return QUERY;
return UNKNOWN;
if (first_word == "create")
return CREATE;
if (first_word == "drop")
return DROP;
if (first_word == "show")
return SHOW;
return UNKNOWN;
}
struct ScopedCleaner
{
ScopedCleaner(SockType fd=-1) : fFd(fd) { }
ScopedCleaner(SockType fd = -1) : fFd(fd) { }
#ifdef _MSC_VER
~ScopedCleaner() { if (fFd >= 0) shutdown(fFd, SHUT_RDWR); closesocket(fFd); }
~ScopedCleaner()
{
if (fFd >= 0) shutdown(fFd, SHUT_RDWR);
closesocket(fFd);
}
#else
~ScopedCleaner() { if (fFd >= 0) shutdown(fFd, SHUT_RDWR); close(fFd); }
~ScopedCleaner()
{
if (fFd >= 0) shutdown(fFd, SHUT_RDWR);
close(fFd);
}
#endif
SockType fFd;
SockType fFd;
};
void ThreadFunc::run()
{
QueryMessage m;
execplan::CalpontSelectExecutionPlan* csep=0;
MessageQueueClient* msgqcl;
QueryMessage m;
execplan::CalpontSelectExecutionPlan* csep = 0;
MessageQueueClient* msgqcl;
ScopedCleaner cleaner(fFd);
ScopedCleaner cleaner(fFd);
uint32_t sid = 1;
sid = atomicops::atomicInc(&SystemSID);
uint32_t sid = 1;
sid = atomicops::atomicInc(&SystemSID);
try {
m = getNextMsg(fFd);
try
{
m = getNextMsg(fFd);
if (m.isValid)
{
DefaultSchema = m.defaultSchema;
StmtType st = guessStatementType(m.queryText);
switch (st)
{
case QUERY:
csep = parseQuery(m.queryText, sid);
//sendCSEP takes ownership of the ptr from parseQuery
msgqcl = sendCSEP(csep);
//processReturnedRows takes ownership of the ptr from sendCSEP
processReturnedRows(msgqcl, fFd);
break;
case CREATE:
processCreateStmt(m.queryText, sid);
break;
case DROP:
processDropStmt(m.queryText, sid);
break;
case SHOW:
{
ostringstream oss;
oss << "select calpontsys.systable.tablename from calpontsys.systable where "
"calpontsys.systable.schema='" << m.defaultSchema << "';";
csep = parseQuery(oss.str(), sid);
msgqcl = sendCSEP(csep);
processReturnedRows(msgqcl, fFd);
break;
}
default:
throw runtime_error("couldn't guess the statement type");
break;
}
}
} catch (std::exception& ex) {
socketio::writeString(fFd, ex.what());
throw; //in a multi-threaded server this will simply cause this thread to exit
} catch (...) {
socketio::writeString(fFd, "internal query processing error");
throw;
}
if (m.isValid)
{
DefaultSchema = m.defaultSchema;
StmtType st = guessStatementType(m.queryText);
switch (st)
{
case QUERY:
csep = parseQuery(m.queryText, sid);
//sendCSEP takes ownership of the ptr from parseQuery
msgqcl = sendCSEP(csep);
//processReturnedRows takes ownership of the ptr from sendCSEP
processReturnedRows(msgqcl, fFd);
break;
case CREATE:
processCreateStmt(m.queryText, sid);
break;
case DROP:
processDropStmt(m.queryText, sid);
break;
case SHOW:
{
ostringstream oss;
oss << "select calpontsys.systable.tablename from calpontsys.systable where "
"calpontsys.systable.schema='" << m.defaultSchema << "';";
csep = parseQuery(oss.str(), sid);
msgqcl = sendCSEP(csep);
processReturnedRows(msgqcl, fFd);
break;
}
default:
throw runtime_error("couldn't guess the statement type");
break;
}
}
}
catch (std::exception& ex)
{
socketio::writeString(fFd, ex.what());
throw; //in a multi-threaded server this will simply cause this thread to exit
}
catch (...)
{
socketio::writeString(fFd, "internal query processing error");
throw;
}
}
}
int main(int argc, char** argv)
{
int c;
SockType listenSock;
short portNo;
int c;
SockType listenSock;
short portNo;
portNo = 0;
char* p = getenv("IDB_QFE_PORT");
if (p && *p)
portNo = atoi(p);
portNo = 0;
char* p = getenv("IDB_QFE_PORT");
if (p && *p)
portNo = atoi(p);
if (portNo <= 0)
portNo = 9198;
if (portNo <= 0)
portNo = 9198;
#ifdef _MSC_VER
listenSock = INVALID_SOCKET;
listenSock = INVALID_SOCKET;
#else
listenSock = -1;
listenSock = -1;
#endif
opterr = 0;
opterr = 0;
while ((c = getopt(argc, argv, "p:")) != -1)
switch (c)
{
case 'p':
portNo = atoi(optarg);
break;
case '?':
default:
break;
}
while ((c = getopt(argc, argv, "p:")) != -1)
switch (c)
{
case 'p':
portNo = atoi(optarg);
break;
if (!serverInit())
{
log("Could not initialize the QFE Server!");
cerr << "Could not initialize the QFE Server!" << endl;
return 1;
}
case '?':
default:
break;
}
listenSock = initListenSock(portNo);
if (!serverInit())
{
log("Could not initialize the QFE Server!");
cerr << "Could not initialize the QFE Server!" << endl;
return 1;
}
SystemSID = 0;
listenSock = initListenSock(portNo);
for (;;)
{
SystemSID = 0;
for (;;)
{
#ifdef _MSC_VER
SOCKET querySock = INVALID_SOCKET;
querySock = accept(listenSock, 0, 0);
idbassert_s(querySock != INVALID_SOCKET, string("socket accept error: ") + strerror(errno));
SOCKET querySock = INVALID_SOCKET;
querySock = accept(listenSock, 0, 0);
idbassert_s(querySock != INVALID_SOCKET, string("socket accept error: ") + strerror(errno));
#if 0
uint32_t sndbufsize;
int sndbufsizelen=4;
int rc;
rc = getsockopt(querySock, SOL_SOCKET, SO_SNDBUF, (char*)&sndbufsize, &sndbufsizelen);
if (rc != SOCKET_ERROR)
{
if (sndbufsizelen == 4)
{
cerr << "getsockopt(): current SO_SNDBUF = " << sndbufsize << endl;
sndbufsize = atoi(getenv("SO_SNDBUF"));
cerr << "setsockopt(): setting SO_SNDBUF = " << sndbufsize << endl;
rc = setsockopt(querySock, SOL_SOCKET, SO_SNDBUF, (const char*)&sndbufsize, sndbufsizelen);
if (rc != SOCKET_ERROR)
{
getsockopt(querySock, SOL_SOCKET, SO_SNDBUF, (char*)&sndbufsize, &sndbufsizelen);
cerr << "getsockopt(): new SO_SNDBUF = " << sndbufsize << endl;
}
else
{
cerr << "setsockopt(): " << WSAGetLastError() << endl;
}
}
else
{
cerr << "getsockopt(): expecting 4 bytes, got " << sndbufsizelen << endl;
}
}
else
{
cerr << "getsockopt(): " << WSAGetLastError() << endl;
}
uint32_t sndbufsize;
int sndbufsizelen = 4;
int rc;
rc = getsockopt(querySock, SOL_SOCKET, SO_SNDBUF, (char*)&sndbufsize, &sndbufsizelen);
if (rc != SOCKET_ERROR)
{
if (sndbufsizelen == 4)
{
cerr << "getsockopt(): current SO_SNDBUF = " << sndbufsize << endl;
sndbufsize = atoi(getenv("SO_SNDBUF"));
cerr << "setsockopt(): setting SO_SNDBUF = " << sndbufsize << endl;
rc = setsockopt(querySock, SOL_SOCKET, SO_SNDBUF, (const char*)&sndbufsize, sndbufsizelen);
if (rc != SOCKET_ERROR)
{
getsockopt(querySock, SOL_SOCKET, SO_SNDBUF, (char*)&sndbufsize, &sndbufsizelen);
cerr << "getsockopt(): new SO_SNDBUF = " << sndbufsize << endl;
}
else
{
cerr << "setsockopt(): " << WSAGetLastError() << endl;
}
}
else
{
cerr << "getsockopt(): expecting 4 bytes, got " << sndbufsizelen << endl;
}
}
else
{
cerr << "getsockopt(): " << WSAGetLastError() << endl;
}
#endif
uint32_t sndbufsize = 512 * 1024;
setsockopt(querySock, SOL_SOCKET, SO_SNDBUF, (const char*)&sndbufsize, 4);
uint32_t sndbufsize = 512 * 1024;
setsockopt(querySock, SOL_SOCKET, SO_SNDBUF, (const char*)&sndbufsize, 4);
#else
int querySock = -1;
querySock = accept(listenSock, 0, 0);
idbassert_s(querySock >= 0, string("socket accept error: ") + strerror(errno));
int querySock = -1;
querySock = accept(listenSock, 0, 0);
idbassert_s(querySock >= 0, string("socket accept error: ") + strerror(errno));
#endif
//ThreadFunc now owns querySock and is responsible for cleaning it up
ThreadFunc tf(querySock);
//ThreadFunc now owns querySock and is responsible for cleaning it up
ThreadFunc tf(querySock);
#ifdef SINGLE_THREADED
try {
tf.run();
} catch (std::exception& ex) {
cerr << "ThreadFunc run threw an exception: " << ex.what() << endl;
} catch (...) {
cerr << "ThreadFunc run threw an exception" << endl;
}
#else
thread t(tf);
#endif
}
return 0;
try
{
tf.run();
}
catch (std::exception& ex)
{
cerr << "ThreadFunc run threw an exception: " << ex.what() << endl;
}
catch (...)
{
cerr << "ThreadFunc run threw an exception" << endl;
}
#else
thread t(tf);
#endif
}
return 0;
}
// vim:ts=4 sw=4: