firebase / firebase/firebase-admin-python

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

オープン
#709 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
api: database type: bug
主要言語
Python
スター
1.2k
フォーク
359
平均マージ
5日 6分
マージ済み PR(30日)
2

説明

### 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.

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。