dawidwys edited a comment on pull request #12475:
URL: https://github.com/apache/flink/pull/12475#issuecomment-638692230


   @leonardBang Have you verified the fix? Unfortunately it does not work.
   
   @godfreyhe I am not exactly sure what is your suggested solution, so sorry 
if I am wrong here. However, it is not enough to wrap instance of the parser 
with the `wrapClassloader`. The actual call to a method that requires the 
classloader must be wrapped.
   
   I think the quickest though, dirty solution would be that:
   ```
   @Override
   public Parser getSqlParser(String sessionId) {
        final ExecutionContext<?> context = getExecutionContext(sessionId);
        final TableEnvironment tableEnv = context.getTableEnvironment();
        final Parser parser = ((TableEnvironmentInternal) tableEnv).getParser();
        return new Parser() {
                @Override
                public List<Operation> parse(String statement) {
                        return context.wrapClassLoader(() -> 
parser.parse(statement));
                }
   
                @Override
                public UnresolvedIdentifier parseIdentifier(String identifier) {
                        return context.wrapClassLoader(() -> 
parser.parseIdentifier(identifier));
                }
        };
   }
   ```
   
   Better solutions I could think of are:
   1. Do not instantiate the sources during parsing. I don't see a reason for 
that. IMO the logical plan could have just the CatalogTable, it does not 
necessary need to have an instantiated DynamicTableSource already. This is very 
demanding solution that requires lots of changes in the planner.
   2. Wrap the call to `sqlParser.parse` in 
`org.apache.flink.table.client.cli.SqlCommandParser`. This is tricky as we do 
not have access to the user classloader there.


----------------------------------------------------------------
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:
us...@infra.apache.org


Reply via email to