~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/default_replicator/default_replicator.cc

* New serial event log plugin

Implemented in /plugin/serial_event_log/.

Adds a very simple serialized event log to the server.  This simple
applier takes Command messages and writes them to a log file as it
received them.  Nothing complex for right now.

* New default replicator plugin

This plugin is extremely simple and merely passes a received Command
message on to all registered Appliers (of which the new serial event
log is one of those appliers)

The plugin is disabled by default.  It can be enabled on startup
with --default-replicator-enable.

* New command reader test program

There is a new test program in /drizzled/message/ which is similar to
the transaction_reader program but can read single Command messages, 
and not Transaction messages which contain a vector of Command messages.

* New serial_event_log test suite

The test case is very simple right now, but serves to show how plugin
test suites can be written, and how test programs in the server source
tree can be used in the drizzletest program language.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* - mode: c; c-basic-offset: 2; indent-tabs-mode: nil; -*-
 
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
 
3
 *
 
4
 *  Copyright (C) 2008-2009 Sun Microsystems
 
5
 *
 
6
 *  This program is free software; you can redistribute it and/or modify
 
7
 *  it under the terms of the GNU General Public License as published by
 
8
 *  the Free Software Foundation; either version 2 of the License, or
 
9
 *  (at your option) any later version.
 
10
 *
 
11
 *  This program is distributed in the hope that it will be useful,
 
12
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
 *  GNU General Public License for more details.
 
15
 *
 
16
 *  You should have received a copy of the GNU General Public License
 
17
 *  along with this program; if not, write to the Free Software
 
18
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
19
 */
 
20
 
 
21
/**
 
22
 * @file
 
23
 *
 
24
 * Defines the implementation of the default replicator.
 
25
 *
 
26
 * @see drizzled/plugin/replicator.h
 
27
 * @see drizzled/plugin/applier.h
 
28
 *
 
29
 * @details
 
30
 *
 
31
 * This is a very simple implementation.  All we do is pass along the 
 
32
 * event to the supplier.  This is meant as a skeleton replicator only.
 
33
 *
 
34
 * @todo
 
35
 *
 
36
 * Want a neat project?  Take this skeleton replicator and make a
 
37
 * simple filtered replicator which allows the user to filter out
 
38
 * events based on a schema or table name...
 
39
 */
 
40
 
 
41
#include "default_replicator.h"
 
42
 
 
43
#include <drizzled/gettext.h>
 
44
#include <drizzled/message/transaction.pb.h>
 
45
 
 
46
#include <vector>
 
47
#include <string>
 
48
 
 
49
using namespace std;
 
50
 
 
51
static bool sysvar_default_replicator_enable= false;
 
52
 
 
53
bool DefaultReplicator::isActive()
 
54
{
 
55
  return sysvar_default_replicator_enable;
 
56
}
 
57
 
 
58
void DefaultReplicator::replicate(drizzled::plugin::Applier *in_applier, drizzled::message::Command *to_replicate)
 
59
{
 
60
  /* 
 
61
   * We do absolutely nothing but call the applier's apply() method, passing
 
62
   * along the supplied Command.  Yep, told you it was simple...
 
63
   */
 
64
  in_applier->apply(to_replicate);
 
65
}
 
66
 
 
67
static DefaultReplicator *default_replicator= NULL; /* The singleton replicator */
 
68
 
 
69
static int init(PluginRegistry &registry)
 
70
{
 
71
  default_replicator= new DefaultReplicator();
 
72
  registry.add(default_replicator);
 
73
  return 0;
 
74
}
 
75
 
 
76
static int deinit(PluginRegistry &registry)
 
77
{
 
78
  if (default_replicator)
 
79
  {
 
80
    registry.remove(default_replicator);
 
81
    delete default_replicator;
 
82
  }
 
83
  return 0;
 
84
}
 
85
 
 
86
static DRIZZLE_SYSVAR_BOOL(
 
87
  enable,
 
88
  sysvar_default_replicator_enable,
 
89
  PLUGIN_VAR_NOCMDARG,
 
90
  N_("Enable default replicator"),
 
91
  NULL, /* check func */
 
92
  NULL, /* update func */
 
93
  false /* default */);
 
94
 
 
95
static struct st_mysql_sys_var* default_replicator_system_variables[]= {
 
96
  DRIZZLE_SYSVAR(enable),
 
97
  NULL
 
98
};
 
99
 
 
100
drizzle_declare_plugin(default_replicator)
 
101
{
 
102
  "default_replicator",
 
103
  "0.1",
 
104
  "Jay Pipes",
 
105
  N_("Default Replicator"),
 
106
  PLUGIN_LICENSE_GPL,
 
107
  init, /* Plugin Init */
 
108
  deinit, /* Plugin Deinit */
 
109
  NULL, /* status variables */
 
110
  default_replicator_system_variables, /* system variables */
 
111
  NULL    /* config options */
 
112
}
 
113
drizzle_declare_plugin_end;