Search in sources :

Example 1 with RegisteredInterpreter

use of org.apache.zeppelin.interpreter.Interpreter.RegisteredInterpreter in project zeppelin by apache.

the class InterpreterSettingManager method registerInterpreterFromResource.

private boolean registerInterpreterFromResource(ClassLoader cl, String interpreterDir, String interpreterJson) throws IOException, RepositoryException {
    URL[] urls = recursiveBuildLibList(new File(interpreterDir));
    ClassLoader tempClassLoader = new URLClassLoader(urls, cl);
    Enumeration<URL> interpreterSettings = tempClassLoader.getResources(interpreterJson);
    if (!interpreterSettings.hasMoreElements()) {
        return false;
    }
    for (URL url : Collections.list(interpreterSettings)) {
        try (InputStream inputStream = url.openStream()) {
            logger.debug("Reading {} from {}", interpreterJson, url);
            List<RegisteredInterpreter> registeredInterpreterList = getInterpreterListFromJson(inputStream);
            registerInterpreters(registeredInterpreterList, interpreterDir);
        }
    }
    return true;
}
Also used : FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) URLClassLoader(java.net.URLClassLoader) URLClassLoader(java.net.URLClassLoader) File(java.io.File) URL(java.net.URL) RegisteredInterpreter(org.apache.zeppelin.interpreter.Interpreter.RegisteredInterpreter)

Example 2 with RegisteredInterpreter

use of org.apache.zeppelin.interpreter.Interpreter.RegisteredInterpreter in project zeppelin by apache.

the class InterpreterSettingManager method init.

private void init() throws InterpreterException, IOException, RepositoryException {
    String interpreterJson = zeppelinConfiguration.getInterpreterJson();
    ClassLoader cl = Thread.currentThread().getContextClassLoader();
    if (Files.exists(interpreterDirPath)) {
        for (Path interpreterDir : Files.newDirectoryStream(interpreterDirPath, new Filter<Path>() {

            @Override
            public boolean accept(Path entry) throws IOException {
                return Files.exists(entry) && Files.isDirectory(entry);
            }
        })) {
            String interpreterDirString = interpreterDir.toString();
            /**
         * Register interpreter by the following ordering
         * 1. Register it from path {ZEPPELIN_HOME}/interpreter/{interpreter_name}/
         *    interpreter-setting.json
         * 2. Register it from interpreter-setting.json in classpath
         *    {ZEPPELIN_HOME}/interpreter/{interpreter_name}
         * 3. Register it by Interpreter.register
         */
            if (!registerInterpreterFromPath(interpreterDirString, interpreterJson)) {
                if (!registerInterpreterFromResource(cl, interpreterDirString, interpreterJson)) {
                    /*
             * TODO(jongyoul)
             * - Remove these codes below because of legacy code
             * - Support ThreadInterpreter
            */
                    URLClassLoader ccl = new URLClassLoader(recursiveBuildLibList(interpreterDir.toFile()), cl);
                    for (String className : interpreterClassList) {
                        try {
                            // Load classes
                            Class.forName(className, true, ccl);
                            Set<String> interpreterKeys = Interpreter.registeredInterpreters.keySet();
                            for (String interpreterKey : interpreterKeys) {
                                if (className.equals(Interpreter.registeredInterpreters.get(interpreterKey).getClassName())) {
                                    Interpreter.registeredInterpreters.get(interpreterKey).setPath(interpreterDirString);
                                    logger.info("Interpreter " + interpreterKey + " found. class=" + className);
                                    cleanCl.put(interpreterDirString, ccl);
                                }
                            }
                        } catch (Throwable t) {
                        // nothing to do
                        }
                    }
                }
            }
        }
    }
    for (RegisteredInterpreter registeredInterpreter : Interpreter.registeredInterpreters.values()) {
        logger.debug("Registered: {} -> {}. Properties: {}", registeredInterpreter.getInterpreterKey(), registeredInterpreter.getClassName(), registeredInterpreter.getProperties());
    }
    // RegisteredInterpreters -> interpreterSettingRef
    InterpreterInfo interpreterInfo;
    for (RegisteredInterpreter r : Interpreter.registeredInterpreters.values()) {
        interpreterInfo = new InterpreterInfo(r.getClassName(), r.getName(), r.isDefaultInterpreter(), r.getEditor());
        add(r.getGroup(), interpreterInfo, r.getProperties(), defaultOption, r.getPath(), r.getRunner());
    }
    for (String settingId : interpreterSettingsRef.keySet()) {
        InterpreterSetting setting = interpreterSettingsRef.get(settingId);
        logger.info("InterpreterSettingRef name {}", setting.getName());
    }
    loadFromFile();
    // if no interpreter settings are loaded, create default set
    if (0 == interpreterSettings.size()) {
        Map<String, InterpreterSetting> temp = new HashMap<>();
        InterpreterSetting interpreterSetting;
        for (InterpreterSetting setting : interpreterSettingsRef.values()) {
            interpreterSetting = createFromInterpreterSettingRef(setting);
            temp.put(setting.getName(), interpreterSetting);
        }
        for (String group : interpreterGroupOrderList) {
            if (null != (interpreterSetting = temp.remove(group))) {
                interpreterSettings.put(interpreterSetting.getId(), interpreterSetting);
            }
        }
        for (InterpreterSetting setting : temp.values()) {
            interpreterSettings.put(setting.getId(), setting);
        }
        saveToFile();
    }
    for (String settingId : interpreterSettings.keySet()) {
        InterpreterSetting setting = interpreterSettings.get(settingId);
        logger.info("InterpreterSetting group {} : id={}, name={}", setting.getGroup(), settingId, setting.getName());
    }
}
Also used : Path(java.nio.file.Path) HashMap(java.util.HashMap) IOException(java.io.IOException) URLClassLoader(java.net.URLClassLoader) URLClassLoader(java.net.URLClassLoader) RegisteredInterpreter(org.apache.zeppelin.interpreter.Interpreter.RegisteredInterpreter)

Example 3 with RegisteredInterpreter

use of org.apache.zeppelin.interpreter.Interpreter.RegisteredInterpreter in project zeppelin by apache.

the class InterpreterSettingManager method registerInterpreterFromPath.

private boolean registerInterpreterFromPath(String interpreterDir, String interpreterJson) throws IOException, RepositoryException {
    Path interpreterJsonPath = Paths.get(interpreterDir, interpreterJson);
    if (Files.exists(interpreterJsonPath)) {
        logger.debug("Reading {}", interpreterJsonPath);
        List<RegisteredInterpreter> registeredInterpreterList = getInterpreterListFromJson(interpreterJsonPath);
        registerInterpreters(registeredInterpreterList, interpreterDir);
        return true;
    }
    return false;
}
Also used : Path(java.nio.file.Path) RegisteredInterpreter(org.apache.zeppelin.interpreter.Interpreter.RegisteredInterpreter)

Example 4 with RegisteredInterpreter

use of org.apache.zeppelin.interpreter.Interpreter.RegisteredInterpreter in project zeppelin by apache.

the class InterpreterSettingManager method registerInterpreters.

private void registerInterpreters(List<RegisteredInterpreter> registeredInterpreters, String absolutePath) throws IOException, RepositoryException {
    for (RegisteredInterpreter registeredInterpreter : registeredInterpreters) {
        InterpreterInfo interpreterInfo = new InterpreterInfo(registeredInterpreter.getClassName(), registeredInterpreter.getName(), registeredInterpreter.isDefaultInterpreter(), registeredInterpreter.getEditor());
        // use defaultOption if it is not specified in interpreter-setting.json
        InterpreterOption option = registeredInterpreter.getOption() == null ? defaultOption : registeredInterpreter.getOption();
        add(registeredInterpreter.getGroup(), interpreterInfo, registeredInterpreter.getProperties(), option, absolutePath, registeredInterpreter.getRunner());
    }
}
Also used : RegisteredInterpreter(org.apache.zeppelin.interpreter.Interpreter.RegisteredInterpreter)

Aggregations

RegisteredInterpreter (org.apache.zeppelin.interpreter.Interpreter.RegisteredInterpreter)4 URLClassLoader (java.net.URLClassLoader)2 Path (java.nio.file.Path)2 File (java.io.File)1 FileInputStream (java.io.FileInputStream)1 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 URL (java.net.URL)1 HashMap (java.util.HashMap)1