xunch 0.0.10.3 → 0.0.11

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: 7a823df55ee04eec6dd9cb198b9219d633228e58
4
- data.tar.gz: 8ef44351fd2de4129f2060918fdef8754d31bb41
3
+ metadata.gz: 9a0afe0ef5426b25109b7d7b53635235ca52eccc
4
+ data.tar.gz: 62a5467a1f9ee1b4dc03e98db8ac522ea0b8d11f
5
5
  SHA512:
6
- metadata.gz: 36e5ac51f6ca81bb02baece72e0bf7e6720723d843df6d7d0d748bf9bfcf12846f19a9053fe70a483d5a9cbae236cbb2f2917a4cf7e045dd8f633738451d7a6e
7
- data.tar.gz: e05efd775ea4e6b4811b0e37f48197184812dcd098350a543c16279014d4643ea6203226cd3f7f455c8f6deaea354c18032cbd535e6540515dfb25db2dd1eaf7
6
+ metadata.gz: 0698d73d427538458e290f381dc378de21ebd5500e662ddeaa43a18f4d88266feefa3bdb210d2ffdef7b0480f06e64cc940e341769bfc443c175325c83cb10af
7
+ data.tar.gz: 00fd358f5349aef1756ca282cb5359bc3506af2b547f86ef236c3faa3f673f0cf349150d3f99792f74582cb4682654a6fe17b53fa82017b315ccc5f971d55805
@@ -35,8 +35,18 @@ module Xunch
35
35
 
36
36
  protected
37
37
  def getCacheObjectKey(value)
38
- key = value.send(@options[:key_field_name])
39
- raise ArgumentError("value #{value} key field can not be nil.") unless key != nil
38
+ key = nil
39
+ @options[:key_field_name].each do |field|
40
+ v = value.send(field)
41
+ if v == nil
42
+ raise ArgumentError("value #{value} key field #{field} can not be nil.")
43
+ end
44
+ if key
45
+ key = key.concat("-").concat(v.to_s)
46
+ else
47
+ key = v.to_s
48
+ end
49
+ end
40
50
  key
41
51
  end
42
52
 
@@ -77,7 +87,7 @@ module Xunch
77
87
  end
78
88
 
79
89
  if(options["key_field_name"] != nil)
80
- key_field_name = options["key_field_name"]
90
+ key_field_name = options["key_field_name"].split(",")
81
91
  use_options.store(:key_field_name, key_field_name)
82
92
  end
83
93
 
@@ -1,5 +1,5 @@
1
1
  module Xunch
2
- # maintain a consistency hash ring
2
+ # maintain a consistency hash ring
3
3
  # this ring must be same as other language xunch sharded
4
4
  class Sharded
5
5
  include Murmurhash
@@ -47,4 +47,4 @@ module Xunch
47
47
  return key
48
48
  end
49
49
  end
50
- end
50
+ end
@@ -4,7 +4,7 @@ module Xunch
4
4
  array = field.split("_")
5
5
  field_mod = array[0]
6
6
  for i in 1 .. array.length-1 do
7
- field_mod << array[i].capitalize
7
+ field_mod << array[i].capitalize
8
8
  end
9
9
  field_mod.freeze
10
10
  end
@@ -20,5 +20,24 @@ module Xunch
20
20
  }
21
21
  formatted_fields
22
22
  end
23
+
24
+ #
25
+ # 在multi key field的场景下,提供的辅助方法来拼接出key
26
+ # @params fields an array of key filed value
27
+ #
28
+ def self.concat_key_field(fields)
29
+ key = nil
30
+ fields.each do |field|
31
+ if field == nil
32
+ raise ArgumentError("key field #{field} can not be nil.")
33
+ end
34
+ if key
35
+ key = key.concat("-").concat(field.to_s)
36
+ else
37
+ key = field.to_s
38
+ end
39
+ end
40
+ key
41
+ end
23
42
  end
24
43
  end
@@ -0,0 +1,259 @@
1
+ $:.unshift File.expand_path("../../lib", __FILE__)
2
+ $:.unshift File.expand_path("../../test", __FILE__)
3
+ require "test/unit"
4
+ require "xunch"
5
+ require 'yaml'
6
+ require 'test_helper'
7
+
8
+ class MultiKeyCacheTest < Test::Unit::TestCase
9
+ include Test::Unit::Assertions
10
+ def setup
11
+ super
12
+ root = File.expand_path("../..", __FILE__)
13
+ file = File.join(root, 'test/xunch2.yaml')
14
+ caches = Xunch::CacheBuilder.build(file)
15
+ @object_cache = caches["track"]
16
+ hash = TestHelper.build_objects
17
+ @cache_object = hash["object"]
18
+ @cache_objects = hash["objects"]
19
+ @keys = []
20
+ @cache_objects.each do |obj|
21
+ @keys.push("#{obj.id}-#{obj.track_id}")
22
+ end
23
+ puts "setup"
24
+ end
25
+
26
+ def test_get_set
27
+ puts "ObjectCacheTest test_get_set method start"
28
+ puts @cache_object.track_id.class.name
29
+ assert_equal('OK',@object_cache.put(@cache_object))
30
+ object = @object_cache.get("#{@cache_object.id}-#{@cache_object.track_id}")
31
+
32
+ # type assert
33
+ assert_equal(Time.name,object.created_at.class.name)
34
+ assert_equal(Time.name,object.updated_at.class.name)
35
+ assert_equal(Time.name,object.approved_at.class.name)
36
+ assert_equal(FalseClass.name,object.is_crawler.class.name)
37
+ assert_equal(TrueClass.name,object.is_public.class.name)
38
+ assert_equal(Fixnum.name,object.mp3size.class.name)
39
+ assert_equal(BigDecimal.name,object.longitude.class.name)
40
+ assert_equal(Fixnum.name,object.track_id.class.name)
41
+ assert_equal(String.name,object.play_path.class.name)
42
+
43
+ #value assert
44
+ assert_equal(@cache_object.track_id,object.track_id)
45
+ assert_equal(@cache_object.track_uid,object.track_uid)
46
+ assert_equal(@cache_object.track_upload_source,object.track_upload_source)
47
+ assert_equal(@cache_object.op_type,object.op_type)
48
+ assert_equal(@cache_object.is_publish,object.is_publish)
49
+ assert_equal(@cache_object.upload_source,object.upload_source)
50
+ assert_equal(@cache_object.uid,object.uid)
51
+ assert_equal(@cache_object.nickname,object.nickname)
52
+ assert_equal(@cache_object.avatar_path,object.avatar_path)
53
+ assert_equal(@cache_object.is_v,object.is_v)
54
+ assert_equal(@cache_object.human_category_id,object.human_category_id)
55
+ assert_equal(@cache_object.title,object.title)
56
+ assert_equal(@cache_object.intro,object.intro)
57
+ assert_equal(@cache_object.user_source,object.user_source)
58
+ assert_equal(@cache_object.category_id,object.category_id)
59
+ assert_equal(@cache_object.duration,object.duration)
60
+ assert_equal(@cache_object.play_path,object.play_path)
61
+ assert_equal(@cache_object.play_path_32,object.play_path_32)
62
+ assert_equal(@cache_object.play_path_64,object.play_path_64)
63
+ assert_equal(@cache_object.play_path_128,object.play_path_128)
64
+ assert_equal(@cache_object.transcode_state,object.transcode_state)
65
+ assert_equal(@cache_object.download_path,object.download_path)
66
+ assert_equal(@cache_object.cover_path,object.cover_path)
67
+ assert_equal(@cache_object.album_id,object.album_id)
68
+ assert_equal(@cache_object.album_title,object.album_title)
69
+ assert_equal(@cache_object.album_cover_path,object.album_cover_path)
70
+ assert_equal(@cache_object.tags,object.tags)
71
+ assert_equal(@cache_object.ignore_tags,object.ignore_tags)
72
+ assert_equal(@cache_object.extra_tags,object.extra_tags)
73
+ assert_equal(@cache_object.singer,object.singer)
74
+ assert_equal(@cache_object.singer_category,object.singer_category)
75
+ assert_equal(@cache_object.author,object.author)
76
+ assert_equal(@cache_object.composer,object.composer)
77
+ assert_equal(@cache_object.arrangement,object.arrangement)
78
+ assert_equal(@cache_object.post_production,object.post_production)
79
+ assert_equal(@cache_object.lyric_path,object.lyric_path)
80
+ assert_equal(@cache_object.language,object.language)
81
+ assert_equal(@cache_object.lyric,object.lyric)
82
+ assert_equal(@cache_object.resinger,object.resinger)
83
+ assert_equal(@cache_object.announcer,object.announcer)
84
+ assert_equal(@cache_object.is_public,object.is_public)
85
+ assert_equal(@cache_object.access_password,object.access_password)
86
+ assert_equal(@cache_object.allow_download,object.allow_download)
87
+ assert_equal(@cache_object.allow_comment,object.allow_comment)
88
+ assert_equal(@cache_object.is_crawler,object.is_crawler)
89
+ assert_equal(@cache_object.inet_aton_ip,object.inet_aton_ip)
90
+ assert_equal(@cache_object.longitude,object.longitude)
91
+ assert_equal(@cache_object.latitude,object.latitude)
92
+ assert_equal(@cache_object.music_category,object.music_category)
93
+ assert_equal(@cache_object.order_num,object.order_num)
94
+ assert_equal(@cache_object.is_pick,object.is_pick)
95
+ assert_equal(@cache_object.rich_intro,object.rich_intro)
96
+ assert_equal(@cache_object.short_intro,object.short_intro)
97
+ assert_equal(@cache_object.comment_content,object.comment_content)
98
+ assert_equal(@cache_object.comment_id,object.comment_id)
99
+ assert_equal(@cache_object.dig_status,object.dig_status)
100
+ assert_equal(@cache_object.approved_at,object.approved_at)
101
+ assert_equal(@cache_object.is_deleted,object.is_deleted)
102
+ assert_equal(@cache_object.mp3size,object.mp3size)
103
+ assert_equal(@cache_object.mp3size_32,object.mp3size_32)
104
+ assert_equal(@cache_object.mp3size_64,object.mp3size_64)
105
+ assert_equal(@cache_object.waveform,object.waveform)
106
+ assert_equal(@cache_object.upload_id,object.upload_id)
107
+ assert_equal(@cache_object.updated_at,object.updated_at)
108
+ assert_equal(@cache_object.created_at,object.created_at)
109
+ assert_equal(@cache_object.source_url,object.source_url)
110
+ assert_equal(@cache_object.status,object.status)
111
+ assert_equal(@cache_object.explore_height,object.explore_height)
112
+ assert_equal(@cache_object.id,object.id)
113
+ puts "ObjectCacheTest test_get_set method stop"
114
+ end
115
+
116
+ def test_get_set_benchmark
117
+ puts "ObjectCacheTest test_get_set_benchmark method start"
118
+ @object_cache.evict(1)
119
+ times = TestHelper::TIMES
120
+ start = Time.now
121
+ for i in 1 .. times do
122
+ @object_cache.put(@cache_object)
123
+ end
124
+ stop = Time.now
125
+ puts "#{times} times put operation total use #{stop-start} seconds"
126
+
127
+ start = Time.now
128
+ for i in 1 .. times do
129
+ @object_cache.get(1)
130
+ end
131
+ stop = Time.now
132
+ puts "#{times} times get operation total use #{stop-start} seconds"
133
+ puts "ObjectCacheTest test_get_set_benchmark method stop"
134
+ end
135
+
136
+ def test_mget_mset
137
+ puts "ObjectCacheTest test_mget_mset method start"
138
+ result = @object_cache.multi_put(@cache_objects)
139
+ for i in 0 .. result.length - 1 do
140
+ success = false
141
+ if result[i] == "OK" or result[i] == true
142
+ success = true
143
+ end
144
+ assert_equal(true,success)
145
+ end
146
+ objects = @object_cache.multi_get(@keys)
147
+ assert_equal(@cache_objects.length, objects.length)
148
+ for i in 0 .. @cache_objects.length - 1 do
149
+ assert_equal(Time.name,objects[i].created_at.class.name)
150
+ assert_equal(Time.name,objects[i].updated_at.class.name)
151
+ assert_equal(Time.name,objects[i].approved_at.class.name)
152
+ assert_equal(FalseClass.name,objects[i].is_crawler.class.name)
153
+ assert_equal(TrueClass.name,objects[i].is_public.class.name)
154
+ assert_equal(Fixnum.name,objects[i].mp3size.class.name)
155
+ assert_equal(BigDecimal.name,objects[i].longitude.class.name)
156
+ assert_equal(Fixnum.name,objects[i].track_id.class.name)
157
+ assert_equal(String.name,objects[i].play_path.class.name)
158
+
159
+ #VALUE assert
160
+ assert_equal(@cache_objects[i].track_id,objects[i].track_id)
161
+ assert_equal(@cache_objects[i].track_uid,objects[i].track_uid)
162
+ assert_equal(@cache_objects[i].track_upload_source,objects[i].track_upload_source)
163
+ assert_equal(@cache_objects[i].op_type,objects[i].op_type)
164
+ assert_equal(@cache_objects[i].is_publish,objects[i].is_publish)
165
+ assert_equal(@cache_objects[i].upload_source,objects[i].upload_source)
166
+ assert_equal(@cache_objects[i].uid,objects[i].uid)
167
+ assert_equal(@cache_objects[i].nickname,objects[i].nickname)
168
+ assert_equal(@cache_objects[i].avatar_path,objects[i].avatar_path)
169
+ assert_equal(@cache_objects[i].is_v,objects[i].is_v)
170
+ assert_equal(@cache_objects[i].human_category_id,objects[i].human_category_id)
171
+ assert_equal(@cache_objects[i].title,objects[i].title)
172
+ assert_equal(@cache_objects[i].intro,objects[i].intro)
173
+ assert_equal(@cache_objects[i].user_source,objects[i].user_source)
174
+ assert_equal(@cache_objects[i].category_id,objects[i].category_id)
175
+ assert_equal(@cache_objects[i].duration,objects[i].duration)
176
+ assert_equal(@cache_objects[i].play_path,objects[i].play_path)
177
+ assert_equal(@cache_objects[i].play_path_32,objects[i].play_path_32)
178
+ assert_equal(@cache_objects[i].play_path_64,objects[i].play_path_64)
179
+ assert_equal(@cache_objects[i].play_path_128,objects[i].play_path_128)
180
+ assert_equal(@cache_objects[i].transcode_state,objects[i].transcode_state)
181
+ assert_equal(@cache_objects[i].download_path,objects[i].download_path)
182
+ assert_equal(@cache_objects[i].cover_path,objects[i].cover_path)
183
+ assert_equal(@cache_objects[i].album_id,objects[i].album_id)
184
+ assert_equal(@cache_objects[i].album_title,objects[i].album_title)
185
+ assert_equal(@cache_objects[i].album_cover_path,objects[i].album_cover_path)
186
+ assert_equal(@cache_objects[i].tags,objects[i].tags)
187
+ assert_equal(@cache_objects[i].ignore_tags,objects[i].ignore_tags)
188
+ assert_equal(@cache_objects[i].extra_tags,objects[i].extra_tags)
189
+ assert_equal(@cache_objects[i].singer,objects[i].singer)
190
+ assert_equal(@cache_objects[i].singer_category,objects[i].singer_category)
191
+ assert_equal(@cache_objects[i].author,objects[i].author)
192
+ assert_equal(@cache_objects[i].composer,objects[i].composer)
193
+ assert_equal(@cache_objects[i].arrangement,objects[i].arrangement)
194
+ assert_equal(@cache_objects[i].post_production,objects[i].post_production)
195
+ assert_equal(@cache_objects[i].lyric_path,objects[i].lyric_path)
196
+ assert_equal(@cache_objects[i].language,objects[i].language)
197
+ assert_equal(@cache_objects[i].lyric,objects[i].lyric)
198
+ assert_equal(@cache_objects[i].resinger,objects[i].resinger)
199
+ assert_equal(@cache_objects[i].announcer,objects[i].announcer)
200
+ assert_equal(@cache_objects[i].is_public,objects[i].is_public)
201
+ assert_equal(@cache_objects[i].access_password,objects[i].access_password)
202
+ assert_equal(@cache_objects[i].allow_download,objects[i].allow_download)
203
+ assert_equal(@cache_objects[i].allow_comment,objects[i].allow_comment)
204
+ assert_equal(@cache_objects[i].is_crawler,objects[i].is_crawler)
205
+ assert_equal(@cache_objects[i].inet_aton_ip,objects[i].inet_aton_ip)
206
+ assert_equal(@cache_objects[i].longitude,objects[i].longitude)
207
+ assert_equal(@cache_objects[i].latitude,objects[i].latitude)
208
+ assert_equal(@cache_objects[i].music_category,objects[i].music_category)
209
+ assert_equal(@cache_objects[i].order_num,objects[i].order_num)
210
+ assert_equal(@cache_objects[i].is_pick,objects[i].is_pick)
211
+ assert_equal(@cache_objects[i].rich_intro,objects[i].rich_intro)
212
+ assert_equal(@cache_objects[i].short_intro,objects[i].short_intro)
213
+ assert_equal(@cache_objects[i].comment_content,objects[i].comment_content)
214
+ assert_equal(@cache_objects[i].comment_id,objects[i].comment_id)
215
+ assert_equal(@cache_objects[i].dig_status,objects[i].dig_status)
216
+ assert_equal(@cache_objects[i].approved_at,objects[i].approved_at)
217
+ assert_equal(@cache_objects[i].is_deleted,objects[i].is_deleted)
218
+ assert_equal(@cache_objects[i].mp3size,objects[i].mp3size)
219
+ assert_equal(@cache_objects[i].mp3size_32,objects[i].mp3size_32)
220
+ assert_equal(@cache_objects[i].mp3size_64,objects[i].mp3size_64)
221
+ assert_equal(@cache_objects[i].waveform,objects[i].waveform)
222
+ assert_equal(@cache_objects[i].upload_id,objects[i].upload_id)
223
+ assert_equal(@cache_objects[i].updated_at,objects[i].updated_at)
224
+ assert_equal(@cache_objects[i].created_at,objects[i].created_at)
225
+ assert_equal(@cache_objects[i].source_url,objects[i].source_url)
226
+ assert_equal(@cache_objects[i].status,objects[i].status)
227
+ assert_equal(@cache_objects[i].explore_height,objects[i].explore_height)
228
+ assert_equal(@cache_objects[i].id,objects[i].id)
229
+ end
230
+ puts "ObjectCacheTest test_mget_mset method stop"
231
+ end
232
+
233
+ def test_mget_mset_benchmark
234
+ puts "ObjectCacheTest test_mget_mset_benchmark method start"
235
+ @object_cache.batch_evict @keys
236
+
237
+ times = TestHelper::TIMES
238
+ start = Time.now
239
+ for i in 1 .. times do
240
+ @object_cache.multi_put(@cache_objects)
241
+ end
242
+ stop = Time.now
243
+ puts "#{times} times multi_put operation total use #{stop-start} seconds"
244
+
245
+ start = Time.now
246
+ for i in 1 .. times do
247
+ @object_cache.multi_get(@keys)
248
+ end
249
+ stop = Time.now
250
+ puts "#{times} times multi_get operation total use #{stop-start} seconds"
251
+ puts "ObjectCacheTest test_mget_mset_benchmark method stop"
252
+ end
253
+
254
+ def teardown
255
+ super
256
+ puts "teardown"
257
+ end
258
+ end
259
+
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xunch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10.3
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ted Wang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-01 00:00:00.000000000 Z
11
+ date: 2014-04-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -79,10 +79,12 @@ files:
79
79
  - test/list_field_object_cache_test.rb
80
80
  - test/list_id_cache_test.rb
81
81
  - test/list_object_cache_test.rb
82
+ - test/multi_key_test.rb
82
83
  - test/nginx_cache_helper_test.rb
83
84
  - test/object_cache_test.rb
84
85
  - test/rb_tree_test.rb
85
86
  - test/redis_client_test.rb
87
+ - test/shard_test.rb
86
88
  homepage: http://www.ximalaya.com
87
89
  licenses:
88
90
  - Apache License Version 2.0
@@ -119,7 +121,9 @@ test_files:
119
121
  - test/list_field_object_cache_test.rb
120
122
  - test/list_id_cache_test.rb
121
123
  - test/list_object_cache_test.rb
124
+ - test/multi_key_test.rb
122
125
  - test/nginx_cache_helper_test.rb
123
126
  - test/object_cache_test.rb
124
127
  - test/rb_tree_test.rb
125
128
  - test/redis_client_test.rb
129
+ - test/shard_test.rb