diff options
author | deva <deva> | 2009-04-24 09:21:53 +0000 |
---|---|---|
committer | deva <deva> | 2009-04-24 09:21:53 +0000 |
commit | daace73c76bdd22e8e87408ba7e0eec7d6e19e0e (patch) | |
tree | 79d738c7938e7834fa337613cad8542ff30ff181 /server/src/server.cc | |
parent | 3e4eb36c5e67045824bc2ca44f9d7efe2c5e4176 (diff) |
Delayed journal commit write. This makes sure each macro is only stored once. and also makes sure only one header (date, user, etc) is added pr. session.
Diffstat (limited to 'server/src/server.cc')
-rw-r--r-- | server/src/server.cc | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/server/src/server.cc b/server/src/server.cc index 24d1eb1..4a17954 100644 --- a/server/src/server.cc +++ b/server/src/server.cc @@ -78,7 +78,8 @@ public: static std::string handleTransaction(Transaction *transaction, TCPSocket *pentominos_socket, - Database *db) + Database *db, + JournalWriter &journalwriter) { std::string answer; answer += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; @@ -98,7 +99,7 @@ static std::string handleTransaction(Transaction *transaction, Macro *macro = mp.getMacro(); std::string resume = resume_parser(macro->resume, commit); - commit.fields["journal.resume"] = resume; + commit.fields["journal.resume"] = resume; db->commitTransaction(transaction->user, transaction->cpr, *macro, commit.fields); @@ -108,9 +109,12 @@ static std::string handleTransaction(Transaction *transaction, // macro->resume.attributes["store_in_journal"] == "true"; if(resume != "" && store_in_journal) { + journalwriter.addEntry(*transaction, commit, resume); + /* journal_commit(transaction->cpr.c_str(), transaction->user.c_str(), Conf::journal_commit_addr.c_str(), Conf::journal_commit_port, resume.c_str(), resume.length()); + */ } i++; @@ -170,7 +174,8 @@ static std::string handleTransaction(Transaction *transaction, } if(macro.attributes["name"] == request.macro || - (macro.attributes.find("static") != macro.attributes.end() && macro.attributes["static"] == "true") + (macro.attributes.find("static") != macro.attributes.end() && + macro.attributes["static"] == "true") ) { foundmacro = true; @@ -274,6 +279,8 @@ static void handleConnection(TCPSocket *socket) Database *db = new Database("pgsql", Conf::database_addr, "", Conf::database_user, Conf::database_passwd, ""); + JournalWriter journalwriter(Conf::journal_commit_addr.c_str(), Conf::journal_commit_port); + ssize_t size; char buf[4096]; @@ -299,7 +306,7 @@ static void handleConnection(TCPSocket *socket) if(parser->parse(buf, size)) { PRACRO_DEBUG(server, "Got complete XML document %d bytes used, %d bytes in current buffer.\n", parser->usedBytes(), size); - socket->write(handleTransaction(transaction, &pentominos_socket, db)); + socket->write(handleTransaction(transaction, &pentominos_socket, db, journalwriter)); size = size - parser->usedBytes(); delete transaction; transaction = NULL; @@ -325,6 +332,8 @@ static void handleConnection(TCPSocket *socket) parser = NULL; } + journalwriter.commit(); + PRACRO_DEBUG(server, "Out of read loop!\n"); } @@ -340,8 +349,7 @@ void server() socket = new TCPSocket("Listen socket"); socket->listen(port); } catch (Exception &e) { - PRACRO_ERR_LOG(server, "Error during parsing:\n%s\n", - e.what()); + PRACRO_ERR_LOG(server, "Error in listen:\n%s\n", e.what()); delete socket; socket = NULL; return; |