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



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

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

#j_data_dirObject



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

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

#j_data_log_dirObject



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

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


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

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



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

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)



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

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



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

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)


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

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

#shutdownObject



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

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



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

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)


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

def spawned?
  !!@zookeeper_thread
end

#zk_configObject



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

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

#zk_serverObject



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

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