mrd 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/mrd +45 -22
- data/lib/mrd/version.rb +1 -1
- metadata +3 -3
data/bin/mrd
CHANGED
@@ -90,6 +90,7 @@ class App
|
|
90
90
|
mounts = run!("mount")
|
91
91
|
mounts =~ /#{@device} on (.*) \(/
|
92
92
|
$1 or raise RuntimeError.new("Cannot determine mountpoint")
|
93
|
+
$1 != '/' or raise RuntimeError.new("Bad mountpoint '#{$1}' for #{@device}")
|
93
94
|
Pathname.new($1)
|
94
95
|
end
|
95
96
|
end
|
@@ -109,53 +110,54 @@ class App
|
|
109
110
|
|
110
111
|
def initialize(ramdisk)
|
111
112
|
@ramdisk = ramdisk
|
112
|
-
@socket = @ramdisk.mountpoint.join('mysql.sock')
|
113
|
-
@pidfile = @ramdisk.mountpoint.join('mysql.pid')
|
114
|
-
@config = @ramdisk.mountpoint.join('my.cnf')
|
115
|
-
|
116
113
|
@install_db = find_command! %w(mysql_install_db5 mysql_install_db)
|
117
114
|
@mysqld = find_command! %w(mysqld_safe5 mysqld_safe)
|
118
115
|
end
|
119
116
|
|
120
117
|
def start
|
121
118
|
# Setup config
|
122
|
-
File.open(
|
119
|
+
File.open(configfile, 'w') do |fd|
|
123
120
|
fd.write %Q{
|
124
121
|
[client]
|
125
|
-
socket = #{
|
122
|
+
socket = #{socket}
|
126
123
|
[mysqld]
|
127
|
-
socket = #{
|
124
|
+
socket = #{socket}
|
128
125
|
thread_concurrency = 4
|
129
|
-
# innodb_data_home_dir =
|
130
126
|
innodb_data_file_path = ibdata1:10M:autoextend
|
131
|
-
#innodb_log_group_home_dir = /opt/local/var/db/mysql5
|
132
127
|
innodb_file_per_table
|
133
128
|
ft_min_word_len = 3
|
134
129
|
}.gsub(/^\s+/,'')
|
135
130
|
end
|
136
131
|
|
132
|
+
# Switch to the MySQL install directory (on some platforms the install script uses relative paths)
|
133
|
+
Dir.chdir @install_db.parent.parent
|
134
|
+
|
137
135
|
# Setup base databases
|
138
136
|
run!("#{@install_db} --datadir='#{@ramdisk.mountpoint}'")
|
139
137
|
|
140
138
|
# Start server in another thread
|
141
139
|
Logger.info 'Starting MySQL server'
|
142
140
|
@thread = Thread.new do
|
143
|
-
run!("#{@mysqld} --defaults-file='#{
|
141
|
+
run!("#{@mysqld} --defaults-file='#{configfile}' --socket='#{socket}' --datadir='#{@ramdisk.mountpoint}' --pid-file='#{pidfile}' --skip-networking")
|
144
142
|
end
|
145
143
|
|
146
144
|
# Wait for PID file
|
147
|
-
wait_for { Logger.debug "Waiting for PID file..." ;
|
145
|
+
wait_for { Logger.debug "Waiting for PID file..." ; pidfile.exist? }
|
148
146
|
self
|
149
147
|
end
|
150
148
|
|
151
149
|
def stop
|
152
|
-
return unless
|
150
|
+
return unless pidfile && pidfile.exist?
|
153
151
|
# Terminate server
|
154
152
|
Logger.info "Stopping server..."
|
155
|
-
pid =
|
153
|
+
pid = pidfile.read.to_i
|
156
154
|
Process.kill("TERM", pid)
|
157
155
|
Logger.debug "Killed server process (#{pid})."
|
158
|
-
wait_for { Logger.debug "Waiting for PID file..." ;
|
156
|
+
wait_for { Logger.debug "Waiting for PID file..." ; !pidfile.exist? }
|
157
|
+
end
|
158
|
+
|
159
|
+
def socket
|
160
|
+
@ramdisk && @ramdisk.mountpoint.join('mysql.sock')
|
159
161
|
end
|
160
162
|
|
161
163
|
private
|
@@ -173,11 +175,21 @@ class App
|
|
173
175
|
def find_command!(variants)
|
174
176
|
variants.each do |variant|
|
175
177
|
path = run("which #{variant}")
|
176
|
-
return path unless path.empty?
|
178
|
+
return Pathname.new(path) unless path.empty?
|
177
179
|
end
|
178
180
|
Logger.error "Sorry, I need one of #{variants.join ', '} to run."
|
179
181
|
Kernel.exit
|
180
182
|
end
|
183
|
+
|
184
|
+
def pidfile
|
185
|
+
@ramdisk && @ramdisk.mountpoint.join('mysql.pid')
|
186
|
+
end
|
187
|
+
|
188
|
+
def configfile
|
189
|
+
@ramdisk && @ramdisk.mountpoint.join('my.cnf')
|
190
|
+
end
|
191
|
+
|
192
|
+
|
181
193
|
end
|
182
194
|
|
183
195
|
|
@@ -192,9 +204,17 @@ class App
|
|
192
204
|
|
193
205
|
|
194
206
|
def main
|
207
|
+
@ramdisk = Ramdisk.new(options.size)
|
208
|
+
@server = MySQLServer.new(@ramdisk)
|
209
|
+
rd,wr = IO.pipe
|
210
|
+
|
195
211
|
if pid = Process.fork
|
212
|
+
wr.close
|
213
|
+
@pipe = rd
|
196
214
|
parent_main(pid)
|
197
215
|
else
|
216
|
+
rd.close
|
217
|
+
@pipe = wr
|
198
218
|
child_main
|
199
219
|
end
|
200
220
|
end
|
@@ -204,13 +224,15 @@ class App
|
|
204
224
|
Process.detach(child_pid)
|
205
225
|
wait_forever
|
206
226
|
rescue Interrupt
|
207
|
-
Kernel.exit
|
227
|
+
# Kernel.exit
|
228
|
+
Logger.debug 'Waiting for child to complete...'
|
229
|
+
@pipe.gets
|
208
230
|
end
|
209
231
|
|
210
232
|
def child_main
|
211
233
|
# Logger.info 'in child'
|
212
|
-
@ramdisk
|
213
|
-
@server
|
234
|
+
@ramdisk.mount
|
235
|
+
@server.start
|
214
236
|
Signal.trap("HUP") do
|
215
237
|
Logger.warn "SIGHUP received"
|
216
238
|
cleanup
|
@@ -228,16 +250,17 @@ class App
|
|
228
250
|
cleanup
|
229
251
|
end
|
230
252
|
|
253
|
+
private
|
254
|
+
|
255
|
+
|
256
|
+
attr :options
|
257
|
+
|
231
258
|
def cleanup
|
232
259
|
@server.stop if @server
|
233
260
|
@ramdisk.unmount if @ramdisk
|
234
261
|
end
|
235
262
|
|
236
263
|
|
237
|
-
private
|
238
|
-
|
239
|
-
attr :options
|
240
|
-
|
241
264
|
def option_parser
|
242
265
|
OptionParser.new do |opts|
|
243
266
|
opts.banner = "Usage: #{$progname} [options]"
|
data/lib/mrd/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mrd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -76,7 +76,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
76
76
|
version: '0'
|
77
77
|
segments:
|
78
78
|
- 0
|
79
|
-
hash: -
|
79
|
+
hash: -1819939860976838345
|
80
80
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
81
|
none: false
|
82
82
|
requirements:
|
@@ -85,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
85
|
version: '0'
|
86
86
|
segments:
|
87
87
|
- 0
|
88
|
-
hash: -
|
88
|
+
hash: -1819939860976838345
|
89
89
|
requirements: []
|
90
90
|
rubyforge_project:
|
91
91
|
rubygems_version: 1.8.23
|