You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by pe...@apache.org on 2021/01/07 02:11:31 UTC
[pulsar] branch branch-2.7 updated: [pulsar-managed-ledger-admin]
Fix deleting multiple ledgers (#9009)
This is an automated email from the ASF dual-hosted git repository.
penghui pushed a commit to branch branch-2.7
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/branch-2.7 by this push:
new a8fb9fe [pulsar-managed-ledger-admin] Fix deleting multiple ledgers (#9009)
a8fb9fe is described below
commit a8fb9fea791435db25e334c7b632cb31c2be384c
Author: Miloš Matijašević <mi...@gmail.com>
AuthorDate: Thu Dec 24 02:58:18 2020 +0100
[pulsar-managed-ledger-admin] Fix deleting multiple ledgers (#9009)
### Motivation
There are 2 main problems in pulsar-managed-ledger-admin when deleting multiple ledgers
- Removing a ledger while iterating through the ledger list will lead to skipping the next ledger in the list
- Only the first attempt to change the zookeeper's data will succeed, the second will fail due to version error
Logs for the second problem:
```
Traceback (most recent call last):
File "/Users/milos/Downloads/pulsar/bin/pulsar-managed-ledger-admin", line 109, in deleteLedgerIdsFromManagedLedgerInfo
zk.set(mlPath, updatedMlInfo, version=mlStat.version)
File "/usr/local/lib/python3.9/site-packages/kazoo/client.py", line 1359, in set
return self.set_async(path, value, version).get()
File "/usr/local/lib/python3.9/site-packages/kazoo/handlers/utils.py", line 75, in get
raise self._exception
kazoo.exceptions.BadVersionError
Failed to delete ledgerIds for /managed-ledgers/public/default/persistent/events-other due to BadVersionError()
```
### Modifications
Changed iterating through the loop with a while loop and index instead of foreach and handling index increment.
Changed updating zookeeper's data only once when the loop is finished.
### Verifying this change
- [x] Make sure that the change passes the CI checks.
(cherry picked from commit 7ca2b44fdae877ea332e0e10a77b5939d6770f3a)
---
bin/pulsar-managed-ledger-admin | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/bin/pulsar-managed-ledger-admin b/bin/pulsar-managed-ledger-admin
index 85b14b7..9ed5d69 100755
--- a/bin/pulsar-managed-ledger-admin
+++ b/bin/pulsar-managed-ledger-admin
@@ -98,16 +98,21 @@ def deleteLedgerIdsFromManagedLedgerInfo(zk, mlPath, deletLedgerIds):
ledgerInfoList = mlInfo.ledgerInfo
- for ledgerInfo in ledgerInfoList:
+ i = 0
+ while i < len(ledgerInfoList):
+ ledgerInfo = ledgerInfoList[i]
if ledgerInfo.ledgerId in deletLedgerIds:
ledgerInfoList.remove(ledgerInfo)
- updatedMlInfo = None
- if isTextFormat:
- updatedMlInfo = MessageToString(mlInfo, True)
- else:
- updatedMlInfo = mlInfo.SerializeToString();
- zk.set(mlPath, updatedMlInfo, version=mlStat.version)
- print('Updated {} with value\n{}'.format(mlPath, str(mlInfo)))
+ else:
+ i += 1
+
+ updatedMlInfo = None
+ if isTextFormat:
+ updatedMlInfo = MessageToString(mlInfo, True)
+ else:
+ updatedMlInfo = mlInfo.SerializeToString();
+ zk.set(mlPath, updatedMlInfo, version=mlStat.version)
+ print('Updated {} with value\n{}'.format(mlPath, str(mlInfo)))
except Exception as e:
traceback.print_exc()