Skip to content

Commit 9e4f2e9

Browse files
committed
Change the way to read interpreter language from interpreter-setting.json after #1145
1 parent 75543b3 commit 9e4f2e9

File tree

5 files changed

+72
-16
lines changed

5 files changed

+72
-16
lines changed

zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import java.util.Set;
5050

5151
import com.google.common.base.Preconditions;
52+
import com.google.common.collect.ImmutableMap;
5253
import com.google.gson.Gson;
5354
import com.google.gson.GsonBuilder;
5455
import com.google.gson.reflect.TypeToken;
@@ -223,7 +224,8 @@ public boolean accept(Path entry) throws IOException {
223224
InterpreterInfo interpreterInfo;
224225
for (RegisteredInterpreter r : Interpreter.registeredInterpreters.values()) {
225226
interpreterInfo =
226-
new InterpreterInfo(r.getClassName(), r.getName(), r.isDefaultInterpreter());
227+
new InterpreterInfo(r.getClassName(), r.getName(), r.isDefaultInterpreter(),
228+
r.getEditor());
227229
add(r.getGroup(), interpreterInfo, convertInterpreterProperties(r.getProperties()),
228230
r.getPath());
229231
}
@@ -335,7 +337,7 @@ private void registerInterpreters(List<RegisteredInterpreter> registeredInterpre
335337
for (RegisteredInterpreter registeredInterpreter : registeredInterpreters) {
336338
InterpreterInfo interpreterInfo =
337339
new InterpreterInfo(registeredInterpreter.getClassName(), registeredInterpreter.getName(),
338-
registeredInterpreter.isDefaultInterpreter());
340+
registeredInterpreter.isDefaultInterpreter(), registeredInterpreter.getEditor());
339341
Properties properties = new Properties();
340342
Map<String, InterpreterProperty> p = registeredInterpreter.getProperties();
341343

@@ -370,10 +372,11 @@ private void loadFromFile() throws IOException {
370372
fis.close();
371373

372374
String json = sb.toString();
373-
InterpreterInfoSaving info = gson.fromJson(json, InterpreterInfoSaving.class);
375+
InterpreterInfoSaving infoSaving = gson.fromJson(json, InterpreterInfoSaving.class);
374376

375-
for (String k : info.interpreterSettings.keySet()) {
376-
InterpreterSetting setting = info.interpreterSettings.get(k);
377+
for (String k : infoSaving.interpreterSettings.keySet()) {
378+
InterpreterSetting setting = infoSaving.interpreterSettings.get(k);
379+
List<InterpreterInfo> infos = setting.getInterpreterInfos();
377380

378381
// Always use separate interpreter process
379382
// While we decided to turn this feature on always (without providing
@@ -391,22 +394,41 @@ private void loadFromFile() throws IOException {
391394
depClassPath = interpreterSettingObject.getPath();
392395
setting.setPath(depClassPath);
393396

397+
for (InterpreterInfo info : infos) {
398+
if (info.getEditor() == null) {
399+
Map<String, Object> editor = getEditorFromSettingByClassName(interpreterSettingObject,
400+
info.getClassName());
401+
info.setEditor(editor);
402+
}
403+
}
404+
394405
setting.setInterpreterGroupFactory(this);
395406
loadInterpreterDependencies(setting);
396407
interpreterSettings.put(k, setting);
397408
}
398409

399-
this.interpreterBindings = info.interpreterBindings;
410+
this.interpreterBindings = infoSaving.interpreterBindings;
400411

401-
if (info.interpreterRepositories != null) {
402-
for (RemoteRepository repo : info.interpreterRepositories) {
412+
if (infoSaving.interpreterRepositories != null) {
413+
for (RemoteRepository repo : infoSaving.interpreterRepositories) {
403414
if (!depResolver.getRepos().contains(repo)) {
404415
this.interpreterRepositories.add(repo);
405416
}
406417
}
407418
}
408419
}
409420

421+
public Map<String, Object> getEditorFromSettingByClassName(InterpreterSetting intpSetting,
422+
String className) {
423+
List<InterpreterInfo> intpInfos = intpSetting.getInterpreterInfos();
424+
for (InterpreterInfo intpInfo : intpInfos) {
425+
if (className.equals(intpInfo.getClassName())) {
426+
return intpInfo.getEditor();
427+
}
428+
}
429+
return ImmutableMap.of("language", (Object) "text");
430+
}
431+
410432
private void loadInterpreterDependencies(final InterpreterSetting setting) {
411433

412434
setting.setStatus(InterpreterSetting.Status.DOWNLOADING_DEPENDENCIES);

zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterInfo.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
import com.google.gson.annotations.SerializedName;
2121

22+
import java.util.Map;
23+
2224
/**
2325
* Information of interpreters in this interpreter setting.
2426
* this will be serialized for conf/interpreter.json and REST api response.
@@ -27,11 +29,14 @@ public class InterpreterInfo {
2729
private String name;
2830
@SerializedName("class") private String className;
2931
private boolean defaultInterpreter = false;
32+
private Map<String, Object> editor;
3033

31-
InterpreterInfo(String className, String name, boolean defaultInterpreter) {
34+
InterpreterInfo(String className, String name, boolean defaultInterpreter,
35+
Map<String, Object> editor) {
3236
this.className = className;
3337
this.name = name;
3438
this.defaultInterpreter = defaultInterpreter;
39+
this.editor = editor;
3540
}
3641

3742
public String getName() {
@@ -50,6 +55,14 @@ boolean isDefaultInterpreter() {
5055
return defaultInterpreter;
5156
}
5257

58+
public Map<String, Object> getEditor() {
59+
return editor;
60+
}
61+
62+
public void setEditor(Map<String, Object> editor) {
63+
this.editor = editor;
64+
}
65+
5366
@Override
5467
public boolean equals(Object obj) {
5568
if (!(obj instanceof InterpreterInfo)) {

zeppelin-zengine/src/main/java/org/apache/zeppelin/notebook/Note.java

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
import java.util.concurrent.ScheduledThreadPoolExecutor;
3131
import java.util.concurrent.TimeUnit;
3232

33+
import com.google.common.collect.ImmutableMap;
34+
import com.google.common.collect.Maps;
3335
import com.google.gson.Gson;
3436
import org.apache.commons.lang.StringUtils;
3537
import org.slf4j.Logger;
@@ -651,16 +653,35 @@ public void setInfo(Map<String, Object> info) {
651653
}
652654

653655
public Interpreter getRepl(String name) {
654-
return factory.getInterpreter(id(), name);
656+
return factory.getInterpreter(getId(), name);
655657
}
656658

657659
public Map<String, Object> getEditorSetting(String replName) {
658660
Interpreter intp = getRepl(replName);
659-
Map<String, Object> editor = new HashMap<>();
661+
Map<String, Object> editor = Maps.newHashMap(
662+
ImmutableMap.<String, Object>builder()
663+
.put("language", "text").build());
664+
String defaultSettingName = factory.getDefaultInterpreterSetting(this.getId()).getName();
665+
String group = StringUtils.EMPTY;
660666
try {
661-
editor = intp.findRegisteredInterpreterByClassName(intp.getClassName()).getEditor();
667+
List<InterpreterSetting> intpSettings = factory.getInterpreterSettings(this.getId());
668+
for (InterpreterSetting intpSetting : intpSettings) {
669+
String[] replNameSplit = replName.split("\\.");
670+
if (replNameSplit.length == 2) {
671+
group = replNameSplit[0];
672+
}
673+
// when replName is 'name' of interpreter
674+
if (defaultSettingName.equals(intpSetting.getName())) {
675+
editor = factory.getEditorFromSettingByClassName(intpSetting, intp.getClassName());
676+
}
677+
// when replName is 'alias name' of interpreter or 'group' of interpreter
678+
if (replName.equals(intpSetting.getName()) || group.equals(intpSetting.getName())) {
679+
editor = factory.getEditorFromSettingByClassName(intpSetting, intp.getClassName());
680+
break;
681+
}
682+
}
662683
} catch (NullPointerException e) {
663-
editor.put("language", "text");
684+
logger.warn("Couldn't get interpreter editor language");
664685
}
665686
return editor;
666687
}

zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterFactoryTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,8 @@ public void testSaveLoad() throws IOException, RepositoryException {
166166
@Test
167167
public void testInterpreterAliases() throws IOException, RepositoryException {
168168
factory = new InterpreterFactory(conf, null, null, null, depResolver);
169-
final InterpreterInfo info1 = new InterpreterInfo("className1", "name1", true);
170-
final InterpreterInfo info2 = new InterpreterInfo("className2", "name1", true);
169+
final InterpreterInfo info1 = new InterpreterInfo("className1", "name1", true, null);
170+
final InterpreterInfo info2 = new InterpreterInfo("className2", "name1", true, null);
171171
factory.add("group1", new ArrayList<InterpreterInfo>(){{
172172
add(info1);
173173
}}, new ArrayList<Dependency>(), new InterpreterOption(true), new Properties(), "/path1");

zeppelin-zengine/src/test/java/org/apache/zeppelin/notebook/NotebookTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public void setUp() throws Exception {
9292
MockInterpreter2.register("mock2", "org.apache.zeppelin.interpreter.mock.MockInterpreter2");
9393

9494
depResolver = new DependencyResolver(tmpDir.getAbsolutePath() + "/local-repo");
95-
factory = new InterpreterFactory(conf, new InterpreterOption(false), null, null, null, depResolver);
95+
factory = new InterpreterFactory(conf, new InterpreterOption(true), null, null, null, depResolver);
9696

9797
SearchService search = mock(SearchService.class);
9898
notebookRepo = new VFSNotebookRepo(conf);

0 commit comments

Comments
 (0)