[Checkins] SVN: zc.zk/trunk/src/zc/zk/ - ``delete_recursive`` now has a ``force`` argument to force deletion of
Jim Fulton
jim at zope.com
Tue Jan 24 14:46:03 UTC 2012
Log message for revision 124154:
- ``delete_recursive`` now has a ``force`` argument to force deletion of
ephemeral nodes.
- Fixed: the ``dry_run`` argument to ``delete_recursive`` didn't work
properly.
Changed:
U zc.zk/trunk/src/zc/zk/README.txt
U zc.zk/trunk/src/zc/zk/__init__.py
U zc.zk/trunk/src/zc/zk/tests.py
-=-
Modified: zc.zk/trunk/src/zc/zk/README.txt
===================================================================
--- zc.zk/trunk/src/zc/zk/README.txt 2012-01-24 06:38:08 UTC (rev 124153)
+++ zc.zk/trunk/src/zc/zk/README.txt 2012-01-24 14:46:01 UTC (rev 124154)
@@ -413,8 +413,10 @@
address = u'1.2.3.4:80'
providers -> /cms/providers
-You can't delete nodes ephemeral nodes, or nodes that contain them::
+Bt default, ``delete_recursive`` won't delete ephemeral nodes, or
+nodes that contain them::
+
>>> zk.delete_recursive('/fooservice')
Not deleting /fooservice/providers/192.168.0.42:8080 because it's ephemeral.
Not deleting /fooservice/providers/192.168.0.42:8081 because it's ephemeral.
@@ -422,6 +424,9 @@
/fooservice/providers not deleted due to ephemeral descendent.
/fooservice not deleted due to ephemeral descendent.
+You can use the ``force`` option to force ephemeral nodes to be
+deleted.
+
Symbolic links
==============
@@ -818,10 +823,12 @@
This should be called when cleanly shutting down servers to more
quickly remove ephemeral nodes.
-``delete_recursive(path[, dry_run])``
+``delete_recursive(path[, dry_run[, force]])``
Delete a node and all of it's sub-nodes.
- Ephemeral nodes or nodes containing them are not deleted.
+ Ephemeral nodes or nodes containing them are not deleted by
+ default. To force deletion of ephemeral nodes, supply the ``force``
+ option with a true value.
The dry_run option causes a summary of what would be deleted to be
printed without actually deleting anything.
@@ -989,6 +996,15 @@
Change History
==============
+0.6.0 (2012-01-??)
+------------------
+
+- ``delete_recursive`` now has a ``force`` argument to force deletion of
+ ephemeral nodes.
+
+- Fixed: the ``dry_run`` argument to ``delete_recursive`` didn't work
+ properly.
+
0.5.2 (2012-01-06)
------------------
Modified: zc.zk/trunk/src/zc/zk/__init__.py
===================================================================
--- zc.zk/trunk/src/zc/zk/__init__.py 2012-01-24 06:38:08 UTC (rev 124153)
+++ zc.zk/trunk/src/zc/zk/__init__.py 2012-01-24 14:46:01 UTC (rev 124154)
@@ -423,15 +423,22 @@
self.create(cpath, data, acl)
self._import_tree(cpath, child, acl, trim, dry_run)
- def delete_recursive(self, path, dry_run=False):
+ def delete_recursive(self, path, dry_run=False, force=False):
+ self._delete_recursive(path, dry_run, force)
+
+ def _delete_recursive(self, path, dry_run, force):
+ ephemeral_child = None
for name in sorted(self.get_children(path)):
- self.delete_recursive(join(path, name))
+ ephemeral_child = (
+ self._delete_recursive(join(path, name), dry_run, force) or
+ ephemeral_child
+ )
- if self.get_children(path):
+ if ephemeral_child:
print "%s not deleted due to ephemeral descendent." % path
- return
+ return ephemeral_child
- ephemeral = self.get(path)[1]['ephemeralOwner']
+ ephemeral = self.get(path)[1]['ephemeralOwner'] and not force
if dry_run:
if ephemeral:
print "wouldn't delete %s because it's ephemeral." % path
@@ -443,6 +450,7 @@
else:
logger.info('deleting %s', path)
self.delete(path)
+ return ephemeral
def export_tree(self, path='/', ephemeral=False, name=None):
output = []
@@ -597,6 +605,7 @@
if v is not None:
yield v
+ZK = ZooKeeper
class NodeInfo:
Modified: zc.zk/trunk/src/zc/zk/tests.py
===================================================================
--- zc.zk/trunk/src/zc/zk/tests.py 2012-01-24 06:38:08 UTC (rev 124153)
+++ zc.zk/trunk/src/zc/zk/tests.py 2012-01-24 14:46:01 UTC (rev 124154)
@@ -1288,8 +1288,51 @@
>>> zk.close()
"""
+def delete_recursive_dry_run():
+ """
+ >>> zk = zc.zk.ZooKeeper('zookeeper.example.com:2181')
+ >>> zk.delete_recursive('/fooservice', dry_run=True)
+ would delete /fooservice/providers.
+ would delete /fooservice.
+ >>> zk.print_tree()
+ /fooservice
+ database = u'/databases/foomain'
+ favorite_color = u'red'
+ threads = 1
+ /providers
+ >>> zk.close()
+ """
+
+def delete_recursive_force():
+ """
+ >>> zk = zc.zk.ZooKeeper('zookeeper.example.com:2181')
+ >>> zk.register_server('/fooservice/providers', 'a:b')
+
+ >>> zk.delete_recursive('/fooservice', dry_run=True, force=True)
+ would delete /fooservice/providers/a:b.
+ would delete /fooservice/providers.
+ would delete /fooservice.
+
+ >>> zk.print_tree()
+ /fooservice
+ database = u'/databases/foomain'
+ favorite_color = u'red'
+ threads = 1
+ /providers
+ /a:b
+ pid = 29093
+
+ >>> zk.delete_recursive('/fooservice', force=True)
+
+ >>> zk.print_tree()
+ <BLANKLINE>
+
+ >>> zk.close()
+ """
+
+
# XXX
# deleting linked node
More information about the checkins
mailing list