semian 0.4.3 → 0.5.0

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.
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.