firebase / firebase/firebase-admin-python

`firebase_admin.db.reference` leaks connections in a `CLOSE_WAIT` state

Abierto
#709 0 comentarios 0 reacciones 0 asignados Ver en GitHub
api: database type: bug
Lenguaje dominante
Python
Estrellas
1.2k
Forks
359
Merge medio
5 d 6 min
PR fusionados (30 d)
2

Descripción

### Step 2: Describe your environment

* Operating System version: OS X Ventura 13.4
* Firebase SDK version: 6.2.0
* Firebase Product: database
* Python version: 3.11.2
* Pip version: 23.1.2

### Step 3: Describe the problem
I have a Python websocket application that creates a reference to RTDB via `firebase_admin.db.reference`, and writes to it via the `set` method. I create one reference per connection to my database. It appears that this reference does not necessarily get cleaned up, as I've noticed in my server that connections with a `CLOSE_WAIT` state are aggregating specifically with this RTDB update. More concerning is that the application appears to be receiving bytes of data at a consistent rate from this connection despite it being in a `CLOSE_WAIT` state.

What is the proper way to tear down a reference once I know I'm done with it? It seems like this is a bug from the `firebase_admin` python package as there don't be any instructions or indication that we need to tear down the reference.

#### Steps to reproduce:
1. Create a Python websocket server with the `websockets` library
2. Within the connection handler, instantiate a reference via `firebase_admin.db.reference` and write a value
3. Approximately 1 minute after the connection terminates, use `netstat` to observe that the connection still exists in a `CLOSE_WAIT` state and that the application is receiving data from it.

Here's my `netstat` output
```
root@474683837e04:/app# netstat -ntuap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.11:38913 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1/python
tcp 25 0 172.24.0.3:34160 34.120.160.131:443 CLOSE_WAIT 1/python
tcp 1 0 172.24.0.3:58576 142.250.191.74:443 CLOSE_WAIT 1/python
tcp6 0 0 :::8080 :::* LISTEN 1/python
udp 0 0 127.0.0.11:54888 0.0.0.0:* -
```

Using connections with all of the `reference` related code commented out and then `netstat`'ing after shows that this issue does not appeare.

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.