pulsar-client 2.6.1.pre.beta.1 → 2.6.1.pre.beta.2

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
  SHA256:
3
- metadata.gz: '0812c85307bcd4017c169592a1547e8249a4193f2d381b0f845f6ce27ab637ec'
4
- data.tar.gz: a5581a355348dc9eec95184dfe1a1ff92f2a0858e871c22d6f7cd97f513f50da
3
+ metadata.gz: 40d7a5b7897e334ba7dcf34b17f5514ef342b9e8fba1ac1dfa54da846f0d5fe1
4
+ data.tar.gz: 91645d571180036f94d33c1d1a42e3e01425af4a4877fed79258ac7d52356e32
5
5
  SHA512:
6
- metadata.gz: 76e1855a6cfc363fafe991fbe2e5bd99c9e8f844f7107c79d2494a65185703ea32f30f7b626bcbf0bd26d38227cc7b42f66baee2d15c023fc8d1ea8a115f8f21
7
- data.tar.gz: 51cb6884e39d20e8806d17a4ae76954c30b14ef7f19e7c49540ec15411c60845d8c871b03bd0afbf18f17982c2329af60db77a4f4d6ab772b320cba263ad3be7
6
+ metadata.gz: 81dcc960831f5831aebd4eacdd83c0a3b30a19ae69c821a68b925feda627e79b77eea477ba79c0f10170ed43e5f68d14c6f2592c286a18b2f6eaf5c3f49699e4
7
+ data.tar.gz: 7f3208848c5f2e993dc3a0798a53071982d6f956babd1b4ab02ce1fe7655c4f2412326aabce142e3e98dea119097efeb918d70c6a9dd919888af5e15c5f442b5
data/.travis.yml CHANGED
@@ -1,5 +1,7 @@
1
1
  dist: bionic # ubuntu 18.04
2
2
  sudo: false
3
+ services:
4
+ - docker
3
5
  language: ruby
4
6
  rvm:
5
7
  - 2.4.9 # oldest pre-install on bionic
@@ -12,5 +14,14 @@ install:
12
14
  - sudo apt-get -y install ./apache-pulsar-client-dev.deb
13
15
  - gem install bundler -v 1.16.1
14
16
  - bundle install
17
+ before_script:
18
+ - docker run --name pulsar -d -p 6650:6650 -p 8080:8080 apachepulsar/pulsar:latest bin/pulsar standalone
19
+ - docker exec pulsar bash -c 'ready (){ (exec > /dev/tcp/$1/$2); }; i=0; while ! ready localhost 8080; do sleep 1; i=$((i+1)); [[ $i -gt 10 ]] && break; done'
20
+ - docker exec pulsar bin/pulsar-admin tenants create ruby-client
21
+ - docker exec pulsar bin/pulsar-admin namespaces create ruby-client/tests
22
+ env:
23
+ global:
24
+ PULSAR_BROKER_URI: pulsar://localhost:6650
25
+ PULSAR_CLIENT_RUBY_TEST_NAMESPACE: ruby-client/tests
15
26
  script:
16
27
  - rake
data/Gemfile.lock CHANGED
@@ -1,31 +1,31 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pulsar-client (2.6.1.pre.beta.1)
4
+ pulsar-client (2.6.1.pre.beta.2)
5
5
  rake-compiler (~> 1.0)
6
6
  rice (~> 2.1)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- diff-lcs (1.3)
11
+ diff-lcs (1.4.4)
12
12
  rake (10.5.0)
13
13
  rake-compiler (1.1.1)
14
14
  rake
15
15
  rice (2.2.0)
16
- rspec (3.8.0)
17
- rspec-core (~> 3.8.0)
18
- rspec-expectations (~> 3.8.0)
19
- rspec-mocks (~> 3.8.0)
20
- rspec-core (3.8.0)
21
- rspec-support (~> 3.8.0)
22
- rspec-expectations (3.8.3)
16
+ rspec (3.10.0)
17
+ rspec-core (~> 3.10.0)
18
+ rspec-expectations (~> 3.10.0)
19
+ rspec-mocks (~> 3.10.0)
20
+ rspec-core (3.10.1)
21
+ rspec-support (~> 3.10.0)
22
+ rspec-expectations (3.10.1)
23
23
  diff-lcs (>= 1.2.0, < 2.0)
24
- rspec-support (~> 3.8.0)
25
- rspec-mocks (3.8.0)
24
+ rspec-support (~> 3.10.0)
25
+ rspec-mocks (3.10.2)
26
26
  diff-lcs (>= 1.2.0, < 2.0)
27
- rspec-support (~> 3.8.0)
28
- rspec-support (3.8.0)
27
+ rspec-support (~> 3.10.0)
28
+ rspec-support (3.10.2)
29
29
 
30
30
  PLATFORMS
31
31
  ruby
@@ -37,4 +37,4 @@ DEPENDENCIES
37
37
  rspec (~> 3.0)
38
38
 
39
39
  BUNDLED WITH
40
- 1.16.1
40
+ 1.17.3
@@ -6,6 +6,7 @@
6
6
  #include "client.hpp"
7
7
  #include "logger.hpp"
8
8
  #include "util.hpp"
9
+ #include "vector.hpp"
9
10
 
10
11
  namespace pulsar_rb {
11
12
 
@@ -133,7 +134,7 @@ Producer::ptr Client::create_producer(Rice::String topic, const ProducerConfigur
133
134
 
134
135
  typedef struct {
135
136
  pulsar::Client& client;
136
- const Rice::String& topic;
137
+ const Rice::Array& topics;
137
138
  const Rice::String& subscriptionName;
138
139
  const pulsar::ConsumerConfiguration& config;
139
140
  pulsar::Consumer consumer;
@@ -142,12 +143,27 @@ typedef struct {
142
143
 
143
144
  void* client_subscribe_worker(void* taskPtr) {
144
145
  client_subscribe_task& task = *(client_subscribe_task*)taskPtr;
145
- task.result = task.client.subscribe(task.topic.str(), task.subscriptionName.str(), task.config, task.consumer);
146
+
147
+ const std::vector<std::string>& topics = from_ruby<std::vector<std::string>>(task.topics);
148
+ switch(topics.size()) {
149
+ case 0:
150
+ throw Rice::Exception(rb_eArgError, "Must have at least one topic");
151
+ break;
152
+ case 1: {
153
+ // Skip the MultiTopicsConsumer if there's only one.
154
+ task.result = task.client.subscribe(topics[0], task.subscriptionName.str(), task.config, task.consumer);
155
+ break;
156
+ }
157
+ default: {
158
+ task.result = task.client.subscribe(topics, task.subscriptionName.str(), task.config, task.consumer);
159
+ break;
160
+ }
161
+ }
146
162
  return nullptr;
147
163
  }
148
164
 
149
- Consumer::ptr Client::subscribe(Rice::String topic, Rice::String subscriptionName, const ConsumerConfiguration& config) {
150
- client_subscribe_task task = { _client, topic, subscriptionName, config };
165
+ Consumer::ptr Client::subscribe(Rice::Array topics, Rice::String subscriptionName, const ConsumerConfiguration& config) {
166
+ client_subscribe_task task = { _client, topics, subscriptionName, config };
151
167
  rb_thread_call_without_gvl(&client_subscribe_worker, &task, RUBY_UBF_IO, nullptr);
152
168
  CheckResult(task.result);
153
169
  return Consumer::ptr(new Consumer(task.consumer));
@@ -47,7 +47,7 @@ namespace pulsar_rb {
47
47
  Client(Rice::String service_url, const ClientConfiguration& config);
48
48
 
49
49
  Producer::ptr create_producer(Rice::String topic, const ProducerConfiguration& config);
50
- Consumer::ptr subscribe(Rice::String topic, Rice::String subscriptionName, const ConsumerConfiguration& config);
50
+ Consumer::ptr subscribe(Rice::Array topics, Rice::String subscriptionName, const ConsumerConfiguration& config);
51
51
  void close();
52
52
 
53
53
  typedef Rice::Data_Object<Client> ptr;
@@ -82,6 +82,10 @@ void bind_consumer(Module &module) {
82
82
  .define_value("Failover", ConsumerFailover)
83
83
  .define_value("KeyShared", ConsumerKeyShared);
84
84
 
85
+ define_enum<pulsar::InitialPosition>("InitialPosition", module)
86
+ .define_value("Latest", InitialPositionLatest)
87
+ .define_value("Earliest", InitialPositionEarliest);
88
+
85
89
  define_class_under<pulsar_rb::ConsumerConfiguration>(module, "ConsumerConfiguration")
86
90
  .define_constructor(Constructor<pulsar_rb::ConsumerConfiguration>())
87
91
  .define_method("consumer_type", &ConsumerConfiguration::getConsumerType)
@@ -41,6 +41,7 @@ Message::Message(const std::string& data, Rice::Object arg = Rice::Object()) {
41
41
  }
42
42
 
43
43
  _msg = mb.build();
44
+ received = false;
44
45
  }
45
46
 
46
47
  Rice::String Message::getData() {
@@ -65,6 +66,12 @@ Rice::String Message::getOrderingKey() {
65
66
  return to_ruby(_msg.getOrderingKey());
66
67
  }
67
68
 
69
+ Rice::Object Message::getTopicName() {
70
+ // If the message topic hasn't been set (it gets set when received, not when
71
+ // built) getTopicName will try to dereference a null pointer.
72
+ return received ? to_ruby(_msg.getTopicName()) : Rice::Nil;
73
+ }
74
+
68
75
  }
69
76
 
70
77
  using namespace Rice;
@@ -84,5 +91,6 @@ void bind_message(Module& module) {
84
91
  .define_method("properties", &pulsar_rb::Message::getProperties)
85
92
  .define_method("partition_key", &pulsar_rb::Message::getPartitionKey)
86
93
  .define_method("ordering_key", &pulsar_rb::Message::getOrderingKey)
94
+ .define_method("topic", &pulsar_rb::Message::getTopicName)
87
95
  ;
88
96
  }
@@ -21,6 +21,7 @@ namespace pulsar_rb {
21
21
  class Message {
22
22
  public:
23
23
  pulsar::Message _msg;
24
+ bool received = true; // received from consumer rather than built with builder
24
25
  Message(const pulsar::Message& msg) : _msg(msg) {};
25
26
  Message(const std::string& data, Rice::Object opts);
26
27
 
@@ -29,6 +30,7 @@ namespace pulsar_rb {
29
30
  Rice::Hash getProperties();
30
31
  Rice::String getPartitionKey();
31
32
  Rice::String getOrderingKey();
33
+ Rice::Object getTopicName();
32
34
 
33
35
  typedef Rice::Data_Object<Message> ptr;
34
36
  };
@@ -0,0 +1,16 @@
1
+ #include "rice/Array.hpp"
2
+
3
+ #include "vector.hpp"
4
+
5
+ template<>
6
+ std::vector<std::string> from_ruby<std::vector<std::string>>(Rice::Object o)
7
+ {
8
+ Rice::Array a(o);
9
+ std::vector<std::string> v;
10
+ Rice::Array::iterator it = a.begin();
11
+ Rice::Array::iterator end = a.end();
12
+ for(; it != end; ++it) {
13
+ v.push_back(it->to_s().str());
14
+ }
15
+ return v;
16
+ }
@@ -0,0 +1,10 @@
1
+ #ifndef __PULSAR_RUBY_CLIENT_VECTOR_HPP
2
+ #define __PULSAR_RUBY_CLIENT_VECTOR_HPP
3
+
4
+ #include "rice/Object.hpp"
5
+ #include <pulsar/Client.h>
6
+
7
+ template<>
8
+ std::vector<std::string> from_ruby<std::vector<std::string>>(Rice::Object o);
9
+
10
+ #endif
data/lib/pulsar/client.rb CHANGED
@@ -41,7 +41,7 @@ module Pulsar
41
41
  unless config.is_a?(Pulsar::ConsumerConfiguration)
42
42
  config = Pulsar::ConsumerConfiguration.new(config)
43
43
  end
44
- super(topic, subscription_name, config)
44
+ super(Array(topic), subscription_name, config)
45
45
  end
46
46
  end
47
47
 
@@ -19,6 +19,6 @@
19
19
 
20
20
  module Pulsar
21
21
  class Client
22
- VERSION = "2.6.1-beta.1"
22
+ VERSION = "2.6.1-beta.2"
23
23
  end
24
24
  end
@@ -33,6 +33,12 @@ module Pulsar
33
33
  :key_shared => Pulsar::ConsumerType::KeyShared
34
34
  }
35
35
 
36
+ # aligns with the pulsar::InitialPosition enum in the C++ library
37
+ INITIAL_POSITIONS = {
38
+ :latest => Pulsar::InitialPosition::Latest,
39
+ :earliest => Pulsar::InitialPosition::Earliest
40
+ }
41
+
36
42
  module RubySideTweaks
37
43
  def initialize(config={})
38
44
  super()
@@ -53,6 +59,21 @@ module Pulsar
53
59
  end
54
60
  super(type)
55
61
  end
62
+
63
+ def subscription_initial_position
64
+ enum_value = super
65
+ INITIAL_POSITIONS.invert[enum_value]
66
+ end
67
+
68
+ def subscription_initial_position=(type)
69
+ unless type.is_a?(Pulsar::InitialPosition)
70
+ type = INITIAL_POSITIONS[type]
71
+ unless type
72
+ raise ArgumentError, "unrecognized subscription_initial_position"
73
+ end
74
+ end
75
+ super(type)
76
+ end
56
77
  end
57
78
 
58
79
  prepend RubySideTweaks
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pulsar-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.1.pre.beta.1
4
+ version: 2.6.1.pre.beta.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jacob Fugal
@@ -119,6 +119,8 @@ files:
119
119
  - ext/bindings/stringmap.hpp
120
120
  - ext/bindings/util.cpp
121
121
  - ext/bindings/util.hpp
122
+ - ext/bindings/vector.cpp
123
+ - ext/bindings/vector.hpp
122
124
  - lib/pulsar/client.rb
123
125
  - lib/pulsar/client/version.rb
124
126
  - lib/pulsar/client_configuration.rb
@@ -145,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
147
  - !ruby/object:Gem::Version
146
148
  version: 1.3.1
147
149
  requirements: []
148
- rubygems_version: 3.1.2
150
+ rubygems_version: 3.0.3
149
151
  signing_key:
150
152
  specification_version: 4
151
153
  summary: Apache Pulsar Ruby Client