Azure / Azure/azure-functions-python-library

[BUG] Service Bus Session ID is not available to Function code

オープン
#103 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る
bug needs-investigation
主要言語
Python
スター
179
フォーク
79
平均マージ
2日 8時間
マージ済み PR(30日)
2

説明

### Investigative information
###### Please provide the following:
IcM: 283549053 has an impacted function app with relevant detail

### Repro steps
1. Create a Function App that triggers off a Service bus session enabled queue.
###### Provide the steps required to reproduce the problem:

### Expected behavior
###### Provide a description of the expected behavior.

### Actual behavior
###### Provide a description of the actual behavior observed.

### Known workarounds
###### Provide a description of any known workarounds.
Fetch the session id from the nested field in the message:
msg.metadata["MessageSession"]["SessionId"]

### Contents of the requirements.txt file:
###### Provide the requirements.txt file to help us find out module related issues.
N/A

### Related information
###### Provide any related information

* Bindings used: Service Bus

```python
def main(msg: func.ServiceBusMessage):
logging.info('Python ServiceBus queue trigger processed message: %s',
msg.get_body().decode('utf-8'))
logging.info('Python msg.session_id - : %s', msg.metadata["MessageSession"]["SessionId"])
logging.info('Python msg.session_id1 - : %s', msg.session_id)
```

Output
```logs
[2022-02-09T00:36:58.242Z] Python msg.session_id - : {12229E1-B37B-4D29-AA0A-E367906C206E}
[2022-02-09T00:36:58.242Z] Python msg.session_id1 - : None
```

The [location where library sets session_id](https://github.com/Azure/azure-functions-python-library/blob/dev/azure/functions/servicebus.py#L274-L275).

```bash
curl -H "Authorization: SharedAccessSignature sr=SERVICE_BUS.servicebus.windows.net%2FINPUT_QUEUE&sig=XXXXXX&se=YYY&skn=RootManageSharedAccessKey" \
-H 'BrokerProperties: {"SessionId": "{12229E1-B37B-4D29-AA0A-E367906C206E}"}' \
-H "Content-Type: application/json" \
-d "HelloWorld" \
-X POST -i "https://servicebus-test-vameru.servicebus.windows.net/myinputqueue/messages\?timeout\=60"

HTTP/1.1 201 Created
Transfer-Encoding: chunked
Content-Type: application/xml; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
Strict-Transport-Security: max-age=31536000
Date: Wed, 09 Feb 2022 00:36:57 GMT
```

The Complete Metadata
```json
{
"UserProperties": {},
"DeliveryCount": 1,
"LockToken": "fc949e24-410f-4a78-853b-7b8ce125cb99",
"MessageSession": {
"LockedUntilUtc": "2022-02-08T22: 30: 52.33697Z",
"SessionId": "{17729E1-B37B-4D29-AA0A-E367906C206E}",
"RegisteredPlugins": [],
"ReceiveMode": 0,
"PrefetchCount": 0,
"LastPeekedSequenceNumber": 0,
"Path": "myinputqueue",
"OperationTimeout": "00: 01: 00",
"ServiceBusConnection": {
"Endpoint": "sb://servicebus-test-vameru.servicebus.windows.net",
"OperationTimeout": "00:01:00",
"RetryPolicy": {
"MinimalBackoff": "00:00:00",
"MaximumBackoff": "00:00:30",
"DeltaBackoff": "00:00:03",
"MaxRetryCount": 5,
"IsServerBusy": False,
"ServerBusyExceptionMessage": None
},
"TransportType": 0,
"TokenProvider": {},
"IsClosedOrClosing": False
},
"IsClosedOrClosing": False,
"OwnsConnection": False,
"ClientId": "MessageSession27myinputqueue_{17729E1-B37B-4D29-AA0A-E367906C206E}",
"RetryPolicy": {
"MinimalBackoff": "00:00:00",
"MaximumBackoff": "00:00:30",
"DeltaBackoff": "00:00:03",
"MaxRetryCount": 5,
"IsServerBusy": False,
"ServerBusyExceptionMessage": None
}
},
"ContentType": "application/json",
"SequenceNumber": 13,
"MessageReceiver": {
"LockedUntilUtc": "2022-02-08T22:30:52.33697Z",
"SessionId": "{17729E1-B37B-4D29-AA0A-E367906C206E}",
"RegisteredPlugins": [],
"ReceiveMode": 0,
"PrefetchCount": 0,
"LastPeekedSequenceNumber": 0,
"Path": "myinputqueue",
"OperationTimeout": "00:01:00",
"ServiceBusConnection": {
"Endpoint": "sb://servicebus-test-vameru.servicebus.windows.net",
"OperationTimeout": "00:01:00",
"RetryPolicy": {
"MinimalBackoff": "00:00:00",
"MaximumBackoff": "00:00:30",
"DeltaBackoff": "00:00:03",
"MaxRetryCount": 5,
"IsServerBusy": False,
"ServerBusyExceptionMessage": None
},
"TransportType": 0,
"TokenProvider": {},
"IsClosedOrClosing": False
},
"IsClosedOrClosing": False,
"OwnsConnection": False,
"ClientId": "MessageSession27myinputqueue_{17729E1-B37B-4D29-AA0A-E367906C206E}",
"RetryPolicy": {
"MinimalBackoff": "00:00:00",
"MaximumBackoff": "00:00:30",
"DeltaBackoff": "00:00:03",
"MaxRetryCount": 5,
"IsServerBusy": False,
"ServerBusyExceptionMessage": None
}
},
"EnqueuedTimeUtc": "2022-02-08T22:22:19.292Z",
"ExpiresAtUtc": "2022-02-22T22:22:19.292Z",
"MessageId": "806c77a2924441fe855697d39647e096"
}
```

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

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

まず azure/functions/servicebus.py の274~275行目付近を読み、セッションが有効なメッセージがネストされたメタデータの回避策を使って msg.session_id に値を設定する方法と比較してください。Service Bus のセッションキューの例を再現し、そのうえで、既存のメッセージメタデータの動作を維持したまま、msg.session_id が SessionId を公開することを確認してください。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
azure, python
領域
backend, distributed-systems
issue の種類
バグ
難易度
2/5
見積もり時間
1〜3時間
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
45/100

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

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