diff options
-rw-r--r-- | ChangeLog | 15 | ||||
-rw-r--r-- | Kokyu/DSRT_Dispatcher_Impl.cpp | 192 | ||||
-rw-r--r-- | Kokyu/DSRT_Dispatcher_Impl.h | 26 | ||||
-rw-r--r-- | Kokyu/DSRT_Dispatcher_Impl.i | 1 | ||||
-rw-r--r-- | Kokyu/DSRT_Schedulers.cpp | 107 | ||||
-rw-r--r-- | Kokyu/DSRT_Schedulers.h | 17 | ||||
-rw-r--r-- | Kokyu/Kokyu.cpp | 7 | ||||
-rw-r--r-- | Kokyu/tests/DSRT_MIF/svc.conf | 2 | ||||
-rw-r--r-- | Kokyu/tests/DSRT_MIF/svc.conf.xml | 4 |
9 files changed, 142 insertions, 229 deletions
diff --git a/ChangeLog b/ChangeLog index 92af3ee4557..7a93a0a4f66 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +Thu Apr 24 20:17:44 2003 Venkita Subramonian <venkita@cs.wustl.edu> + + * Kokyu/DSRT_Dispatcher_Impl.cpp: + * Kokyu/DSRT_Dispatcher_Impl.h: + * Kokyu/DSRT_Dispatcher_Impl.i: + * Kokyu/DSRT_Schedulers.cpp: + * Kokyu/DSRT_Schedulers.h: + * Kokyu/Kokyu.cpp: + * Kokyu/tests/DSRT_MIF/svc.conf: + * Kokyu/tests/DSRT_MIF/svc.conf.xml: + + Restructuring the Kokyu DSRT scheduler stuff. The scheduler is + now a service object so that different scheduler implementations + can be selected at run time thru the svc.conf file. + Thu Apr 24 10:17:28 2003 Steve Totten <totten_s@ociweb.com> * bin/MakeProjectCreator/config/smart_proxies.mpb: diff --git a/Kokyu/DSRT_Dispatcher_Impl.cpp b/Kokyu/DSRT_Dispatcher_Impl.cpp index 6acc466d024..704ba23f028 100644 --- a/Kokyu/DSRT_Dispatcher_Impl.cpp +++ b/Kokyu/DSRT_Dispatcher_Impl.cpp @@ -2,6 +2,7 @@ #include "ace/Sched_Params.h" #include "ace/Arg_Shifter.h" +#include "ace/Dynamic_Service.h" #include "DSRT_Dispatcher_Impl.h" #include "DSRT_Schedulers.h" @@ -16,177 +17,16 @@ ACE_RCSID(Kokyu, Dispatcher_Impl, "$Id$") namespace Kokyu { - -int -DSRT_Dispatcher_Impl::init_svcs (void) -{ - return ACE_Service_Config::static_svcs ()-> - insert (&ace_svc_desc_DSRT_Dispatcher_Impl); -} - -DSRT_Scheduler_Impl* -DSRT_Dispatcher_Impl::create_scheduler (DSRT_Sched_t sched_type, - ACE_Sched_Params::Policy sched_policy, - int sched_scope) -{ - DSRT_Scheduler_Impl* impl; - - switch (sched_type) - { - case SCHED_MIF: - ACE_NEW_RETURN (impl, MIF_Scheduler_Impl (sched_policy, sched_scope), 0); - break; - - default: - break; - } - - return impl; -} - -int -DSRT_Dispatcher_Impl::init (int argc, ACE_TCHAR* argv[]) -{ - ACE_Sched_Params::Policy sched_policy = ACE_SCHED_FIFO; - int sched_scope = ACE_SCOPE_THREAD; - DSRT_Sched_t sched_type = SCHED_MIF; - - ACE_Arg_Shifter arg_shifter (argc, argv); - - ACE_DEBUG ((LM_DEBUG, "svc::init called\n")); - - while (arg_shifter.is_anything_left ()) - { - const ACE_TCHAR* arg = arg_shifter.get_current (); - - if (ACE_OS::strcasecmp (arg, ACE_LIB_TEXT("-schedtype")) == 0) - { - arg_shifter.consume_arg (); - - if (arg_shifter.is_parameter_next ()) - { - const ACE_TCHAR* opt = arg_shifter.get_current (); - if (ACE_OS::strcasecmp (opt, ACE_LIB_TEXT("MIF")) == 0) - { - sched_type = SCHED_MIF; - } - else if (ACE_OS::strcasecmp (opt, ACE_LIB_TEXT("EDF")) == 0) - { - sched_type = SCHED_EDF; - if (arg_shifter.is_parameter_next ()) - { - //const ACE_TCHAR* opt = arg_shifter.get_current (); - } - } - else - { - ACE_ERROR ((LM_ERROR, - ACE_LIB_TEXT("DSRT_Dispatcher_Impl - ") - ACE_LIB_TEXT("unsupported sched type <%s>\n"), - opt)); - } - arg_shifter.consume_arg (); - } - } - else if (ACE_OS::strcasecmp (arg, ACE_LIB_TEXT("-sched_policy")) == 0) - { - arg_shifter.consume_arg (); - - if (arg_shifter.is_parameter_next ()) - { - const ACE_TCHAR* opt = arg_shifter.get_current (); - if (ACE_OS::strcasecmp (opt, ACE_LIB_TEXT("FIFO")) == 0) - { - sched_policy = ACE_SCHED_FIFO; - } - else if (ACE_OS::strcasecmp (opt, ACE_LIB_TEXT("OTHER")) == 0) - { - sched_policy = ACE_SCHED_OTHER; - } - else - { - ACE_ERROR ((LM_ERROR, - ACE_LIB_TEXT("-sched_type ") - ACE_LIB_TEXT("unsupported sched type <%s>\n"), - opt)); - } - arg_shifter.consume_arg (); - } - } - else if (ACE_OS::strcasecmp (arg, ACE_LIB_TEXT("-sched_scope")) == 0) - { - arg_shifter.consume_arg (); - - if (arg_shifter.is_parameter_next ()) - { - const ACE_TCHAR* opt = arg_shifter.get_current (); - if (ACE_OS::strcasecmp (opt, ACE_LIB_TEXT("THREAD")) == 0) - { - sched_scope = ACE_SCOPE_THREAD; - } - else if (ACE_OS::strcasecmp (opt, ACE_LIB_TEXT("PROCESS")) == 0) - { - sched_scope = ACE_SCOPE_PROCESS; - } - else - { - ACE_ERROR ((LM_ERROR, - ACE_LIB_TEXT("-sched_scope ") - ACE_LIB_TEXT("unsupported sched scope <%s>\n"), - opt)); - } - arg_shifter.consume_arg (); - } - } - } - - this->scheduler_impl_ = create_scheduler (sched_type, sched_policy, sched_scope); - - return 0; -} - -int -DSRT_Dispatcher_Impl::fini (void) -{ - return 0; -} - int DSRT_Dispatcher_Impl::init_i (const DSRT_ConfigInfo& config_info) { - //create and init the dispatcher tasks here - ACE_DEBUG ((LM_DEBUG, "entering init_i\n" )); - - // ACE_NEW_RETURN (this->task_, DSRT_Dispatcher_Task (*config), -1); - - //this->activate (); - curr_config_info_ = config_info; - return 0; -} - - /************************ -int -DSRT_Dispatcher_Impl::activate () -{ - long flags = THR_BOUND | THR_SCHED_FIFO; - Priority_t priority = - ACE_Sched_Params::priority_max (ACE_SCHED_FIFO, - ACE_SCOPE_THREAD); + this->scheduler_impl_ = + ACE_Dynamic_Service<DSRT_Scheduler_Impl>::instance ("DSRT_Scheduler_Impl"); - if (this->task_->activate (flags, 1, 1, priority) == -1) - { - flags = THR_BOUND; - priority = ACE_Sched_Params::priority_max (ACE_SCHED_OTHER, - ACE_SCOPE_THREAD); - if (this->task_->activate (flags, 1, 1, priority) == -1) - ACE_ERROR ((LM_ERROR, - "EC (%P|%t) cannot activate queue %d", i)); - } return 0; } -*********************************/ int DSRT_Dispatcher_Impl::schedule_i (guid_t guid, @@ -217,29 +57,3 @@ DSRT_Dispatcher_Impl::cancel_schedule_i (guid_t guid, } } - -// **************************************************************** - -ACE_STATIC_SVC_DEFINE (DSRT_Dispatcher_Impl, - ACE_TEXT ("DSRT_Dispatcher_Impl"), - ACE_SVC_OBJ_T, - &ACE_SVC_NAME (DSRT_Dispatcher_Impl), - ACE_Service_Type::DELETE_THIS | - ACE_Service_Type::DELETE_OBJ, - 0) -//ACE_FACTORY_DEFINE (Kokyu, DSRT_Dispatcher_Impl) - -void _gobble_DSRT_Dispatcher_Impl (void *p) { \ - ACE_Service_Object *_p = ACE_static_cast (ACE_Service_Object *, p); - ACE_ASSERT (_p != 0); - delete _p; } -extern "C" Kokyu_Export ACE_Service_Object * -_make_DSRT_Dispatcher_Impl (ACE_Service_Object_Exterminator *gobbler) -{ - if (gobbler != 0) - *gobbler = (ACE_Service_Object_Exterminator) _gobble_DSRT_Dispatcher_Impl; - ACE_DEBUG ((LM_DEBUG, "about to create DSRT_Dispatcher_Impl\n" )); - return new Kokyu::DSRT_Dispatcher_Impl; -} - -// **************************************************************** diff --git a/Kokyu/DSRT_Dispatcher_Impl.h b/Kokyu/DSRT_Dispatcher_Impl.h index d05a51f145c..6e16981bf6e 100644 --- a/Kokyu/DSRT_Dispatcher_Impl.h +++ b/Kokyu/DSRT_Dispatcher_Impl.h @@ -29,31 +29,22 @@ namespace Kokyu { class DSRT_Scheduler_Impl; - class DSRT_Dispatcher_Impl : public ACE_Service_Object + class DSRT_Dispatcher_Impl { public: - static int init_svcs (void); - virtual ~DSRT_Dispatcher_Impl (); - // int activate (); - - // = The Service_Object entry points - virtual int init (int argc, ACE_TCHAR* argv[]); - virtual int fini (void); int init (const DSRT_ConfigInfo&); int schedule (guid_t guid, - const QoSDescriptor&); + const QoSDescriptor&); int update_schedule (guid_t guid, - const QoSDescriptor&); + const QoSDescriptor&); int cancel_schedule (guid_t guid, - const QoSDescriptor&); + const QoSDescriptor&); private: - DSRT_Scheduler_Impl* create_scheduler (DSRT_Sched_t sched_type, - ACE_Sched_Params::Policy sched_policy, - int sched_scope); + DSRT_Scheduler_Impl* create_scheduler (DSRT_Sched_t sched_type); int init_i (const DSRT_ConfigInfo&); int schedule_i (guid_t guid, @@ -64,8 +55,6 @@ namespace Kokyu const QoSDescriptor&); private: - // typedef auto_ptr<DSRT_Dispatcher_Task> DSRT_Dispatcher_Task_Auto_Ptr; - // DSRT_Dispatcher_Task_Auto_Ptr task_; DSRT_ConfigInfo curr_config_info_; DSRT_Sched_t sched_type_; DSRT_Scheduler_Impl* scheduler_impl_; @@ -73,11 +62,6 @@ namespace Kokyu } //end of namespace -extern ACE_Static_Svc_Descriptor ace_svc_desc_DSRT_Dispatcher_Impl; - -//ACE_STATIC_SVC_DECLARE (DSRT_Dispatcher_Impl) -ACE_FACTORY_DECLARE (Kokyu, DSRT_Dispatcher_Impl) - #if defined (__ACE_INLINE__) #include "DSRT_Dispatcher_Impl.i" #endif /* __ACE_INLINE__ */ diff --git a/Kokyu/DSRT_Dispatcher_Impl.i b/Kokyu/DSRT_Dispatcher_Impl.i index 401e41c44f1..10011d57c1a 100644 --- a/Kokyu/DSRT_Dispatcher_Impl.i +++ b/Kokyu/DSRT_Dispatcher_Impl.i @@ -2,6 +2,7 @@ namespace Kokyu { + ACE_INLINE DSRT_Dispatcher_Impl::~DSRT_Dispatcher_Impl () { diff --git a/Kokyu/DSRT_Schedulers.cpp b/Kokyu/DSRT_Schedulers.cpp index c24b9dc350e..63f4360ae4d 100644 --- a/Kokyu/DSRT_Schedulers.cpp +++ b/Kokyu/DSRT_Schedulers.cpp @@ -14,13 +14,11 @@ ACE_RCSID(Kokyu, DSRT_Schedulers, "$Id$") namespace Kokyu { - -DSRT_Scheduler_Impl::DSRT_Scheduler_Impl (ACE_Sched_Params::Policy sched_policy, - int sched_scope) - :sched_policy_ (sched_policy), - sched_scope_ (sched_scope), - min_prio_ (ACE_Sched_Params::priority_min (sched_policy, sched_scope)), - max_prio_ (ACE_Sched_Params::priority_max (sched_policy, sched_scope)) +DSRT_Scheduler_Impl::DSRT_Scheduler_Impl () + :sched_policy_ (ACE_SCHED_FIFO), + sched_scope_ (ACE_SCOPE_THREAD), + min_prio_ (ACE_Sched_Params::priority_min (sched_policy_, sched_scope_)), + max_prio_ (ACE_Sched_Params::priority_max (sched_policy_, sched_scope_)) { } @@ -30,15 +28,87 @@ DSRT_Scheduler_Impl::schedule (guid_t id, const QoSDescriptor& qos) return this->schedule_i (id, qos); } -MIF_Scheduler_Impl::MIF_Scheduler_Impl (ACE_Sched_Params::Policy sched_policy, - int sched_scope) - : DSRT_Scheduler_Impl (sched_policy, sched_scope) +MIF_Scheduler_Impl::MIF_Scheduler_Impl () + : DSRT_Scheduler_Impl () +{ +} + +int +MIF_Scheduler_Impl::init (int argc, ACE_TCHAR* argv[]) { + ACE_Arg_Shifter arg_shifter (argc, argv); + + //ACE_DEBUG ((LM_DEBUG, "svc::init called\n")); + + while (arg_shifter.is_anything_left ()) + { + const ACE_TCHAR* arg = arg_shifter.get_current (); + + if (ACE_OS::strcasecmp (arg, ACE_LIB_TEXT("-sched_policy")) == 0) + { + arg_shifter.consume_arg (); + + if (arg_shifter.is_parameter_next ()) + { + const ACE_TCHAR* opt = arg_shifter.get_current (); + if (ACE_OS::strcasecmp (opt, ACE_LIB_TEXT("FIFO")) == 0) + { + this->sched_policy_ = ACE_SCHED_FIFO; + } + else if (ACE_OS::strcasecmp (opt, ACE_LIB_TEXT("OTHER")) == 0) + { + this->sched_policy_ = ACE_SCHED_OTHER; + } + else + { + ACE_ERROR ((LM_ERROR, + ACE_LIB_TEXT("-sched_policy ") + ACE_LIB_TEXT("unsupported sched policy <%s>\n"), + opt)); + } + arg_shifter.consume_arg (); + } + } + else if (ACE_OS::strcasecmp (arg, ACE_LIB_TEXT("-sched_scope")) == 0) + { + arg_shifter.consume_arg (); + + if (arg_shifter.is_parameter_next ()) + { + const ACE_TCHAR* opt = arg_shifter.get_current (); + if (ACE_OS::strcasecmp (opt, ACE_LIB_TEXT("THREAD")) == 0) + { + this->sched_scope_ = ACE_SCOPE_THREAD; + } + else if (ACE_OS::strcasecmp (opt, ACE_LIB_TEXT("PROCESS")) == 0) + { + this->sched_scope_ = ACE_SCOPE_PROCESS; + } + else + { + ACE_ERROR ((LM_ERROR, + ACE_LIB_TEXT("-sched_scope ") + ACE_LIB_TEXT("unsupported sched scope <%s>\n"), + opt)); + } + arg_shifter.consume_arg (); + } + } + } + + return 0; +} + +int +MIF_Scheduler_Impl::fini (void) +{ + return 0; } Priority_t MIF_Scheduler_Impl::schedule_i (guid_t id, const QoSDescriptor& qos) { + ACE_UNUSED_ARG ((id)); ACE_DEBUG ((LM_DEBUG, "(%t) request for MIF schedule\n")); switch (qos.importance_) @@ -78,3 +148,20 @@ MIF_Scheduler_Impl::schedule_i (guid_t id, const QoSDescriptor& qos) } + +// **************************************************************** + +void _gobble_MIF_Scheduler_Impl (void *p) { \ + ACE_Service_Object *_p = ACE_static_cast (ACE_Service_Object *, p); + ACE_ASSERT (_p != 0); + delete _p; } +extern "C" Kokyu_Export ACE_Service_Object * +_make_MIF_Scheduler_Impl (ACE_Service_Object_Exterminator *gobbler) +{ + if (gobbler != 0) + *gobbler = (ACE_Service_Object_Exterminator) _gobble_MIF_Scheduler_Impl; + ACE_DEBUG ((LM_DEBUG, "about to create MIF_Scheduler_Impl\n" )); + return new Kokyu::MIF_Scheduler_Impl; +} + +// **************************************************************** diff --git a/Kokyu/DSRT_Schedulers.h b/Kokyu/DSRT_Schedulers.h index 3d071f6742f..72856a7d479 100644 --- a/Kokyu/DSRT_Schedulers.h +++ b/Kokyu/DSRT_Schedulers.h @@ -23,10 +23,10 @@ namespace Kokyu { - class DSRT_Scheduler_Impl + class DSRT_Scheduler_Impl : public ACE_Service_Object { public: - DSRT_Scheduler_Impl (ACE_Sched_Params::Policy sched_policy, int sched_scope); + DSRT_Scheduler_Impl (); int schedule (guid_t, const QoSDescriptor&); private: @@ -37,18 +37,27 @@ namespace Kokyu int sched_scope_; Priority_t min_prio_; Priority_t max_prio_; - }; + }; class MIF_Scheduler_Impl : public DSRT_Scheduler_Impl { public: - MIF_Scheduler_Impl (ACE_Sched_Params::Policy sched_policy, int sched_scope); + MIF_Scheduler_Impl (); + virtual int init (int argc, ACE_TCHAR* argv[]); + virtual int fini (void); + static void init_svcs (void); private: virtual Priority_t schedule_i (guid_t, const QoSDescriptor&); }; } +//could not use SVC declare macros here because of Kokyu namespace +//need to revisit later +extern ACE_Static_Svc_Descriptor ace_svc_desc_MIF_Scheduler_Impl; + +ACE_FACTORY_DECLARE (Kokyu, MIF_Scheduler_Impl) + #if defined (__ACE_INLINE__) //#include "DSRT_Schedulers.i" #endif /* __ACE_INLINE__ */ diff --git a/Kokyu/Kokyu.cpp b/Kokyu/Kokyu.cpp index db7f5a73b43..3ac6789eea9 100644 --- a/Kokyu/Kokyu.cpp +++ b/Kokyu/Kokyu.cpp @@ -81,13 +81,14 @@ create_DSRT_dispatcher (const DSRT_ConfigInfo& config_info) DSRT_Dispatcher_Impl* tmp; - DSRT_Dispatcher_Impl::init_svcs (); + //DSRT_Dispatcher_Impl::init_svcs (); ACE_Service_Config::open ("Kokyu", ACE_DEFAULT_LOGGER_KEY, 0); - tmp = - ACE_Dynamic_Service<DSRT_Dispatcher_Impl>::instance ("DSRT_Dispatcher_Impl"); + //tmp = + // ACE_Dynamic_Service<DSRT_Dispatcher_Impl>::instance ("DSRT_Dispatcher_Impl"); + ACE_NEW_RETURN (tmp, DSRT_Dispatcher_Impl, (DSRT_Dispatcher*) 0); ACE_ASSERT (tmp != 0); DSRT_Dispatcher* disp; ACE_NEW_RETURN (disp, DSRT_Dispatcher, (DSRT_Dispatcher*)0); diff --git a/Kokyu/tests/DSRT_MIF/svc.conf b/Kokyu/tests/DSRT_MIF/svc.conf index f9481939e1c..fe4d89d5d3a 100644 --- a/Kokyu/tests/DSRT_MIF/svc.conf +++ b/Kokyu/tests/DSRT_MIF/svc.conf @@ -1,2 +1,2 @@ # -static DSRT_Dispatcher_Impl "-schedtype MIF" +dynamic DSRT_Scheduler_Impl Service_Object * Kokyu:_make_MIF_Scheduler_Impl() "-sched_scope thread -sched_policy fifo"
\ No newline at end of file diff --git a/Kokyu/tests/DSRT_MIF/svc.conf.xml b/Kokyu/tests/DSRT_MIF/svc.conf.xml index cdf48b7a5c3..14f783f0f35 100644 --- a/Kokyu/tests/DSRT_MIF/svc.conf.xml +++ b/Kokyu/tests/DSRT_MIF/svc.conf.xml @@ -2,5 +2,7 @@ <!-- Converted from svc.conf by svcconf-convert.pl --> <ACE_Svc_Conf> <!-- --> - <static id="DSRT_Dispatcher_Impl" params="-schedtype MIF"/> + <dynamic id="DSRT_Scheduler_Impl" type="Service_Object"> + <initializer path="Kokyu" init="_make_MIF_Scheduler_Impl" params="-sched_scope thread -sched_policy fifo"/> + </dynamic> </ACE_Svc_Conf> |