Class: Flare::Test::Cluster

Inherits:
Object
  • Object
show all
Includes:
Flare::Tools::Common
Defined in:
lib/flare/test/cluster.rb

Overview

Description

Constant Summary

Constants included from Flare::Tools::Common

Flare::Tools::Common::NodeListFormat, Flare::Tools::Common::NodeListHeader

Instance Method Summary collapse

Methods included from Flare::Tools::Common

#address_of_hostname, #fetch_cluster, #hostname_of_address, #nodekey_of, #string_of_nodelist, #user_confirmed, #wait_for_master_construction, #wait_for_servers, #wait_for_slave_construction

Methods included from Util::Logging

#debug, #error, #fatal, #info, logger, #puts, set_logger, #trace, #warn

Constructor Details

#initialize(name, option = {}) ⇒ Cluster

Returns a new instance of Cluster.



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/flare/test/cluster.rb', line 20

def initialize(name, option = {})
  if ENV.has_key?("FLARE_INDEX_DB") && !option.has_key?("index-db")
    option["index-db"] = ENV["FLARE_INDEX_DB"]
  end

  if option.has_key?("index-db")
    uri = URI.parse(option["index-db"])
    if uri.scheme == "zookeeper"
      z = ::Zookeeper.new("#{uri.host}:#{uri.port}")
      Flare::Tools::ZkUtil.clear_nodemap z, uri.path
      z.close
    end
  end

  daemon = Daemon.instance
  @indexport = daemon.assign_port
  @workdir = Dir.pwd+"/work"
  @datadir = [@workdir, "#{name}.#{@indexport}"].join('/')
  @nodes = {}

  @indexname = "localhost"
  @index_pid = daemon.invoke_flarei(name, {
                                      'server-name' => @indexname,
                                      'server-port' => @indexport,
                                      'data-dir' => @datadir,
                                    }.merge(option))
  @flare_xml = [@datadir, "flare.xml"].join('/')
  sleep 1
end

Instance Method Details

#clear_data(node) ⇒ Object



124
125
126
127
128
# File 'lib/flare/test/cluster.rb', line 124

def clear_data(node)
  Flare::Tools::Node.open(node.hostname, node.port, 10) do |n|
    n.flush_all
  end
end

#create_node(name, config = {}, executable = Daemon::Flared) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/flare/test/cluster.rb', line 58

def create_node(name, config = {}, executable = Daemon::Flared)
  daemon = Daemon.instance
  serverport = daemon.assign_port

  datadir = [@datadir, "#{name}.#{serverport}"].join('.')

  servername = "localhost"
  pid = daemon.invoke_flared(name, {
                               'index-server-name' => @indexname,
                               'index-server-port' => @indexport,
                               'server-name' => servername,
                               'server-port' => serverport,
                               'data-dir' => datadir,
                             }.merge(config), executable)
  hostname_port = "#{servername}:#{serverport}"
  node = @nodes[hostname_port] = Node.new(hostname_port, pid)
  node
end

#exist?(node) ⇒ Boolean

Returns:

  • (Boolean)


130
131
132
133
134
135
# File 'lib/flare/test/cluster.rb', line 130

def exist?(node)
  return Flare::Tools::IndexServer.open(indexname, indexport, 10) do |s|
    nodes_stats = s.stats_nodes
    nodes_stats.has_key? node
  end
end

#indexObject



137
138
139
140
141
# File 'lib/flare/test/cluster.rb', line 137

def index
  open(@flare_xml) do |f|
    f.read
  end
end

#indexnameObject



50
51
52
# File 'lib/flare/test/cluster.rb', line 50

def indexname
  @indexname
end

#indexportObject



54
55
56
# File 'lib/flare/test/cluster.rb', line 54

def indexport
  @indexport
end

#nodesObject



87
88
89
# File 'lib/flare/test/cluster.rb', line 87

def nodes
  @nodes.values
end

#prepare_data(node, prefix, count) ⇒ Object



115
116
117
118
119
120
121
122
# File 'lib/flare/test/cluster.rb', line 115

def prepare_data(node, prefix, count)
  Flare::Tools::Node.open(node.hostname, node.port, 10) do |n|
    fmt = "#{prefix}%010.10d"
    (0...count).each do |i|
      n.set(fmt % i, "All your base are belong to us.")
    end
  end
end

#prepare_master_and_slaves(nodes, partition = 0) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/flare/test/cluster.rb', line 97

def prepare_master_and_slaves(nodes, partition = 0)
  Flare::Tools::IndexServer.open(indexname, indexport, 10) do |s|
    slaves = nodes.dup
    master = slaves.shift
    
    # master
    s.set_role(master.hostname, master.port, 'master', 1, partition)
    wait_for_master_construction(s, "#{master.hostname}:#{master.port}", 10)
    s.set_state(master.hostname, master.port, 'active')
    
    # slave
    slaves.each do |n|
      s.set_role(n.hostname, n.port, 'slave', 1, partition)
      wait_for_slave_construction(s, "#{n.hostname}:#{n.port}", 10, true)
    end
  end
end

#shutdownObject



77
78
79
80
# File 'lib/flare/test/cluster.rb', line 77

def shutdown
  daemon = Daemon.instance
  daemon.shutdown
end

#shutdown_node(node) ⇒ Object



82
83
84
85
# File 'lib/flare/test/cluster.rb', line 82

def shutdown_node(node)
  daemon = Daemon.instance
  daemon.shutdown_flared(node.pid)
end

#wait_for_readyObject



91
92
93
94
95
# File 'lib/flare/test/cluster.rb', line 91

def wait_for_ready
  Flare::Tools::IndexServer.open(indexname, indexport, 10) do |s|
    wait_for_servers(s)
  end        
end