14 #ifndef INCLUDED_protocols_wum_DatabaseQueryWorkUnitManager_hh
15 #define INCLUDED_protocols_wum_DatabaseQueryWorkUnitManager_hh
27 #include <basic/database/sql_utils.hh>
29 #include <utility/sql_database/DatabaseSessionManager.hh>
30 #include <utility/string_util.hh>
33 #include <basic/Tracer.hh>
39 static basic::Tracer
TR(
"protocols.wum.DatabaseQueryWorkUnitManager");
89 master_rank_( master_rank ),
90 db_session_( db_session ),
91 query_string_(query_string)
99 using cppdb::statement;
106 TR <<
"Adding DB WU for each row in query result" << std::endl;
108 statement query_statement(basic::database::safely_prepare_statement(query_string_,db_session_));
110 result res(basic::database::safely_read_from_database(query_statement));
116 map<string,string> row_map;
118 for(
int i=0; i<res.cols(); ++i){
119 string key(res.name(i));
132 new_wu->set_wu_type(wu_type);
134 outbound().add( new_wu );
136 TR <<
"Added " << wu_counter <<
" database WUs to queue" << endl;
146 TR <<
"Master Node: Waiting for job requests..." << std::endl;
151 TR <<
"Master: processing msgs.." << std::endl;
152 process_incoming_msgs();
155 TR <<
"Master: process incoming" << std::endl;
156 process_inbound_wus();
158 TR <<
"Master: process outbound" << std::endl;
159 process_outbound_wus();
162 process_incoming_msgs(
true );
173 if( inbound().
size() > 0 ){
174 TR <<
"Processing inbound WUs on master.." << std::endl;
178 db_session_->begin();
179 while( inbound().
size() > 0 )
182 runtime_assert( next_wu );
185 if ( next_wu->get_wu_type() ==
"waitwu" )
continue;
191 if ( db_wu == NULL ){
192 TR <<
"WARNING: Master recieved a non-db WU" << std::endl;
193 next_wu->print(
TR );
197 cppdb::statement query_statement(basic::database::safely_prepare_statement(db_wu->
result_query_string(),db_session_));
198 basic::database::safely_write_to_database(query_statement);
202 db_session_->commit();