C++调用GCP创建快照API偶发失败 同参数Postman调用正常
GCP磁盘快照API偶发异常可能原因
- 异步操作处理逻辑错误
GCP磁盘快照创建接口https://compute.googleapis.com/compute/v1/projects/{projectName}/zones/{diskLocation}/disks/{diskName}/createSnapshot为异步接口,调用后首先返回的是长期运行Operation资源,而非直接完成快照创建。若代码中存在两类逻辑错误会触发异常:
- 调用创建接口后立即发起快照资源GET查询,此时快照尚未生成,直接返回404
- 误将Operation接口返回的200状态码判定为快照创建成功,未等待Operation执行完成就结束流程,就会出现返回200但无快照生成的情况
HTTP客户端重定向处理缺陷
多数C++ HTTP客户端库默认开启自动重定向时,会将POST请求在重定向时自动转换为GET请求并丢弃请求体。若GCP API对创建请求返回3xx重定向,代码的HTTP客户端未正确处理的情况下,会导致实际发往服务端的是无请求体的GET请求,服务端返回200但不会执行快照创建逻辑;同时快照查询请求如果未正确跟随重定向,也会触发404错误。请求参数动态构造偶发错误
Postman使用固定参数请求无异常,说明动态参数构造环节可能存在问题:比如多线程场景下参数变量被意外篡改、拼接参数时未正确处理特殊字符的URL编码、多环境配置切换时偶发串用错误的项目ID/区域/磁盘名称参数,都会导致请求指向不存在的资源,返回404,或创建请求参数非法被服务端拦截。GCP资源元数据最终一致性延迟
GCP全局资源的元数据存在同步延迟,快照实际创建完成后,全局快照查询接口可能需要数百毫秒到数秒的同步时间才能返回正确结果,若代码中未配置查询重试和退避策略,就会偶发查询404的问题。
内容的提问来源于stack exchange,提问作者Rackware GCP Account
相关产品推荐
相关产品推荐

