~drizzle-trunk/drizzle/development

2116.1.20 by David Shrewsbury
Refactor design pattern
1
/* - mode: c; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 *
4
 *  Copyright (C) 2011 David Shrewsbury
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
2234 by Brian Aker
Mass removal of ifdef/endif in favor of pragma once.
21
#pragma once
2116.1.20 by David Shrewsbury
Refactor design pattern
22
2116.1.38 by David Shrewsbury
Change include style
23
#include <plugin/slave/queue_consumer.h>
24
#include <plugin/slave/queue_producer.h>
25
#include <plugin/slave/replication_schema.h>
2116.1.31 by David Shrewsbury
Major refactor of common functionality into new classes.
26
#include <drizzled/plugin/daemon.h>
2116.1.20 by David Shrewsbury
Refactor design pattern
27
#include <boost/thread.hpp>
2116.1.28 by David Shrewsbury
More config file work
28
2116.1.31 by David Shrewsbury
Major refactor of common functionality into new classes.
29
namespace drizzled
30
{
31
  class Session;
32
}
2116.1.20 by David Shrewsbury
Refactor design pattern
33
34
namespace slave
35
{
36
37
class ReplicationSlave : public drizzled::plugin::Daemon
38
{
39
public:
40
2116.1.31 by David Shrewsbury
Major refactor of common functionality into new classes.
41
  ReplicationSlave(const std::string &config)
42
    : drizzled::plugin::Daemon("Replication Slave"),
2225.3.1 by David Shrewsbury
Persist --slave.max-commit-id value to applier_state table.
43
      _config_file(config),
44
      _initial_max_commit_id(0)
2116.1.26 by David Shrewsbury
Add framework for loading config file
45
  {}
2116.1.20 by David Shrewsbury
Refactor design pattern
46
  
47
  ~ReplicationSlave()
48
  {
49
    _consumer_thread.interrupt();
2116.1.23 by David Shrewsbury
Added empty version of producer thread
50
    _producer_thread.interrupt();
2116.1.20 by David Shrewsbury
Refactor design pattern
51
  }
52
2116.1.31 by David Shrewsbury
Major refactor of common functionality into new classes.
53
  void startup(drizzled::Session &session);
2116.1.26 by David Shrewsbury
Add framework for loading config file
54
55
  /**
56
   * Get the error message describing what went wrong during setup.
57
   */
58
  const std::string &getError() const
59
  {
60
    return _error;
61
  }
62
2221.8.1 by David Shrewsbury
Add new --slave.max-commit-id option to control where we begin reading the master transaction log.
63
  /**
64
   * Set the initial value for the slave's maximum commit ID.
65
   *
66
   * This value basically determines where to start retrieving events from
67
   * the master. Normally this is computed automatically based on the
68
   * contents of the queue and/or the last applied commit ID. This allows
69
   * us to override those values and start from another point. E.g., new
70
   * slave provisioning or skipping a trouble statement.
71
   *
72
   * @param[in] value The commit ID value.
73
   */
74
  void setMaxCommitId(uint64_t value)
75
  {
2225.3.1 by David Shrewsbury
Persist --slave.max-commit-id value to applier_state table.
76
    /* must tell producer to set its cached value */
77
    _producer.setCachedMaxCommitId(value);
78
    /* setting this indicates that we should store it permanently */
79
    _initial_max_commit_id= value;
2221.8.1 by David Shrewsbury
Add new --slave.max-commit-id option to control where we begin reading the master transaction log.
80
  }
81
2116.1.20 by David Shrewsbury
Refactor design pattern
82
private:
2116.1.31 by David Shrewsbury
Major refactor of common functionality into new classes.
83
  std::string _config_file;
2116.1.26 by David Shrewsbury
Add framework for loading config file
84
  std::string _error;
85
2116.1.20 by David Shrewsbury
Refactor design pattern
86
  QueueConsumer _consumer;
2116.1.23 by David Shrewsbury
Added empty version of producer thread
87
  QueueProducer _producer;
2116.1.20 by David Shrewsbury
Refactor design pattern
88
2116.1.23 by David Shrewsbury
Added empty version of producer thread
89
  /** Applier thread that will drain the work queue */
2116.1.20 by David Shrewsbury
Refactor design pattern
90
  boost::thread _consumer_thread;
91
2116.1.23 by David Shrewsbury
Added empty version of producer thread
92
  /** I/O thread that will populate the work queue */
93
  boost::thread _producer_thread;
2116.1.31 by David Shrewsbury
Major refactor of common functionality into new classes.
94
2225.3.1 by David Shrewsbury
Persist --slave.max-commit-id value to applier_state table.
95
  uint64_t _initial_max_commit_id;
96
2116.1.31 by David Shrewsbury
Major refactor of common functionality into new classes.
97
  /**
98
   * Initialize slave services with the given configuration file.
99
   *
100
   * In case of an error during initialization, you can call the getError()
101
   * method to get a string describing what went wrong.
102
   *
103
   * @retval true Success
104
   * @retval false Failure
105
   */
106
  bool initWithConfig();
2116.1.20 by David Shrewsbury
Refactor design pattern
107
};
108
  
109
} /* namespace slave */
110