Skip to content

rm_rf throws ZK::Exception::NotEmpty #88

@lukaszx0

Description

@lukaszx0

There seems to be a race condition somewhere in rm_rf implementation.

I have a rspec tests with after(:each) block calling zk.rm_rf('/LOCAL') which basically wipes all data in ZK before next test for me (I'm not creating any other nodes at root level). This however results in a random flakiness with exceptions which doesn't quite make sense to me:

     ZK::Exceptions::NotEmpty:
       inputs: {:path=>"/LOCAL/test/foobar/private/groups/foobar", :version=>-1}
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/base.rb:1083:in `check_rc'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/base.rb:1072:in `call_and_check_rc'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/threaded.rb:584:in `call_and_check_rc'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/base.rb:792:in `delete'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:57:in `block in rm_rf'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:51:in `each'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:51:in `rm_rf'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:54:in `block (2 levels) in rm_rf'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:53:in `each'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:53:in `block in rm_rf'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:51:in `each'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:51:in `rm_rf'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:54:in `block (2 levels) in rm_rf'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:53:in `each'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:53:in `block in rm_rf'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:51:in `each'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:51:in `rm_rf'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:54:in `block (2 levels) in rm_rf'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:53:in `each'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:53:in `block in rm_rf'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:51:in `each'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:51:in `rm_rf'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:54:in `block (2 levels) in rm_rf'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:53:in `each'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:53:in `block in rm_rf'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:51:in `each'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:51:in `rm_rf'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:54:in `block (2 levels) in rm_rf'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:53:in `each'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:53:in `block in rm_rf'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:51:in `each'
     # /Users/lukasz/.rvm/gems/ruby-2.2.1/gems/zk-1.9.5/lib/zk/client/unixisms.rb:51:in `rm_rf'
     # ./spec/spec_helper.rb:20:in `block (2 levels) in <top (required)>'

Is it a sign of a bug in my code or rather race condition in ZK's rm_rf? Not sure if it matters but I'm using zk-server for testing.

@slyphon any ideas?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions