Class: ZK::Server::JavaEmbedded

Inherits:
Base
  • Object
show all
Defined in:
lib/zk-server/java_embedded.rb

Overview

gah, this needs to be a singleton, but whaddyagonnado

Defined Under Namespace

Modules: JZ

Constant Summary collapse

System =
java.lang.System
JFile =
java.io.File

Instance Attribute Summary collapse

Attributes inherited from Base

#config

Instance Method Summary collapse

Methods inherited from Base

#clobber!, #create_files!, #initialize, #ping?, #wait_until_ping, #write_log4j_properties!, #write_myid!, #write_zoo_cfg!

Methods included from Logging

#logger

Constructor Details

This class inherits a constructor from ZK::Server::Base

Instance Attribute Details

#zookeeper_threadObject (readonly)

Returns the value of attribute zookeeper_thread.



11
12
13
# File 'lib/zk-server/java_embedded.rb', line 11

def zookeeper_thread
  @zookeeper_thread
end

Instance Method Details

#cnxn_factoryObject



106
107
108
# File 'lib/zk-server/java_embedded.rb', line 106

def cnxn_factory
  @cnxn_factory ||= JZ::Server::NIOServerCnxn::Factory.new(zk_config.client_port_address, zk_config.max_client_cnxns)
end

#j_data_dirObject



114
115
116
# File 'lib/zk-server/java_embedded.rb', line 114

def j_data_dir
  @j_data_dir ||= JFile.new(zk_config.data_dir)
end

#j_data_log_dirObject



110
111
112
# File 'lib/zk-server/java_embedded.rb', line 110

def j_data_log_dir
  @j_data_log_dir ||= JFile.new(zk_config.data_log_dir)
end


73
74
75
76
77
# File 'lib/zk-server/java_embedded.rb', line 73

def logging_related_system_properties
  [ ['log4j.configuration', "file://#{ZK::Server.default_log4j_props_path}"],
    ['zookeeper.log.dir', config.log_dir],
    ['zookeeper.root.logger', 'INFO,CONSOLE'], ]
end

#pidObject



69
70
71
# File 'lib/zk-server/java_embedded.rb', line 69

def pid
  $$ # CHEEKY!!
end

#require_dependenciesObject

XXX: this assumes that we're only going to ever run one of these per process (or at least have only one log)



81
82
83
84
85
86
87
88
89
90
# File 'lib/zk-server/java_embedded.rb', line 81

def require_dependencies
  logging_related_system_properties.each do |k,v|
    System.set_property(k,v)
  end

  require 'log4j'
  require 'zookeeper_jar'

  JZ.dynamically_create_consts
end

#runObject



52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/zk-server/java_embedded.rb', line 52

def run
  @mutex.synchronize do
    return false if @run_called
    @run_called = true

    create_files!
    require_dependencies
    spawn_zookeeper_thread!
    wait_until_ping
    true
  end
end

#running?Boolean

Returns:

  • (Boolean)


46
47
48
49
50
# File 'lib/zk-server/java_embedded.rb', line 46

def running?
  @mutex.synchronize do
    @zk_server && @zk_server.running?
  end
end

#shutdownObject



35
36
37
38
39
40
41
42
43
44
# File 'lib/zk-server/java_embedded.rb', line 35

def shutdown
  @mutex.synchronize do
    return unless @run_called and @cnxn_factory and @zk_server and running?

    @cnxn_factory.shutdown
    @zk_server.shutdown
  end

  @zookeeper_thread and @zookeeper_thread.join(5)
end

#spawn_zookeeper_thread!Object



93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/zk-server/java_embedded.rb', line 93

def spawn_zookeeper_thread!
  @zookeeper_thread ||= Thread.new do
    Thread.current.abort_on_exception = true
    cnxn_factory.startup(zk_server)
    cnxn_factory.join
    cnxn_factory.shutdown

    @mutex.synchronize do
      @exit_cond.broadcast
    end
  end
end

#spawned?Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/zk-server/java_embedded.rb', line 65

def spawned?
  !!@zookeeper_thread
end

#zk_configObject



122
123
124
# File 'lib/zk-server/java_embedded.rb', line 122

def zk_config
  @zk_config ||= JZ::Server::ServerConfig.new.tap { |c| c.parse(zoo_cfg_path) }
end

#zk_serverObject



118
119
120
# File 'lib/zk-server/java_embedded.rb', line 118

def zk_server
  @zk_server ||= JZ::Server::ZooKeeperServer.new(j_data_log_dir, j_data_dir, zk_config.tick_time)
end