nextflow icon indicating copy to clipboard operation
nextflow copied to clipboard

process.executor is not recognized for certain nextflow versions and process orders in the configs

Open replikation opened this issue 2 years ago • 9 comments

Bug report

Expected behavior and actual behavior

TLDR: process.executor = 'google-lifesciences' is not recognized for certain nextflow versions if its written before another process {} statment.

We have certain google life science workflows that run without issues with nextflow version nextflow.21.06. We noticed that with the newer nextflow versions these workflows are running locally and not in the cloud. with e.g. nextflow.22.06.0-edge or 22.04.3 build 5703. After trying out simplistic mock workflows I could narrow it down to the config file and the order process code appears.

Steps to reproduce the problem

The below config examples were simplified down but still tested to reproduce the bug. We normally use includeConfig statements instead of multiple process statements in one file.

NOT WORKING: This configuration does NOT run in the cloud with process.executor before the additional process { } statment. It runs it locally

profiles {
    cloud { 

        process.executor = 'google-lifesciences'

	process {
    		withLabel:  ubuntu       { container = 'nanozoo/template:3.8--e13dfeb' }
	}
	
        workDir = "/tmp/nextflow"
        docker { enabled = true }
        bucketDir = '***'
        google {  
            project = '***'
            zone = 'europe-west1-b'
        }
    }
}

(replaced google infos with **** but they are the same between both configs)

WORKING: This configuration runs fine in the cloud with the process.executor after the additional process { } statment.

profiles {
    cloud { 

	process {
    		withLabel:  ubuntu       { container = 'nanozoo/template:3.8--e13dfeb' }
	}

        process.executor = 'google-lifesciences'
	
        workDir = "/tmp/nextflow"
        docker { enabled = true }
        bucketDir = '***'
        google {  
            project = '***'
            zone = 'europe-west1-b'
        }
    }
}


Additionally, this issue seems only to occur with a process { } not with single-line statements like process. Moreover in the working example the withLabel: ubuntu is recognized as the cloud needs a container to run or it errors.

Program output

no errors, it's just not recognizing the executor statement?

Environment

bug NOT in nextflow.21.06. bug detected in nextflow.22.06.0-edge an 22.04.3 build 5703 no other version were tested

  • Java version: openjdk 11.0.15 2022-04-19
  • Operating system: Ubuntu 20.04.4 LTS
  • Bash version: GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)

replikation avatar Jun 16 '22 14:06 replikation

Yes, this is a known issue

To cover corner cases in configuration ( see #2701 for example) ConfigParser has been changed.

The main problem is dot annotation is evaluated by the compiler in a different way than closure annotation so the best approach is not to mix both of them or use first the closure annotation to initialize the config map properly

sorry for the inconvenience.

Probably documentation needs to be improved to explain this issue

jorgeaguileraseqera avatar Jun 17 '22 09:06 jorgeaguileraseqera

Thanks for responding.

I see #2701 has a similar problem. We are managing several config files across multiple profile to reduce the Code management (e.g. a container config to just specifiy images shared across a few profiles). The new nextflow versions now make this difficult especially as no warning or information is provided that certain statements are ignored.

Does this mean this bug won't be fixed? This would make configurations really unreliable if some of them are ignored.

replikation avatar Jun 17 '22 11:06 replikation

@jorgeaguileraseqera in the future, would not a simple json formatted config make this easier/ more reliable? #featureRequest

phiweger avatar Jun 17 '22 12:06 phiweger

@jorgeaguileraseqera in the future, would not a simple json formatted config make this easier/ more reliable? #featureRequest

@phiweger is not only about the format. Json, Yaml or Toml are valid format (in fact there is an issue created about them) but also include configurations, interpolation, variable resolution and so on

jorgeaguileraseqera avatar Jun 17 '22 13:06 jorgeaguileraseqera

Does this mean this bug won't be fixed? This would make configurations really unreliable if some of them are ignored.

@replikation no, no, my comment was more as providing a workaround (move dot annotation after closure) meanwhile the issue is investigated

jorgeaguileraseqera avatar Jun 17 '22 13:06 jorgeaguileraseqera

@jorgeaguileraseqera thanks for clarifying.

replikation avatar Jun 17 '22 20:06 replikation

There is a warning about this issue in the docs: https://www.nextflow.io/docs/latest/config.html#config-profiles

But the warning talks specifically about profiles whereas it seems the error happens regardless of whether the process block is inside a profile.

bentsherman avatar Jun 18 '22 22:06 bentsherman

Can't see how this applies as I specified the executer only once. I don't know so this might be attributed to nextflow automatically specifying the Local executer or so?

replikation avatar Jun 18 '22 22:06 replikation

The linked warning shows the same problem explained by Jorge, defining process settings first by dot notation and then by closure. Just putting it here to help anyone who comes across this thread. I suspect this problem will need to be solved as part of a larger overhaul of the config system. For now the workaround is to move the dot notation settings after the closure settings, or avoid using both at the same time.

bentsherman avatar Jun 20 '22 12:06 bentsherman

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

stale[bot] avatar Jan 16 '23 01:01 stale[bot]

reupping this

phiweger avatar Mar 18 '23 13:03 phiweger