jerrypeng commented on a change in pull request #4281: Don't create new 
instances of user classes during validation
URL: https://github.com/apache/pulsar/pull/4281#discussion_r284499938
 
 

 ##########
 File path: 
pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/ValidatorUtils.java
 ##########
 @@ -132,75 +132,75 @@ private static void validateSchemaType(String 
schemaClassName, Class<?> typeArg,
         }
     }
 
-    public static void validateFunctionClassTypes(ClassLoader classLoader, 
Function.FunctionDetails.Builder functionDetailsBuilder) {
-
-        // validate only if classLoader is provided
-        if (classLoader == null) {
-            return;
-        }
-
-        if (isBlank(functionDetailsBuilder.getClassName())) {
-            throw new IllegalArgumentException("Function class-name can't be 
empty");
-        }
-
-        // validate function class-type
-        Object functionObject = 
createInstance(functionDetailsBuilder.getClassName(), classLoader);
-        Class<?>[] typeArgs = FunctionCommon.getFunctionTypes(functionObject, 
false);
-
-        if (!(functionObject instanceof 
org.apache.pulsar.functions.api.Function)
-                && !(functionObject instanceof java.util.function.Function)) {
-            throw new RuntimeException("User class must either be Function or 
java.util.Function");
-        }
-
-        if (functionDetailsBuilder.hasSource() && 
functionDetailsBuilder.getSource() != null
-                && 
isNotBlank(functionDetailsBuilder.getSource().getClassName())) {
-            try {
-                String sourceClassName = 
functionDetailsBuilder.getSource().getClassName();
-                String argClassName = 
FunctionCommon.getTypeArg(sourceClassName, Source.class, classLoader).getName();
-                functionDetailsBuilder
-                        
.setSource(functionDetailsBuilder.getSourceBuilder().setTypeClassName(argClassName));
-
-                // if sink-class not present then set same arg as source
-                if (!functionDetailsBuilder.hasSink() || 
isBlank(functionDetailsBuilder.getSink().getClassName())) {
-                    functionDetailsBuilder
-                            
.setSink(functionDetailsBuilder.getSinkBuilder().setTypeClassName(argClassName));
-                }
-
-            } catch (IllegalArgumentException ie) {
-                throw ie;
-            } catch (Exception e) {
-                log.error("Failed to validate source class", e);
-                throw new IllegalArgumentException("Failed to validate source 
class-name", e);
-            }
-        } else if 
(isBlank(functionDetailsBuilder.getSourceBuilder().getTypeClassName())) {
-            // if function-src-class is not present then set function-src 
type-class according to function class
-            functionDetailsBuilder
-                    
.setSource(functionDetailsBuilder.getSourceBuilder().setTypeClassName(typeArgs[0].getName()));
-        }
-
-        if (functionDetailsBuilder.hasSink() && 
functionDetailsBuilder.getSink() != null
-                && 
isNotBlank(functionDetailsBuilder.getSink().getClassName())) {
-            try {
-                String sinkClassName = 
functionDetailsBuilder.getSink().getClassName();
-                String argClassName = FunctionCommon.getTypeArg(sinkClassName, 
Sink.class, classLoader).getName();
-                
functionDetailsBuilder.setSink(functionDetailsBuilder.getSinkBuilder().setTypeClassName(argClassName));
-
-                // if source-class not present then set same arg as sink
-                if (!functionDetailsBuilder.hasSource() || 
isBlank(functionDetailsBuilder.getSource().getClassName())) {
-                    functionDetailsBuilder
-                            
.setSource(functionDetailsBuilder.getSourceBuilder().setTypeClassName(argClassName));
-                }
-
-            } catch (IllegalArgumentException ie) {
-                throw ie;
-            } catch (Exception e) {
-                log.error("Failed to validate sink class", e);
-                throw new IllegalArgumentException("Failed to validate sink 
class-name", e);
-            }
-        } else if 
(isBlank(functionDetailsBuilder.getSinkBuilder().getTypeClassName())) {
-            // if function-sink-class is not present then set function-sink 
type-class according to function class
-            functionDetailsBuilder
-                    
.setSink(functionDetailsBuilder.getSinkBuilder().setTypeClassName(typeArgs[1].getName()));
-        }
-    }
+//    public static void validateFunctionClassTypes(ClassLoader classLoader, 
Function.FunctionDetails.Builder functionDetailsBuilder) {
 
 Review comment:
   @merlimat I am not sure why this method is not used or what caused this 
method to not be used.  Seems useful for validating some properties.   Perhaps 
we can leave it around for now and just comment it out.

----------------------------------------------------------------
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