summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvenkita <venkita@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-04-25 01:23:54 +0000
committervenkita <venkita@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-04-25 01:23:54 +0000
commit624e32c5d9142da4266700e5154442e4f750092f (patch)
tree6aada47b70baedd6f045c306e35c3c270c442d5e
parent3a57fe39729dda8535e05d5a3d4973aef85a229c (diff)
downloadATCD-624e32c5d9142da4266700e5154442e4f750092f.tar.gz
ChangeLogTag: Thu Apr 24 20:17:44 2003 Venkita Subramonian <venkita@cs.wustl.edu>
-rw-r--r--ChangeLog15
-rw-r--r--Kokyu/DSRT_Dispatcher_Impl.cpp192
-rw-r--r--Kokyu/DSRT_Dispatcher_Impl.h26
-rw-r--r--Kokyu/DSRT_Dispatcher_Impl.i1
-rw-r--r--Kokyu/DSRT_Schedulers.cpp107
-rw-r--r--Kokyu/DSRT_Schedulers.h17
-rw-r--r--Kokyu/Kokyu.cpp7
-rw-r--r--Kokyu/tests/DSRT_MIF/svc.conf2
-rw-r--r--Kokyu/tests/DSRT_MIF/svc.conf.xml4
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>