fix(runner): 修复图像结果转存与任务租约失效
修正非语义字段长 Base64 元数据被误判为媒体的问题,并允许按文件签名识别真实媒体后转存 OSS;同时将网关本地存储失败与上游失败分离,避免重复调用和错误降权。 异步任务复用已分配并发名额前立即刷新租约,租约已丢失时重新排队获取,避免排队耗时侵蚀租约后错误调用上游。生产环境关闭 server-main 尚未实现的进度回调,保留 Gateway 任务详情与事件查询。 验证:API 全量 go test、go vet、gofmt、Kubernetes 渲染、迁移安全检查及真实阿里云 OSS 读写/生命周期验收通过。
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package runner
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"crypto/sha256"
|
||||
"encoding/base64"
|
||||
@@ -311,6 +312,24 @@ func TestHistoricalLocalBinaryStorageUnavailableDoesNotRetryProvider(t *testing.
|
||||
}
|
||||
}
|
||||
|
||||
func TestTaskResultIgnoresLongOpaqueBase64Metadata(t *testing.T) {
|
||||
opaque := base64.StdEncoding.EncodeToString([]byte(strings.Repeat("opaque metadata ", 400)))
|
||||
result := map[string]any{"thought_signature": opaque}
|
||||
|
||||
if TaskResultHasInlineBinary(result) {
|
||||
t.Fatal("opaque Base64 metadata must not be mistaken for generated media")
|
||||
}
|
||||
}
|
||||
|
||||
func TestTaskResultDetectsLongBase64MediaWithoutSemanticKey(t *testing.T) {
|
||||
payload := append([]byte{0x89, 'P', 'N', 'G', 0x0d, 0x0a, 0x1a, 0x0a}, bytes.Repeat([]byte{0}, 4096)...)
|
||||
result := map[string]any{"provider_payload": base64.StdEncoding.EncodeToString(payload)}
|
||||
|
||||
if !TaskResultHasInlineBinary(result) {
|
||||
t.Fatal("signature-detected generated media must still be materialized")
|
||||
}
|
||||
}
|
||||
|
||||
func bytesToAny(payload []byte) []any {
|
||||
result := make([]any, len(payload))
|
||||
for index, value := range payload {
|
||||
|
||||
Reference in New Issue
Block a user