lostluck commented on a change in pull request #11144: [BEAM-3301] Perform SDF 
validation (missing RestrictionTrackers).
URL: https://github.com/apache/beam/pull/11144#discussion_r394725254
 
 

 ##########
 File path: sdks/go/pkg/beam/core/graph/fn.go
 ##########
 @@ -569,6 +622,188 @@ func validateSideInputsNumUnknown(processFnInputs 
[]funcx.FnParam, method *funcx
        return nil
 }
 
+// validateSdfMethods validates that all SDF methods are either present or
+// missing in a Fn, and then returns true if they're present and false
+// otherwise. If some are present and some are missing, it returns an error.
+func validateSdfMethodsPresent(fn *Fn) (bool, error) {
+       // Check if first sdf method is present or not, and compare all 
subsequent
+       // methods to that result. If there's a mismatch, then we only fail 
after
+       // finishing the loop so we can output all the missing methods.
+       missing := make([]string, 0)
+       var first, fail bool
+
+       for i, name := range sdfNames {
+               _, ok := fn.methods[name]
+               if !ok {
+                       missing = append(missing, name)
+               }
+
+               if i == 0 {
+                       first = ok
+               } else if ok != first {
+                       fail = true
+               }
+       }
+
+       if fail {
+               err := errors.Errorf("not all SplittableDoFn methods are 
present. Missing methods: %v", missing)
+               return false, err
+       }
+
+       return first, nil
 
 Review comment:
   I see that this function is trying to distinguish between partial coverage 
or complete coverage, but I think it could be simpler.
   
   Consider that the booleans could be removed by comparing whether 
len(missing) == len(sdfNames) to check if it's simply not an SDF at all (and 
thus, no error should be returned). 
   
   ```
   switch len(missing) {
   case 0: 
     return true, nil
   case len(sdfNames): 
     return false, nil
   default:
     err := errors.Errorf("not all SplittableDoFn methods are present. Missing 
methods: %v", missing)
     return false, err
   }
   ```
   

----------------------------------------------------------------
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.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to