void EDF_Scheduler::send_reply (PortableInterceptor::ServerRequestInfo_ptr ri) { int int_guid; RTScheduling::Current::IdType_var guid = this->current_->id (); ACE_OS::memcpy (&int_guid, guid->get_buffer (), guid->length ()); DSUI_EVENT_LOG (EDF_SCHED_FAM, ENTER_SEND_REPLY, int_guid, 0, 0); Kokyu::Svc_Ctxt_DSRT_QoS sc_qos; CORBA::String_var operation = ri->operation (); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T): send_reply from \"%s\"\n", ri->operation ())); #endif // Make the context to send the context to the target IOP::ServiceContext sc; sc.context_id = Server_Interceptor::SchedulingInfo; CORBA::Long importance; TimeBase::TimeT deadline; CORBA::Policy_var sched_policy = this->current_->scheduling_parameter(); if (CORBA::is_nil (sched_policy)) { #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T): sched_policy nil.\n")); #endif //24 hrs from now - infinity ACE_Time_Value deadline_tv = ACE_OS::gettimeofday () + ACE_Time_Value (24*60*60,0); deadline = deadline_tv.sec ()*1000000 + deadline_tv.usec ()*10; //100s of nanoseconds for TimeBase::TimeT importance = 0; } else { #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T):sched_policy not nil. ", "sched params set\n")); #endif EDF_Scheduling::SchedulingParameterPolicy_var sched_param_policy = EDF_Scheduling::SchedulingParameterPolicy::_narrow (sched_policy); EDF_Scheduling::SchedulingParameter_var sched_param = sched_param_policy->value (); sc_qos.guid.length (guid->length ()); guid_copy (sc_qos.guid, guid.in ()); deadline = sched_param->deadline; importance = sched_param->importance; sc_qos.deadline = deadline; sc_qos.importance = importance; CORBA::Any sc_qos_as_any; sc_qos_as_any <<= sc_qos; CORBA::OctetSeq_var cdtmp = codec_->encode (sc_qos_as_any); sc.context_data = cdtmp.in (); // Add this context to the service context list. ri->add_reply_service_context (sc, 1); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T):reply sc added\n")); #endif } kokyu_dispatcher_->update_schedule (guid.in (), Kokyu::BLOCK); DSUI_EVENT_LOG (EDF_SCHED_FAM, EXIT_SEND_REPLY, int_guid, 0, 0); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T): send_reply interceptor done\n")); #endif }
void EDF_Scheduler::send_request (PortableInterceptor::ClientRequestInfo_ptr ri) { int int_guid; RTScheduling::Current::IdType_var guid = this->current_->id (); ACE_OS::memcpy (&int_guid, guid->get_buffer (), guid->length ()); DSUI_EVENT_LOG (EDF_SCHED_FAM, ENTER_CLIENT_SCHED_TIME, int_guid, 0, 0); Kokyu::Svc_Ctxt_DSRT_QoS sc_qos; CORBA::String_var operation = ri->operation (); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T): send_request " "from \"%s\"\n", operation.in ())); #endif // Make the context to send the context to the target IOP::ServiceContext sc; sc.context_id = Client_Interceptor::SchedulingInfo; CORBA::Policy_var sched_policy = this->current_->scheduling_parameter(); CORBA::Long importance; TimeBase::TimeT deadline; TimeBase::TimeT period; int task_id=-1; if (CORBA::is_nil (sched_policy)) { //24 hrs from now - infinity ACE_Time_Value deadline_tv = ACE_OS::gettimeofday () + ACE_Time_Value (24*60*60,0); deadline = deadline_tv.sec () * 10000000 + deadline_tv.usec () * 10; //100s of nanoseconds for TimeBase::TimeT importance = 0; period = 0; //set period 0 as default. // task_id = ID_BEGIN ++; } else { EDF_Scheduling::SchedulingParameterPolicy_var sched_param_policy = EDF_Scheduling::SchedulingParameterPolicy::_narrow (sched_policy); EDF_Scheduling::SchedulingParameter_var sched_param = sched_param_policy->value (); deadline = sched_param->deadline; importance = sched_param->importance; period = sched_param->period; task_id = sched_param->task_id; #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T): send_request guid = %d\n", int_guid)); #endif } //Fill the guid in the SC Qos struct sc_qos.guid.length (guid->length ()); guid_copy (sc_qos.guid, guid.in ()); sc_qos.deadline = deadline; sc_qos.importance = importance; sc_qos.task_id = task_id; sc_qos.period = period; CORBA::Any sc_qos_as_any; sc_qos_as_any <<= sc_qos; CORBA::OctetSeq_var cdtmp = codec_->encode (sc_qos_as_any); sc.context_data = cdtmp.in (); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t|%T): send_request : about to add sched SC\n"))); #endif // Add this context to the service context list. ri->add_request_service_context (sc, 0); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t|%T): send_request : ") ACE_TEXT ("about to call scheduler to inform block\n") )); #endif DSUI_EVENT_LOG (EDF_SCHED_FAM, CALL_KOKYU_DISPATCH_UPDATE_SCHEDULE, int_guid, 0, 0); kokyu_dispatcher_->update_schedule (guid.in (), Kokyu::BLOCK); DSUI_EVENT_LOG (EDF_SCHED_FAM, LEAVE_KOKYU_DISPATCH_UPDATE_SCHEDULE, int_guid,0,0); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t|%T): send_request interceptor done\n"))); #endif DSUI_EVENT_LOG (EDF_SCHED_FAM, LEAVE_CLIENT_SCHED_TIME, int_guid, 0, 0); }
void MIF_Scheduler::send_reply (PortableInterceptor::ServerRequestInfo_ptr ri) { CORBA::Short importance = 0; Kokyu::Svc_Ctxt_DSRT_QoS sc_qos; CORBA::String_var operation = ri->operation (); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T): send_reply from \"%s\"\n", ri->operation ())); #endif // Make the context to send the context to the target IOP::ServiceContext sc; sc.context_id = Server_Interceptor::SchedulingInfo; CORBA::Policy_var sched_policy = this->current_->scheduling_parameter(); RTScheduling::Current::IdType_var guid = this->current_->id (); if (CORBA::is_nil (sched_policy.in ())) { #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T): sched_policy nil. ", "importance not set in sched params\n")); #endif importance = 0; } else { #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T):sched_policy not nil. ", "importance set in sched params\n")); #endif MIF_Scheduling::SchedulingParameterPolicy_var sched_param_policy = MIF_Scheduling::SchedulingParameterPolicy::_narrow (sched_policy.in ()); MIF_Scheduling::SchedulingParameter_var sched_param = sched_param_policy->value (); importance = sched_param->importance; //Fill the guid in the SC Qos struct sc_qos.guid.length (guid->length ()); guid_copy (sc_qos.guid, guid.in ()); sc_qos.importance = importance; CORBA::Any sc_qos_as_any; sc_qos_as_any <<= sc_qos; CORBA::OctetSeq_var cdtmp = codec_->encode (sc_qos_as_any); sc.context_data = cdtmp.in (); // Add this context to the service context list. ri->add_reply_service_context (sc, 1); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T):reply sc added\n")); #endif } kokyu_dispatcher_->update_schedule (guid.in (), Kokyu::BLOCK); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T): send_reply interceptor done\n")); #endif }
int Thread_Task::svc (void) { try { const char * name = 0; CORBA::Policy_ptr sched_param = 0; CORBA::Policy_ptr implicit_sched_param = 0; //Start - Nested Scheduling Segment this->current_->begin_scheduling_segment ("Chamber of Secrets", sched_param, implicit_sched_param); size_t count = 0; RTScheduling::Current::IdType_var id = this->current_->id (); ACE_OS::memcpy (&count, id->get_buffer (), id->length ()); this->current_->begin_scheduling_segment ("Potter", sched_param, implicit_sched_param); this->guid_[guid_index++] = id.in (); //Start - Nested Scheduling Segment this->current_->begin_scheduling_segment ("Harry", sched_param, implicit_sched_param); { ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->mutex_, -1); RTScheduling::Current::NameList_var name_list = this->current_->current_scheduling_segment_names (); ACE_DEBUG ((LM_DEBUG, "Scheduling Segments for DT %d :\n", count)); for (unsigned int i = 0; i < name_list->length (); ++i) { ACE_DEBUG ((LM_DEBUG, "Scheduling Segment Name - %C\n", (*name_list) [i].in ())); } } ACE_OS::sleep (10); this->current_->end_scheduling_segment (name); // End - Nested Scheduling Segment this->current_->end_scheduling_segment (name); // End - Nested Scheduling Segment this->current_->end_scheduling_segment (name); } catch (const CORBA::THREAD_CANCELLED& ) { ACE_DEBUG ((LM_DEBUG, "Distributable Thread Cancelled - Expected Exception\n")); { ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, this->mutex_, -1); --active_thread_count_; if (active_thread_count_ == 0) orb_->shutdown (); } return 0; } catch (const CORBA::Exception& ex) { ex._tao_print_exception ("Caught exception:"); } return 0; }
void MIF_Scheduler::send_request (PortableInterceptor::ClientRequestInfo_ptr ri) { Kokyu::Svc_Ctxt_DSRT_QoS sc_qos; CORBA::String_var operation = ri->operation (); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, "(%t|%T): send_request " "from \"%s\"\n", operation.in ())); #endif // Make the context to send the context to the target IOP::ServiceContext sc; sc.context_id = Client_Interceptor::SchedulingInfo; CORBA::Policy_var sched_policy = this->current_->scheduling_parameter(); RTScheduling::Current::IdType_var guid = this->current_->id (); /* ACE_OS::memcpy (&guid, guid->get_buffer (), guid->length ()); */ CORBA::Short importance; if (CORBA::is_nil (sched_policy.in ())) { importance = 0; } else { MIF_Scheduling::SchedulingParameterPolicy_var sched_param_policy = MIF_Scheduling::SchedulingParameterPolicy::_narrow (sched_policy.in ()); MIF_Scheduling::SchedulingParameter_var sched_param = sched_param_policy->value (); importance = sched_param->importance; #ifdef KOKYU_DSRT_LOGGING int int_guid; ACE_OS::memcpy (&int_guid, guid->get_buffer (), guid->length ()); ACE_DEBUG ((LM_DEBUG, "(%t|%T): send_request importance from current = %d, guid = %d\n", importance, int_guid)); #endif //Fill the guid in the SC Qos struct sc_qos.guid.length (guid->length ()); guid_copy (sc_qos.guid, guid.in ()); sc_qos.importance = importance; CORBA::Any sc_qos_as_any; sc_qos_as_any <<= sc_qos; CORBA::OctetSeq_var cdtmp = codec_->encode (sc_qos_as_any); sc.context_data = cdtmp.in (); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t|%T): send_request : about to add sched SC\n"))); #endif // Add this context to the service context list. ri->add_request_service_context (sc, 0); } #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t|%T): send_request : ") ACE_TEXT ("about to call scheduler to inform block\n") )); #endif kokyu_dispatcher_->update_schedule (guid.in (), Kokyu::BLOCK); #ifdef KOKYU_DSRT_LOGGING ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%t|%T): send_request interceptor done\n"))); #endif }