apache / apache/libcloud

InvalidCredsError with upload_object_via_stream() on Aurora Objects

オープン
#1,657 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Python
スター
2.1k
フォーク
931
平均マージ
1日 2時間
マージ済み PR(30日)
4

説明

## Summary

When trying to upload a file to Aurora Objects through `upload_object_via_stream()`, I get an `InvalidCredsError`.

## Detailed Information

When I try the following code:

```python3
from libcloud.storage.types import Provider
from libcloud.storage.providers import get_driver

cls = get_driver(Provider.AURORAOBJECTS)
driver = cls('api-key', 'secret-key')

container = driver.get_container('container')

container.upload_object_via_stream(iter([b'test']), 'test.txt')
```

It results in the following error:

```
Traceback (most recent call last):
File "", line 1, in
File "/home/wout/project/.venv/lib/python3.9/site-packages/libcloud/storage/base.py", line 216, in upload_object_via_stream
return self.driver.upload_object_via_stream(
File "/home/wout/project/.venv/lib/python3.9/site-packages/libcloud/storage/drivers/s3.py", line 747, in upload_object_via_stream
return self._put_object_multipart(container=container,
File "/home/wout/project/.venv/lib/python3.9/site-packages/libcloud/storage/drivers/s3.py", line 988, in _put_object_multipart
upload_id = self._initiate_multipart(container, object_name,
File "/home/wout/project/.venv/lib/python3.9/site-packages/libcloud/storage/drivers/s3.py", line 572, in _initiate_multipart
response = self.connection.request(request_path, method='POST',
File "/home/wout/project/.venv/lib/python3.9/site-packages/libcloud/common/base.py", line 667, in request
response = responseCls(**kwargs)
File "/home/wout/project/.venv/lib/python3.9/site-packages/libcloud/common/base.py", line 167, in __init__
message=self.parse_error(),
File "/home/wout/project/.venv/lib/python3.9/site-packages/libcloud/storage/drivers/s3.py", line 138, in parse_error
raise InvalidCredsError(self.body)
libcloud.common.types.InvalidCredsError: 'SignatureDoesNotMatchtx00000000000004e0ebfe5-00620a68e9-1d4a885a-ams021d4a885a-ams02-eu'
```

However `upload_object()` is working fine as follows:

```python3
from libcloud.storage.types import Provider
from libcloud.storage.providers import get_driver

cls = get_driver(Provider.AURORAOBJECTS)
driver = cls('api-key', 'secret-key')

container = driver.get_container('container')

container.upload_object('test.txt', 'test.txt')
```

I am using Python 3.9.8-1 on Debian unstable with Libcloud 3.4.1.

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

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

調査の方向性

libcloud/storage/drivers/s3.py の upload_object_via_stream()、_put_object_multipart()、_initiate_multipart() から始め、その経路を動作している upload_object() の経路と比較します。Aurora Objects の例を再現し、multipart 開始リクエストを追跡します。SignatureDoesNotMatch や InvalidCredsError が発生せずにストリーミングアップロードが成功すれば完了です。

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

評価

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

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

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