protobuf 2.4.2 → 2.4.3.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/protobuf/message.rb +11 -17
- data/lib/protobuf/message/decoder.rb +1 -2
- data/lib/protobuf/rpc/buffer.rb +1 -1
- data/lib/protobuf/rpc/connectors/common.rb +2 -2
- data/lib/protobuf/rpc/server.rb +0 -1
- data/lib/protobuf/rpc/servers/zmq/worker.rb +1 -1
- data/lib/protobuf/version.rb +1 -1
- data/spec/benchmark/tasks.rb +11 -0
- data/spec/lib/protobuf/message_spec.rb +2 -4
- metadata +5 -9
- data/lib/protobuf/message/extend.rb +0 -8
data/lib/protobuf/message.rb
CHANGED
@@ -129,7 +129,7 @@ module Protobuf
|
|
129
129
|
|
130
130
|
def clear!
|
131
131
|
@values.delete_if do |_, value|
|
132
|
-
if value.is_a?(Field::FieldArray)
|
132
|
+
if value.is_a?(::Protobuf::Field::FieldArray)
|
133
133
|
value.clear
|
134
134
|
false
|
135
135
|
else
|
@@ -225,15 +225,17 @@ module Protobuf
|
|
225
225
|
(self.__send__(key).present? || [true, false].include?(self.__send__(key)))
|
226
226
|
end
|
227
227
|
|
228
|
-
def
|
228
|
+
def serialize_to_string
|
229
|
+
stream = ""
|
230
|
+
|
229
231
|
each_field_for_serialization do |field, value|
|
230
232
|
if field.repeated?
|
231
233
|
if field.packed?
|
232
234
|
key = (field.tag << 3) | ::Protobuf::WireType::LENGTH_DELIMITED
|
233
235
|
packed_value = value.map { |val| field.encode(val) }.join
|
234
|
-
stream
|
235
|
-
stream
|
236
|
-
stream
|
236
|
+
stream << ::Protobuf::Field::VarintField.encode(key)
|
237
|
+
stream << ::Protobuf::Field::VarintField.encode(packed_value.size)
|
238
|
+
stream << packed_value
|
237
239
|
else
|
238
240
|
value.each { |val| write_pair(stream, field, val) }
|
239
241
|
end
|
@@ -241,14 +243,8 @@ module Protobuf
|
|
241
243
|
write_pair(stream, field, value)
|
242
244
|
end
|
243
245
|
end
|
244
|
-
end
|
245
246
|
|
246
|
-
|
247
|
-
io = StringIO.new(string)
|
248
|
-
serialize_to(io)
|
249
|
-
result = io.string
|
250
|
-
result.force_encoding(::Protobuf::Message::STRING_ENCODING) if result.respond_to?(:force_encoding)
|
251
|
-
result
|
247
|
+
return stream
|
252
248
|
end
|
253
249
|
|
254
250
|
def set_field(tag, bytes)
|
@@ -329,7 +325,7 @@ module Protobuf
|
|
329
325
|
|
330
326
|
object.__send__(:initialize)
|
331
327
|
@values.each do |name, value|
|
332
|
-
if value.is_a?(Field::FieldArray)
|
328
|
+
if value.is_a?(::Protobuf::Field::FieldArray)
|
333
329
|
object.__send__(name).replace(value.map {|v| duplicate.call(v)})
|
334
330
|
else
|
335
331
|
object.__send__("#{name}=", duplicate.call(value))
|
@@ -352,10 +348,8 @@ module Protobuf
|
|
352
348
|
# Encode key and value, and write to +stream+.
|
353
349
|
def write_pair(stream, field, value)
|
354
350
|
key = (field.tag << 3) | field.wire_type
|
355
|
-
|
356
|
-
stream.
|
357
|
-
bytes = field.encode(value)
|
358
|
-
stream.write(bytes)
|
351
|
+
stream << ::Protobuf::Field::VarintField.encode(key)
|
352
|
+
stream << field.encode(value)
|
359
353
|
end
|
360
354
|
|
361
355
|
end
|
@@ -43,10 +43,9 @@ module Protobuf
|
|
43
43
|
|
44
44
|
# Read varint integer value from +stream+.
|
45
45
|
def read_varint(stream)
|
46
|
-
read_method = stream.respond_to?(:readbyte) ? :readbyte : :readchar
|
47
46
|
value = index = 0
|
48
47
|
begin
|
49
|
-
byte = stream.
|
48
|
+
byte = stream.readbyte
|
50
49
|
value |= (byte & 0x7f) << (7 * index)
|
51
50
|
index += 1
|
52
51
|
end while (byte & 0x80).nonzero?
|
data/lib/protobuf/rpc/buffer.rb
CHANGED
@@ -104,10 +104,10 @@ module Protobuf
|
|
104
104
|
def rpc_request_data
|
105
105
|
validate_request_type
|
106
106
|
|
107
|
-
return Protobuf::Socketrpc::Request.new(
|
107
|
+
return ::Protobuf::Socketrpc::Request.new(
|
108
108
|
:service_name => @options[:service].name,
|
109
109
|
:method_name => @options[:method].to_s,
|
110
|
-
:request_proto => @options[:request]
|
110
|
+
:request_proto => @options[:request]
|
111
111
|
).serialize_to_string
|
112
112
|
rescue => e
|
113
113
|
fail(:INVALID_REQUEST_PROTO, "Could not set request proto: #{e.message}")
|
data/lib/protobuf/rpc/server.rb
CHANGED
@@ -49,7 +49,7 @@ module Protobuf
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def send_data
|
52
|
-
response_data = @response.
|
52
|
+
response_data = @response.to_s # to_s is aliases as serialize_to_string in Message
|
53
53
|
@stats.response_size = response_data.size
|
54
54
|
zmq_error_check(@socket.send_string(response_data))
|
55
55
|
end
|
data/lib/protobuf/version.rb
CHANGED
data/spec/benchmark/tasks.rb
CHANGED
@@ -140,6 +140,17 @@ namespace :benchmark do
|
|
140
140
|
puts args[:profile_output]
|
141
141
|
end
|
142
142
|
|
143
|
+
desc "benchmark Protobuf Message #serialize"
|
144
|
+
task :profile_protobuf_serialize, [:number, :profile_output] do |t, args|
|
145
|
+
args.with_defaults(:number => 1000, :profile_output => "/tmp/profiler_new_#{Time.now.to_i}")
|
146
|
+
create_params = { :name => "The name that we set", :date_created => Time.now.to_i, :status => 2 }
|
147
|
+
::PerfTools::CpuProfiler.start(args[:profile_output]) do
|
148
|
+
args[:number].to_i.times { Test::Resource.new(create_params).serialize }
|
149
|
+
end
|
150
|
+
|
151
|
+
puts args[:profile_output]
|
152
|
+
end
|
153
|
+
|
143
154
|
desc "benchmark EventMachine client with EventMachine server"
|
144
155
|
task :em_client_em_server, [:number, :length] do |t, args|
|
145
156
|
args.with_defaults(:number => 1000, :length => 100)
|
@@ -23,23 +23,21 @@ describe Protobuf::Message do
|
|
23
23
|
describe '#encode' do
|
24
24
|
context "when there's no value for a required field" do
|
25
25
|
let(:message) { ::Test::Resource.new }
|
26
|
-
let(:stream) { StringIO.new }
|
27
26
|
|
28
27
|
it "raises a 'message not initialized' error" do
|
29
28
|
expect {
|
30
|
-
message.
|
29
|
+
message.serialize_to_string
|
31
30
|
}.to raise_error(Protobuf::SerializationError, /required/i)
|
32
31
|
end
|
33
32
|
end
|
34
33
|
|
35
34
|
context "repeated fields" do
|
36
35
|
let(:message) { ::Test::Resource.new(:name => "something") }
|
37
|
-
let(:stream) { StringIO.new }
|
38
36
|
|
39
37
|
it "does not raise an error when repeated fields are []" do
|
40
38
|
expect {
|
41
39
|
message.repeated_enum = []
|
42
|
-
message.
|
40
|
+
message.serialize_to_string
|
43
41
|
}.to_not raise_error
|
44
42
|
end
|
45
43
|
end
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: protobuf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
5
|
-
prerelease:
|
4
|
+
version: 2.4.3.rc1
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- BJ Neilsen
|
@@ -369,7 +369,6 @@ files:
|
|
369
369
|
- lib/protobuf/logger.rb
|
370
370
|
- lib/protobuf/message.rb
|
371
371
|
- lib/protobuf/message/decoder.rb
|
372
|
-
- lib/protobuf/message/extend.rb
|
373
372
|
- lib/protobuf/message/message.rb
|
374
373
|
- lib/protobuf/rpc/buffer.rb
|
375
374
|
- lib/protobuf/rpc/client.rb
|
@@ -499,16 +498,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
499
498
|
version: '0'
|
500
499
|
segments:
|
501
500
|
- 0
|
502
|
-
hash:
|
501
|
+
hash: 952004748095048200
|
503
502
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
504
503
|
none: false
|
505
504
|
requirements:
|
506
|
-
- - ! '
|
505
|
+
- - ! '>'
|
507
506
|
- !ruby/object:Gem::Version
|
508
|
-
version:
|
509
|
-
segments:
|
510
|
-
- 0
|
511
|
-
hash: -3586960575258099872
|
507
|
+
version: 1.3.1
|
512
508
|
requirements: []
|
513
509
|
rubyforge_project:
|
514
510
|
rubygems_version: 1.8.24
|