indeedeng / indeedeng/iwf-python-sdk

publish_to_internal_channel is not threadsafe

Offen
#115 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Python
Sterne
6
Forks
3
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

https://github.com/indeedeng/iwf-python-sdk/blob/a13c309d58bb553a3ee27c85899f7f25c500d877/iwf/communication.py#L51

Here's part of the publish_to_internal_channel func :
``` python
def publish_to_internal_channel(self, channel_name: str, value: Any = None):
...
vals = self._to_publish_internal_channel.get(channel_name)
if vals is None:
vals = []
vals.append(self._object_encoder.encode(value))
self._to_publish_internal_channel[channel_name] = vals
```
When multiple threads hitting this function, it could have a race condition where
Thread A gets vals = [1,2,3]
Thread B gets vals = [1,2,3]
Thread A updates it to be [1,2,3,4]
Thread B updates it to be [1,2,3,5]
Here we lost 4 permanently

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne in iwf/communication.py bei publish_to_internal_channel und prüfe, wie _to_publish_internal_channel gelesen und aktualisiert wird. Füge Abdeckung für nebenläufige Veröffentlichungen hinzu und verifiziere anschließend, dass keine Werte verloren gehen, wenn mehrere Threads auf demselben Kanal veröffentlichen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
backend
Issue-Typ
Bug
Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
55/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.