You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Apr 2, 2026. It is now read-only.
Files.exists(gsPath) will sometimes throw an exception when a Path uses a bucket that doesn't exist.
Otherwise it returns true if the bucket doesn't exist. It seems like it should return false.
The truthyness depends on the psuedoDirectory settings.
Environment details
gcloud nio
OS type and version: all
Java version: all
version(s): current
Steps to reproduce
usePseudoDirectories = true
Files.exists() on a gs: path with a non existent bucket and no trailing /
com.google.cloud.storage.StorageException: The specified bucket does not exist.
Code example
It crashes only when there isn't a trailing / because of an inconsistency in the way the pseudo directories are handled.
com.google.cloud.storage.StorageException: The specified bucket does not exist.
at com.google.cloud.storage.spi.v1.HttpStorageRpc.translate(HttpStorageRpc.java:233)
at com.google.cloud.storage.spi.v1.HttpStorageRpc.list(HttpStorageRpc.java:376)
at com.google.cloud.storage.StorageImpl.lambda$listBlobs$11(StorageImpl.java:391)
at com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:105)
at com.google.cloud.RetryHelper.run(RetryHelper.java:76)
at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:50)
at com.google.cloud.storage.Retrying.run(Retrying.java:51)
at com.google.cloud.storage.StorageImpl.listBlobs(StorageImpl.java:388)
at com.google.cloud.storage.StorageImpl.list(StorageImpl.java:359)
at com.google.cloud.storage.contrib.nio.CloudStoragePath.seemsLikeADirectoryAndUsePseudoDirectories(CloudStoragePath.java:126)
at com.google.cloud.storage.contrib.nio.CloudStorageFileSystemProvider.checkAccess(CloudStorageFileSystemProvider.java:743)
at java.nio.file.Files.exists(Files.java:2385)
at com.google.cloud.storage.contrib.nio.it.ITGcsNio.assertNoCrashWhenBucketDoesntExist2(ITGcsNio.java:356)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at com.google.cloud.testing.junit4.MultipleAttemptsRule$1.evaluate(MultipleAttemptsRule.java:94)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)
Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found
Any additional information below
Following these steps guarantees the quickest resolution possible.
Files.exists(gsPath) will sometimes throw an exception when a Path uses a bucket that doesn't exist.
Otherwise it returns
trueif the bucket doesn't exist. It seems like it should returnfalse.The truthyness depends on the psuedoDirectory settings.
Environment details
Steps to reproduce
Code example
It crashes only when there isn't a trailing
/because of an inconsistency in the way the pseudo directories are handled.Stack trace
Any additional information below
Following these steps guarantees the quickest resolution possible.
Thanks!