Addressed phantom frame log restart jobs (#1787)

* Frame Log DRG now manage their own jobs (no longer add a phantom restart job)

* Actually removed frame log drg restart jobs this time

* Refactored to avoid duplicate code

* Refactor

* Fixed DR constructors

* Fixed some syntax stuff centos was throwing a tantrum about

* More centos whining

* Centos...

* Centos...

* Clean up
This commit is contained in:
Pherring04 2024-10-29 11:05:33 -05:00 committed by GitHub
parent a352c821f4
commit 9e974e6a9b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 48 additions and 22 deletions

View File

@ -13,6 +13,7 @@ PROGRAMMERS:
#include "trick/DataRecordGroup.hh" #include "trick/DataRecordGroup.hh"
#ifdef SWIG #ifdef SWIG
%feature("compactdefaultargs","0") ;
%feature("shadow") Trick::DRAscii::DRAscii(std::string in_name) %{ %feature("shadow") Trick::DRAscii::DRAscii(std::string in_name) %{
def __init__(self, *args): def __init__(self, *args):
this = $action(*args) this = $action(*args)
@ -68,7 +69,7 @@ namespace Trick {
@code <my_drg> = trick.DRAscii("<in_name>") @endcode @code <my_drg> = trick.DRAscii("<in_name>") @endcode
@copydoc Trick::DataRecordGroup::DataRecordGroup(string in_name) @copydoc Trick::DataRecordGroup::DataRecordGroup(string in_name)
*/ */
DRAscii( std::string in_name) ; DRAscii( std::string in_name, Trick::DR_Type dr_type = Trick::DR_Type::DR_Type_Ascii ) ;
/** /**
@copybrief Trick::DataRecordGroup::format_specific_header @copybrief Trick::DataRecordGroup::format_specific_header

View File

@ -93,7 +93,7 @@ namespace Trick {
@code <my_drg> = trick.DRBinary("<in_name>") @endcode @code <my_drg> = trick.DRBinary("<in_name>") @endcode
@copydoc Trick::DataRecordGroup::DataRecordGroup(string in_name) @copydoc Trick::DataRecordGroup::DataRecordGroup(string in_name)
*/ */
DRBinary( std::string in_name, bool register_group = true ) ; DRBinary( std::string in_name, bool register_group = true, Trick::DR_Type dr_type = Trick::DR_Type::DR_Type_Binary ) ;
/** /**
@copybrief Trick::DataRecordGroup::format_specific_header @copybrief Trick::DataRecordGroup::format_specific_header

View File

@ -24,6 +24,7 @@ PROGRAMMERS:
#endif #endif
#ifdef SWIG #ifdef SWIG
%feature("compactdefaultargs","0") ;
%feature("shadow") Trick::DRHDF5::DRHDF5(std::string in_name) %{ %feature("shadow") Trick::DRHDF5::DRHDF5(std::string in_name) %{
def __init__(self, *args): def __init__(self, *args):
this = $action(*args) this = $action(*args)
@ -101,7 +102,7 @@ GROUP "/" {
@code <my_drg> = trick.DRHDF5("<in_name>") @endcode @code <my_drg> = trick.DRHDF5("<in_name>") @endcode
@copydoc Trick::DataRecordGroup::DataRecordGroup(string in_name) @copydoc Trick::DataRecordGroup::DataRecordGroup(string in_name)
*/ */
DRHDF5( std::string in_name) ; DRHDF5( std::string in_name, Trick::DR_Type dr_type = Trick::DR_Type::DR_Type_HDF5) ;
/** /**
@copybrief Trick::DataRecordGroup::format_specific_header @copybrief Trick::DataRecordGroup::format_specific_header

View File

@ -42,6 +42,14 @@ namespace Trick {
DR_Not_Specified = 3 /**< Unknown type */ DR_Not_Specified = 3 /**< Unknown type */
} ; } ;
enum DR_Type {
DR_Type_None,
DR_Type_Ascii,
DR_Type_Binary,
DR_Type_HDF5,
DR_Type_FrameLogDataRecord
} ;
class DataRecordBuffer { class DataRecordBuffer {
public: public:
char *buffer; /* ** generic holding buffer for data */ char *buffer; /* ** generic holding buffer for data */
@ -149,7 +157,7 @@ namespace Trick {
@brief Constructor that creates a new data recording group with the given @c in_name. @brief Constructor that creates a new data recording group with the given @c in_name.
@param in_name - the new data recording group name @param in_name - the new data recording group name
*/ */
DataRecordGroup( std::string in_name = "" ) ; DataRecordGroup( std::string in_name = "", Trick::DR_Type dr_type = Trick::DR_Type::DR_Type_None ) ;
~DataRecordGroup() ; ~DataRecordGroup() ;
@ -405,6 +413,12 @@ namespace Trick {
*/ */
virtual int add_time_variable() ; virtual int add_time_variable() ;
/**
@brief This function adds jobs to the DRG based on the dr type.
@returns void
*/
void configure_jobs(DR_Type type) ;
/** Check that a variable is supported by data recording. */ /** Check that a variable is supported by data recording. */
/** Variable must be a single primitive type - no STL, array, structured, string */ /** Variable must be a single primitive type - no STL, array, structured, string */
bool isSupportedType(REF2 * ref2, std::string& message); bool isSupportedType(REF2 * ref2, std::string& message);

View File

@ -18,7 +18,7 @@ PROGRAMMERS:
#include "trick/message_type.h" #include "trick/message_type.h"
#include "trick/bitfield_proto.h" #include "trick/bitfield_proto.h"
Trick::DRAscii::DRAscii( std::string in_name ) : Trick::DataRecordGroup( in_name ) { Trick::DRAscii::DRAscii( std::string in_name, Trick::DR_Type dr_type ) : Trick::DataRecordGroup( in_name, dr_type ) {
ascii_float_format = "%20.8g" ; ascii_float_format = "%20.8g" ;
ascii_double_format = "%20.16g" ; ascii_double_format = "%20.16g" ;

View File

@ -22,7 +22,7 @@ PROGRAMMERS:
Other classes inherit from DRBinary. In these cases, we don't want to register the memory as DRBinary, Other classes inherit from DRBinary. In these cases, we don't want to register the memory as DRBinary,
so register_group will be set to false. so register_group will be set to false.
*/ */
Trick::DRBinary::DRBinary( std::string in_name , bool register_group ) : Trick::DataRecordGroup(in_name) { Trick::DRBinary::DRBinary( std::string in_name, bool register_group, Trick::DR_Type dr_type ) : Trick::DataRecordGroup(in_name, dr_type) {
if ( register_group ) { if ( register_group ) {
register_group_with_mm(this, "Trick::DRBinary") ; register_group_with_mm(this, "Trick::DRBinary") ;
} }
@ -190,4 +190,4 @@ int Trick::DRBinary::format_specific_shutdown() {
close(fd) ; close(fd) ;
} }
return(0) ; return(0) ;
} }

View File

@ -14,7 +14,7 @@ PROGRAMMERS:
#include "trick/memorymanager_c_intf.h" #include "trick/memorymanager_c_intf.h"
#include "trick/message_proto.h" #include "trick/message_proto.h"
Trick::DRHDF5::DRHDF5( std::string in_name ) : Trick::DataRecordGroup(in_name) { Trick::DRHDF5::DRHDF5( std::string in_name, Trick::DR_Type dr_type ) : Trick::DataRecordGroup(in_name, dr_type) {
register_group_with_mm(this, "Trick::DRHDF5") ; register_group_with_mm(this, "Trick::DRHDF5") ;
} }

View File

@ -54,7 +54,7 @@ Trick::DataRecordBuffer::~DataRecordBuffer() {
free(ref) ; free(ref) ;
} }
Trick::DataRecordGroup::DataRecordGroup( std::string in_name ) : Trick::DataRecordGroup::DataRecordGroup( std::string in_name, Trick::DR_Type dr_type ) :
record(true) , record(true) ,
inited(false) , inited(false) ,
group_name(in_name) , group_name(in_name) ,
@ -96,18 +96,7 @@ Trick::DataRecordGroup::DataRecordGroup( std::string in_name ) :
// sim object name // sim object name
name = std::string("trick_data_record_group_") + in_name ; name = std::string("trick_data_record_group_") + in_name ;
// add_jobs_to_queue will fill in job_id later configure_jobs(dr_type) ;
// make the init job run after all other initialization jobs but before the post init checkpoint
// job so users can allocate memory in initialization jobs and checkpointing data rec groups will work
add_job(0, 1, (char *)"initialization", NULL, cycle, (char *)"init", (char *)"TRK", 65534) ;
add_job(0, 2, (char *)"end_of_frame", NULL, 1.0, (char *)"write_data", (char *)"TRK") ;
add_job(0, 3, (char *)"checkpoint", NULL, 1.0, (char *)"checkpoint", (char *)"TRK") ;
add_job(0, 4, (char *)"post_checkpoint", NULL, 1.0, (char *)"clear_checkpoint_vars", (char *)"TRK") ;
// run the restart job in phase 60001
add_job(0, 5, (char *)"restart", NULL, 1.0, (char *)"restart", (char *)"TRK", 60001) ;
add_job(0, 6, (char *)"shutdown", NULL, 1.0, (char *)"shutdown", (char *)"TRK") ;
write_job = add_job(0, 99, (char *)job_class.c_str(), NULL, cycle, (char *)"data_record" , (char *)"TRK") ;
add_time_variable() ; add_time_variable() ;
} }
@ -429,6 +418,27 @@ int Trick::DataRecordGroup::init() {
} }
void Trick::DataRecordGroup::configure_jobs(DR_Type type) {
switch(type) {
default:
// run the restart job in phase 60001
add_job(0, 5, (char *)"restart", NULL, 1.0, (char *)"restart", (char *)"TRK", 60001) ;
case DR_Type::DR_Type_FrameLogDataRecord:
// add_jobs_to_queue will fill in job_id later
// make the init job run after all other initialization jobs but before the post init checkpoint
// job so users can allocate memory in initialization jobs and checkpointing data rec groups will work
add_job(0, 1, (char *)"initialization", NULL, cycle, (char *)"init", (char *)"TRK", 65534) ;
add_job(0, 2, (char *)"end_of_frame", NULL, 1.0, (char *)"write_data", (char *)"TRK") ;
add_job(0, 3, (char *)"checkpoint", NULL, 1.0, (char *)"checkpoint", (char *)"TRK") ;
add_job(0, 4, (char *)"post_checkpoint", NULL, 1.0, (char *)"clear_checkpoint_vars", (char *)"TRK") ;
add_job(0, 6, (char *)"shutdown", NULL, 1.0, (char *)"shutdown", (char *)"TRK") ;
write_job = add_job(0, 99, (char *)job_class.c_str(), NULL, cycle, (char *)"data_record" , (char *)"TRK") ;
break ;
}
}
int Trick::DataRecordGroup::checkpoint() { int Trick::DataRecordGroup::checkpoint() {
unsigned int jj ; unsigned int jj ;

View File

@ -9,7 +9,7 @@
-# All instances get the end_of_frame frame_log_clear job. -# All instances get the end_of_frame frame_log_clear job.
*/ */
Trick::FrameDataRecordGroup::FrameDataRecordGroup( int in_thread_id , std::string in_name ) Trick::FrameDataRecordGroup::FrameDataRecordGroup( int in_thread_id , std::string in_name )
: Trick::DRBinary(in_name, false) , thread_id(in_thread_id ) { : Trick::DRBinary(in_name, false, Trick::DR_Type::DR_Type_FrameLogDataRecord ), thread_id(in_thread_id ) {
if ( thread_id > 0 ) { if ( thread_id > 0 ) {
add_job(thread_id, 1000, (char *)"top_of_frame", NULL, 1.0, (char *)"start_timer", (char *)"TRK", 1) ; add_job(thread_id, 1000, (char *)"top_of_frame", NULL, 1.0, (char *)"start_timer", (char *)"TRK", 1) ;
// Frame logging uses phase 65533 in FrameLog.ccp. Stop the timer just before that. // Frame logging uses phase 65533 in FrameLog.ccp. Stop the timer just before that.