~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/plugin/scheduler.cc

  • Committer: Brian Aker
  • Date: 2009-10-01 22:56:26 UTC
  • mto: (1154.1.1 staging)
  • mto: This revision was merged to the branch mainline in revision 1155.
  • Revision ID: brian@gaz-20091001225626-sb1pdykpxlnkheaj
Remove Factory/make scheduler work like everything else.

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
 
26
26
using namespace std;
27
27
 
28
 
namespace drizzled
29
 
{
30
 
 
31
 
plugin::SchedulerFactory *scheduler_factory= NULL;
32
 
Registry<plugin::SchedulerFactory *> all_schedulers;
33
 
 
34
 
bool plugin::SchedulerFactory::addPlugin(plugin::SchedulerFactory *factory)
35
 
{
36
 
  if (all_schedulers.count(factory->getName()) != 0)
 
28
using namespace drizzled;
 
29
 
 
30
vector<plugin::Scheduler *> all_schedulers;
 
31
 
 
32
/* Globals (TBK) */
 
33
static plugin::Scheduler *scheduler= NULL;
 
34
 
 
35
 
 
36
class FindSchedulerByName : public unary_function<plugin::Scheduler *, bool>
 
37
{
 
38
  const string *name;
 
39
public:
 
40
  FindSchedulerByName(const string *name_arg)
 
41
    : name(name_arg) {}
 
42
  result_type operator() (argument_type sched)
 
43
  {
 
44
    return (bool)((name->compare(sched->name) == 0));
 
45
  }
 
46
};
 
47
 
 
48
 
 
49
bool plugin::Scheduler::addPlugin(plugin::Scheduler *sched)
 
50
{
 
51
  vector<plugin::Scheduler *>::iterator iter=
 
52
    find_if(all_schedulers.begin(), all_schedulers.end(), 
 
53
            FindSchedulerByName(&sched->name));
 
54
 
 
55
  if (iter != all_schedulers.end())
37
56
  {
38
57
    errmsg_printf(ERRMSG_LVL_ERROR,
39
58
                  _("Attempted to register a scheduler %s, but a scheduler "
40
59
                    "has already been registered with that name.\n"),
41
 
                    factory->getName().c_str());
42
 
    return true;
43
 
  }
44
 
  all_schedulers.add(factory);
45
 
  return false;
46
 
}
47
 
 
48
 
 
49
 
void plugin::SchedulerFactory::removePlugin(plugin::SchedulerFactory *factory)
50
 
{
51
 
  scheduler_factory= NULL;
52
 
  all_schedulers.remove(factory);
53
 
}
54
 
 
55
 
 
56
 
bool plugin::SchedulerFactory::setFactory(const string& name)
57
 
{
58
 
   
59
 
  plugin::SchedulerFactory *factory= all_schedulers.find(name);
60
 
  if (factory == NULL)
61
 
  {
62
 
    errmsg_printf(ERRMSG_LVL_WARN,
63
 
                  _("Attempted to configure %s as the scheduler, which did "
64
 
                    "not exist.\n"), name.c_str());
65
 
    return true;
66
 
  }
67
 
  scheduler_factory= factory;
68
 
 
69
 
  return false;
70
 
}
71
 
 
72
 
plugin::Scheduler *plugin::SchedulerFactory::getScheduler()
73
 
{
74
 
  assert(scheduler_factory != NULL);
75
 
  plugin::Scheduler *sched= (*scheduler_factory)();
76
 
  if (sched == NULL)
77
 
  {
78
 
    errmsg_printf(ERRMSG_LVL_ERROR, _("Scheduler initialization failed.\n"));
79
 
    exit(1);
80
 
  }
81
 
  return sched;
82
 
}
83
 
 
84
 
} /* namespace drizzled */
 
60
                    sched->name.c_str());
 
61
    return true;
 
62
  }
 
63
 
 
64
  all_schedulers.push_back(sched);
 
65
 
 
66
  return false;
 
67
}
 
68
 
 
69
 
 
70
void plugin::Scheduler::removePlugin(plugin::Scheduler *sched)
 
71
{
 
72
  all_schedulers.erase(find(all_schedulers.begin(),
 
73
                            all_schedulers.end(),
 
74
                            sched));
 
75
}
 
76
 
 
77
 
 
78
bool plugin::Scheduler::setPlugin(const string& name)
 
79
{
 
80
  vector<plugin::Scheduler *>::iterator iter=
 
81
    find_if(all_schedulers.begin(), all_schedulers.end(), 
 
82
            FindSchedulerByName(&name));
 
83
 
 
84
  if (iter != all_schedulers.end())
 
85
  {
 
86
    scheduler= *iter;
 
87
 
 
88
    return false;
 
89
  }
 
90
 
 
91
  errmsg_printf(ERRMSG_LVL_WARN,
 
92
                _("Attempted to configure %s as the scheduler, which did "
 
93
                  "not exist.\n"), name.c_str());
 
94
  return true;
 
95
}
 
96
 
 
97
 
 
98
plugin::Scheduler *plugin::Scheduler::getScheduler()
 
99
{
 
100
  return scheduler;
 
101
}