OpenM++ runtime library (libopenm)
openm::RunController Class Referenceabstract

run controller: create new model run(s) and support data exchange. More...

#include <runController.h>

Inheritance diagram for openm::RunController:
Collaboration diagram for openm::RunController:

Classes

struct  BytesFirstNext
 array of bytes rows wrapped into IRowsFirstNext interface More...
 
struct  EntityAttrItem
 entity attribute item to write microdata into database or csv file More...
 
struct  EntityItem
 entity item to write microdata into database or csv file More...
 
struct  IRowsFirstNext
 interface to opaque list of bytes rows More...
 
struct  ListFirstNext
 list of bytes rows wrapped into IRowsFirstNext interface More...
 

Public Member Functions

virtual ~RunController (void) noexcept=0
 last cleanup
 
int parameterIdByName (const char *i_name) const override
 return index of parameter by name More...
 
int parameterSubCount (int i_paramId) const override
 number of parameter sub-values for current model run More...
 
int parameterSelfSubCount (int i_paramId) const override
 number of parameter sub-values for current process More...
 
int parameterSubValueIndex (int i_paramId, int i_subId) const override
 return index of parameter sub-value in the storage array of sub-values More...
 
bool isUseSubValue (int i_subId) const override
 return true if sub-value used by current process More...
 
RunStateHolderrunStateStore (void)
 return holder of all sub-values modeling run states
 
virtual int nextRun (void)=0
 create new run and input parameters in database. More...
 
virtual void shutdownRun (int i_runId)=0
 model run shutdown: save results and update run status. More...
 
virtual void shutdownWaitAll (void)=0
 model process shutdown: cleanup resources. More...
 
virtual void shutdownOnExit (ModelStatus i_status)=0
 model process shutdown if exiting without completion (ie: exit on error). More...
 
virtual bool childExchange (void)=0
 exchange between root and child processes and threads. More...
 
virtual void writeAccumulators (const RunOptions &i_runOpts, bool i_isLastTable, const char *i_name, size_t i_size, forward_list< unique_ptr< double[]> > &io_accValues)=0
 write output table accumulators or send data to root process. More...
 
bool isOptionExist (const char *i_key) const noexcept override
 return true if run option found by i_key in run_option table for the current run id. More...
 
string strOption (const char *i_key, const string &i_default="") const noexcept override
 return string value of run option by i_key or default value if not found.
 
bool boolOption (const char *i_key) const noexcept override
 return boolean value of run option by i_key or false if not found or value is not "yes", "1", "true" or empty "" string. More...
 
int boolOptionToInt (const char *i_key) const noexcept override
 search for boolean value of run option by i_key and return one of:
return 1 if key found and value is one of: "yes", "1", "true" or empty value,
return 0 if key found and value is one of: "no", "0", "false",
return -1 if key not found,
return -2 otherwise. More...
 
int intOption (const char *i_key, int i_default) const noexcept override
 return int value of run option by i_key or default if not found or can not be converted to int. More...
 
long long longOption (const char *i_key, long long i_default) const noexcept override
 return long value of run option by i_key or default if not found or can not be converted to long. More...
 
double doubleOption (const char *i_key, double i_default) const noexcept override
 return double value of run option by i_key or default if not found or can not be converted to double. More...
 
vector< pair< string, string > > allOptions (void) const noexcept override
 return a copy of all run options as [key, value] pairs, ordered by key. More...
 
void pushDbMicrodata (int i_runId, int i_entityKind, uint64_t i_microdataKey, const void *i_entityThis)
 push microdata database rows into the buffer. More...
 
void writeCsvMicrodata (int i_entityKind, uint64_t i_microdataKey, int i_eventId, bool i_isSameEntity, const void *i_entityThis, string &io_line)
 write microdata into the CSV file. More...
 
const string csvHeaderMicrodata (int i_entityKind) const
 return microdata entity csv file header
 
void makeCsvLineMicrodata (const EntityItem &i_entityItem, uint64_t i_microdataKey, int i_eventId, bool i_isSameEntity, const void *i_entityThis, string &io_line) const
 make attributes csv line by converting attribute values into string
 
tuple< bool, const RunController::EntityItem & > findEntityItem (int i_entityKind) const
 check if any microdata write required for this entity kind
 
bool isEntityEventInFilter (int i_entityKind, uint64_t i_microdataKey, int i_eventId) const
 retrun true if entity event id is matching events filter or if there no filter and all events are allowed
 
- Public Member Functions inherited from openm::MetaLoader
virtual ~MetaLoader (void) noexcept=0
 last cleanup
 
const ArgReaderargOpts (void) const
 arguments from command line and ini-file
 
const MetaHoldermeta (void) const
 model metadata tables
 
const RunOptions modelRunOptions (int i_subCount, int i_subId) const
 return basic model run options
 
int parameterSubCount (int i_paramId) const
 return sub-values count by parameter id
 
int parameterIdByName (const char *i_name) const
 return index of parameter by name More...
 
int tableIdByName (const char *i_name) const
 return id of output table by name
 
bool isSuppressed (const char *i_name) const
 check by name if output table suppressed
 
bool isSuppressed (int i_tableId) const
 check by id if output table suppressed
 
- Public Member Functions inherited from openm::IRunBase
virtual int parameterIdByName (const char *i_name) const =0
 return id of parameter by name More...
 
virtual int parameterSubCount (int i_paramId) const =0
 number of parameter sub-values More...
 
virtual int parameterSelfSubCount (int i_paramId) const =0
 number of parameter sub-values for current process More...
 
virtual int parameterSubValueIndex (int i_paramId, int i_subId) const =0
 return index of parameter sub-value in the storage array of sub-values More...
 
virtual bool isUseSubValue (int i_subId) const =0
 return true if sub-value used by current process More...
 
virtual void readParameter (const char *i_name, int i_subId, const std::type_info &i_type, size_t i_size, void *io_valueArr)=0
 read model parameter
 
- Public Member Functions inherited from openm::IRunOptions
virtual bool isOptionExist (const char *i_key) const noexcept=0
 return true if run option found by i_key in run_option table for the current run id. More...
 
virtual std::string strOption (const char *i_key, const std::string &i_default="") const noexcept=0
 return string value of run option by i_key or default value if not found.
 
virtual bool boolOption (const char *i_key) const noexcept=0
 return boolean value of run option by i_key or false if not found or value is not "yes", "1", "true" or empty "" string. More...
 
virtual int boolOptionToInt (const char *i_key) const noexcept=0
 search for boolean value of run option by i_key and return one of:
return 1 if key found and value is one of: "yes", "1", "true" or empty value,
return 0 if key found and value is one of: "no", "0", "false",
return -1 if key not found,
return -2 otherwise. More...
 
virtual int intOption (const char *i_key, int i_default) const noexcept=0
 return int value of run option by i_key or default if not found or can not be converted to int. More...
 
virtual long long longOption (const char *i_key, long long i_default) const noexcept=0
 return long value of run option by i_key or default if not found or can not be converted to long. More...
 
virtual double doubleOption (const char *i_key, double i_default) const noexcept=0
 return double value of run option by i_key or default if not found or can not be converted to double. More...
 
virtual std::vector< std::pair< std::string, std::string > > allOptions (void) const noexcept=0
 return a copy of all run options as [key, value] pairs, ordered by key. More...
 

Static Public Member Functions

static RunControllercreate (const ArgReader &i_argOpts, bool i_isMpiUsed, IDbExec *i_dbExec, IMsgExec *i_msgExec)
 create run controller, load metadata tables and broadcast it to all modeling processes.
 
- Static Public Member Functions inherited from openm::MetaLoader
static const ArgReader getRunOptions (int argc, char **argv)
 initialize run options from command line and ini-file More...
 

Public Attributes

int subFirstId
 sub-value staring index for current modeling process
 
int selfSubCount
 number of sub-values for current process
 
int processCount
 number of modeling processes: MPI world size
 
int processRank
 modeling processes rank: MPI rank
 
- Public Attributes inherited from openm::MetaLoader
int subValueCount
 total number of sub-values
 
int threadCount
 max number of modeling threads
 

Protected Member Functions

 RunController (const ArgReader &i_argStore)
 create run controller
 
virtual void init (void)=0
 get number of sub-values, read and broadcast metadata. More...
 
virtual int currentRunId (void) const noexcept=0
 get run id of the current model run. More...
 
int createTaskRun (int i_taskId, IDbExec *i_dbExec)
 create task run entry in database
 
int findTask (IDbExec *i_dbExec)
 find modeling task, if specified
 
tuple< int, int, ModelStatuscreateNewRun (int i_taskRunId, bool i_isWaitTaskRun, IDbExec *i_dbExec)
 create new run, create input parameters and run options for input working sets
 
void doShutdownOnExit (ModelStatus i_status, int i_runId, int i_taskRunId, IDbExec *i_dbExec)
 impelementation of model process shutdown if exiting without completion.
 
void doShutdownRun (int i_runId, int i_taskRunId, IDbExec *i_dbExec)
 implementation of model run shutdown.
 
void doShutdownAll (int i_taskRunId, IDbExec *i_dbExec)
 implementation model process shutdown. More...
 
void doWriteAccumulators (int i_runId, IDbExec *i_dbExec, const RunOptions &i_runOpts, const char *i_name, size_t i_size, forward_list< unique_ptr< double[]> > &io_accValues) const
 write output table accumulators if table is not suppressed.
 
void updateRestartSubValueId (int i_runId, IDbExec *i_dbExec, int i_subRestart) const
 update sub-value index to restart the run
 
void updateRunState (IDbExec *i_dbExec, const map< pair< int, int >, RunState > i_updated) const
 merge updated sub-values run statue into database
 
map< int, list< unique_ptr< uint8_t[]> > > pullDbMicrodata (bool i_isNow=false)
 pull microdata database rows from the buffer. More...
 
size_t doDbMicrodata (IDbExec *i_dbExec, int i_entityId, IRowsFirstNext &i_entityMdRows)
 write entity microdata rows into database and return inserted rows count More...
 
size_t doDbMicrodataSql (IDbExec *i_dbExec, const map< int, list< unique_ptr< uint8_t[]> > > &i_entityMdRows)
 write microdata into database using sql insert literal and return inserted rows count More...
 
void openCsvMicrodata (void)
 create microdata CSV files for new model run.
 
- Protected Member Functions inherited from openm::MetaLoader
 MetaLoader (const ArgReader &i_argStore)
 create metadata loader.
 
const RunOptionsmodelRunOptions (void) const
 return basic model run options
 
void setRunOptions (const RunOptions &i_opts)
 set basic model run options
 
void loadMessages (IDbExec *i_dbExec)
 read model messages from database. More...
 
void mergeOptions (IDbExec *i_dbExec)
 merge command line and ini-file arguments with profile_option table values. More...
 

Protected Attributes

map< int, EntityItementityMap
 
vector< int > entityIds
 
- Protected Attributes inherited from openm::MetaLoader
int modelId
 
unique_ptr< MetaHoldermetaStore
 
vector< int > paramIdSubArr
 
vector< int > tableIdSuppressArr
 
vector< int > entityIdxArr
 
bool isCsvEventColumn
 
vector< bool > entityUseEvents
 
map< int, ParamSubOptssubOptsMap
 
map< string, ImportOptsimportOptsMap
 
map< int, ParamImportOptsparamImportOptsMap
 
map< int, pair< string, string > > langOptsMap
 

Additional Inherited Members

- Protected Types inherited from openm::MetaLoader
enum class  KindSubIds : int {
  none = 0 , single = 1 , defaultId = 2 , range =3 ,
  list = 4
}
 
enum class  FromSub : int { defaultValue = 0 , db = 1 , csv = 2 , iota = 3 }
 
enum class  ImportKind : int {
  none = 0 , modelName = 1 , modelId = 2 , modelDigest = 3 ,
  runName = 4 , runId = 5 , runDigest = 6
}
 
- Static Protected Member Functions inherited from openm::MetaLoader
static int readMetaTables (IDbExec *i_dbExec, MetaHolder *io_metaStore, const char *i_name, const char *i_digest)
 

Detailed Description

run controller: create new model run(s) and support data exchange.

Member Function Documentation

◆ allOptions()

vector< pair< string, string > > RunController::allOptions ( void  ) const
overridevirtualnoexcept

return a copy of all run options as [key, value] pairs, ordered by key.

Implements openm::IRunOptions.

◆ boolOption()

bool openm::RunController::boolOption ( const char *  i_key) const
inlineoverridevirtualnoexcept

return boolean value of run option by i_key or false if not found or value is not "yes", "1", "true" or empty "" string.

Implements openm::IRunOptions.

◆ boolOptionToInt()

int openm::RunController::boolOptionToInt ( const char *  i_key) const
inlineoverridevirtualnoexcept

search for boolean value of run option by i_key and return one of:
return 1 if key found and value is one of: "yes", "1", "true" or empty value,
return 0 if key found and value is one of: "no", "0", "false",
return -1 if key not found,
return -2 otherwise.

Implements openm::IRunOptions.

◆ childExchange()

virtual bool openm::RunController::childExchange ( void  )
pure virtual

exchange between root and child processes and threads.

send new input, receive accumulators of output tables, send and receive status update.

Implemented in openm::SingleController, openm::RootController, openm::ChildController, and openm::RestartController.

◆ currentRunId()

virtual int openm::RunController::currentRunId ( void  ) const
protectedpure virtualnoexcept

get run id of the current model run.

Implemented in openm::SingleController, and openm::RootController.

◆ doDbMicrodata()

size_t RunController::doDbMicrodata ( IDbExec i_dbExec,
int  i_entityId,
IRowsFirstNext i_entityMdRows 
)
protected

write entity microdata rows into database and return inserted rows count

write entity microdata rows into database.

◆ doDbMicrodataSql()

size_t RunController::doDbMicrodataSql ( IDbExec i_dbExec,
const map< int, list< unique_ptr< uint8_t[]> > > &  i_entityMdRows 
)
protected

write microdata into database using sql insert literal and return inserted rows count

write microdata into database using sql insert literal.

◆ doShutdownAll()

void RunController::doShutdownAll ( int  i_taskRunId,
IDbExec i_dbExec 
)
protected

implementation model process shutdown.

implementation model process shutdown: update run state and cleanup resources.

◆ doubleOption()

double openm::RunController::doubleOption ( const char *  i_key,
double  i_default 
) const
inlineoverridevirtualnoexcept

return double value of run option by i_key or default if not found or can not be converted to double.

Implements openm::IRunOptions.

◆ init()

virtual void openm::RunController::init ( void  )
protectedpure virtual

get number of sub-values, read and broadcast metadata.

Implemented in openm::SingleController, and openm::RootController.

◆ intOption()

int openm::RunController::intOption ( const char *  i_key,
int  i_default 
) const
inlineoverridevirtualnoexcept

return int value of run option by i_key or default if not found or can not be converted to int.

Implements openm::IRunOptions.

◆ isOptionExist()

bool openm::RunController::isOptionExist ( const char *  i_key) const
inlineoverridevirtualnoexcept

return true if run option found by i_key in run_option table for the current run id.

Implements openm::IRunOptions.

◆ isUseSubValue()

bool openm::RunController::isUseSubValue ( int  i_subId) const
inlineoverridevirtual

return true if sub-value used by current process

Implements openm::IRunBase.

◆ longOption()

long long openm::RunController::longOption ( const char *  i_key,
long long  i_default 
) const
inlineoverridevirtualnoexcept

return long value of run option by i_key or default if not found or can not be converted to long.

Implements openm::IRunOptions.

◆ nextRun()

virtual int openm::RunController::nextRun ( void  )
pure virtual

create new run and input parameters in database.

Implemented in openm::SingleController, openm::RootController, openm::ChildController, and openm::RestartController.

◆ parameterIdByName()

int openm::RunController::parameterIdByName ( const char *  i_name) const
inlineoverridevirtual

return index of parameter by name

Implements openm::IRunBase.

◆ parameterSelfSubCount()

int openm::RunController::parameterSelfSubCount ( int  i_paramId) const
inlineoverridevirtual

number of parameter sub-values for current process

Implements openm::IRunBase.

◆ parameterSubCount()

int openm::RunController::parameterSubCount ( int  i_paramId) const
inlineoverridevirtual

number of parameter sub-values for current model run

Implements openm::IRunBase.

◆ parameterSubValueIndex()

int openm::RunController::parameterSubValueIndex ( int  i_paramId,
int  i_subId 
) const
inlineoverridevirtual

return index of parameter sub-value in the storage array of sub-values

Implements openm::IRunBase.

◆ pullDbMicrodata()

map< int, list< unique_ptr< uint8_t[]> > > RunController::pullDbMicrodata ( bool  i_isNow = false)
protected

pull microdata database rows from the buffer.

if i_isNow is true then return current microdata rows for all entities else return non empty results only if microdata row count is more than upper bound or if microdata row count is more than lower bound time since last save is moe than microdata save time interval

if i_isNow is true then return current microdata rows for all entities else return non empty results only if microdata row count > upper bound or if microdata row count > lower bound and time elapsed since last save > microdata save time interval

◆ pushDbMicrodata()

void RunController::pushDbMicrodata ( int  i_runId,
int  i_entityKind,
uint64_t  i_microdataKey,
const void *  i_entityThis 
)

push microdata database rows into the buffer.

Parameters
i_runIdmodel run id.
i_entityKindentity kind id: model metadata entity id in database.
i_microdataKeyunique entity instance id.
i_entityThisentity class instance this pointer.

◆ shutdownOnExit()

virtual void openm::RunController::shutdownOnExit ( ModelStatus  i_status)
pure virtual

model process shutdown if exiting without completion (ie: exit on error).

Implemented in openm::SingleController, openm::RootController, openm::ChildController, and openm::RestartController.

◆ shutdownRun()

virtual void openm::RunController::shutdownRun ( int  i_runId)
pure virtual

model run shutdown: save results and update run status.

Implemented in openm::SingleController, openm::RootController, openm::ChildController, and openm::RestartController.

◆ shutdownWaitAll()

virtual void openm::RunController::shutdownWaitAll ( void  )
pure virtual

model process shutdown: cleanup resources.

Implemented in openm::SingleController, openm::RootController, openm::ChildController, and openm::RestartController.

◆ writeAccumulators()

virtual void openm::RunController::writeAccumulators ( const RunOptions i_runOpts,
bool  i_isLastTable,
const char *  i_name,
size_t  i_size,
forward_list< unique_ptr< double[]> > &  io_accValues 
)
pure virtual

write output table accumulators or send data to root process.

Implemented in openm::SingleController, openm::RootController, openm::ChildController, and openm::RestartController.

◆ writeCsvMicrodata()

void RunController::writeCsvMicrodata ( int  i_entityKind,
uint64_t  i_microdataKey,
int  i_eventId,
bool  i_isSameEntity,
const void *  i_entityThis,
string &  io_line 
)

write microdata into the CSV file.

write microdata into CSV file.

Parameters
i_entityKindentity kind id: model metadata entity id in database.
i_microdataKeyunique entity instance id.
i_eventIdevent id, if microdata events enabled.
i_isSameEntityif true then event entity the same as microdata entity.
i_entityThisentity class instance this pointer.

The documentation for this class was generated from the following files: