googleapis / googleapis/python-aiplatform

Execution.create() fails with 503 due to credentials annotation typo

Đang mở Phù hợp với người mới
#6,610 0 bình luận 1 reaction 0 người được giao Xem trên GitHub
api: vertex-ai
Ngôn ngữ chính
Python
Star
905
Fork
465
Merge trung bình
1 ngày 13 giờ
Pull request đã merge (30 ngày)
44

Mô tả

## Bug

`google.cloud.aiplatform.metadata.execution.Execution.create()` fails with a 503 error when called without explicitly passing `credentials=`:

```
503 Getting metadata from plugin failed with error: before_request
```

### Root cause

Two issues in `google/cloud/aiplatform/metadata/execution.py`:

**1. `credentials` parameter annotation typo (high severity)**

Both `create()` and `_create()` use `=` instead of `:` for the credentials type annotation:

```python
# Current (broken) -- execution.py lines 103, 181:
credentials=Optional[auth_credentials.Credentials],

# Should be (matches artifact.py, context.py):
credentials: Optional[auth_credentials.Credentials] = None,
```

Because `=` is used instead of `:`, the default value is the `typing.Optional[google.auth.credentials.Credentials]` type object itself (a `_UnionGenericAlias`), not `None`. This non-None type object is passed down to the gRPC auth stack, which attempts to call `.before_request()` on it, producing the 503.

Introduced in PR #1410 (June 2022). `artifact.py` and `context.py` both have the correct `: ... = None` syntax.

**2. Missing `ensure_default_metadata_store_exists()` call (lower severity)**

`Artifact.create()` calls `metadata_store._MetadataStore.ensure_default_metadata_store_exists()` before delegating to `_create()`. `Execution.create()` skips this call entirely. This means standalone `Execution.create()` will also fail if the default metadata store hasn't been implicitly created by a prior `Artifact.create()` or `aiplatform.init(experiment=...)` call. `Context.create()` has the same gap but is not addressed here.

### Reproduction

```python
from google.cloud import aiplatform
from google.cloud.aiplatform.metadata import execution as metadata_execution
from google.cloud.aiplatform.compat.types import execution as gca_execution

aiplatform.init(project="my-project", location="us-central1")

# This fails with 503:
exec_obj = metadata_execution.Execution.create(
schema_title="system.CustomJob",
resource_id="test-execution",
display_name="test",
state=gca_execution.Execution.State.COMPLETE,
metadata={"component_type": "custom_job"},
)
```

### Workaround

Call `ensure_default_metadata_store_exists()` manually, which also initializes credentials properly:

```python
from google.cloud.aiplatform.metadata import metadata_store
metadata_store._MetadataStore.ensure_default_metadata_store_exists(
project="my-project", location="us-central1",
)
# Now Execution.create() works
```

### Fix

Two changes to `execution.py`:
1. Fix `credentials=Optional[auth_credentials.Credentials]` to `credentials: Optional[auth_credentials.Credentials] = None` on both `create()` and `_create()`
2. Add the `ensure_default_metadata_store_exists()` call in `create()` (matching `Artifact.create()`)

### Environment

- google-cloud-aiplatform 1.140.0
- Python 3.13.2
- macOS / Vertex AI training containers (both affected)

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu trong google/cloud/aiplatform/metadata/execution.py tại các định nghĩa create() và _create(), sau đó so sánh các tham số credentials và luồng khởi tạo của chúng với artifact.py và context.py. Chạy bản tái hiện độc lập được cung cấp của Execution.create(); hoàn tất khi annotation và thiết lập metadata-store mặc định khớp với hành vi được issue yêu cầu, đồng thời lệnh gọi không còn thất bại với lỗi 503 đã báo cáo.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
google-cloud, python
Lĩnh vực
api, machine-learning
Loại issue
Lỗi
Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức độ hoạt động
Ít trao đổi
Độ rõ ràng
Đặc tả rõ ràng
Mức phù hợp với người mới
78/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.