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()