wuchong commented on a change in pull request #10563: [FLINK-15232][table] Message of NoMatchingTableFactoryException should tell users what's wrong URL: https://github.com/apache/flink/pull/10563#discussion_r357548252
########## File path: flink-table/flink-table-common/src/main/java/org/apache/flink/table/factories/TableFactoryService.java ########## @@ -269,16 +271,67 @@ plainContext.remove(CATALOG_PROPERTY_VERSION); // check if required context is met - return plainContext.keySet() - .stream() - .allMatch(e -> properties.containsKey(e) && properties.get(e).equals(plainContext.get(e))); - }).collect(Collectors.toList()); + int matchedSize = 0; + Map<String, Tuple2<String, String>> unMatchedProperties = new HashMap<>(); + for (Map.Entry<String, String> e : plainContext.entrySet()) { + if (properties.containsKey(e.getKey()) && + properties.get(e.getKey()).equals(e.getValue())) { + matchedSize++; + } else { + unMatchedProperties.put( + e.getKey(), + new Tuple2<>(e.getValue(), properties.get(e.getKey()))); + } + } + if (matchedSize == plainContext.size()) { + matchingFactories.add(factory); + } else { + if (bestMatched == null || matchedSize > bestMatched.f1) { + bestMatched = new Tuple3<>(factory, matchedSize, unMatchedProperties); + } + } + } if (matchingFactories.isEmpty()) { + String bestMatchedMessage = null; + if (bestMatched != null && bestMatched.f1 > 0) { + StringBuilder builder = new StringBuilder(); + builder.append(bestMatched.f0.getClass().getName()).append("\n"); + + Map<String, String> missing = new HashMap<>(); + Map<String, Tuple2<String, String>> mismatched = new HashMap<>(); + bestMatched.f2.forEach((key, value) -> { + if (value.f1 == null) { + missing.put(key, value.f0); + } else { + mismatched.put(key, value); + } + }); + + if (missing.size() > 0) { + builder.append("Missing properties: "); Review comment: ```suggestion builder.append("\nMissing properties: "); ``` ---------------------------------------------------------------- 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 With regards, Apache Git Services