Skip to content

discovery fails if Zookeeper tree is read only #215

@bjoernmeier

Description

@bjoernmeier

Hi,

we are using synapse for service discovery and wanted to use it with a read only Zookeeper.
But during tests we got the following error:

/usr/lib/ruby/vendor_ruby/zk/client/base.rb:1083:in `check_rc': inputs: {:path=>"/level_1/level_2/level_3", :data=>"", :ephemeral=>false, :sequence=>false, :ignore=>:node_exists} (ZK::Exceptions::NoAuth)
	from /usr/lib/ruby/vendor_ruby/zk/client/base.rb:1072:in `call_and_check_rc'
	from /usr/lib/ruby/vendor_ruby/zk/client/threaded.rb:584:in `call_and_check_rc'
	from /usr/lib/ruby/vendor_ruby/zk/client/base.rb:352:in `create'
	from /usr/lib/ruby/vendor_ruby/zk/client/threaded.rb:434:in `create'
	from /usr/lib/ruby/vendor_ruby/synapse/service_watcher/zookeeper.rb:121:in `create'
	from /usr/lib/ruby/vendor_ruby/synapse/service_watcher/zookeeper.rb:245:in `zk_connect'
	from /usr/lib/ruby/vendor_ruby/synapse/service_watcher/zookeeper.rb:39:in `start'
	from /usr/lib/ruby/vendor_ruby/synapse.rb:48:in `block in run'
	from /usr/lib/ruby/vendor_ruby/synapse.rb:48:in `map'
	from /usr/lib/ruby/vendor_ruby/synapse.rb:48:in `run'
	from /usr/bin/synapse:60:in `<main>'

While checking the code we saw that synapse uses zk exists to create nodes if they do not exist (e.g. /level_1 exists it will create level_2/level_3).This fails even if the nodes do exist as synapse does not have create permissions in zookeeper.
It would be great if as long a subtree does not exist only the existing root is watched and on a new node creation the watches are registered on the new subtree instead of creating the subtree.

Thank you.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions