~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/serial_event_log/serial_event_log.h

* 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 API of the default serial event log.
 
25
 *
 
26
 * @see drizzled/plugin/replicator.h
 
27
 * @see drizzled/plugin/applier.h
 
28
 *
 
29
 * @details
 
30
 *
 
31
 * The SerialEventLog applies events it receives from the TransactionServices
 
32
 * server component to a simple log file on disk.
 
33
 * 
 
34
 * Events are received in no guaranteed order and the serial event log
 
35
 * is in charge of writing these events to the log as they are received.
 
36
 */
 
37
 
 
38
#ifndef DRIZZLE_PLUGIN_SERIAL_EVENT_LOG_H
 
39
#define DRIZZLE_PLUGIN_SERIAL_EVENT_LOG_H
 
40
 
 
41
#include <drizzled/server_includes.h>
 
42
#include <drizzled/atomics.h>
 
43
#include <drizzled/plugin/replicator.h>
 
44
#include <drizzled/plugin/applier.h>
 
45
 
 
46
#include <vector>
 
47
#include <string>
 
48
 
 
49
class SerialEventLog: public drizzled::plugin::Applier 
 
50
{
 
51
public:
 
52
  enum status
 
53
  {
 
54
    CRASHED= -1,
 
55
    OFFLINE= 0, /* Default state, uninited. */
 
56
    ONLINE,
 
57
    WRITING
 
58
  };
 
59
private:
 
60
  int log_file; /**< Handle for our log file */
 
61
  pthread_mutex_t lock; /**< Lock for entire log */
 
62
  enum status state; /**< The state the log is in */
 
63
  bool is_active; /**< Internal toggle. If true, log was initialized properly... */
 
64
  const char *log_file_path;
 
65
public:
 
66
  SerialEventLog(const char *in_log_file_path);
 
67
 
 
68
  /** Destructor */
 
69
  ~SerialEventLog();
 
70
 
 
71
  /**
 
72
   * Applies a Command to the serial log
 
73
   *
 
74
   * @note
 
75
   *
 
76
   * It is important to note that memory allocation for the 
 
77
   * supplied pointer is not guaranteed after the completion 
 
78
   * of this function -- meaning the caller can dispose of the
 
79
   * supplied message.  Therefore, appliers which are
 
80
   * implementing an asynchronous replication system must copy
 
81
   * the supplied message to their own controlled memory storage
 
82
   * area.
 
83
   *
 
84
   * @param Command message to be replicated
 
85
   */
 
86
  void apply(drizzled::message::Command *to_apply);
 
87
  
 
88
  /** 
 
89
   * Returns whether the serial event log is active.
 
90
   */
 
91
  bool isActive();
 
92
 
 
93
  /**
 
94
   * Returns the state that the log is in
 
95
   */
 
96
  inline enum status getState()
 
97
  {
 
98
    return state;
 
99
  }
 
100
};
 
101
 
 
102
#endif /* DRIZZLE_PLUGIN_SERIAL_EVENT_LOG_H */