From 28ef217ee15d57a70274be6fef79e92b3dfc309b Mon Sep 17 00:00:00 2001 From: Marco De Marco <demarco@oats.inaf.it> Date: Mon, 16 Dec 2013 15:05:49 +0100 Subject: [PATCH] Data import properties removed --- src/Configuration.h | 47 +------ src/DBManager.cpp | 104 ++++++++++----- src/DBManager.h | 32 +++-- src/DataImporter.cpp | 112 +--------------- src/DataImporter.h | 14 -- src/DataImporter.xmi | 56 -------- src/DataImporterClass.cpp | 273 -------------------------------------- src/DataImporterClass.h | 14 -- src/ProtocolManager.cpp | 62 +++++++++ src/ProtocolManager.h | 15 +++ 10 files changed, 173 insertions(+), 556 deletions(-) diff --git a/src/Configuration.h b/src/Configuration.h index ce24ab6..81de313 100644 --- a/src/Configuration.h +++ b/src/Configuration.h @@ -19,9 +19,6 @@ private: // [Private] Constructor destructor deleter //------------------------------------------------------------------------------ Configuration(std::string certificateFile, std::string storagePath, - std::string dIDBHost, unsigned int dIDBPort, std::string dIDBUser, - std::string dIDBPassword, std::string dIDBSchema, - std::string dIDBIndexTable, std::string dIDBRejectedTable, std::string remoteHost, unsigned int remotePort, std::string remoteUsername, std::string remotePassword, std::string databaseHost, unsigned int databasePort, @@ -29,9 +26,6 @@ private: std::string databaseSchema, std::string databaseTable, unsigned int refreshTime, unsigned int timeout) : m_certificateFile (certificateFile), m_storagePath(storagePath), - m_dIDBHost(dIDBHost), m_dIDBPort(dIDBPort), m_dIDBUser(dIDBUser), - m_dIDBPassword(dIDBPassword), m_dIDBSchema(dIDBSchema), - m_dIDBIndexTable(dIDBIndexTable), m_dIDBRejectedTable(dIDBRejectedTable), m_remoteHost(remoteHost), m_remotePort(remotePort), m_remoteUsername(remoteUsername), m_remotePassword(remotePassword), m_databaseHost(databaseHost), m_databasePort(databasePort), @@ -54,10 +48,7 @@ public: // [Public] Create class method //------------------------------------------------------------------------------ static Configuration::SP create(std::string certificateFile, - std::string storagePath, std::string dIDBHost, unsigned int dIDBPort, - std::string dIDBUser, std::string dIDBPassword, std::string dIDBSchema, - std::string dIDBIndexTable, std::string dIDBRejectedTable, - std::string remoteHost, unsigned int remotePort, + std::string storagePath, std::string remoteHost, unsigned int remotePort, std::string remoteUsername, std::string remotePassword, std::string databaseHost, unsigned int databasePort, std::string databaseUsername, std::string databasePassword, @@ -65,11 +56,9 @@ public: unsigned int refreshTime, unsigned int timeout) { Configuration::SP c_sp(new Configuration(certificateFile, storagePath, - dIDBHost, dIDBPort, dIDBUser, dIDBPassword, dIDBSchema, - dIDBIndexTable, dIDBRejectedTable, remoteHost, remotePort, - remoteUsername, remotePassword, databaseHost, databasePort, - databaseUsername, databasePassword, databaseSchema, databaseTable, - refreshTime, timeout), Configuration::Deleter()); + remoteHost, remotePort, remoteUsername, remotePassword, databaseHost, + databasePort, databaseUsername, databasePassword, databaseSchema, + databaseTable, refreshTime, timeout), Configuration::Deleter()); return c_sp; } @@ -79,13 +68,6 @@ public: //------------------------------------------------------------------------------ std::string getCertificateFile() const { return m_certificateFile; } std::string getStoragePath() const { return m_storagePath; } - std::string getDIDBHost() const { return m_dIDBHost; } - unsigned int getDIDBPort() const { return m_dIDBPort; } - std::string getDIDBUser() const { return m_dIDBUser; } - std::string getDIDBPassword() const { return m_dIDBPassword; } - std::string getDIDBSchema() const { return m_dIDBSchema; } - std::string getDIDBIndexTable() const { return m_dIDBIndexTable; } - std::string getDIDBRejectedTable() const { return m_dIDBRejectedTable; } std::string getRemoteHost() const { return m_remoteHost; } unsigned int getRemotePort() const { return m_remotePort; } std::string getRemoteUsername() const { return m_remoteUsername; } @@ -109,27 +91,6 @@ private: //Absolute path to storage const std::string m_storagePath; - //Host where data import database is running - const std::string m_dIDBHost; - - //Port where data import database is listening - const unsigned int m_dIDBPort; - - //User to login in data import database - const std::string m_dIDBUser; - - //Password to login in data import database - const std::string m_dIDBPassword; - - //Schema where data import tables are located - const std::string m_dIDBSchema; - - //Index table name - const std::string m_dIDBIndexTable; - - //Rejected table name - const std::string m_dIDBRejectedTable; - //Metadata exporter remote host const std::string m_remoteHost; diff --git a/src/DBManager.cpp b/src/DBManager.cpp index e37a39d..10dfce7 100644 --- a/src/DBManager.cpp +++ b/src/DBManager.cpp @@ -54,7 +54,7 @@ void DBManager::connect() throw(soci::soci_error) { DEBUG_STREAM << "DBManager::connect()" << endl; - boost::mutex::scoped_lock lock(m_connectionMutex); + boost::mutex::scoped_lock lock(m_sessionMutex); std::stringstream connection; @@ -77,7 +77,7 @@ void DBManager::disconnect() { DEBUG_STREAM << "DBManager::disconnect()" << endl; - boost::mutex::scoped_lock lock(m_connectionMutex); + boost::mutex::scoped_lock lock(m_sessionMutex); m_session_sp->close(); } @@ -85,65 +85,99 @@ void DBManager::disconnect() //============================================================================== // DBManager::retrieveLastTimestamp() //============================================================================== -std::tm DBManager::retrieveLastTimestamp() throw(soci::soci_error) +std::tm DBManager::retrieveLastTimestamp() + throw(std::runtime_error, std::out_of_range) { DEBUG_STREAM << "DBManager::retrieveLastTimestamp()" << endl; - boost::mutex::scoped_lock lock(m_connectionMutex); - -// if(m_auxSession_sp->get_backend() == NULL) -// m_auxSession_sp->reconnect(); -// -// std::tm lastTimestamp; -// -// *m_auxSession_sp << "select coalesce(max(update_time),'1970-01-01 00:00:00') " -// << "from " << m_configuration_sp->getDIDBSchema() << "." -// << m_configuration_sp->getDIDBIndexTable(), soci::into(lastTimestamp); -// -// return lastTimestamp; + boost::mutex::scoped_lock lock(m_tangoDBMutex); + + Tango::DbData db_data; + db_data.push_back(Tango::DbDatum("LastTimestamp")); + + try + { + m_tangoDB_sp->get_device_property(m_deviceName, db_data); + } + catch(Tango::DevFailed& ex) + { + std::stringstream error_msg; + for (unsigned int i=0; i<ex.errors.length(); i++) + { + error_msg << ex.errors[i].reason.in() << endl; + error_msg << ex.errors[i].desc.in() << endl; + error_msg << ex.errors[i].origin.in() << endl; + } + throw std::runtime_error(error_msg.str()); + } + + std::string timestamp("1970-01-01 00:00:00"); + db_data[0] >> timestamp; + + boost::posix_time::ptime ptime = boost::posix_time::time_from_string(timestamp); + + return boost::posix_time::to_tm(ptime); } //============================================================================== // DBManager::persistLastTimestamp() //============================================================================== -void DBManager::persistLastTimestamp(std::tm lastTimestamp) throw(soci::soci_error) +void DBManager::persistLastTimestamp(std::tm lastTimestamp) + throw(std::runtime_error, std::out_of_range) { DEBUG_STREAM << "DBManager::persistLastTimestamp()" << endl; - boost::mutex::scoped_lock lock(m_connectionMutex); - -// if(m_auxSession_sp->get_backend() == NULL) -// m_auxSession_sp->reconnect(); -// -// *m_auxSession_sp << "insert into " << m_configuration_sp->getDIDBSchema() -// << "." << m_configuration_sp->getDIDBIndexTable() -// << " values(:lastTimestamp)", soci::use(lastTimestamp, "lastTimestamp"); + boost::mutex::scoped_lock lock(m_tangoDBMutex); + + boost::posix_time::ptime ptime = boost::posix_time::ptime_from_tm(lastTimestamp); + + std::string timestampString = boost::posix_time::to_simple_string(ptime); + + Tango::DbDatum timestamp("LastTimestamp"); + timestamp << timestampString; + + Tango::DbData db_data; + db_data.push_back(timestamp); + + try + { + m_tangoDB_sp->put_device_property(m_deviceName, db_data); + } + catch(Tango::DevFailed& ex) + { + std::stringstream error_msg; + for (unsigned int i=0; i<ex.errors.length(); i++) + { + error_msg << ex.errors[i].reason.in() << endl; + error_msg << ex.errors[i].desc.in() << endl; + error_msg << ex.errors[i].origin.in() << endl; + } + throw std::runtime_error(error_msg.str()); + } } //============================================================================== // DBManager::retrieveNewTuples() //============================================================================== -DBManager::RowsetSP DBManager::retrieveNewTuples(std::tm lastTimestamp) - throw(soci::soci_error, std::out_of_range) +DBManager::FileRowsetSP DBManager::retrieveNewTuples(std::string schema, + std::string table, std::tm lastTimestamp) throw(soci::soci_error, + std::out_of_range) { DEBUG_STREAM << "DBManager::retrieveNewTuples()" << endl; - boost::mutex::scoped_lock lock(m_connectionMutex); + boost::mutex::scoped_lock lock(m_sessionMutex); if(m_session_sp->get_backend() == NULL) m_session_sp->reconnect(); boost::posix_time::ptime timestamp = boost::posix_time::ptime_from_tm(lastTimestamp); -// RowsetSP rows(new soci::rowset<soci::row>(m_mainSession_sp->prepare -// << "select id, file_path, file_version, file_name, update_time from " -// << m_configuration_sp->getDatabaseSchema() << "." -// << m_configuration_sp->getDatabaseTable() -// << " where update_time>'" -// << boost::posix_time::to_iso_string(timestamp) -// << "' order by update_time asc")); + FileRowsetSP fileRowset_sp(new FileRowset(m_session_sp->prepare << "select" + << " file_version, file_name, update_time from " << schema << "." << table + << " where update_time>'" << boost::posix_time::to_iso_string(timestamp) + << "' order by update_time asc")); - //return rows; + return fileRowset_sp; } //============================================================================== diff --git a/src/DBManager.h b/src/DBManager.h index 13ebf46..d24fdd1 100644 --- a/src/DBManager.h +++ b/src/DBManager.h @@ -70,38 +70,46 @@ public: //------------------------------------------------------------------------------ // [Public] Timestamp methods //------------------------------------------------------------------------------ - virtual std::tm retrieveLastTimestamp() throw(soci::soci_error); + virtual std::tm retrieveLastTimestamp() + throw(std::runtime_error, std::out_of_range); - virtual void persistLastTimestamp(std::tm) throw(soci::soci_error); + virtual void persistLastTimestamp(std::tm) + throw(std::runtime_error, std::out_of_range); //------------------------------------------------------------------------------ // [Public] Tuple methods //------------------------------------------------------------------------------ - typedef boost::shared_ptr< boost::tuple< boost::optional<int>, - boost::optional<std::string>, boost::optional<std::string>, - boost::optional<int>, boost::optional<std::string>, - boost::optional<std::tm> > > RowsetSP; + typedef boost::tuple< boost::optional<int>, boost::optional<std::string>, + boost::optional<std::tm> > FileRow; - virtual RowsetSP retrieveNewTuples(std::tm) + typedef soci::rowset< FileRow > FileRowset; + + typedef boost::shared_ptr< FileRowset > FileRowsetSP; + + virtual FileRowsetSP retrieveNewTuples(std::string, std::string, std::tm) throw(soci::soci_error, std::out_of_range); protected: //------------------------------------------------------------------------------ // [Protected] Class variables //------------------------------------------------------------------------------ - //Device name - std::string m_deviceName; - //Configuration shared pointer Configuration::SP m_configuration_sp; - //Connection mutex - boost::mutex m_connectionMutex; + //Metadata database connection mutex + boost::mutex m_sessionMutex; //Metadata database connection scoped pointer boost::scoped_ptr<soci::session> m_session_sp; + //Tango database connection mutex + boost::mutex m_tangoDBMutex; + + //Tango database connection scoped pointer boost::scoped_ptr<Tango::Database> m_tangoDB_sp; + + //Device name + std::string m_deviceName; }; } //End of namespace diff --git a/src/DataImporter.cpp b/src/DataImporter.cpp index 951bfe0..af3eac1 100644 --- a/src/DataImporter.cpp +++ b/src/DataImporter.cpp @@ -203,13 +203,6 @@ void DataImporter::get_device_property() Tango::DbData dev_prop; dev_prop.push_back(Tango::DbDatum("CertificateFile")); dev_prop.push_back(Tango::DbDatum("StoragePath")); - dev_prop.push_back(Tango::DbDatum("DIDBHost")); - dev_prop.push_back(Tango::DbDatum("DIDBPort")); - dev_prop.push_back(Tango::DbDatum("DIDBUser")); - dev_prop.push_back(Tango::DbDatum("DIDBPassword")); - dev_prop.push_back(Tango::DbDatum("DIDBSchema")); - dev_prop.push_back(Tango::DbDatum("DIDBIndexTable")); - dev_prop.push_back(Tango::DbDatum("DIDBRejectedTable")); dev_prop.push_back(Tango::DbDatum("RemoteHost")); dev_prop.push_back(Tango::DbDatum("RemotePort")); dev_prop.push_back(Tango::DbDatum("RemoteUsername")); @@ -260,83 +253,6 @@ void DataImporter::get_device_property() // And try to extract StoragePath value from database if (dev_prop[i].is_empty()==false) dev_prop[i] >> storagePath; - // Try to initialize DIDBHost from class property - cl_prop = ds_class->get_class_property(dev_prop[++i].name); - if (cl_prop.is_empty()==false) cl_prop >> dIDBHost; - else { - // Try to initialize DIDBHost from default device value - def_prop = ds_class->get_default_device_property(dev_prop[i].name); - if (def_prop.is_empty()==false) def_prop >> dIDBHost; - } - // And try to extract DIDBHost value from database - if (dev_prop[i].is_empty()==false) dev_prop[i] >> dIDBHost; - - // Try to initialize DIDBPort from class property - cl_prop = ds_class->get_class_property(dev_prop[++i].name); - if (cl_prop.is_empty()==false) cl_prop >> dIDBPort; - else { - // Try to initialize DIDBPort from default device value - def_prop = ds_class->get_default_device_property(dev_prop[i].name); - if (def_prop.is_empty()==false) def_prop >> dIDBPort; - } - // And try to extract DIDBPort value from database - if (dev_prop[i].is_empty()==false) dev_prop[i] >> dIDBPort; - - // Try to initialize DIDBUser from class property - cl_prop = ds_class->get_class_property(dev_prop[++i].name); - if (cl_prop.is_empty()==false) cl_prop >> dIDBUser; - else { - // Try to initialize DIDBUser from default device value - def_prop = ds_class->get_default_device_property(dev_prop[i].name); - if (def_prop.is_empty()==false) def_prop >> dIDBUser; - } - // And try to extract DIDBUser value from database - if (dev_prop[i].is_empty()==false) dev_prop[i] >> dIDBUser; - - // Try to initialize DIDBPassword from class property - cl_prop = ds_class->get_class_property(dev_prop[++i].name); - if (cl_prop.is_empty()==false) cl_prop >> dIDBPassword; - else { - // Try to initialize DIDBPassword from default device value - def_prop = ds_class->get_default_device_property(dev_prop[i].name); - if (def_prop.is_empty()==false) def_prop >> dIDBPassword; - } - // And try to extract DIDBPassword value from database - if (dev_prop[i].is_empty()==false) dev_prop[i] >> dIDBPassword; - - // Try to initialize DIDBSchema from class property - cl_prop = ds_class->get_class_property(dev_prop[++i].name); - if (cl_prop.is_empty()==false) cl_prop >> dIDBSchema; - else { - // Try to initialize DIDBSchema from default device value - def_prop = ds_class->get_default_device_property(dev_prop[i].name); - if (def_prop.is_empty()==false) def_prop >> dIDBSchema; - } - // And try to extract DIDBSchema value from database - if (dev_prop[i].is_empty()==false) dev_prop[i] >> dIDBSchema; - - // Try to initialize DIDBIndexTable from class property - cl_prop = ds_class->get_class_property(dev_prop[++i].name); - if (cl_prop.is_empty()==false) cl_prop >> dIDBIndexTable; - else { - // Try to initialize DIDBIndexTable from default device value - def_prop = ds_class->get_default_device_property(dev_prop[i].name); - if (def_prop.is_empty()==false) def_prop >> dIDBIndexTable; - } - // And try to extract DIDBIndexTable value from database - if (dev_prop[i].is_empty()==false) dev_prop[i] >> dIDBIndexTable; - - // Try to initialize DIDBRejectedTable from class property - cl_prop = ds_class->get_class_property(dev_prop[++i].name); - if (cl_prop.is_empty()==false) cl_prop >> dIDBRejectedTable; - else { - // Try to initialize DIDBRejectedTable from default device value - def_prop = ds_class->get_default_device_property(dev_prop[i].name); - if (def_prop.is_empty()==false) def_prop >> dIDBRejectedTable; - } - // And try to extract DIDBRejectedTable value from database - if (dev_prop[i].is_empty()==false) dev_prop[i] >> dIDBRejectedTable; - // Try to initialize RemoteHost from class property cl_prop = ds_class->get_class_property(dev_prop[++i].name); if (cl_prop.is_empty()==false) cl_prop >> remoteHost; @@ -510,27 +426,6 @@ void DataImporter::get_device_property() checkIfDirectoryExists(storagePath); - if(dIDBHost.empty()) - throw(invalid_argument("DIDBHost property is empty or not defined")); - - if(dIDBPort<1 || dIDBPort>MAX_PORT_NUMBER) - throw(invalid_argument("DIDBPort property out of range or not defined")); - - if(dIDBUser.empty()) - throw(invalid_argument("DIDBUser property is empty or not defined")); - - if(dIDBPassword.empty()) - throw(invalid_argument("DIDBPassword property is empty or not defined")); - - if(dIDBSchema.empty()) - throw(invalid_argument("DIDBSchema property is empty or not defined")); - - if(dIDBIndexTable.empty()) - throw(invalid_argument("DIDBIndexTable property is empty or not defined")); - - if(dIDBRejectedTable.empty()) - throw(invalid_argument("DIDBRejectedTable property is empty or not defined")); - if(remoteHost.empty()) throw(invalid_argument("RemoteHost property is empty or not defined")); @@ -568,10 +463,9 @@ void DataImporter::get_device_property() throw(invalid_argument("Timeout property out of range or not defined")); m_configuration_sp = Configuration::create(certificateFile, storagePath, - dIDBHost, dIDBPort, dIDBUser, dIDBPassword, dIDBSchema, dIDBIndexTable, - dIDBRejectedTable, remoteHost, remotePort, remoteUsername, remotePassword, - databaseHost, databasePort, databaseUsername, databasePassword, - databaseSchema, databaseTable, refreshTime, timeout); + remoteHost, remotePort, remoteUsername, remotePassword, databaseHost, + databasePort, databaseUsername, databasePassword, databaseSchema, + databaseTable, refreshTime, timeout); } catch(invalid_argument& ex) { diff --git a/src/DataImporter.h b/src/DataImporter.h index a1a87d7..8de6190 100644 --- a/src/DataImporter.h +++ b/src/DataImporter.h @@ -91,20 +91,6 @@ public: string certificateFile; // StoragePath: Absolute path to storage string storagePath; - // DIDBHost: Hostname where data import database is running - string dIDBHost; - // DIDBPort: Port where data import database is listening - Tango::DevULong dIDBPort; - // DIDBUser: User to login in data import database - string dIDBUser; - // DIDBPassword: Password to login in data import database - string dIDBPassword; - // DIDBSchema: Schema where data import tables are located - string dIDBSchema; - // DIDBIndexTable: Index table name - string dIDBIndexTable; - // DIDBRejectedTable: Rejected table name - string dIDBRejectedTable; // RemoteHost: Metadata exporter remote host string remoteHost; // RemotePort: Metadata exporter remote port diff --git a/src/DataImporter.xmi b/src/DataImporter.xmi index 6be7cbe..3f05098 100644 --- a/src/DataImporter.xmi +++ b/src/DataImporter.xmi @@ -13,34 +13,6 @@ <type xsi:type="pogoDsl:StringType"/> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> </classProperties> - <classProperties name="DIDBHost" description="Hostname where data import database is running"> - <type xsi:type="pogoDsl:StringType"/> - <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - </classProperties> - <classProperties name="DIDBPort" description="Port where data import database is listening"> - <type xsi:type="pogoDsl:UIntType"/> - <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - </classProperties> - <classProperties name="DIDBUser" description="User to login in data import database"> - <type xsi:type="pogoDsl:StringType"/> - <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - </classProperties> - <classProperties name="DIDBPassword" description="Password to login in data import database"> - <type xsi:type="pogoDsl:StringType"/> - <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - </classProperties> - <classProperties name="DIDBSchema" description="Schema where data import tables are located"> - <type xsi:type="pogoDsl:StringType"/> - <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - </classProperties> - <classProperties name="DIDBIndexTable" description="Index table name"> - <type xsi:type="pogoDsl:StringType"/> - <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - </classProperties> - <classProperties name="DIDBRejectedTable" description="Rejected table name"> - <type xsi:type="pogoDsl:StringType"/> - <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - </classProperties> <deviceProperties name="CertificateFile" description="Absolute path to certificate chain file"> <type xsi:type="pogoDsl:StringType"/> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> @@ -49,34 +21,6 @@ <type xsi:type="pogoDsl:StringType"/> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> </deviceProperties> - <deviceProperties name="DIDBHost" description="Hostname where data import database is running"> - <type xsi:type="pogoDsl:StringType"/> - <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - </deviceProperties> - <deviceProperties name="DIDBPort" description="Port where data import database is listening"> - <type xsi:type="pogoDsl:UIntType"/> - <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - </deviceProperties> - <deviceProperties name="DIDBUser" description="User to login in data import database"> - <type xsi:type="pogoDsl:StringType"/> - <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - </deviceProperties> - <deviceProperties name="DIDBPassword" description="Password to login in data import database"> - <type xsi:type="pogoDsl:StringType"/> - <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - </deviceProperties> - <deviceProperties name="DIDBSchema" description="Schema where data import tables are located"> - <type xsi:type="pogoDsl:StringType"/> - <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - </deviceProperties> - <deviceProperties name="DIDBIndexTable" description="Index table name"> - <type xsi:type="pogoDsl:StringType"/> - <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - </deviceProperties> - <deviceProperties name="DIDBRejectedTable" description="Rejected table name"> - <type xsi:type="pogoDsl:StringType"/> - <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - </deviceProperties> <deviceProperties name="RemoteHost" description="Metadata exporter remote host"> <type xsi:type="pogoDsl:StringType"/> <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> diff --git a/src/DataImporterClass.cpp b/src/DataImporterClass.cpp index 5ce7879..9c359a6 100644 --- a/src/DataImporterClass.cpp +++ b/src/DataImporterClass.cpp @@ -259,13 +259,6 @@ void DataImporterClass::get_class_property() // Read class properties from database. cl_prop.push_back(Tango::DbDatum("CertificateFile")); cl_prop.push_back(Tango::DbDatum("StoragePath")); - cl_prop.push_back(Tango::DbDatum("DIDBHost")); - cl_prop.push_back(Tango::DbDatum("DIDBPort")); - cl_prop.push_back(Tango::DbDatum("DIDBUser")); - cl_prop.push_back(Tango::DbDatum("DIDBPassword")); - cl_prop.push_back(Tango::DbDatum("DIDBSchema")); - cl_prop.push_back(Tango::DbDatum("DIDBIndexTable")); - cl_prop.push_back(Tango::DbDatum("DIDBRejectedTable")); // Call database and extract values if (Tango::Util::instance()->_UseDb==true) @@ -297,90 +290,6 @@ void DataImporterClass::get_class_property() cl_prop[i] << storagePath; } } - // Try to extract DIDBHost value - if (cl_prop[++i].is_empty()==false) cl_prop[i] >> dIDBHost; - else - { - // Check default value for DIDBHost - def_prop = get_default_class_property(cl_prop[i].name); - if (def_prop.is_empty()==false) - { - def_prop >> dIDBHost; - cl_prop[i] << dIDBHost; - } - } - // Try to extract DIDBPort value - if (cl_prop[++i].is_empty()==false) cl_prop[i] >> dIDBPort; - else - { - // Check default value for DIDBPort - def_prop = get_default_class_property(cl_prop[i].name); - if (def_prop.is_empty()==false) - { - def_prop >> dIDBPort; - cl_prop[i] << dIDBPort; - } - } - // Try to extract DIDBUser value - if (cl_prop[++i].is_empty()==false) cl_prop[i] >> dIDBUser; - else - { - // Check default value for DIDBUser - def_prop = get_default_class_property(cl_prop[i].name); - if (def_prop.is_empty()==false) - { - def_prop >> dIDBUser; - cl_prop[i] << dIDBUser; - } - } - // Try to extract DIDBPassword value - if (cl_prop[++i].is_empty()==false) cl_prop[i] >> dIDBPassword; - else - { - // Check default value for DIDBPassword - def_prop = get_default_class_property(cl_prop[i].name); - if (def_prop.is_empty()==false) - { - def_prop >> dIDBPassword; - cl_prop[i] << dIDBPassword; - } - } - // Try to extract DIDBSchema value - if (cl_prop[++i].is_empty()==false) cl_prop[i] >> dIDBSchema; - else - { - // Check default value for DIDBSchema - def_prop = get_default_class_property(cl_prop[i].name); - if (def_prop.is_empty()==false) - { - def_prop >> dIDBSchema; - cl_prop[i] << dIDBSchema; - } - } - // Try to extract DIDBIndexTable value - if (cl_prop[++i].is_empty()==false) cl_prop[i] >> dIDBIndexTable; - else - { - // Check default value for DIDBIndexTable - def_prop = get_default_class_property(cl_prop[i].name); - if (def_prop.is_empty()==false) - { - def_prop >> dIDBIndexTable; - cl_prop[i] << dIDBIndexTable; - } - } - // Try to extract DIDBRejectedTable value - if (cl_prop[++i].is_empty()==false) cl_prop[i] >> dIDBRejectedTable; - else - { - // Check default value for DIDBRejectedTable - def_prop = get_default_class_property(cl_prop[i].name); - if (def_prop.is_empty()==false) - { - def_prop >> dIDBRejectedTable; - cl_prop[i] << dIDBRejectedTable; - } - } /*----- PROTECTED REGION ID(DataImporterClass::get_class_property_after) ENABLED START -----*/ // Check class property data members init @@ -430,97 +339,6 @@ void DataImporterClass::set_default_property() cl_def_prop.push_back(data); add_wiz_class_prop(prop_name, prop_desc, prop_def); } - else - add_wiz_class_prop(prop_name, prop_desc); - prop_name = "DIDBHost"; - prop_desc = "Hostname where data import database is running"; - prop_def = ""; - vect_data.clear(); - if (prop_def.length()>0) - { - Tango::DbDatum data(prop_name); - data << vect_data ; - cl_def_prop.push_back(data); - add_wiz_class_prop(prop_name, prop_desc, prop_def); - } - else - add_wiz_class_prop(prop_name, prop_desc); - prop_name = "DIDBPort"; - prop_desc = "Port where data import database is listening"; - prop_def = ""; - vect_data.clear(); - if (prop_def.length()>0) - { - Tango::DbDatum data(prop_name); - data << vect_data ; - cl_def_prop.push_back(data); - add_wiz_class_prop(prop_name, prop_desc, prop_def); - } - else - add_wiz_class_prop(prop_name, prop_desc); - prop_name = "DIDBUser"; - prop_desc = "User to login in data import database"; - prop_def = ""; - vect_data.clear(); - if (prop_def.length()>0) - { - Tango::DbDatum data(prop_name); - data << vect_data ; - cl_def_prop.push_back(data); - add_wiz_class_prop(prop_name, prop_desc, prop_def); - } - else - add_wiz_class_prop(prop_name, prop_desc); - prop_name = "DIDBPassword"; - prop_desc = "Password to login in data import database"; - prop_def = ""; - vect_data.clear(); - if (prop_def.length()>0) - { - Tango::DbDatum data(prop_name); - data << vect_data ; - cl_def_prop.push_back(data); - add_wiz_class_prop(prop_name, prop_desc, prop_def); - } - else - add_wiz_class_prop(prop_name, prop_desc); - prop_name = "DIDBSchema"; - prop_desc = "Schema where data import tables are located"; - prop_def = ""; - vect_data.clear(); - if (prop_def.length()>0) - { - Tango::DbDatum data(prop_name); - data << vect_data ; - cl_def_prop.push_back(data); - add_wiz_class_prop(prop_name, prop_desc, prop_def); - } - else - add_wiz_class_prop(prop_name, prop_desc); - prop_name = "DIDBIndexTable"; - prop_desc = "Index table name"; - prop_def = ""; - vect_data.clear(); - if (prop_def.length()>0) - { - Tango::DbDatum data(prop_name); - data << vect_data ; - cl_def_prop.push_back(data); - add_wiz_class_prop(prop_name, prop_desc, prop_def); - } - else - add_wiz_class_prop(prop_name, prop_desc); - prop_name = "DIDBRejectedTable"; - prop_desc = "Rejected table name"; - prop_def = ""; - vect_data.clear(); - if (prop_def.length()>0) - { - Tango::DbDatum data(prop_name); - data << vect_data ; - cl_def_prop.push_back(data); - add_wiz_class_prop(prop_name, prop_desc, prop_def); - } else add_wiz_class_prop(prop_name, prop_desc); @@ -549,97 +367,6 @@ void DataImporterClass::set_default_property() dev_def_prop.push_back(data); add_wiz_dev_prop(prop_name, prop_desc, prop_def); } - else - add_wiz_dev_prop(prop_name, prop_desc); - prop_name = "DIDBHost"; - prop_desc = "Hostname where data import database is running"; - prop_def = ""; - vect_data.clear(); - if (prop_def.length()>0) - { - Tango::DbDatum data(prop_name); - data << vect_data ; - dev_def_prop.push_back(data); - add_wiz_dev_prop(prop_name, prop_desc, prop_def); - } - else - add_wiz_dev_prop(prop_name, prop_desc); - prop_name = "DIDBPort"; - prop_desc = "Port where data import database is listening"; - prop_def = ""; - vect_data.clear(); - if (prop_def.length()>0) - { - Tango::DbDatum data(prop_name); - data << vect_data ; - dev_def_prop.push_back(data); - add_wiz_dev_prop(prop_name, prop_desc, prop_def); - } - else - add_wiz_dev_prop(prop_name, prop_desc); - prop_name = "DIDBUser"; - prop_desc = "User to login in data import database"; - prop_def = ""; - vect_data.clear(); - if (prop_def.length()>0) - { - Tango::DbDatum data(prop_name); - data << vect_data ; - dev_def_prop.push_back(data); - add_wiz_dev_prop(prop_name, prop_desc, prop_def); - } - else - add_wiz_dev_prop(prop_name, prop_desc); - prop_name = "DIDBPassword"; - prop_desc = "Password to login in data import database"; - prop_def = ""; - vect_data.clear(); - if (prop_def.length()>0) - { - Tango::DbDatum data(prop_name); - data << vect_data ; - dev_def_prop.push_back(data); - add_wiz_dev_prop(prop_name, prop_desc, prop_def); - } - else - add_wiz_dev_prop(prop_name, prop_desc); - prop_name = "DIDBSchema"; - prop_desc = "Schema where data import tables are located"; - prop_def = ""; - vect_data.clear(); - if (prop_def.length()>0) - { - Tango::DbDatum data(prop_name); - data << vect_data ; - dev_def_prop.push_back(data); - add_wiz_dev_prop(prop_name, prop_desc, prop_def); - } - else - add_wiz_dev_prop(prop_name, prop_desc); - prop_name = "DIDBIndexTable"; - prop_desc = "Index table name"; - prop_def = ""; - vect_data.clear(); - if (prop_def.length()>0) - { - Tango::DbDatum data(prop_name); - data << vect_data ; - dev_def_prop.push_back(data); - add_wiz_dev_prop(prop_name, prop_desc, prop_def); - } - else - add_wiz_dev_prop(prop_name, prop_desc); - prop_name = "DIDBRejectedTable"; - prop_desc = "Rejected table name"; - prop_def = ""; - vect_data.clear(); - if (prop_def.length()>0) - { - Tango::DbDatum data(prop_name); - data << vect_data ; - dev_def_prop.push_back(data); - add_wiz_dev_prop(prop_name, prop_desc, prop_def); - } else add_wiz_dev_prop(prop_name, prop_desc); prop_name = "RemoteHost"; diff --git a/src/DataImporterClass.h b/src/DataImporterClass.h index ffb7fa1..eeeebc5 100644 --- a/src/DataImporterClass.h +++ b/src/DataImporterClass.h @@ -127,20 +127,6 @@ class DataImporterClass : public Tango::DeviceClass string certificateFile; // StoragePath: Absolute path to storage string storagePath; - // DIDBHost: Hostname where data import database is running - string dIDBHost; - // DIDBPort: Port where data import database is listening - Tango::DevULong dIDBPort; - // DIDBUser: User to login in data import database - string dIDBUser; - // DIDBPassword: Password to login in data import database - string dIDBPassword; - // DIDBSchema: Schema where data import tables are located - string dIDBSchema; - // DIDBIndexTable: Index table name - string dIDBIndexTable; - // DIDBRejectedTable: Rejected table name - string dIDBRejectedTable; public: // write class properties data members Tango::DbData cl_prop; diff --git a/src/ProtocolManager.cpp b/src/ProtocolManager.cpp index 252b138..1f501b9 100644 --- a/src/ProtocolManager.cpp +++ b/src/ProtocolManager.cpp @@ -16,6 +16,7 @@ ProtocolManager::ProtocolManager(Tango::DeviceImpl* deviceImpl_p, DEBUG_STREAM << "ProtocolManager::ProtocolManager()" << endl; m_isAuthorised = false; + m_isValidated = false; m_hasMoreData = true; } @@ -152,12 +153,47 @@ RequestSP ProtocolManager::createAuthroisation() throw(std::runtime_error) return request_sp; } +//============================================================================== +// ProtocolManager::createValidation() +//============================================================================== +RequestSP ProtocolManager::createValidation() throw(std::runtime_error) +{ + DEBUG_STREAM << "ProtocolManager::createValidation()" << endl; + + RequestSP request_sp(new Request); + + request_sp->set_type(Request::VALIDATION); + + std::string schema = m_configuration_sp->getDatabaseSchema(); + std::string table = m_configuration_sp->getDatabaseTable(); + + INFO_STREAM << "ProtocolManager::createValidation() Send schema " + << schema << " table " << table << " to " << m_remoteEndpoint << endl; + + Request::Validation* validation = request_sp->mutable_validation(); + validation->set_schema(schema); + validation->set_table(table); + + return request_sp; +} + //============================================================================== // ProtocolManager::createData() //============================================================================== RequestSP ProtocolManager::createData() throw(std::runtime_error, std::out_of_range) { DEBUG_STREAM << "ProtocolManager::createData()" << endl; + + RequestSP request_sp(new Request); + + request_sp->set_type(Request::DATA); + + std::string schema = m_configuration_sp->getDatabaseSchema(); + std::string table = m_configuration_sp->getDatabaseTable(); + + + + return request_sp; } //============================================================================== @@ -186,6 +222,32 @@ void ProtocolManager::processAuthroisation(ResponseSP response_sp) } } +//============================================================================== +// ProtocolManager::processValidation() +//============================================================================== +void ProtocolManager::processValidation(ResponseSP response_sp) + throw(std::runtime_error) +{ + DEBUG_STREAM << "ProtocolManager::processValidation()" << endl; + + const Response::Validation& validation = response_sp->validation(); + + if(validation.state() == Response::Validation::ACCEPTED) + { + INFO_STREAM << "ProtocolManager::processValidation() State ACCEPTED " + << "status " << validation.status() << " from " << m_remoteEndpoint << endl; + + m_isValidated = true; + } + else + { + ERROR_STREAM << "ProtocolManager::processValidation() State REJECTED " + << "status " << validation.status() << " from " << m_remoteEndpoint << endl; + + throw std::runtime_error(validation.status()); + } +} + //============================================================================== // ProtocolManager::processData() //============================================================================== diff --git a/src/ProtocolManager.h b/src/ProtocolManager.h index 9e75c74..4a8e7f4 100644 --- a/src/ProtocolManager.h +++ b/src/ProtocolManager.h @@ -79,6 +79,9 @@ protected: virtual RequestSP createAuthroisation() throw(std::runtime_error); + virtual RequestSP createValidation() + throw(std::runtime_error); + virtual RequestSP createData() throw(std::runtime_error, std::out_of_range); @@ -88,6 +91,9 @@ protected: virtual void processAuthroisation(ResponseSP) throw(std::runtime_error); + virtual void processValidation(ResponseSP) + throw(std::runtime_error); + virtual void processData(ResponseSP) throw(std::runtime_error, std::out_of_range); @@ -103,9 +109,18 @@ protected: //Client is authorised bool m_isAuthorised; + //Table is validated + bool m_isValidated; + //Server has more data in buffer bool m_hasMoreData; + //Retrieved data iterator + DBManager::FileRowset::const_iterator m_it; + + //Retrieved data shared pointer + DBManager::FileRowsetSP m_rowSet_sp; + //Address and port of remote endpoint std::string m_remoteEndpoint; }; -- GitLab