Module: Dogtag
- Extended by:
- Mixins::Redis
- Defined in:
- lib/dogtag.rb,
lib/dogtag/id.rb,
lib/dogtag/request.rb,
lib/dogtag/version.rb,
lib/dogtag/response.rb,
lib/dogtag/generator.rb,
lib/dogtag/timestamp.rb,
lib/dogtag/lua_script.rb,
lib/dogtag/mixins/redis.rb
Defined Under Namespace
Modules: LuaScript, Mixins Classes: Generator, Id, Request, Response, Timestamp
Constant Summary collapse
- CUSTOM_EPOCH =
in milliseconds
1483228800000
- TIMESTAMP_BITS =
40
- LOGICAL_SHARD_ID_BITS =
5
- DATA_TYPE_BITS =
8
- SEQUENCE_BITS =
10
- MIN_LOGICAL_SHARD_ID =
0
- MAX_LOGICAL_SHARD_ID =
~(-1 << LOGICAL_SHARD_ID_BITS)
- LOGICAL_SHARD_ID_ALLOWED_RANGE =
(MIN_LOGICAL_SHARD_ID..MAX_LOGICAL_SHARD_ID).freeze
- MIN_DATA_TYPE =
0
- MAX_DATA_TYPE =
~(-1 << DATA_TYPE_BITS)
- DATA_TYPE_ALLOWED_RANGE =
(MIN_DATA_TYPE..MAX_DATA_TYPE).freeze
- MAX_SEQUENCE =
~(-1 << SEQUENCE_BITS)
- SEQUENCE_SHIFT =
0
- DATA_TYPE_SHIFT =
SEQUENCE_BITS
- LOGICAL_SHARD_ID_SHIFT =
SEQUENCE_BITS + DATA_TYPE_BITS
- TIMESTAMP_SHIFT =
SEQUENCE_BITS + DATA_TYPE_BITS + LOGICAL_SHARD_ID_BITS
- LOGICAL_SHARD_ID_RANGE_KEY =
'dogtag-generator-logical-shard-id-range'.freeze
- VERSION =
'1.2.0'.freeze
Constants included from Mixins::Redis
Mixins::Redis::DEFAULT_REDIS_URL
Class Method Summary collapse
- .generate_id(data_type) ⇒ Object
- .generate_ids(data_type, count) ⇒ Object
- .logical_shard_id_range=(logical_shard_id_range) ⇒ Object
Methods included from Mixins::Redis
Class Method Details
.generate_id(data_type) ⇒ Object
49 50 51 |
# File 'lib/dogtag.rb', line 49 def self.generate_id(data_type) Generator.new(data_type, 1).ids.first end |
.generate_ids(data_type, count) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/dogtag.rb', line 53 def self.generate_ids(data_type, count) ids = [] # The Lua script can't always return as many IDs as you may want. So we loop # until we have the exact amount. while ids.length < count initial_id_count = ids.length ids += Generator.new(data_type, count - ids.length).ids # Ensure the ids array keeps growing as infinite loop insurance return ids unless ids.length > initial_id_count end ids end |
.logical_shard_id_range=(logical_shard_id_range) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/dogtag.rb', line 31 def self.logical_shard_id_range=(logical_shard_id_range) unless logical_shard_id_range.is_a? Range raise ArgumentError, 'logical_shard_id_range must be a range' end unless (Dogtag::LOGICAL_SHARD_ID_ALLOWED_RANGE.to_a & logical_shard_id_range.to_a) == logical_shard_id_range.to_a raise ArgumentError, "logical_shard_id_range is outside the allowed range of #{Dogtag::LOGICAL_SHARD_ID_ALLOWED_RANGE}" end if redis.exists LOGICAL_SHARD_ID_RANGE_KEY redis.lset LOGICAL_SHARD_ID_RANGE_KEY, 0, logical_shard_id_range.min redis.lset LOGICAL_SHARD_ID_RANGE_KEY, 1, logical_shard_id_range.max else redis.rpush LOGICAL_SHARD_ID_RANGE_KEY, logical_shard_id_range.min redis.rpush LOGICAL_SHARD_ID_RANGE_KEY, logical_shard_id_range.max end end |