com.google.cloud.storage.StorageException 404 in blob.getCon



我正在运行在GCP存储桶中创建或更新对象的服务。即我的代码检查对象是否存在,并且是否执行我的代码会读取它,将其更新并写回。有时候,我在尝试读取对象时会得到一个例外。我的代码:

Storage storage = googleStorage.get();
BlobId blobId = BlobId.of(STORAGE_BUCKET, "path/to.obj"));
Blob blob = storage.get(blobId);
if (blob == null) return null;
byte[] blobContent = blob.getContent();
...

stacktrace:

...
at com.google.cloud.storage.Blob.getContent(Blob.java:455)
at com.google.cloud.storage.StorageImpl.readAllBytes(StorageImpl.java:461)
at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:51)
at com.google.cloud.RetryHelper.run(RetryHelper.java:74)
at com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:89)
at com.google.cloud.storage.StorageImpl$16.call(StorageImpl.java:461)
at com.google.cloud.storage.StorageImpl$16.call(StorageImpl.java:464)
at com.google.cloud.storage.spi.v1.HttpStorageRpc.load(HttpStorageRpc.java:588)
at com.google.cloud.storage.spi.v1.HttpStorageRpc.translate(HttpStorageRpc.java:220)
No such object: bucket/path/to.obj
com.google.cloud.storage.StorageException: 404 Not Found

如果对象不存在,我希望在blob中获得null,或者如果blob不是null。

此行为导致对象被多次更新(不确定这是因为我的代码重新拨打了调用还是由于存储库正在执行的操作(。

我正在使用Google-cloud-Storage 1.27.0,它发生了大约每〜10k对象。

我已经测试了您提供的代码,并且似乎以所需的方式工作 - 如果无法找到云存储对象或路径为不正确。

失败的发生率非常微不足道。也许,如果您使用RetryParams类配置指数向后,则可以消除或减少这些失败的影响。

您不需要BlobId。您可以使用此方法:

Blob blob = storage.get(bucketName).get(pathToObject);

如果在指定路径上不存在斑点,此方法将返回null

最新更新