Stan Campbell
42a7b4cb62
Avoid setting Result object at all for now.
2014-09-23 13:22:31 -07:00
Stan Campbell
32c97deee2
Temporarily disable the caching of Result objects at the Producer.
2014-09-23 12:11:09 -07:00
R. Tyler Croy
341e176b2f
Propagate system broker errors into Hermann::Result objects
...
Provided that Producer#tick_reactor has been invoked, if there are underlying
errors like "1/1 Brokers down" then this code will ensure that outstanding
Herman::Result children of Herman::Producer will have their error status updated.
Fixes #25
2014-09-10 11:04:14 -07:00
R. Tyler Croy
218c035793
Expose an #errored? method which gets set if the general error callback is invoked
...
Fixes #25
2014-09-09 17:37:05 -07:00
R. Tyler Croy
288653845a
Introduce a wrapper struct to make message delivery callbacks able to change Producer data
...
This will help with determining whether we're no longer connected due to
failures after a push of a message
2014-09-09 16:45:27 -07:00
R. Tyler Croy
a0697f5b66
Refactor out the necessity for Hermann::Timeout and just rely in a Ruby-based busyloop
2014-09-09 16:45:17 -07:00
R. Tyler Croy
9014551d10
Make use of Hermann::Timeout when ticking the Producers reactor to safely block for a value
...
This adds a requirement for 1.8.7 clients to install the SystemTimer gem for
timing out on Hermann::Result#value(timeout) to block and timeout correctly
Fixes #25
2014-09-09 14:40:10 -07:00
R. Tyler Croy
128ec66db0
Propagate the timeout from Hermann::Producer#tick_reactor down into the rd_kafka_poll calls
...
This also introduces some more/better error handling in Hermann::Lib::Producer#tick
Fixes #24
2014-09-09 11:11:07 -07:00
R. Tyler Croy
9bfd7ad2e6
Tie Hermann::Result#value to the underlying reactor to bring values up to Ruby
...
This ensures that we're getting async values out of librdkafka into the calling
Ruby thread. Currently errors aren't being brought up properly, but we're getting there
Example:
[14:47:30] tyler:Hermann git:(issues/11-producer-feedback*) $ pry -I lib -r 'hermann/producer'
[1] pry(main)> p = Hermann::Producer.new('topic', 'kafka0.REDACTED.com:6667')
=> #<Hermann::Producer:0x00000803b3b450
@brokers="kafka0.REDACTED.com:6667",
@children=[],
@internal=#<Hermann::Lib::Producer:0x00000803b3b3d8>,
@topic="topic">
[2] pry(main)> r = p.push('hello world!')
=> #<Hermann::Result:0x00000803b8cb20
@producer=
#<Hermann::Producer:0x00000803b3b450
@brokers="kafka0.REDACTED.com:6667",
@children=[#<Hermann::Result:0x00000803b8cb20 ...>],
@internal=#<Hermann::Lib::Producer:0x00000803b3b3d8>,
@topic="topic">,
@reason=nil,
@state=:unfulfilled,
@value=nil>
[3] pry(main)> r.state
=> :unfulfilled
[4] pry(main)> r.value
ticking rdkafka reactor
ticked
=> "hello world!"
[5] pry(main)> r.state
=> :fulfilled
[6] pry(main)> r.rejected?
=> false
[7] pry(main)>
[14:47:56] tyler:Hermann git:(issues/11-producer-feedback*) $
Fixes #11
2014-09-04 14:51:41 -07:00
R. Tyler Croy
ed36300265
Pass a pointer to a Hermann::Result into the message delivery callback
...
Provided that /something/ is ticking the librdkafka reactor underneath, the
Hermann::Result will be updated with the message delivery status when that's
completed.
What's still missing is producer level error calbacks
Fixes #11
Fixes #15
Fixes #17
2014-09-04 14:31:29 -07:00
R. Tyler Croy
ccc7d20d15
An initial pass at exposign the asynchronous nature of librdkafka up into Ruby
...
This should be enough to get some initial review of the API going. Hooking up a
Hermann::Result class to the Hermann::Producer in Ruby is in this commit but
actually driving the librdkafka reactor underneath is not yet hooked up.
Fixes #11
Fixes #15
Fixes #18
2014-09-03 14:19:09 -07:00
R. Tyler Croy
ff300e4175
Start refactoring unnecessary logic out of the C-core, starting with Producer
2014-08-28 17:14:38 -07:00