indeedeng / indeedeng/iwf-python-sdk

publish_to_internal_channel is not threadsafe

Aperta
#115 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
Python
Stelle
6
Fork
3
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

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

Here's part of the publish_to_internal_channel func :

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

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia in iwf/communication.py, all'interno di publish_to_internal_channel, e verifica come viene letto e aggiornato _to_publish_internal_channel. Aggiungi la copertura per le pubblicazioni concorrenti, quindi verifica che non vadano persi valori quando più thread pubblicano sullo stesso canale.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
backend
Tipo di issue
Bug
Difficoltà
2/5
Tempo stimato
1-3 ore
Stato di attività
Ferma
Chiarezza
Specificata chiaramente
Idoneità per principianti
55/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.