damccorm opened a new issue, #19700:
URL: https://github.com/apache/beam/issues/19700

   Template parameters don't work if they are only used in DoFns but not 
anywhere else in main.
   
   Sample pipeline:
   
    
   ```
   
   import org.apache.beam.sdk.Pipeline;
   import org.apache.beam.sdk.options.PipelineOptions;
   import org.apache.beam.sdk.options.PipelineOptionsFactory;
   import
   org.apache.beam.sdk.options.ValueProvider;
   import org.apache.beam.sdk.transforms.Create;
   import org.apache.beam.sdk.transforms.DoFn;
   import
   org.apache.beam.sdk.transforms.ParDo;
   
   public class BugPipeline {
     public interface Options extends
   PipelineOptions {
       ValueProvider<String> getFoo();
       void setFoo(ValueProvider<String> foo);
   
    }
     public static void main(String[] args) throws Exception {
       Options options = 
PipelineOptionsFactory.fromArgs(args).as(Options.class);
   
      Pipeline p = Pipeline.create(options);
       p.apply(Create.of(1)).apply(ParDo.of(new DoFn<Integer,
   String>() {
         @ProcessElement
         public void processElement(ProcessContext context) {
      
       
System.out.println(context.getPipelineOptions().as(Options.class).getFoo());
         }   
       }));
   
      p.run();                                                                  
                      
                                                                                
                      
                                                                                
                      
                    
     }
   
   }
   
   
   ```
   
   
   Option "foo" is not used anywhere else than the DoFn. So to reproduce the 
problem:
   ```
   
   $java BugPipeline --project=$PROJECT --stagingLocation=$STAGING 
--templateLocation=$TEMPLATE --runner=DataflowRunner
   $gcloud
   dataflow jobs run $NAME --gcs-location=$TEMPLATE --parameters=foo=bar
   
   ```
   
   
   it will fail w/ this error:
   ```
   
   ERROR: (gcloud.dataflow.jobs.run) INVALID_ARGUMENT: (2621bec26c2488b7): The 
workflow could not be created.
   Causes: (2621bec26c248dba): Found unexpected parameters: ['foo' (perhaps you 
meant 'zone')]
   - '@type':
   type.googleapis.com/google.rpc.DebugInfo
     detail: "(2621bec26c2488b7): The workflow could not be created.
   Causes: (2621bec26c248dba):\
       \ Found unexpected parameters: ['foo' (perhaps you meant 'zone')]"
   
   ```
   
   
   The underlying problem is that ProxyInvocationHandler.java only populate 
options which are "invoked" to the pipeline option map in the job object:
   
https://github.com/apache/beam/blob/master/sdks/java/core/src/main/java/org/apache/beam/sdk/options/ProxyInvocationHandler.java#L159
   
   One way to solve it is to save all ValueProvider type of params in the 
pipelineoptions section. Alternatively, some registration mechanism can be 
introduced.
   
   A current workaround is to annotate the parameter with ```
   @Validation.Required
   ```
   , which will call invoke() behind the scene.
   
   
   
   Imported from Jira 
[BEAM-7983](https://issues.apache.org/jira/browse/BEAM-7983). Original Jira may 
contain additional context.
   Reported by: azurezyq.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to