Segfault when trying to use :observe option


#1

The only change in code is added :observe => {:persisted => 1} to set operation.

Here is what happens: https://gist.github.com/buger/01239d8ffe22b0f3ffca
Bug happen when using eventmachine engine. Do not see such errors when using in Rails.


#2

I think i know how it happen, and here is test case that fails every time for me:

require 'couchbase' require 'em-synchrony' require 'em-synchrony/em-http'

EventMachine.synchrony do
couch = Couchbase::Bucket.new(:engine => :eventmachine)

couch.set(Time.now.to_s,'test', :observe => {:persisted => 1, :timeout => 10000000}) 

EM.stop

end

Should give: Couchbase::Error::Timeout: the observe request was timed out

No matter how much timeout i set, it always timeouts when using eventmachine engine.


#3

On the other hand i found that this code works:

require 'couchbase' require 'em-synchrony' require 'em-synchrony/em-http'

EventMachine.synchrony do
couch = Couchbase::Bucket.new(:engine => :eventmachine)

key = Time.now.to_s

couch.run do |conn|
    conn.set(key,'test', :persisted => 1)
end

EM.stop

end

Can you say if it is safe to use “async” mode with EM?


#4

yes, it is okay to use this kind of API, and it works here. does it fail on the local server?


#5

It fail both on local and production servers. And looks like CouchbaseMock too.