Skip to content

Marshall error when checking attributes of an S3 bucket path #6704

@jorgee

Description

@jorgee

Bug report

Expected behavior and actual behavior

When defining a S3Path with only the bucket name, the exists() methid should return true|false or an access denied error. However, it returns a strange marshall error. Versions before 25.10 seems to work correctly. It is a regression of the AWS SDK v2 update.

Steps to reproduce the problem

Use nf-schema validation for a Path parameter providing a bucket path such as s3://annotatation-cache/ or run this pipeline

workflow{
    f = file('s3://annotatation-cache/')
    println("Exists: ${f.exists()}")
    println("Directory: ${f.isDirectory()}")
}

Program output

The execution stdout:

 N E X T F L O W   ~  version 25.10.0

Launching `main2.nf` [stupefied_darwin] DSL2 - revision: b532f504e0

ERROR ~ Unable to marshall request to JSON: Key cannot be empty.

 -- Check script 'main2.nf' at line: 3 or see '.nextflow.log' file for more details

And the exception:

software.amazon.awssdk.core.exception.SdkClientException: Unable to marshall request to JSON: Key cannot be empty.
        at software.amazon.awssdk.core.exception.SdkClientException$BuilderImpl.build(SdkClientException.java:130)
        at software.amazon.awssdk.services.s3.transform.HeadObjectRequestMarshaller.marshall(HeadObjectRequestMarshaller.java:53)
        at software.amazon.awssdk.services.s3.transform.HeadObjectRequestMarshaller.marshall(HeadObjectRequestMarshaller.java:31)
        at software.amazon.awssdk.core.internal.handler.BaseClientHandler.lambda$finalizeSdkHttpFullRequest$0(BaseClientHandler.java:73)
        at software.amazon.awssdk.core.internal.util.MetricUtils.measureDuration(MetricUtils.java:64)
        at software.amazon.awssdk.core.internal.handler.BaseClientHandler.finalizeSdkHttpFullRequest(BaseClientHandler.java:72)
        at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.doExecute(BaseSyncClientHandler.java:151)
        at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.lambda$execute$1(BaseSyncClientHandler.java:80)
        at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.measureApiCallSuccess(BaseSyncClientHandler.java:182)
        at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.execute(BaseSyncClientHandler.java:74)
        at software.amazon.awssdk.core.client.handler.SdkSyncClientHandler.execute(SdkSyncClientHandler.java:45)
        at software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler.execute(AwsSyncClientHandler.java:53)
        at software.amazon.awssdk.services.s3.DefaultS3Client.headObject(DefaultS3Client.java:7623)
        at software.amazon.awssdk.services.s3.DelegatingS3Client.lambda$headObject$59(DelegatingS3Client.java:6180)
        at software.amazon.awssdk.services.s3.internal.crossregion.S3CrossRegionSyncClient.invokeOperation(S3CrossRegionSyncClient.java:67)
        at software.amazon.awssdk.services.s3.DelegatingS3Client.headObject(DelegatingS3Client.java:6180)
        at nextflow.cloud.aws.nio.S3Client.lambda$getObjectMetadata$8(S3Client.java:288)
        at nextflow.cloud.aws.nio.S3Client.runWithPermit(S3Client.java:106)
        at nextflow.cloud.aws.nio.S3Client.getObjectMetadata(S3Client.java:288)
        at nextflow.cloud.aws.nio.util.S3ObjectSummaryLookup.lookup(S3ObjectSummaryLookup.java:55)
        at nextflow.cloud.aws.nio.S3FileSystemProvider.checkAccess(S3FileSystemProvider.java:586)
        at java.base/java.nio.file.spi.FileSystemProvider.exists(FileSystemProvider.java:1202)
        at java.base/java.nio.file.Files.exists(Files.java:2514)
        at org.codehaus.groovy.vmplugin.v8.IndyInterface.selectMethod(IndyInterface.java:355)
        at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321)
        at nextflow.extension.FilesEx.exists(FilesEx.groovy:456)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at org.codehaus.groovy.runtime.metaclass.ReflectionMetaMethod.invoke(ReflectionMetaMethod.java:59)
        at org.codehaus.groovy.runtime.metaclass.NewInstanceMetaMethod.invoke(NewInstanceMetaMethod.java:57)
        at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328)
        at groovy.lang.MetaClassImpl.doInvokeMethod(MetaClassImpl.java:1339)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1094)
        at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1007)
        at groovy.runtime.metaclass.NextflowDelegatingMetaClass.invokeMethod(NextflowDelegatingMetaClass.java:64)
        at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321)
        at Script_9b457c005298fdf8$_runScript_closure1$_closure2.doCall(Script_9b457c005298fdf8:3)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343)

Environment

  • Nextflow version: 25.10.0
  • Operating system: Linux

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions