apache / apache/bookkeeper

Race condition problme in AbstractZkLedgerManager

Open
#3,362 0 comments 0 reactions 0 assignees View on GitHub
type/bug
Dominant language
Java
Stars
2k
Forks
976
Avg merge
6d 15h
Merged PRs (30d)
7

Description

**BUG REPORT**

There are two methods in AbstractZkLedgerManager.
1. **registerLedgerMetadataListener**
https://github.com/apache/bookkeeper/blob/677ccec3eb84f5be1b3556537871e14eb5e8359c/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/AbstractZkLedgerManager.java#L389-L409

2. **unregisterLedgerMetadataListener**
https://github.com/apache/bookkeeper/blob/677ccec3eb84f5be1b3556537871e14eb5e8359c/bookkeeper-server/src/main/java/org/apache/bookkeeper/meta/AbstractZkLedgerManager.java#L412-L426

**The initial data**
listeners: 1: watcherSet(watcher1)

**Thread one: doing unregisterLedgerMetadataListener, it unregister (1, watcher1)**
It get watcherSet and remove watcher1, the watcherSet is empty, then remove index ledger 1.

**Thread two: doing registerLedgerMetadataListener, it register (1, watcher2)**
At the same time, `thread one` not remove index ledger 1. `thread two` get same watcherSet and wait `thread one` remove watcher1 and remove index ledger 1. Then add watcher2 to this watcherSet which already not be indexed.

**Final Result**
listeners: emptyMap

**Expected Result**
listeners: 1: watcherSet(watcher2)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.