seqeralabs / nf-tower

Nextflow Tower system
https://tower.nf
Mozilla Public License 2.0
147 stars 53 forks source link

Bad request with POST /workflow/launch #310

Open blue-moon22 opened 3 years ago

blue-moon22 commented 3 years ago

Hi there,

I am unable to launch a workflow on NF tower using curl:

curl -H "Authorization: Bearer $TOWER_ACCESS_TOKEN" -X POST "https://nf-tower.cellgeni.sanger.ac.uk/api/workflow/launch" --header "Content-Type: application/json" -d @"${json_file}"

I get: {"message":"Oops... Unable to process request - Error ID: 4FUAkaC61IGYxm8HWlaFNs"} I ran the same request last week and it worked, but using a different API URL before it was migrated to HTTPS http://nf-tower.cellgeni.sanger.ac.uk/api and a different compute environment. Other endpoints, like GET and POST /workflow/{workflowId}/cancel seem to work fine at the moment, so it suggests there is something wrong with this request or this endpoint specifically.

The content of the json_file is:

{"launch":{
"id": "e55accf1-a702-411c-97f3-ca7f85cc09ae",
"computeEnvId": "7Sj0IOIU0KRroOEqsTOys",
"pipeline": "https://gitlab.com/magnusmanske/amplicon-nextflow",
"workDir": "/lustre/scratch118/malaria/team112/personal/mm6/nextflow_tower",
"configProfiles": ["sanger_lsf"],
"configText": "",
"paramsText": "{\"input_dir\":\"/lustre/scratch118/malaria/team112/personal/mm6/aspis-demo-data/29770\",\"results_dir\": \"/lustre/scratch118/malaria/team112/personal/mm6/amplicon/32069/output\",\"bucket\": \"amplicon_pipeline/e55accf1-a702-411c-97f3-ca7f85cc09ae/\"}",
"preRunScript": "newgrp malariagendev\nmodule load nextflow/20.10.0-5430\nexport HTTP_PROXY=\"http://wwwcache.sanger.ac.uk:3128\"\nexport HTTPS_PROXY=\"http://wwwcache.sanger.ac.uk:3128\"",
"postRunScript": "",
"mainScript": "main.nf",
"entryName": "",
"schemaName": "",
"resume": false,
"pullLatest": true,
"stubRun": false,
"dateCreated": "2021-06-02T11:48:49Z"
}}

Let me know if you need anymore info. Thanks

pditommaso commented 3 years ago

This seems related to the following error stack trace

Jun-01 09:05:18.663 [default-nioEventLoopGroup-8-10] ERROR i.s.t.c.GlobalErrorController - Oops... Unable to process request - Error ID: 2xHf3WSHFvip9quWsu8G7o
javax.validation.ConstraintViolationException: save.arg0.schemaName: must match "[\p{Graph}&&[^/]]\p{Graph}+"
    at io.micronaut.validation.ValidatingInterceptor.intercept(ValidatingInterceptor.java:99)
    at io.micronaut.aop.chain.MethodInterceptorChain.proceed(MethodInterceptorChain.java:82)
    at io.seqera.tower.dao.LaunchDao$Intercepted.save(Unknown Source)
    at io.seqera.tower.service.launch.LaunchServiceImpl.createLaunch(LaunchServiceImpl.groovy:105)
    at io.seqera.tower.service.launch.$LaunchServiceImplDefinition$Intercepted.$$access2(Unknown Source)
    at io.seqera.tower.service.launch.$LaunchServiceImplDefinition$Intercepted$$proxy2.invokeInternal(Unknown Source)
    at io.micronaut.context.AbstractExecutableMethod.invoke(AbstractExecutableMethod.java:146)
    at io.micronaut.aop.chain.MethodInterceptorChain.proceed(MethodInterceptorChain.java:73)
    at io.micronaut.transaction.interceptor.TransactionalInterceptor.intercept(TransactionalInterceptor.java:108)
    at io.micronaut.aop.chain.MethodInterceptorChain.proceed(MethodInterceptorChain.java:82)
    at io.seqera.tower.service.launch.$LaunchServiceImplDefinition$Intercepted.createLaunch(Unknown Source)
    at io.seqera.tower.service.launch.LaunchServiceImpl.createLaunchFromWorkflow(LaunchServiceImpl.groovy:163)
    at io.seqera.tower.controller.WorkflowExController.submitLaunch0(WorkflowExController.groovy:187)
    at io.seqera.tower.controller.$WorkflowExControllerDefinition$Intercepted.$$access1(Unknown Source)
    at io.seqera.tower.controller.$WorkflowExControllerDefinition$Intercepted$$proxy1.invokeInternal(Unknown Source)
    at io.micronaut.context.AbstractExecutableMethod.invoke(AbstractExecutableMethod.java:146)
    at io.micronaut.aop.chain.MethodInterceptorChain.proceed(MethodInterceptorChain.java:73)
    at io.micronaut.transaction.interceptor.TransactionalInterceptor.intercept(TransactionalInterceptor.java:108)
    at io.micronaut.aop.chain.MethodInterceptorChain.proceed(MethodInterceptorChain.java:82)
    at io.seqera.tower.controller.$WorkflowExControllerDefinition$Intercepted.submitLaunch0(Unknown Source)
    at io.seqera.tower.controller.WorkflowExController.submitLaunch(WorkflowExController.groovy:161)
    at io.seqera.tower.controller.$WorkflowExControllerDefinition$$exec2.invokeInternal(Unknown Source)
    at io.micronaut.context.AbstractExecutableMethod.invoke(AbstractExecutableMethod.java:146)
    at io.micronaut.context.DefaultBeanContext$4.invoke(DefaultBeanContext.java:474)
    at io.micronaut.web.router.AbstractRouteMatch.execute(AbstractRouteMatch.java:312)
    at io.micronaut.web.router.RouteMatch.execute(RouteMatch.java:118)
    at io.micronaut.http.server.netty.RoutingInBoundHandler.lambda$buildResultEmitter$10(RoutingInBoundHandler.java:1365)
    at io.reactivex.internal.operators.flowable.FlowableDefer.subscribeActual(FlowableDefer.java:35)
    at io.reactivex.Flowable.subscribe(Flowable.java:14918)
    at io.reactivex.Flowable.subscribe(Flowable.java:14865)
    at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.run(FlowableSubscribeOn.java:82)
    at io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker$BooleanRunnable.run(ExecutorScheduler.java:288)
    at io.reactivex.internal.schedulers.ExecutorScheduler$ExecutorWorker.run(ExecutorScheduler.java:253)
    at io.micronaut.scheduling.instrument.InvocationInstrumenterWrappedRunnable.run(InvocationInstrumenterWrappedRunnable.java:47)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)

That suggests the validation for "schemaName": "", is failing because is interpreting "" as a presence of a value that does not match the expected regex. Try removing it, same for all the other empty strings

blue-moon22 commented 3 years ago

Just tried:

{"launch":{
"id": "fa520957-049a-4ec7-a1a9-bbf9689fdd3a",
"computeEnvId": "7Sj0IOIU0KRroOEqsTOys",
"pipeline": "https://gitlab.com/magnusmanske/amplicon-nextflow",
"workDir": "/lustre/scratch118/malaria/team112/personal/mm6/nextflow_tower",
"configProfiles": ["sanger_lsf"],
"paramsText": "{\"input_dir\":\"/lustre/scratch118/malaria/team112/personal/mm6/aspis-demo-data/29770\",\"results_dir\": \"/lustre/scratch118/malaria/team112/personal/mm6/amplicon/32069/output\",\"bucket\": \"amplicon_pipeline/fa520957-049a-4ec7-a1a9-bbf9689fdd3a/\"}",
"preRunScript": "newgrp malariagendev\nmodule load nextflow/20.10.0-5430\nexport HTTP_PROXY=\"http://wwwcache.sanger.ac.uk:3128\"\nexport HTTPS_PROXY=",
"mainScript": "main.nf",
"resume": false,
"pullLatest": true,
"stubRun": false,
"dateCreated": "2021-06-02T11:59:28Z"
}}

And success! Thanks