~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/plugin/scheduler.cc

  • Committer: Mark Atwood
  • Date: 2011-10-27 05:08:12 UTC
  • mfrom: (2445.1.11 rf)
  • Revision ID: me@mark.atwood.name-20111027050812-1icvs72lb0u4xdc4
mergeĀ lp:~olafvdspek/drizzle/refactor8

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
18
 */
19
19
 
20
 
#include "config.h"
21
 
 
22
 
#include <algorithm>
23
 
 
24
 
#include "drizzled/plugin/scheduler.h"
25
 
 
26
 
#include "drizzled/gettext.h"
27
 
#include "drizzled/errmsg_print.h"
28
 
 
29
 
namespace drizzled
30
 
{
31
 
 
32
 
extern size_t my_thread_stack_size;
33
 
 
34
 
std::vector<plugin::Scheduler *> all_schedulers;
35
 
 
36
 
/* Globals (TBK) */
37
 
static plugin::Scheduler *scheduler= NULL;
38
 
 
39
 
 
40
 
class FindSchedulerByName : public std::unary_function<plugin::Scheduler *, bool>
41
 
{
42
 
  const std::string *name;
43
 
public:
44
 
  FindSchedulerByName(const std::string *name_arg)
45
 
    : name(name_arg) {}
46
 
  result_type operator() (argument_type sched)
47
 
  {
48
 
    return (bool)((name->compare(sched->getName()) == 0));
49
 
  }
50
 
};
51
 
 
 
20
#include <config.h>
 
21
#include <drizzled/plugin/scheduler.h>
 
22
#include <drizzled/errmsg_print.h>
 
23
#include <drizzled/gettext.h>
 
24
 
 
25
namespace drizzled {
 
26
 
 
27
typedef std::vector<plugin::Scheduler*> schedulers_t;
 
28
 
 
29
static schedulers_t g_schedulers;
 
30
static plugin::Scheduler* g_scheduler= NULL;
52
31
 
53
32
bool plugin::Scheduler::addPlugin(plugin::Scheduler *sched)
54
33
{
55
 
  std::vector<plugin::Scheduler *>::iterator iter=
56
 
    std::find_if(all_schedulers.begin(), all_schedulers.end(), 
57
 
            FindSchedulerByName(&sched->getName()));
58
 
 
59
 
  if (iter != all_schedulers.end())
 
34
  BOOST_FOREACH(schedulers_t::reference it, g_schedulers)
60
35
  {
61
 
    errmsg_printf(ERRMSG_LVL_ERROR,
62
 
                  _("Attempted to register a scheduler %s, but a scheduler "
63
 
                    "has already been registered with that name.\n"),
64
 
                    sched->getName().c_str());
 
36
    if (it->getName() != sched->getName())
 
37
      continue;
 
38
    errmsg_printf(error::ERROR, _("Attempted to register a scheduler %s, but a scheduler has already been registered with that name.\n"), sched->getName().c_str());
65
39
    return true;
66
40
  }
67
 
 
68
41
  sched->deactivate();
69
 
  all_schedulers.push_back(sched);
70
 
 
 
42
  g_schedulers.push_back(sched);
71
43
  return false;
72
44
}
73
45
 
74
 
 
75
46
void plugin::Scheduler::removePlugin(plugin::Scheduler *sched)
76
47
{
77
 
  all_schedulers.erase(std::find(all_schedulers.begin(),
78
 
                            all_schedulers.end(),
79
 
                            sched));
 
48
  g_schedulers.erase(std::find(g_schedulers.begin(), g_schedulers.end(), sched));
80
49
}
81
50
 
82
 
 
83
51
bool plugin::Scheduler::setPlugin(const std::string& name)
84
52
{
85
 
  std::vector<plugin::Scheduler *>::iterator iter=
86
 
    std::find_if(all_schedulers.begin(), all_schedulers.end(), 
87
 
            FindSchedulerByName(&name));
88
 
 
89
 
  if (iter != all_schedulers.end())
 
53
  BOOST_FOREACH(schedulers_t::reference it, g_schedulers)
90
54
  {
91
 
    if (scheduler != NULL)
92
 
      scheduler->deactivate();
93
 
    scheduler= *iter;
94
 
    scheduler->activate();
 
55
    if (it->getName() != name)
 
56
      continue;
 
57
    if (g_scheduler)
 
58
      g_scheduler->deactivate();
 
59
    g_scheduler= it;
 
60
    g_scheduler->activate();
95
61
    return false;
96
62
  }
97
 
 
98
 
  errmsg_printf(ERRMSG_LVL_WARN,
99
 
                _("Attempted to configure %s as the scheduler, which did "
100
 
                  "not exist.\n"), name.c_str());
 
63
  errmsg_printf(error::WARN, _("Attempted to configure %s as the scheduler, which did not exist.\n"), name.c_str());
101
64
  return true;
102
65
}
103
66
 
104
 
 
105
67
plugin::Scheduler *plugin::Scheduler::getScheduler()
106
68
{
107
 
  return scheduler;
 
69
  return g_scheduler;
108
70
}
109
71
 
110
72
} /* namespace drizzled */