joshbuddy-tokyo_cache_cow 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -68,12 +68,17 @@ But <i>other_key</i> is still peachy.
68
68
 
69
69
  >> tokyo_cache_cow --help
70
70
 
71
- --------------
72
-
73
71
  Usage: tokyo_cache_cow [options]
74
- -p, --port[OPTIONAL] Port (default: 11211)
75
- -h, --host[OPTIONAL] Host (default: 0.0.0.0)
76
- --help Show this help message.
72
+ Options:
73
+ -p, --port[OPTIONAL] Port (default: 11211)
74
+ -a, --address[OPTIONAL] Address (default: 0.0.0.0)
75
+ -c, --class[OPTIONAL] Cache provider class (default: TokyoCacheCow::Cache::TokyoCabinetMemcache)
76
+ -r, --require[OPTIONAL] require
77
+ -f, --file[OPTIONAL] File (default: /tmp/tcc-cache)
78
+ -d, --daemonize[OPTIONAL] Daemonize (default: false)
79
+ -P, --pid[OPTIONAL] Pid file (default: /tmp/tcc.pid)
80
+ -m, --matcher[OPTIONAL] Special flag for doing matched deletes (not enabled by default)
81
+ -h, --help Show this help message.
77
82
 
78
83
  === Client
79
84
 
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :minor: 0
3
- :patch: 2
3
+ :patch: 3
4
4
  :major: 0
@@ -68,8 +68,23 @@ class TokyoCacheCow
68
68
  end
69
69
  end
70
70
 
71
+ def set_incomplete(ss, length, part)
72
+ if ss.rest.size < length
73
+ if @body
74
+ @body << ss.string
75
+ else
76
+ @body = part
77
+ @body << ss.rest
78
+ end
79
+ true
80
+ else
81
+ false
82
+ end
83
+ end
84
+
71
85
  def receive_data(data)
72
- ss = StringScanner.new(data)
86
+ ss = StringScanner.new(@body ? @body << data : data)
87
+
73
88
  while part = ss.scan_until(TerminatorRegex)
74
89
  begin
75
90
  command_argument_separator_index = part.index(/\s/)
@@ -95,32 +110,46 @@ class TokyoCacheCow
95
110
  SetCommand.match(args) or (send_client_error and next)
96
111
  (key, flags, expires, bytes, noreply) = [$1, Integer($2), Integer($3), Integer($4), !$5.nil?]
97
112
  next unless validate_key(key)
113
+ if ss.rest.size < bytes
114
+ @bytes_left = bytes - ss.rest.size
115
+ end
116
+
117
+ return if set_incomplete(ss, bytes, part)
98
118
  send_data(@cache.set(key, ss.rest[0, bytes.to_i], :flags => flags, :expires => expires) ?
99
119
  StoredReply : NotStoredReply)
120
+ @body = nil
100
121
  ss.pos += bytes + 2
101
122
  when 'add'
102
123
  SetCommand.match(args)
103
124
  (key, flags, expires, bytes, noreply) = [$1, $2.to_i, $3.to_i, $4, !$5.nil?]
125
+ return if set_incomplete(ss, bytes, part)
104
126
  send_data(@cache.add(key, ss.rest[0, bytes.to_i], :flags => flags, :expires => expires) ?
105
127
  StoredReply : NotStoredReply)
128
+ @body = nil
106
129
  ss.pos += bytes + 2
107
130
  when 'replace'
108
131
  SetCommand.match(args)
109
132
  (key, flags, expires, bytes, noreply) = [$1, $2.to_i, $3.to_i, $4, !$5.nil?]
133
+ return if set_incomplete(ss, bytes, part)
110
134
  send_data(@cache.replace(key, ss.rest[0, bytes.to_i], :flags => flags, :expires => expires) ?
111
135
  StoredReply : NotStoredReply)
136
+ @body = nil
112
137
  ss.pos += bytes + 2
113
138
  when 'append'
114
139
  SetCommand.match(args)
115
140
  (key, flags, expires, bytes, noreply) = [$1, $2.to_i, $3.to_i, $4, !$5.nil?]
141
+ return if set_incomplete(ss, bytes, part)
116
142
  send_data(@cache.append(key, ss.rest[0, bytes.to_i], :flags => flags, :expires => expires) ?
117
143
  StoredReply : NotStoredReply)
144
+ @body = nil
118
145
  ss.pos += bytes + 2
119
146
  when 'prepend'
120
147
  SetCommand.match(args)
121
148
  (key, flags, expires, bytes, noreply) = [$1, $2.to_i, $3.to_i, $4, !$5.nil?]
149
+ return if set_incomplete(ss, bytes, part)
122
150
  send_data(@cache.prepend(key, ss.rest[0, bytes.to_i], :flags => flags, :expires => expires) ?
123
151
  StoredReply : NotStoredReply)
152
+ @body = nil
124
153
  ss.pos += bytes + 2
125
154
  when 'cas'
126
155
  # do something
@@ -173,6 +202,8 @@ class TokyoCacheCow
173
202
  send_data(Error)
174
203
  end
175
204
  rescue
205
+ puts $!
206
+ puts $!.backtrace
176
207
  send_server_error($!)
177
208
  end
178
209
  end
@@ -18,8 +18,8 @@ describe 'memcache server' do
18
18
  end
19
19
 
20
20
  it "should get & set" do
21
- cache.set('asd', "qweqweasd")
22
- cache.get('asd').should == "qweqweasd"
21
+ cache.set('asd', "qweqweasd" * 2000)
22
+ cache.get('asd').should == "qweqweasd" * 2000
23
23
  end
24
24
 
25
25
  it "should delete" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: joshbuddy-tokyo_cache_cow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Hull
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-04-30 00:00:00 -07:00
12
+ date: 2009-05-14 00:00:00 -07:00
13
13
  default_executable: tokyo_cache_cow
14
14
  dependencies: []
15
15