moneta 1.5.2 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES +12 -0
- data/CONTRIBUTORS +1 -0
- data/LICENSE +1 -1
- data/lib/active_support/cache/moneta_store.rb +32 -6
- data/lib/moneta/adapters/activerecord/backend.rb +50 -0
- data/lib/moneta/adapters/activerecord/v5_backend.rb +80 -0
- data/lib/moneta/adapters/activerecord.rb +50 -95
- data/lib/moneta/adapters/activesupportcache.rb +69 -14
- data/lib/moneta/adapters/client.rb +1 -1
- data/lib/moneta/adapters/hbase.rb +1 -1
- data/lib/moneta/adapters/redis.rb +2 -1
- data/lib/moneta/adapters/sequel/mysql.rb +6 -18
- data/lib/moneta/adapters/sequel/postgres_hstore.rb +8 -1
- data/lib/moneta/adapters/sqlite.rb +4 -2
- data/lib/moneta/adapters/tokyotyrant.rb +1 -1
- data/lib/moneta/adapters/yaml.rb +7 -1
- data/lib/moneta/pool.rb +16 -18
- data/lib/moneta/server.rb +9 -11
- data/lib/moneta/transformer/config.rb +4 -4
- data/lib/moneta/transformer.rb +4 -0
- data/lib/moneta/version.rb +1 -1
- metadata +9 -452
- data/.github/workflows/ruby.yml +0 -425
- data/.gitignore +0 -15
- data/.rspec +0 -4
- data/.rubocop.yml +0 -194
- data/.yardopts +0 -6
- data/Gemfile +0 -206
- data/feature_matrix.yaml +0 -227
- data/moneta.gemspec +0 -36
- data/script/benchmarks +0 -605
- data/script/contributors +0 -12
- data/script/memusage +0 -40
- data/script/parallel-tests +0 -82
- data/script/start-couchdb +0 -27
- data/script/start-hbase +0 -47
- data/script/start-services +0 -10
- data/script/travis-logs +0 -14
- data/script/update-feature-matrix +0 -148
- data/spec/active_support/cache_moneta_store_spec.rb +0 -282
- data/spec/features/concurrent_create.rb +0 -42
- data/spec/features/concurrent_increment.rb +0 -39
- data/spec/features/create.rb +0 -25
- data/spec/features/create_expires.rb +0 -19
- data/spec/features/default_expires.rb +0 -14
- data/spec/features/each_key.rb +0 -119
- data/spec/features/expires.rb +0 -296
- data/spec/features/features.rb +0 -16
- data/spec/features/increment.rb +0 -98
- data/spec/features/marshallable_key.rb +0 -43
- data/spec/features/marshallable_value.rb +0 -7
- data/spec/features/multiprocess.rb +0 -8
- data/spec/features/not_create.rb +0 -7
- data/spec/features/not_each_key.rb +0 -7
- data/spec/features/not_increment.rb +0 -13
- data/spec/features/not_persist.rb +0 -9
- data/spec/features/null.rb +0 -66
- data/spec/features/persist.rb +0 -14
- data/spec/features/returndifferent.rb +0 -9
- data/spec/features/returnsame.rb +0 -9
- data/spec/features/store.rb +0 -261
- data/spec/features/store_large.rb +0 -13
- data/spec/features/transform_value.rb +0 -44
- data/spec/features/transform_value_expires.rb +0 -41
- data/spec/helper.rb +0 -445
- data/spec/moneta/adapters/activerecord/adapter_activerecord_existing_connection_spec.rb +0 -62
- data/spec/moneta/adapters/activerecord/adapter_activerecord_spec.rb +0 -128
- data/spec/moneta/adapters/activerecord/standard_activerecord_spec.rb +0 -22
- data/spec/moneta/adapters/activerecord/standard_activerecord_with_expires_spec.rb +0 -28
- data/spec/moneta/adapters/activesupportcache/adapter_activesupportcache_spec.rb +0 -54
- data/spec/moneta/adapters/activesupportcache/adapter_activesupportcache_with_default_expires_spec.rb +0 -54
- data/spec/moneta/adapters/activesupportcache/standard_activesupportcache_spec.rb +0 -14
- data/spec/moneta/adapters/cassandra/adapter_cassandra_spec.rb +0 -17
- data/spec/moneta/adapters/cassandra/adapter_cassandra_with_default_expires_spec.rb +0 -18
- data/spec/moneta/adapters/cassandra/helper.rb +0 -18
- data/spec/moneta/adapters/cassandra/standard_cassandra_spec.rb +0 -18
- data/spec/moneta/adapters/client/adapter_client_spec.rb +0 -11
- data/spec/moneta/adapters/client/client_helper.rb +0 -25
- data/spec/moneta/adapters/client/standard_client_tcp_spec.rb +0 -23
- data/spec/moneta/adapters/client/standard_client_unix_spec.rb +0 -28
- data/spec/moneta/adapters/cookie/adapter_cookie_spec.rb +0 -7
- data/spec/moneta/adapters/couch/adapter_couch_spec.rb +0 -204
- data/spec/moneta/adapters/couch/standard_couch_spec.rb +0 -15
- data/spec/moneta/adapters/couch/standard_couch_with_expires_spec.rb +0 -19
- data/spec/moneta/adapters/datamapper/adapter_datamapper_spec.rb +0 -64
- data/spec/moneta/adapters/datamapper/standard_datamapper_spec.rb +0 -21
- data/spec/moneta/adapters/datamapper/standard_datamapper_with_expires_spec.rb +0 -26
- data/spec/moneta/adapters/datamapper/standard_datamapper_with_repository_spec.rb +0 -22
- data/spec/moneta/adapters/daybreak/adapter_daybreak_spec.rb +0 -7
- data/spec/moneta/adapters/daybreak/standard_daybreak_spec.rb +0 -7
- data/spec/moneta/adapters/daybreak/standard_daybreak_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/dbm/adapter_dbm_spec.rb +0 -7
- data/spec/moneta/adapters/dbm/standard_dbm_spec.rb +0 -7
- data/spec/moneta/adapters/dbm/standard_dbm_with_expires_spec.rb +0 -12
- data/spec/moneta/adapters/faraday_helper.rb +0 -10
- data/spec/moneta/adapters/file/adapter_file_spec.rb +0 -7
- data/spec/moneta/adapters/file/standard_file_spec.rb +0 -7
- data/spec/moneta/adapters/file/standard_file_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/fog/adapter_fog_spec.rb +0 -16
- data/spec/moneta/adapters/fog/standard_fog_spec.rb +0 -15
- data/spec/moneta/adapters/fog/standard_fog_with_expires_spec.rb +0 -20
- data/spec/moneta/adapters/gdbm/adapter_gdbm_spec.rb +0 -7
- data/spec/moneta/adapters/gdbm/standard_gdbm_spec.rb +0 -7
- data/spec/moneta/adapters/gdbm/standard_gdbm_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/hashfile/standard_hashfile_spec.rb +0 -7
- data/spec/moneta/adapters/hashfile/standard_hashfile_with_expires_spec.rb +0 -12
- data/spec/moneta/adapters/hbase/adapter_hbase_spec.rb +0 -7
- data/spec/moneta/adapters/hbase/standard_hbase_spec.rb +0 -4
- data/spec/moneta/adapters/hbase/standard_hbase_with_expires_spec.rb +0 -8
- data/spec/moneta/adapters/kyotocabinet/adapter_kyotocabinet_spec.rb +0 -7
- data/spec/moneta/adapters/kyotocabinet/standard_kyotocabinet_spec.rb +0 -7
- data/spec/moneta/adapters/kyotocabinet/standard_kyotocabinet_with_expires_spec.rb +0 -14
- data/spec/moneta/adapters/leveldb/adapter_leveldb_spec.rb +0 -7
- data/spec/moneta/adapters/leveldb/standard_leveldb_spec.rb +0 -7
- data/spec/moneta/adapters/leveldb/standard_leveldb_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/lmdb/adapter_lmdb_spec.rb +0 -7
- data/spec/moneta/adapters/lmdb/adapter_lmdb_with_db_spec.rb +0 -7
- data/spec/moneta/adapters/lmdb/standard_lmdb_spec.rb +0 -7
- data/spec/moneta/adapters/lmdb/standard_lmdb_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/localmemcache/adapter_localmemcache_spec.rb +0 -7
- data/spec/moneta/adapters/localmemcache/standard_localmemcache_spec.rb +0 -7
- data/spec/moneta/adapters/localmemcache/standard_localmemcache_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/lruhash/adapter_lruhash_spec.rb +0 -118
- data/spec/moneta/adapters/lruhash/standard_lruhash_spec.rb +0 -4
- data/spec/moneta/adapters/lruhash/standard_lruhash_with_expires_spec.rb +0 -8
- data/spec/moneta/adapters/memcached/adapter_memcached_spec.rb +0 -13
- data/spec/moneta/adapters/memcached/dalli/adapter_memcached_dalli_spec.rb +0 -25
- data/spec/moneta/adapters/memcached/dalli/standard_memcached_dalli_spec.rb +0 -11
- data/spec/moneta/adapters/memcached/native/adapter_memcached_native_spec.rb +0 -25
- data/spec/moneta/adapters/memcached/native/standard_memcached_native_spec.rb +0 -11
- data/spec/moneta/adapters/memcached/standard_memcached_spec.rb +0 -17
- data/spec/moneta/adapters/memcached_helper.rb +0 -20
- data/spec/moneta/adapters/memory/adapter_memory_spec.rb +0 -7
- data/spec/moneta/adapters/memory/standard_memory_spec.rb +0 -4
- data/spec/moneta/adapters/memory/standard_memory_with_compress_spec.rb +0 -9
- data/spec/moneta/adapters/memory/standard_memory_with_expires_spec.rb +0 -8
- data/spec/moneta/adapters/memory/standard_memory_with_json_key_serializer_spec.rb +0 -4
- data/spec/moneta/adapters/memory/standard_memory_with_json_serializer_spec.rb +0 -9
- data/spec/moneta/adapters/memory/standard_memory_with_json_value_serializer_spec.rb +0 -9
- data/spec/moneta/adapters/memory/standard_memory_with_prefix_spec.rb +0 -41
- data/spec/moneta/adapters/memory/standard_memory_with_snappy_compress_spec.rb +0 -9
- data/spec/moneta/adapters/mongo/adapter_mongo_spec.rb +0 -41
- data/spec/moneta/adapters/mongo/adapter_mongo_with_default_expires_spec.rb +0 -14
- data/spec/moneta/adapters/mongo/standard_mongo_spec.rb +0 -7
- data/spec/moneta/adapters/null/null_adapter_spec.rb +0 -7
- data/spec/moneta/adapters/null/standard_null_spec.rb +0 -9
- data/spec/moneta/adapters/pstore/adapter_pstore_spec.rb +0 -7
- data/spec/moneta/adapters/pstore/standard_pstore_spec.rb +0 -9
- data/spec/moneta/adapters/pstore/standard_pstore_with_expires_spec.rb +0 -13
- data/spec/moneta/adapters/redis/adapter_redis_spec.rb +0 -20
- data/spec/moneta/adapters/redis/standard_redis_spec.rb +0 -14
- data/spec/moneta/adapters/restclient/adapter_restclient_spec.rb +0 -13
- data/spec/moneta/adapters/restclient/helper.rb +0 -12
- data/spec/moneta/adapters/restclient/standard_restclient_spec.rb +0 -13
- data/spec/moneta/adapters/riak/adapter_riak_spec.rb +0 -14
- data/spec/moneta/adapters/riak/standard_riak_spec.rb +0 -10
- data/spec/moneta/adapters/riak/standard_riak_with_expires_spec.rb +0 -14
- data/spec/moneta/adapters/sdbm/adapter_sdbm_spec.rb +0 -7
- data/spec/moneta/adapters/sdbm/standard_sdbm_spec.rb +0 -7
- data/spec/moneta/adapters/sdbm/standard_sdbm_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/sequel/adapter_sequel_spec.rb +0 -133
- data/spec/moneta/adapters/sequel/helper.rb +0 -83
- data/spec/moneta/adapters/sequel/standard_sequel_spec.rb +0 -8
- data/spec/moneta/adapters/sequel/standard_sequel_with_expires_spec.rb +0 -18
- data/spec/moneta/adapters/sqlite/adapter_sqlite_spec.rb +0 -7
- data/spec/moneta/adapters/sqlite/standard_sqlite_spec.rb +0 -7
- data/spec/moneta/adapters/sqlite/standard_sqlite_with_expires_spec.rb +0 -15
- data/spec/moneta/adapters/tdb/adapter_tdb_spec.rb +0 -7
- data/spec/moneta/adapters/tdb/standard_tdb_spec.rb +0 -7
- data/spec/moneta/adapters/tdb/standard_tdb_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/tokyocabinet/adapter_tokyocabinet_bdb_spec.rb +0 -7
- data/spec/moneta/adapters/tokyocabinet/adapter_tokyocabinet_hdb_spec.rb +0 -7
- data/spec/moneta/adapters/tokyocabinet/standard_tokyocabinet_spec.rb +0 -7
- data/spec/moneta/adapters/tokyocabinet/standard_tokyocabinet_with_expires_spec.rb +0 -11
- data/spec/moneta/adapters/tokyotyrant/adapter_tokyotyrant_spec.rb +0 -11
- data/spec/moneta/adapters/tokyotyrant/helper.rb +0 -12
- data/spec/moneta/adapters/tokyotyrant/standard_tokyotyrant_spec.rb +0 -7
- data/spec/moneta/adapters/tokyotyrant/standard_tokyotyrant_with_expires_spec.rb +0 -12
- data/spec/moneta/adapters/yaml/adapter_yaml_spec.rb +0 -7
- data/spec/moneta/adapters/yaml/standard_yaml_spec.rb +0 -9
- data/spec/moneta/adapters/yaml/standard_yaml_with_expires_spec.rb +0 -13
- data/spec/moneta/builder_spec.rb +0 -50
- data/spec/moneta/config_spec.rb +0 -219
- data/spec/moneta/mutex_spec.rb +0 -55
- data/spec/moneta/proxies/cache/cache_file_memory_spec.rb +0 -24
- data/spec/moneta/proxies/cache/cache_memory_null_spec.rb +0 -12
- data/spec/moneta/proxies/enumerable/enumerable_spec.rb +0 -26
- data/spec/moneta/proxies/expires/expires_file_spec.rb +0 -28
- data/spec/moneta/proxies/expires/expires_memory_spec.rb +0 -15
- data/spec/moneta/proxies/expires/expires_memory_with_default_expires_spec.rb +0 -16
- data/spec/moneta/proxies/fallback/fallback_spec.rb +0 -42
- data/spec/moneta/proxies/lock/lock_spec.rb +0 -10
- data/spec/moneta/proxies/optionmerger/optionmerger_spec.rb +0 -96
- data/spec/moneta/proxies/pool/pool_spec.rb +0 -353
- data/spec/moneta/proxies/proxy/proxy_expires_memory_spec.rb +0 -16
- data/spec/moneta/proxies/shared/shared_tcp_spec.rb +0 -59
- data/spec/moneta/proxies/shared/shared_unix_spec.rb +0 -58
- data/spec/moneta/proxies/transformer/transformer_bencode_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_bert_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_bson_spec.rb +0 -25
- data/spec/moneta/proxies/transformer/transformer_bzip2_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_json_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_key_inspect_spec.rb +0 -17
- data/spec/moneta/proxies/transformer/transformer_key_marshal_spec.rb +0 -17
- data/spec/moneta/proxies/transformer/transformer_key_to_s_spec.rb +0 -17
- data/spec/moneta/proxies/transformer/transformer_key_yaml_spec.rb +0 -17
- data/spec/moneta/proxies/transformer/transformer_lz4_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_lzma_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_lzo_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_marshal_base64_spec.rb +0 -20
- data/spec/moneta/proxies/transformer/transformer_marshal_city128_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_city32_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_city64_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_escape_spec.rb +0 -21
- data/spec/moneta/proxies/transformer/transformer_marshal_hex_spec.rb +0 -20
- data/spec/moneta/proxies/transformer/transformer_marshal_hmac_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_marshal_md5_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_md5_spread_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_prefix_base64_spec.rb +0 -33
- data/spec/moneta/proxies/transformer/transformer_marshal_prefix_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_qp_spec.rb +0 -20
- data/spec/moneta/proxies/transformer/transformer_marshal_rmd160_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_sha1_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_sha256_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_sha384_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_sha512_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_marshal_truncate_spec.rb +0 -15
- data/spec/moneta/proxies/transformer/transformer_marshal_urlsafe_base64_spec.rb +0 -20
- data/spec/moneta/proxies/transformer/transformer_marshal_uuencode_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_msgpack_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_ox_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_php_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_quicklz_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_snappy_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_tnet_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_value_marshal_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_value_yaml_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_yaml_spec.rb +0 -19
- data/spec/moneta/proxies/transformer/transformer_zlib_spec.rb +0 -19
- data/spec/moneta/proxies/weak_create/weak_create_spec.rb +0 -21
- data/spec/moneta/proxies/weak_each_key/weak_each_key_spec.rb +0 -22
- data/spec/moneta/proxies/weak_increment/weak_increment_spec.rb +0 -21
- data/spec/moneta/semaphore_spec.rb +0 -68
- data/spec/moneta/stack_file_memory_spec.rb +0 -15
- data/spec/moneta/stack_memory_file_spec.rb +0 -13
- data/spec/rack/cache_moneta_spec.rb +0 -355
- data/spec/rack/moneta_cookies_spec.rb +0 -83
- data/spec/rack/moneta_store_spec.rb +0 -83
- data/spec/rack/session_moneta_spec.rb +0 -350
- data/spec/restserver.rb +0 -44
- data/test/action_dispatch/fixtures/session_autoload_test/foo.rb +0 -10
- data/test/action_dispatch/session_moneta_store_test.rb +0 -204
@@ -9,21 +9,10 @@ module Moneta
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def increment(key, amount = 1, options = {})
|
12
|
-
@backend.transaction do
|
13
|
-
|
14
|
-
|
15
|
-
if row = @load_for_update.call(key: key)
|
16
|
-
# Integer() will raise an exception if the existing value cannot be parsed
|
17
|
-
amount += Integer(row[config.value_column])
|
18
|
-
@increment_update.call(key: key, value: amount)
|
19
|
-
else
|
20
|
-
@create.call(key: key, value: amount)
|
21
|
-
end
|
22
|
-
amount
|
12
|
+
@backend.transaction(retry_on: [::Sequel::SerializationFailure]) do
|
13
|
+
@increment.call(key: key, amount: amount)
|
14
|
+
Integer(load(key))
|
23
15
|
end
|
24
|
-
rescue ::Sequel::SerializationFailure # Thrown on deadlock
|
25
|
-
tries ||= 0
|
26
|
-
(tries += 1) <= 3 ? retry : raise
|
27
16
|
end
|
28
17
|
|
29
18
|
def merge!(pairs, options = {}, &block)
|
@@ -55,10 +44,9 @@ module Moneta
|
|
55
44
|
end
|
56
45
|
|
57
46
|
def prepare_increment
|
58
|
-
@
|
59
|
-
.
|
60
|
-
.prepare(:
|
61
|
-
super
|
47
|
+
@increment = @table
|
48
|
+
.on_duplicate_key_update(config.value_column => ::Sequel.cast(config.value_column, Integer) + :$amount)
|
49
|
+
.prepare(:insert, statement_id(:increment_insert), config.key_column => :$key, config.value_column => :$amount)
|
62
50
|
end
|
63
51
|
end
|
64
52
|
end
|
@@ -213,9 +213,16 @@ module Moneta
|
|
213
213
|
end
|
214
214
|
|
215
215
|
def prepare_values_at
|
216
|
+
# Sequel's hstore_ops gets confused if we try to construct this
|
217
|
+
# directly, because the CAST is not an array literal, or a PG array
|
218
|
+
lookup = ::Sequel::SQL::PlaceholderLiteralString.new(
|
219
|
+
['(', '->', ')'],
|
220
|
+
[config.value_column, ::Sequel.cast(:$keys, :"text[]")]
|
221
|
+
)
|
222
|
+
|
216
223
|
@values_at = @table
|
217
224
|
.where(config.key_column => :$row)
|
218
|
-
.select(
|
225
|
+
.select(lookup.as(:values))
|
219
226
|
.prepare(:first, statement_id(:hstore_values_at))
|
220
227
|
end
|
221
228
|
|
@@ -148,8 +148,10 @@ module Moneta
|
|
148
148
|
pairs = pairs.to_a
|
149
149
|
end
|
150
150
|
|
151
|
-
|
152
|
-
|
151
|
+
unless pairs.empty?
|
152
|
+
query = "replace into #{config.table} (k, v) values" + (['(?, ?)'] * pairs.length).join(',')
|
153
|
+
backend.query(query, pairs.flatten).close
|
154
|
+
end
|
153
155
|
rescue
|
154
156
|
backend.rollback if transaction
|
155
157
|
raise
|
data/lib/moneta/adapters/yaml.rb
CHANGED
@@ -5,7 +5,13 @@ module Moneta
|
|
5
5
|
# YAML::Store backend
|
6
6
|
# @api public
|
7
7
|
class YAML < PStore
|
8
|
-
|
8
|
+
# @!method initialize(options = {})
|
9
|
+
# @param [Hash] options
|
10
|
+
# @option options [YAML::Store] :backend YAML store to use
|
11
|
+
# @option options [String] :file YAML file to open - required unless using :backend
|
12
|
+
# @option options [Boolean] :threadsafe (false) Makes the YAML store thread-safe
|
13
|
+
# @option options Other options passed to `YAML::Store#new`
|
14
|
+
backend { |file:, threadsafe: false, **options| ::YAML::Store.new(file, threadsafe, options) }
|
9
15
|
end
|
10
16
|
end
|
11
17
|
end
|
data/lib/moneta/pool.rb
CHANGED
@@ -123,30 +123,28 @@ module Moneta
|
|
123
123
|
|
124
124
|
def run
|
125
125
|
Thread.new do
|
126
|
-
|
127
|
-
populate_stores
|
126
|
+
populate_stores
|
128
127
|
|
129
|
-
|
130
|
-
|
128
|
+
until @stopping && @stores.empty?
|
129
|
+
loop_start = Time.now
|
131
130
|
|
132
|
-
|
133
|
-
|
131
|
+
# Block until a message arrives, or until we time out for some reason
|
132
|
+
request = pop
|
134
133
|
|
135
|
-
|
136
|
-
|
134
|
+
# Record how long we were idle, for stats purposes
|
135
|
+
@idle_time = Time.now - loop_start
|
137
136
|
|
138
|
-
|
139
|
-
|
137
|
+
# If a message arrived, handle it
|
138
|
+
handle_request(request) if request
|
140
139
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
end
|
146
|
-
rescue => e
|
147
|
-
reject_waiting(e.message)
|
148
|
-
raise
|
140
|
+
# Handle any stale checkout requests
|
141
|
+
handle_timed_out_requests
|
142
|
+
# Drop any stores that are no longer needed
|
143
|
+
remove_unneeded_stores
|
149
144
|
end
|
145
|
+
rescue => e
|
146
|
+
reject_waiting(e.message)
|
147
|
+
raise
|
150
148
|
end
|
151
149
|
end
|
152
150
|
|
data/lib/moneta/server.rb
CHANGED
@@ -60,7 +60,7 @@ module Moneta
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def read_msg
|
63
|
-
size = read(4).
|
63
|
+
size = read(4).unpack1('N')
|
64
64
|
throw :closed, 'Message too big' if size > @max_size
|
65
65
|
Marshal.load(read(size))
|
66
66
|
end
|
@@ -107,16 +107,14 @@ module Moneta
|
|
107
107
|
|
108
108
|
# Detect support for socket#sendmsg_nonblock
|
109
109
|
Socket.new(Socket::AF_INET, Socket::SOCK_STREAM).tap do |socket|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
@io.write_nonblock(msg)
|
119
|
-
end
|
110
|
+
socket.sendmsg_nonblock('probe')
|
111
|
+
rescue Errno::EPIPE, Errno::ENOTCONN
|
112
|
+
def sendmsg(msg)
|
113
|
+
@io.sendmsg_nonblock(msg)
|
114
|
+
end
|
115
|
+
rescue NotImplementedError
|
116
|
+
def sendmsg(msg)
|
117
|
+
@io.write_nonblock(msg)
|
120
118
|
end
|
121
119
|
end
|
122
120
|
|
@@ -20,7 +20,7 @@ module Moneta
|
|
20
20
|
snappy: [ :compress, '::Snappy.inflate(%s)', '::Snappy.deflate(%s)', 'snappy' ],
|
21
21
|
quicklz: [ :compress, '::QuickLZ.decompress(%s)', '::QuickLZ.compress(%s)', 'qlzruby' ],
|
22
22
|
zlib: [ :compress, '::Zlib::Inflate.inflate(%s)', '::Zlib::Deflate.deflate(%s)', 'zlib' ],
|
23
|
-
base64: [ :encode, "%s.
|
23
|
+
base64: [ :encode, "%s.unpack1('m0')", "[%s].pack('m0')" ],
|
24
24
|
urlsafe_base64: [
|
25
25
|
:encode,
|
26
26
|
'Base64.urlsafe_decode64(%s)',
|
@@ -28,9 +28,9 @@ module Moneta
|
|
28
28
|
'base64'
|
29
29
|
],
|
30
30
|
escape: [ :encode, 'Helper.unescape(%s)', 'Helper.escape(%s)' ],
|
31
|
-
hex: [ :encode, "[%s].pack('H*')", "%s.
|
32
|
-
qp: [ :encode, "%s.
|
33
|
-
uuencode: [ :encode, "%s.
|
31
|
+
hex: [ :encode, "[%s].pack('H*')", "%s.unpack1('H*')" ],
|
32
|
+
qp: [ :encode, "%s.unpack1('M')", "[%s].pack('M')" ],
|
33
|
+
uuencode: [ :encode, "%s.unpack1('u')", "[%s].pack('u')" ],
|
34
34
|
hmac: [
|
35
35
|
:hmac,
|
36
36
|
'Helper.hmacverify(%s, options[:secret] || @secret)',
|
data/lib/moneta/transformer.rb
CHANGED
@@ -141,6 +141,8 @@ module Moneta
|
|
141
141
|
end
|
142
142
|
def merge!(pairs, options = {})
|
143
143
|
keys, values = pairs.to_a.transpose
|
144
|
+
keys ||= []
|
145
|
+
values ||= []
|
144
146
|
t_keys = keys.map { |key| #{key} }
|
145
147
|
block = if block_given?
|
146
148
|
key_lookup = Hash[t_keys.zip(keys)]
|
@@ -296,6 +298,8 @@ module Moneta
|
|
296
298
|
end
|
297
299
|
def merge!(pairs, options = {})
|
298
300
|
keys, values = pairs.to_a.transpose
|
301
|
+
keys ||= []
|
302
|
+
values ||= []
|
299
303
|
t_keys = keys.map { |key| #{key} }
|
300
304
|
key_lookup = Hash[t_keys.zip(keys)]
|
301
305
|
|
data/lib/moneta/version.rb
CHANGED