diff --git a/src/DBManager.cpp b/src/DBManager.cpp index 5d4ce13234bebcb64190c81395050e9d5f12ab13..1961e412b67db8d100679fd0d47bea496c0bc352 100644 --- a/src/DBManager.cpp +++ b/src/DBManager.cpp @@ -114,12 +114,12 @@ DBManager::InformationList DBManager::retrieveInformation(std::string schema, } //============================================================================== -// DBManager::retrieveInformation() +// DBManager::retrieveNewTuples() //============================================================================== -soci::rowset<soci::row> DBManager::searchNewTuples(std::string schema, +soci::rowset<soci::row> DBManager::retrieveNewTuples(std::string schema, std::string table, std::tm update_time) throw(soci::soci_error) { - DEBUG_STREAM << "DBManager::searchNewTuples()" << endl; + DEBUG_STREAM << "DBManager::retrieveNewTuples()" << endl; soci::session session(*m_connectionPool_sp); @@ -127,7 +127,11 @@ soci::rowset<soci::row> DBManager::searchNewTuples(std::string schema, << schema << "." << table << " where update_time>=:timestamp", soci::use(update_time,"timestamp")); - return rows; + MetadataList metadataList; + + std::copy(rows.begin(), rows.end(), std::back_inserter(metadataList)); + + return metadataList; } } //namespace diff --git a/src/DBManager.h b/src/DBManager.h index e1a5c4a8692e3d7431034029d474dbbb20b580df..7a4c916fa24646b0a92dd35ea62e8e6476933027 100644 --- a/src/DBManager.h +++ b/src/DBManager.h @@ -75,7 +75,9 @@ public: //------------------------------------------------------------------------------ // [Public] Search new tuple method //------------------------------------------------------------------------------ - virtual soci::rowset<soci::row> searchNewTuples(std::string, std::string, + typedef std::vector<soci::row> MetadataList; + + virtual MetadataList retrieveNewTuples(std::string, std::string, std::tm) throw(soci::soci_error); protected: diff --git a/src/ProtocolManager.cpp b/src/ProtocolManager.cpp index c67f34504d729fdd4cf3c44cc9985c44a6850328..b38be2fc77a4762a7dae5c6a60f3c47f5260bbfb 100644 --- a/src/ProtocolManager.cpp +++ b/src/ProtocolManager.cpp @@ -187,6 +187,9 @@ ResponseSP ProtocolManager::prepareValidation(RequestSP request_sp) } catch(std::runtime_error& ex) { + WARN_STREAM << "ProtocolManager::prepareValidation() " + << ex.what() << " from " << m_remoteEndpoint << endl; + validationRes->set_state(Response::Validation::REJECTED); validationRes->set_status(ex.what()); } @@ -244,17 +247,39 @@ ResponseSP ProtocolManager::prepareMetadata(RequestSP request_sp) << "schema " << schema << " table " << table << " timestamp " << asctime(×tamp) << " from " << m_remoteEndpoint << endl; - metadataRes->set_state(Response::Metadata::ACCEPTED); - metadataRes->set_status("Metadata ready"); + try + { + DBManager::MetadataList metadataList = + m_dBManager_sp->retrieveNewTuples(schema, table, timestamp); + + fillResponse(metadataRes, metadataList); + + metadataRes->set_state(Response::Metadata::ACCEPTED); + metadataRes->set_status("Metadata ready"); + } + catch(std::runtime_error& ex) + { + WARN_STREAM << "ProtocolManager::prepareMetadata() " + << ex.what() << " from " << m_remoteEndpoint << endl; + + metadataRes->set_state(Response::Metadata::REJECTED); + metadataRes->set_status(ex.what()); + } } else { + WARN_STREAM << "ProtocolManager::prepareMetadata() " + << "Not validated from " << m_remoteEndpoint << endl; + metadataRes->set_state(Response::Metadata::REJECTED); metadataRes->set_status("Not validated"); } } else { + WARN_STREAM << "ProtocolManager::prepareMetadata() " + << "Not authorised from " << m_remoteEndpoint << endl; + metadataRes->set_state(Response::Metadata::REJECTED); metadataRes->set_status("Not authorised"); } @@ -324,4 +349,13 @@ void ProtocolManager::validateColumn(const Request::Validation::Column& column, } } +//============================================================================== +// ProtocolManager::fillResponse() +//============================================================================== +void ProtocolManager::fillResponse(const Response::Metadata& metadataRes, + DBManager::MetadataList metadataList) throw(std::runtime_error) +{ + DEBUG_STREAM << "ProtocolManager::fillResponse()" << endl; +} + } //namespace diff --git a/src/ProtocolManager.h b/src/ProtocolManager.h index 66e53fddd2d48753fa6652a7f50e08b217073136..0c3e1061fdfd185ba18ed6fb1f1956fd17a604f2 100644 --- a/src/ProtocolManager.h +++ b/src/ProtocolManager.h @@ -76,7 +76,10 @@ protected: // [Protected] Validation related methods //------------------------------------------------------------------------------ virtual void validateColumn(const Request::Validation::Column&, - DBManager::InformationList&) throw(std::runtime_error); + DBManager::InformationList&) throw(std::runtime_error); + + virtual void fillResponse(const Response::Metadata&, + DBManager::MetadataList) throw(std::runtime_error); //------------------------------------------------------------------------------ // [Protected] Class variables