semian 0.4.3 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 37818bb2b8352953c8a3977a29381a812dd6a5aa
4
- data.tar.gz: c1cf6be9179e4d21a41d2ff3bc831af8bca7b71f
3
+ metadata.gz: c2c538a37d4dad10b509ddcc3efa6f80e128644c
4
+ data.tar.gz: f874bde55c42b7856613ec44faac1001aea1f1ec
5
5
  SHA512:
6
- metadata.gz: af8ced42836152bebc2f8bebc5a8046c8a69c2cc0bf2c5ce22d286a394d621f140f191df1339a0b90dfe426b7c38e4c3e05f25ced591c008450eb2d3f82a418b
7
- data.tar.gz: 309107cb264ad1665103fbcd001134a91491618f6be66d463e2f024892021a80a3f9b7c4f02f97d37e96aca9f31fab6a5a4a7edb402233995c14fb07e4547b15
6
+ metadata.gz: 9881b1fae08a98cb10541901ee6ef2f06c4dc56c8cb183c3802797c91d9d8c32c10240777c3614892475f73170cf7ad9ef4abcedc0cdd080971c0c4fc09360ce
7
+ data.tar.gz: 6bfdea4f21cee7be821c2014d5679a71a70a0bd6a23f4b67b148b8c45955bcacd96d04549184aec06f9b375784f14a47ce65a224e3555ecaf10b09938de31bad
data/.travis.yml CHANGED
@@ -3,11 +3,13 @@ language: ruby
3
3
  sudo: true
4
4
 
5
5
  before_install:
6
+ - gem install bundler
6
7
  - scripts/install_toxiproxy.sh
7
8
 
8
9
  rvm:
9
- - 2.1.1
10
- - 2.3.0
10
+ - '2.1'
11
+ - '2.2'
12
+ - '2.3.1'
11
13
 
12
14
  services:
13
15
  - redis-server
data/Gemfile CHANGED
@@ -6,6 +6,5 @@ group :debug do
6
6
  end
7
7
 
8
8
  group :development, :test do
9
- gem 'toxiproxy', github: 'Shopify/toxiproxy-ruby', ref: 'f0c5d0bebca01180e2cfd5234e3d18affefbc670', require: 'toxiproxy'
10
9
  gem 'rubocop', '~> 0.34.2'
11
10
  end
data/ext/semian/semian.c CHANGED
@@ -493,7 +493,7 @@ void Init_semian()
493
493
  eInternal = rb_const_get(cSemian, rb_intern("InternalError"));
494
494
 
495
495
  rb_define_alloc_func(cResource, semian_resource_alloc);
496
- rb_define_method(cResource, "_initialize", semian_resource_initialize, 4);
496
+ rb_define_method(cResource, "initialize_semaphore", semian_resource_initialize, 4);
497
497
  rb_define_method(cResource, "acquire", semian_resource_acquire, -1);
498
498
  rb_define_method(cResource, "count", semian_resource_count, 0);
499
499
  rb_define_method(cResource, "semid", semian_resource_id, 0);
data/lib/semian.rb CHANGED
@@ -1,5 +1,16 @@
1
+ require 'forwardable'
1
2
  require 'logger'
3
+
4
+ require 'semian/version'
2
5
  require 'semian/instrumentable'
6
+ require 'semian/platform'
7
+ require 'semian/resource'
8
+ require 'semian/circuit_breaker'
9
+ require 'semian/protected_resource'
10
+ require 'semian/unprotected_resource'
11
+ require 'semian/simple_sliding_window'
12
+ require 'semian/simple_integer'
13
+ require 'semian/simple_state'
3
14
 
4
15
  #
5
16
  # === Overview
@@ -77,8 +88,14 @@ module Semian
77
88
  InternalError = Class.new(BaseError)
78
89
  OpenCircuitError = Class.new(BaseError)
79
90
 
80
- def semaphores_enabled?
81
- !ENV['SEMIAN_SEMAPHORES_DISABLED'] && Semian.sysv_semaphores_supported?
91
+ def issue_disabled_semaphores_warning
92
+ return if defined?(@warning_issued)
93
+ @warning_issued = true
94
+ if !sysv_semaphores_supported?
95
+ logger.info("Semian sysv semaphores are not supported on #{RUBY_PLATFORM} - all operations will no-op")
96
+ elsif disabled?
97
+ logger.info("Semian semaphores are disabled, is this what you really want? - all operations will no-op")
98
+ end
82
99
  end
83
100
 
84
101
  module AdapterError
@@ -151,24 +168,8 @@ module Semian
151
168
  end
152
169
  end
153
170
 
154
- require 'semian/resource'
155
- require 'semian/circuit_breaker'
156
- require 'semian/protected_resource'
157
- require 'semian/unprotected_resource'
158
- require 'semian/platform'
159
- require 'semian/simple_sliding_window'
160
- require 'semian/simple_integer'
161
- require 'semian/simple_state'
162
171
  if Semian.semaphores_enabled?
163
172
  require 'semian/semian'
164
173
  else
165
174
  Semian::MAX_TICKETS = 0
166
- unless Semian.sysv_semaphores_supported?
167
- Semian.logger.info("Semian sysv semaphores are not supported on #{RUBY_PLATFORM} - all operations will no-op")
168
- end
169
-
170
- if ENV['SEMIAN_SEMAPHORES_DISABLED']
171
- Semian.logger.info("Semian semaphores are disabled, is this what you really want? - all operations will no-op")
172
- end
173
175
  end
174
- require 'semian/version'
@@ -1,3 +1,5 @@
1
+ require 'semian'
2
+
1
3
  module Semian
2
4
  module Adapter
3
5
  def semian_identifier
data/lib/semian/mysql2.rb CHANGED
@@ -1,4 +1,3 @@
1
- require 'semian'
2
1
  require 'semian/adapter'
3
2
  require 'mysql2'
4
3
 
@@ -1,5 +1,5 @@
1
- require 'semian'
2
1
  require 'semian/adapter'
2
+ require 'net/http'
3
3
 
4
4
  module Net
5
5
  ProtocolError.include(::Semian::AdapterError)
@@ -1,6 +1,16 @@
1
1
  module Semian
2
+ extend self
3
+
2
4
  # Determines if Semian supported on the current platform.
3
- def self.sysv_semaphores_supported?
5
+ def sysv_semaphores_supported?
4
6
  /linux/.match(RUBY_PLATFORM)
5
7
  end
8
+
9
+ def semaphores_enabled?
10
+ !disabled? && sysv_semaphores_supported?
11
+ end
12
+
13
+ def disabled?
14
+ ENV['SEMIAN_SEMAPHORES_DISABLED']
15
+ end
6
16
  end
@@ -1,5 +1,3 @@
1
- require 'forwardable'
2
-
3
1
  module Semian
4
2
  class ProtectedResource
5
3
  extend Forwardable
data/lib/semian/redis.rb CHANGED
@@ -1,4 +1,3 @@
1
- require 'semian'
2
1
  require 'semian/adapter'
3
2
  require 'redis'
4
3
 
@@ -3,7 +3,11 @@ module Semian
3
3
  attr_reader :tickets, :name
4
4
 
5
5
  def initialize(name, tickets:, permissions: 0660, timeout: 0)
6
- _initialize(name, tickets, permissions, timeout) if respond_to?(:_initialize)
6
+ if Semian.semaphores_enabled?
7
+ initialize_semaphore(name, tickets, permissions, timeout)
8
+ else
9
+ Semian.issue_disabled_semaphores_warning
10
+ end
7
11
  @name = name
8
12
  @tickets = tickets
9
13
  end
@@ -1,3 +1,3 @@
1
1
  module Semian
2
- VERSION = '0.4.3'
2
+ VERSION = '0.5.0'
3
3
  end
@@ -7,7 +7,7 @@ fi
7
7
 
8
8
  if which apt-get > /dev/null; then
9
9
  echo "Installing toxiproxy"
10
- wget -O /tmp/toxiproxy.deb https://github.com/Shopify/toxiproxy/releases/download/v2.0.0rc1/toxiproxy_2.0.0rc1_amd64.deb
10
+ wget -O /tmp/toxiproxy.deb https://github.com/Shopify/toxiproxy/releases/download/v2.0.0/toxiproxy_2.0.0_amd64.deb
11
11
  sudo dpkg -i /tmp/toxiproxy.deb
12
12
  sudo service toxiproxy start
13
13
  exit 0
data/semian.gemspec CHANGED
@@ -25,5 +25,5 @@ Gem::Specification.new do |s|
25
25
  s.add_development_dependency 'mysql2'
26
26
  s.add_development_dependency 'redis'
27
27
  s.add_development_dependency 'thin'
28
- s.add_development_dependency 'toxiproxy'
28
+ s.add_development_dependency 'toxiproxy', '~> 1.0.0'
29
29
  end
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- class TestCircuitBreaker < MiniTest::Unit::TestCase
3
+ class TestCircuitBreaker < Minitest::Test
4
4
  SomeError = Class.new(StandardError)
5
5
 
6
6
  def setup
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- class TestInstrumentation < MiniTest::Unit::TestCase
3
+ class TestInstrumentation < Minitest::Test
4
4
  def setup
5
5
  Semian.destroy(:testing) if Semian[:testing]
6
6
  Semian.register(:testing, tickets: 1, error_threshold: 1, error_timeout: 5, success_threshold: 1)
data/test/mysql2_test.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- class TestMysql2 < MiniTest::Unit::TestCase
3
+ class TestMysql2 < Minitest::Test
4
4
  ERROR_TIMEOUT = 5
5
5
  ERROR_THRESHOLD = 1
6
6
  SEMIAN_OPTIONS = {
@@ -2,7 +2,7 @@ require 'test_helper'
2
2
  require 'semian/net_http'
3
3
  require 'thin'
4
4
 
5
- class TestNetHTTP < MiniTest::Unit::TestCase
5
+ class TestNetHTTP < Minitest::Test
6
6
  class RackServer
7
7
  def self.call(env)
8
8
  response_code = env['REQUEST_URI'].delete("/")
data/test/redis_test.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- class TestRedis < MiniTest::Unit::TestCase
3
+ class TestRedis < Minitest::Test
4
4
  ERROR_TIMEOUT = 5
5
5
  ERROR_THRESHOLD = 1
6
6
  SEMIAN_OPTIONS = {
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- class TestResource < MiniTest::Unit::TestCase
3
+ class TestResource < Minitest::Test
4
4
  def setup
5
5
  Semian.destroy(:testing)
6
6
  rescue
data/test/semian_test.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- class TestSemian < MiniTest::Unit::TestCase
3
+ class TestSemian < Minitest::Test
4
4
  def setup
5
5
  Semian.destroy(:testing)
6
6
  rescue
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- class TestSimpleInteger < MiniTest::Unit::TestCase
3
+ class TestSimpleInteger < Minitest::Test
4
4
  CLASS = ::Semian::Simple::Integer
5
5
 
6
6
  def setup
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- class TestSimpleSlidingWindow < MiniTest::Unit::TestCase
3
+ class TestSimpleSlidingWindow < Minitest::Test
4
4
  CLASS = ::Semian::Simple::SlidingWindow
5
5
 
6
6
  def setup
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- class TestSimpleEnum < MiniTest::Unit::TestCase
3
+ class TestSimpleEnum < Minitest::Test
4
4
  CLASS = ::Semian::Simple::State
5
5
 
6
6
  def setup
data/test/test_helper.rb CHANGED
@@ -28,6 +28,6 @@ Toxiproxy.populate([
28
28
  },
29
29
  ])
30
30
 
31
- class MiniTest::Unit::TestCase
31
+ class Minitest::Test
32
32
  include BackgroundHelper
33
33
  end
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- class UnprotectedResourceTest < MiniTest::Unit::TestCase
3
+ class UnprotectedResourceTest < Minitest::Test
4
4
  def setup
5
5
  @resource = Semian::UnprotectedResource.new(:foo)
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: semian
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Francis
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-05-10 00:00:00.000000000 Z
12
+ date: 2016-05-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake-compiler
@@ -113,16 +113,16 @@ dependencies:
113
113
  name: toxiproxy
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
- - - ">="
116
+ - - "~>"
117
117
  - !ruby/object:Gem::Version
118
- version: '0'
118
+ version: 1.0.0
119
119
  type: :development
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
- - - ">="
123
+ - - "~>"
124
124
  - !ruby/object:Gem::Version
125
- version: '0'
125
+ version: 1.0.0
126
126
  description: |2
127
127
  A Ruby C extention that is used to control access to shared resources
128
128
  across process boundaries with SysV semaphores.