public boolean isLocalJarConflicted(UDFInformation udfInformation) throws UDFManagementException {
    String functionName = udfInformation.getFunctionName();
    // A jar with the same name exists, we need to check md5
    String existedMd5 = "";
    String md5FilePath = functionName + ".txt";

    // if meet error when reading md5 from txt, we need to compute it again
    boolean hasComputed = false;
    if (hasFileUnderTemporaryRoot(md5FilePath)) {
      try {
        existedMd5 = readTextFromFileUnderTemporaryRoot(md5FilePath);
        hasComputed = true;
      } catch (IOException e) {
        LOGGER.warn("Error occurred when trying to read md5 of {}", md5FilePath);
      }
    }
    if (!hasComputed) {
      try {
        existedMd5 =
            DigestUtils.md5Hex(
                Files.newInputStream(
                    Paths.get(
                        UDFExecutableManager.getInstance().getInstallDir()
                            + File.separator
                            + udfInformation.getJarName())));
        // save the md5 in a txt under UDF temporary lib
        saveTextAsFileUnderTemporaryRoot(existedMd5, md5FilePath);
      } catch (IOException e) {
        String errorMessage =
            String.format(
                "Failed to registered function %s, "
                    + "because error occurred when trying to compute md5 of jar file for function %s ",
                functionName, functionName);
        LOGGER.warn(errorMessage, e);
        throw new UDFManagementException(errorMessage);
      }
    }
    return !existedMd5.equals(udfInformation.getJarMD5());
  }
check whether local jar is correct according to md5
iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/udf/service/UDFExecutableManager.java