mmmurf-starling 0.9.7.10 → 0.9.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG CHANGED
@@ -1,3 +1,18 @@
1
+ == 0.9.9
2
+ * remove dependency on SyslogLogger so that starling works on windows.
3
+
4
+ == 0.9.8
5
+ * add fix to enable relative paths <david@motorator.com>
6
+ * fix tests so they don't run 10 times due to a stupid bug with how the server is forked <seth@mojodna.net>
7
+ * fix some other tests <romeda@gmail.com>
8
+ * fix some error messages <romeda@gmail.com>
9
+ * probably some other things <romeda@gmail.com>
10
+
11
+ == 0.9.7.9
12
+ * properly complain if the spool directory isn't writable <seth@mojodna.net>
13
+ * assume group and user privileges in a working order <seth@mojodna.net>
14
+ * support string user / group names in addition to uid/gids <seth@mojodna.net>
15
+
1
16
  == 0.9.7.7
2
17
  * added init.d scripts for redhat and ubuntu by Mike Perham <mperham@gmail.com>
3
18
  * fixed dependencies for SyslogLogger, eventmachine and memcache-client by Mike Perham <mperham@gmail.com>
data/Rakefile CHANGED
@@ -2,6 +2,8 @@ require 'rubygems'
2
2
  require 'rake/rdoctask'
3
3
  require 'spec/rake/spectask'
4
4
 
5
+ task :default => :spec
6
+
5
7
  task :install do
6
8
  sh %{gem build starling.gemspec}
7
9
  sh %{sudo gem install starling-*.gem}
@@ -9,7 +11,7 @@ end
9
11
 
10
12
  Spec::Rake::SpecTask.new do |t|
11
13
  t.ruby_opts = ['-rtest/unit']
12
- t.spec_files = FileList['test/test_*.rb']
14
+ t.spec_files = FileList['spec/*_spec.rb']
13
15
  t.fail_on_error = true
14
16
  end
15
17
 
@@ -17,5 +19,4 @@ Rake::RDocTask.new do |rd|
17
19
  rd.main = "README.rdoc"
18
20
  rd.rdoc_files.include("README.rdoc", "lib/**/*.rb")
19
21
  rd.rdoc_dir = 'doc'
20
- # rd.options = spec.rdoc_options
21
22
  end
@@ -0,0 +1,9 @@
1
+ starling:
2
+ port: 22122
3
+ pid_file: /tmp/starling/starling.pid
4
+ queue_path: /tmp/starling/spool
5
+ timeout: 0
6
+ syslog_channel: starling-tampopo
7
+ log_level: DEBUG
8
+ daemonize: true
9
+
@@ -25,30 +25,30 @@ module StarlingServer
25
25
 
26
26
  # STAT Response
27
27
  STATS_COMMAND = /\Astats\r\n/m
28
- STATS_RESPONSE = "STAT pid %d
29
- STAT uptime %d
30
- STAT time %d
31
- STAT version %s
32
- STAT rusage_user %0.6f
33
- STAT rusage_system %0.6f
34
- STAT curr_items %d
35
- STAT total_items %d
36
- STAT bytes %d
37
- STAT curr_connections %d
38
- STAT total_connections %d
39
- STAT cmd_get %d
40
- STAT cmd_set %d
41
- STAT get_hits %d
42
- STAT get_misses %d
43
- STAT bytes_read %d
44
- STAT bytes_written %d
45
- STAT limit_maxbytes %d
28
+ STATS_RESPONSE = "STAT pid %d\r
29
+ STAT uptime %d\r
30
+ STAT time %d\r
31
+ STAT version %s\r
32
+ STAT rusage_user %0.6f\r
33
+ STAT rusage_system %0.6f\r
34
+ STAT curr_items %d\r
35
+ STAT total_items %d\r
36
+ STAT bytes %d\r
37
+ STAT curr_connections %d\r
38
+ STAT total_connections %d\r
39
+ STAT cmd_get %d\r
40
+ STAT cmd_set %d\r
41
+ STAT get_hits %d\r
42
+ STAT get_misses %d\r
43
+ STAT bytes_read %d\r
44
+ STAT bytes_written %d\r
45
+ STAT limit_maxbytes %d\r
46
46
  %sEND\r\n".freeze
47
- QUEUE_STATS_RESPONSE = "STAT queue_%s_items %d
48
- STAT queue_%s_total_items %d
49
- STAT queue_%s_logsize %d
50
- STAT queue_%s_expired_items %d
51
- STAT queue_%s_age %d\n".freeze
47
+ QUEUE_STATS_RESPONSE = "STAT queue_%s_items %d\r
48
+ STAT queue_%s_total_items %d\r
49
+ STAT queue_%s_logsize %d\r
50
+ STAT queue_%s_expired_items %d\r
51
+ STAT queue_%s_age %d\r\n".freeze
52
52
 
53
53
  SHUTDOWN_COMMAND = /\Ashutdown\r\n/m
54
54
 
@@ -15,7 +15,7 @@ module StarlingServer
15
15
 
16
16
  def initialize(path)
17
17
  unless File.directory?(path) && File.writable?(path)
18
- raise InaccessibleQueuePath.new("#{path} must exist and be writable by #{Etc.getpwuid(Process.uid).name}.")
18
+ raise InaccessibleQueuePath.new("'#{path}' must exist and be read-writable by #{Etc.getpwuid(Process.uid).name}.")
19
19
  end
20
20
 
21
21
  @shutdown_mutex = Mutex.new
@@ -2,7 +2,6 @@ require 'socket'
2
2
  require 'logger'
3
3
  require 'rubygems'
4
4
  require 'eventmachine'
5
- require 'analyzer_tools/syslog_logger'
6
5
 
7
6
  here = File.dirname(__FILE__)
8
7
 
@@ -11,7 +10,7 @@ require File.join(here, 'handler')
11
10
 
12
11
  module StarlingServer
13
12
 
14
- VERSION = "0.9.7.9"
13
+ VERSION = "0.9.8"
15
14
 
16
15
  class Base
17
16
  attr_reader :logger
@@ -68,14 +67,27 @@ module StarlingServer
68
67
  def run
69
68
  @stats[:start_time] = Time.now
70
69
 
71
- @@logger = case @opts[:logger]
72
- when IO, String; Logger.new(@opts[:logger])
73
- when Logger; @opts[:logger]
74
- else; Logger.new(STDERR)
75
- end
76
- @@logger = SyslogLogger.new(@opts[:syslog_channel]) if @opts[:syslog_channel]
70
+ if @opts[:syslog_channel]
71
+ begin
72
+ require 'syslog_logger'
73
+ @@logger = SyslogLogger.new(@opts[:syslog_channel])
74
+ rescue LoadError
75
+ # SyslogLogger isn't available, so we're just going to use Logger
76
+ end
77
+ end
77
78
 
78
- @opts[:queue] = QueueCollection.new(@opts[:path])
79
+ @@logger ||= case @opts[:logger]
80
+ when IO, String; Logger.new(@opts[:logger])
81
+ when Logger; @opts[:logger]
82
+ else; Logger.new(STDERR)
83
+ end
84
+
85
+ begin
86
+ @opts[:queue] = QueueCollection.new(@opts[:path])
87
+ rescue InaccessibleQueuePath => e
88
+ puts "Error: #{e.message}"
89
+ exit 1
90
+ end
79
91
  @@logger.level = @opts[:log_level] || Logger::ERROR
80
92
 
81
93
  @@logger.info "Starling STARTUP on #{@opts[:host]}:#{@opts[:port]}"
@@ -51,11 +51,11 @@ module StarlingServer
51
51
  def parse_options
52
52
  self.options = { :host => '127.0.0.1',
53
53
  :port => 22122,
54
- :path => File.join(%w( / tmp starling spool )),
54
+ :path => File.join('', 'var', 'spool', 'starling'),
55
55
  :log_level => Logger::INFO,
56
56
  :daemonize => false,
57
57
  :timeout => 0,
58
- :pid_file => File.join(%w( / tmp starling starling.pid )) }
58
+ :pid_file => File.join('', 'var', 'run', 'starling.pid') }
59
59
 
60
60
  OptionParser.new do |opts|
61
61
  opts.summary_width = 25
@@ -76,7 +76,7 @@ module StarlingServer
76
76
  opts.on("-q", "--queue_path PATH",
77
77
  :REQUIRED,
78
78
  "Path to store Starling queue logs", "(default: #{options[:path]})") do |queue_path|
79
- options[:path] = queue_path
79
+ options[:path] = File.expand_path(queue_path)
80
80
  end
81
81
 
82
82
  opts.separator ""; opts.separator "Network:"
@@ -96,7 +96,7 @@ module StarlingServer
96
96
  end
97
97
 
98
98
  opts.on("-PFILE", "--pid FILENAME", "save PID in FILENAME when using -d option.", "(default: #{options[:pid_file]})") do |pid_file|
99
- options[:pid_file] = pid_file
99
+ options[:pid_file] = File.expand_path(pid_file)
100
100
  end
101
101
 
102
102
  opts.on("-u", "--user USER", "User to run as") do |user|
@@ -110,11 +110,16 @@ module StarlingServer
110
110
  opts.separator ""; opts.separator "Logging:"
111
111
 
112
112
  opts.on("-L", "--log [FILE]", "Path to print debugging information.") do |log_path|
113
- options[:logger] = log_path
113
+ options[:logger] = File.expand_path(log_path)
114
114
  end
115
115
 
116
- opts.on("-l", "--syslog CHANNEL", "Write logs to the syslog instead of a log file.") do |channel|
117
- options[:syslog_channel] = channel
116
+ begin
117
+ require 'syslog_logger'
118
+
119
+ opts.on("-l", "--syslog CHANNEL", "Write logs to the syslog instead of a log file.") do |channel|
120
+ options[:syslog_channel] = channel
121
+ end
122
+ rescue LoadError
118
123
  end
119
124
 
120
125
  opts.on("-v", "Increase logging verbosity (may be used multiple times).") do
@@ -216,7 +221,7 @@ module StarlingServer
216
221
  safefork and exit
217
222
 
218
223
  unless sess_id = Process.setsid
219
- raise "Couldn't detache from controlling terminal."
224
+ raise "Couldn't detach from controlling terminal."
220
225
  end
221
226
 
222
227
  trap 'SIGHUP', 'IGNORE'
@@ -22,7 +22,7 @@ def safely_fork(&block)
22
22
  while blocking
23
23
  sleep 0.1
24
24
  end
25
-
25
+
26
26
  pid
27
27
  end
28
28
 
@@ -41,7 +41,11 @@ describe "StarlingServer" do
41
41
  :path => @tmp_path,
42
42
  :logger => Logger.new(STDERR),
43
43
  :log_level => Logger::FATAL)
44
- Signal.trap("INT") { server.stop }
44
+ Signal.trap("INT") {
45
+ server.stop
46
+ exit
47
+ }
48
+
45
49
  Process.kill("USR1", Process.ppid)
46
50
  server.run
47
51
  end
@@ -62,7 +66,6 @@ describe "StarlingServer" do
62
66
  @client.get('test_set_and_get_one_entry').should eql(v)
63
67
  end
64
68
 
65
-
66
69
  it "should expire entries" do
67
70
  v = rand((2**32)-1)
68
71
  @client.get('test_set_with_expiry').should be_nil
@@ -143,45 +146,42 @@ describe "StarlingServer" do
143
146
  # handle more than 1024 connections.
144
147
 
145
148
  unless IO::popen("uname").read.chomp == "Linux"
146
- raise "(Skipping epoll test: not on Linux)"
147
- skip = true
149
+ pending "skipping epoll test: not on Linux"
148
150
  end
151
+
149
152
  fd_limit = IO::popen("bash -c 'ulimit -n'").read.chomp.to_i
150
153
  unless fd_limit > 1024
151
- raise "(Skipping epoll test: 'ulimit -n' = #{fd_limit}, need > 1024)"
152
- skip = true
154
+ pending "skipping epoll test: 'ulimit -n' = #{fd_limit}, need > 1024"
153
155
  end
154
156
 
155
- unless skip
156
- v = rand(2**32 - 1)
157
- @client.set('test_epoll', v)
158
-
159
- # we can't open 1024 connections to memcache from within this process,
160
- # because we will hit ruby's 1024 fd limit ourselves!
161
- pid1 = safely_fork do
162
- unused_sockets = []
163
- 600.times do
164
- unused_sockets << TCPSocket.new("127.0.0.1", 22133)
165
- end
166
- Process.kill("USR1", Process.ppid)
167
- sleep 90
157
+ v = rand(2**32 - 1)
158
+ @client.set('test_epoll', v)
159
+
160
+ # we can't open 1024 connections to memcache from within this process,
161
+ # because we will hit ruby's 1024 fd limit ourselves!
162
+ pid1 = safely_fork do
163
+ unused_sockets = []
164
+ 600.times do
165
+ unused_sockets << TCPSocket.new("127.0.0.1", 22133)
168
166
  end
169
- pid2 = safely_fork do
170
- unused_sockets = []
171
- 600.times do
172
- unused_sockets << TCPSocket.new("127.0.0.1", 22133)
173
- end
174
- Process.kill("USR1", Process.ppid)
175
- sleep 90
167
+ Process.kill("USR1", Process.ppid)
168
+ sleep 90
169
+ end
170
+ pid2 = safely_fork do
171
+ unused_sockets = []
172
+ 600.times do
173
+ unused_sockets << TCPSocket.new("127.0.0.1", 22133)
176
174
  end
175
+ Process.kill("USR1", Process.ppid)
176
+ sleep 90
177
+ end
177
178
 
178
- begin
179
- client = MemCache.new('127.0.0.1:22133')
180
- client.get('test_epoll').should eql(v)
181
- ensure
182
- Process.kill("TERM", pid1)
183
- Process.kill("TERM", pid2)
184
- end
179
+ begin
180
+ client = MemCache.new('127.0.0.1:22133')
181
+ client.get('test_epoll').should eql(v)
182
+ ensure
183
+ Process.kill("TERM", pid1)
184
+ Process.kill("TERM", pid2)
185
185
  end
186
186
  end
187
187
 
@@ -202,4 +202,4 @@ describe "StarlingServer" do
202
202
  @client.reset
203
203
  FileUtils.rm(Dir.glob(File.join(@tmp_path, '*')))
204
204
  end
205
- end
205
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mmmurf-starling
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.7.10
4
+ version: 0.9.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Blaine Cook
@@ -25,15 +25,6 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: "0"
27
27
  version:
28
- - !ruby/object:Gem::Dependency
29
- name: SyslogLogger
30
- version_requirement:
31
- version_requirements: !ruby/object:Gem::Requirement
32
- requirements:
33
- - - ">="
34
- - !ruby/object:Gem::Version
35
- version: "0"
36
- version:
37
28
  - !ruby/object:Gem::Dependency
38
29
  name: eventmachine
39
30
  version_requirement:
@@ -70,6 +61,7 @@ files:
70
61
  - lib/starling.rb
71
62
  - etc/starling.redhat
72
63
  - etc/starling.ubuntu
64
+ - etc/sample-config.yml
73
65
  has_rdoc: true
74
66
  homepage: http://github.com/mmmurf/starling/
75
67
  post_install_message:
@@ -105,4 +97,4 @@ signing_key:
105
97
  specification_version: 2
106
98
  summary: Starling is a lightweight, transactional, distributed queue server
107
99
  test_files:
108
- - test/test_starling_server.rb
100
+ - spec/starling_server_spec.rb