mirror of
https://github.com/apache/zeppelin
synced 2026-05-24 09:38:26 +00:00
resolved conflicts
This commit is contained in:
parent
fab3e5ff93
commit
6480d1d9df
8 changed files with 69 additions and 37 deletions
|
|
@ -1132,7 +1132,7 @@ public class InterpreterFactory implements InterpreterGroupFactory {
|
|||
}
|
||||
}
|
||||
|
||||
private String getInterpreterInstanceKey(String noteId, InterpreterSetting setting) {
|
||||
private String getInterpreterInstanceKey(String user, String noteId, InterpreterSetting setting) {
|
||||
if (setting.getOption().isExistingProcess()) {
|
||||
return Constants.EXISTING_PROCESS;
|
||||
} else if (setting.getOption().isPerNoteSession() || setting.getOption().isPerNoteProcess()) {
|
||||
|
|
@ -1142,14 +1142,15 @@ public class InterpreterFactory implements InterpreterGroupFactory {
|
|||
}
|
||||
}
|
||||
|
||||
private List<Interpreter> createOrGetInterpreterList(String noteId, InterpreterSetting setting) {
|
||||
private List<Interpreter> createOrGetInterpreterList(String user, String noteId,
|
||||
InterpreterSetting setting) {
|
||||
InterpreterGroup interpreterGroup = setting.getInterpreterGroup(noteId);
|
||||
synchronized (interpreterGroup) {
|
||||
String key = getInterpreterInstanceKey(noteId, setting);
|
||||
String key = getInterpreterInstanceKey(user, noteId, setting);
|
||||
if (!interpreterGroup.containsKey(key)) {
|
||||
createInterpretersForNote(setting, noteId, key);
|
||||
}
|
||||
return interpreterGroup.get(getInterpreterInstanceKey(noteId, setting));
|
||||
return interpreterGroup.get(getInterpreterInstanceKey(user, noteId, setting));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1190,14 +1191,15 @@ public class InterpreterFactory implements InterpreterGroupFactory {
|
|||
return null;
|
||||
}
|
||||
|
||||
private Interpreter getInterpreter(String noteId, InterpreterSetting setting, String name) {
|
||||
private Interpreter getInterpreter(String user, String noteId, InterpreterSetting setting,
|
||||
String name) {
|
||||
Preconditions.checkNotNull(noteId, "noteId should be not null");
|
||||
Preconditions.checkNotNull(setting, "setting should be not null");
|
||||
Preconditions.checkNotNull(name, "name should be not null");
|
||||
|
||||
String className;
|
||||
if (null != (className = getInterpreterClassFromInterpreterSetting(setting, name))) {
|
||||
List<Interpreter> interpreterGroup = createOrGetInterpreterList(noteId, setting);
|
||||
List<Interpreter> interpreterGroup = createOrGetInterpreterList(user, noteId, setting);
|
||||
for (Interpreter interpreter : interpreterGroup) {
|
||||
if (className.equals(interpreter.getClassName())) {
|
||||
return interpreter;
|
||||
|
|
@ -1207,7 +1209,7 @@ public class InterpreterFactory implements InterpreterGroupFactory {
|
|||
return null;
|
||||
}
|
||||
|
||||
public Interpreter getInterpreter(String noteId, String replName) {
|
||||
public Interpreter getInterpreter(String user, String noteId, String replName) {
|
||||
List<InterpreterSetting> settings = getInterpreterSettings(noteId);
|
||||
InterpreterSetting setting;
|
||||
Interpreter interpreter;
|
||||
|
|
@ -1220,7 +1222,7 @@ public class InterpreterFactory implements InterpreterGroupFactory {
|
|||
// get default settings (first available)
|
||||
// TODO(jl): Fix it in case of returning null
|
||||
InterpreterSetting defaultSettings = getDefaultInterpreterSetting(settings);
|
||||
return createOrGetInterpreterList(noteId, defaultSettings).get(0);
|
||||
return createOrGetInterpreterList(user, noteId, defaultSettings).get(0);
|
||||
}
|
||||
|
||||
String[] replNameSplit = replName.split("\\.");
|
||||
|
|
@ -1233,7 +1235,7 @@ public class InterpreterFactory implements InterpreterGroupFactory {
|
|||
setting = getInterpreterSettingByGroup(settings, group);
|
||||
|
||||
if (null != setting) {
|
||||
interpreter = getInterpreter(noteId, setting, name);
|
||||
interpreter = getInterpreter(user, noteId, setting, name);
|
||||
|
||||
if (null != interpreter) {
|
||||
return interpreter;
|
||||
|
|
@ -1248,7 +1250,7 @@ public class InterpreterFactory implements InterpreterGroupFactory {
|
|||
// TODO(jl): Handle with noteId to support defaultInterpreter per note.
|
||||
setting = getDefaultInterpreterSetting(settings);
|
||||
|
||||
interpreter = getInterpreter(noteId, setting, replName);
|
||||
interpreter = getInterpreter(user, noteId, setting, replName);
|
||||
|
||||
if (null != interpreter) {
|
||||
return interpreter;
|
||||
|
|
@ -1259,7 +1261,7 @@ public class InterpreterFactory implements InterpreterGroupFactory {
|
|||
setting = getInterpreterSettingByGroup(settings, replName);
|
||||
|
||||
if (null != setting) {
|
||||
List<Interpreter> interpreters = createOrGetInterpreterList(noteId, setting);
|
||||
List<Interpreter> interpreters = createOrGetInterpreterList(user, noteId, setting);
|
||||
if (null != interpreters) {
|
||||
return interpreters.get(0);
|
||||
}
|
||||
|
|
@ -1268,7 +1270,7 @@ public class InterpreterFactory implements InterpreterGroupFactory {
|
|||
// Support the legacy way to use it
|
||||
for (InterpreterSetting s : settings) {
|
||||
if (s.getGroup().equals(replName)) {
|
||||
List<Interpreter> interpreters = createOrGetInterpreterList(noteId, s);
|
||||
List<Interpreter> interpreters = createOrGetInterpreterList(user, noteId, s);
|
||||
if (null != interpreters) {
|
||||
return interpreters.get(0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -468,7 +468,7 @@ public class Note implements Serializable, ParagraphJobListener {
|
|||
AuthenticationInfo authenticationInfo = new AuthenticationInfo();
|
||||
authenticationInfo.setUser(cronExecutingUser);
|
||||
p.setAuthenticationInfo(authenticationInfo);
|
||||
run(p.getId());
|
||||
run(cronExecutingUser, p.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -105,6 +105,10 @@ public class Paragraph extends Job implements Serializable, Cloneable {
|
|||
+ new Random(System.currentTimeMillis()).nextInt();
|
||||
}
|
||||
|
||||
public String getUser() {
|
||||
return user;
|
||||
}
|
||||
|
||||
public String getText() {
|
||||
return text;
|
||||
}
|
||||
|
|
@ -193,7 +197,7 @@ public class Paragraph extends Job implements Serializable, Cloneable {
|
|||
}
|
||||
|
||||
public Interpreter getRepl(String name) {
|
||||
return factory.getInterpreter(note.getId(), name);
|
||||
return factory.getInterpreter(user, note.getId(), name);
|
||||
}
|
||||
|
||||
public Interpreter getCurrentRepl() {
|
||||
|
|
|
|||
|
|
@ -210,8 +210,8 @@ public class InterpreterFactoryTest {
|
|||
add(setting2.getId());
|
||||
}});
|
||||
|
||||
assertEquals("className1", factory.getInterpreter("note", "test-group1").getClassName());
|
||||
assertEquals("className1", factory.getInterpreter("note", "group1").getClassName());
|
||||
assertEquals("className1", factory.getInterpreter("user1", "note", "test-group1").getClassName());
|
||||
assertEquals("className1", factory.getInterpreter("user1", "note", "group1").getClassName());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
|
|
@ -74,21 +74,21 @@ public class NoteInterpreterLoaderTest {
|
|||
factory.setInterpreters("note", factory.getDefaultInterpreterSettingList());
|
||||
|
||||
// when there're no interpreter selection directive
|
||||
assertEquals("org.apache.zeppelin.interpreter.mock.MockInterpreter1", factory.getInterpreter("note", null).getClassName());
|
||||
assertEquals("org.apache.zeppelin.interpreter.mock.MockInterpreter1", factory.getInterpreter("note", "").getClassName());
|
||||
assertEquals("org.apache.zeppelin.interpreter.mock.MockInterpreter1", factory.getInterpreter("note", " ").getClassName());
|
||||
assertEquals("org.apache.zeppelin.interpreter.mock.MockInterpreter1", factory.getInterpreter("user", "note", null).getClassName());
|
||||
assertEquals("org.apache.zeppelin.interpreter.mock.MockInterpreter1", factory.getInterpreter("user", "note", "").getClassName());
|
||||
assertEquals("org.apache.zeppelin.interpreter.mock.MockInterpreter1", factory.getInterpreter("user", "note", " ").getClassName());
|
||||
|
||||
// when group name is omitted
|
||||
assertEquals("org.apache.zeppelin.interpreter.mock.MockInterpreter11", factory.getInterpreter("note", "mock11").getClassName());
|
||||
assertEquals("org.apache.zeppelin.interpreter.mock.MockInterpreter11", factory.getInterpreter("user", "note", "mock11").getClassName());
|
||||
|
||||
// when 'name' is ommitted
|
||||
assertEquals("org.apache.zeppelin.interpreter.mock.MockInterpreter1", factory.getInterpreter("note", "group1").getClassName());
|
||||
assertEquals("org.apache.zeppelin.interpreter.mock.MockInterpreter2", factory.getInterpreter("note", "group2").getClassName());
|
||||
assertEquals("org.apache.zeppelin.interpreter.mock.MockInterpreter1", factory.getInterpreter("user", "note", "group1").getClassName());
|
||||
assertEquals("org.apache.zeppelin.interpreter.mock.MockInterpreter2", factory.getInterpreter("user", "note", "group2").getClassName());
|
||||
|
||||
// when nothing is ommitted
|
||||
assertEquals("org.apache.zeppelin.interpreter.mock.MockInterpreter1", factory.getInterpreter("note", "group1.mock1").getClassName());
|
||||
assertEquals("org.apache.zeppelin.interpreter.mock.MockInterpreter11", factory.getInterpreter("note", "group1.mock11").getClassName());
|
||||
assertEquals("org.apache.zeppelin.interpreter.mock.MockInterpreter2", factory.getInterpreter("note", "group2.mock2").getClassName());
|
||||
assertEquals("org.apache.zeppelin.interpreter.mock.MockInterpreter1", factory.getInterpreter("user", "note", "group1.mock1").getClassName());
|
||||
assertEquals("org.apache.zeppelin.interpreter.mock.MockInterpreter11", factory.getInterpreter("user", "note", "group1.mock11").getClassName());
|
||||
assertEquals("org.apache.zeppelin.interpreter.mock.MockInterpreter2", factory.getInterpreter("user", "note", "group2.mock2").getClassName());
|
||||
|
||||
factory.closeNote("note");
|
||||
}
|
||||
|
|
@ -105,12 +105,12 @@ public class NoteInterpreterLoaderTest {
|
|||
assertNull(factory.getInterpreterSettings("noteA").get(0).getInterpreterGroup("shared_process").get("noteA"));
|
||||
assertNull(factory.getInterpreterSettings("noteB").get(0).getInterpreterGroup("shared_process").get("noteB"));
|
||||
|
||||
factory.getInterpreter("noteA", null).open();
|
||||
factory.getInterpreter("noteB", null).open();
|
||||
factory.getInterpreter("user", "noteA", null).open();
|
||||
factory.getInterpreter("user", "noteB", null).open();
|
||||
|
||||
assertTrue(
|
||||
factory.getInterpreter("noteA", null).getInterpreterGroup().getId().equals(
|
||||
factory.getInterpreter("noteB", null).getInterpreterGroup().getId()));
|
||||
factory.getInterpreter("user", "noteA", null).getInterpreterGroup().getId().equals(
|
||||
factory.getInterpreter("user", "noteB", null).getInterpreterGroup().getId()));
|
||||
|
||||
// interpreters are created after accessing it
|
||||
assertNotNull(factory.getInterpreterSettings("noteA").get(0).getInterpreterGroup("shared_process").get("noteA"));
|
||||
|
|
@ -138,13 +138,13 @@ public class NoteInterpreterLoaderTest {
|
|||
assertNull(factory.getInterpreterSettings("noteA").get(0).getInterpreterGroup("noteA").get("noteA"));
|
||||
assertNull(factory.getInterpreterSettings("noteB").get(0).getInterpreterGroup("noteB").get("noteB"));
|
||||
|
||||
factory.getInterpreter("noteA", null).open();
|
||||
factory.getInterpreter("noteB", null).open();
|
||||
factory.getInterpreter("user", "noteA", null).open();
|
||||
factory.getInterpreter("user", "noteB", null).open();
|
||||
|
||||
// per note interpreter process
|
||||
assertFalse(
|
||||
factory.getInterpreter("noteA", null).getInterpreterGroup().getId().equals(
|
||||
factory.getInterpreter("noteB", null).getInterpreterGroup().getId()));
|
||||
factory.getInterpreter("user", "noteA", null).getInterpreterGroup().getId().equals(
|
||||
factory.getInterpreter("user", "noteB", null).getInterpreterGroup().getId()));
|
||||
|
||||
// interpreters are created after accessing it
|
||||
assertNotNull(factory.getInterpreterSettings("noteA").get(0).getInterpreterGroup("noteA").get("noteA"));
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ public class NoteTest {
|
|||
|
||||
@Test
|
||||
public void runNormalTest() {
|
||||
when(interpreterFactory.getInterpreter(anyString(), eq("spark"))).thenReturn(interpreter);
|
||||
when(interpreterFactory.getInterpreter(anyString(), anyString(), eq("spark"))).thenReturn(interpreter);
|
||||
when(interpreter.getScheduler()).thenReturn(scheduler);
|
||||
|
||||
String pText = "%spark sc.version";
|
||||
|
|
@ -72,7 +72,7 @@ public class NoteTest {
|
|||
|
||||
ArgumentCaptor<Paragraph> pCaptor = ArgumentCaptor.forClass(Paragraph.class);
|
||||
verify(scheduler, only()).submit(pCaptor.capture());
|
||||
verify(interpreterFactory, only()).getInterpreter(anyString(), eq("spark"));
|
||||
verify(interpreterFactory, only()).getInterpreter(anyString(), anyString(), eq("spark"));
|
||||
|
||||
assertEquals("Paragraph text", pText, pCaptor.getValue().getText());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -341,11 +341,11 @@ public class NotebookTest implements JobListenerFactory{
|
|||
|
||||
|
||||
MockInterpreter1 mock1 = ((MockInterpreter1) (((ClassloaderInterpreter)
|
||||
((LazyOpenInterpreter) factory.getInterpreter(note.getId(), "mock1")).getInnerInterpreter())
|
||||
((LazyOpenInterpreter) factory.getInterpreter("user", note.getId(), "mock1")).getInnerInterpreter())
|
||||
.getInnerInterpreter()));
|
||||
|
||||
MockInterpreter2 mock2 = ((MockInterpreter2) (((ClassloaderInterpreter)
|
||||
((LazyOpenInterpreter) factory.getInterpreter(note.getId(), "mock2")).getInnerInterpreter())
|
||||
((LazyOpenInterpreter) factory.getInterpreter("user", note.getId(), "mock2")).getInnerInterpreter())
|
||||
.getInnerInterpreter()));
|
||||
|
||||
// wait until interpreters are started
|
||||
|
|
|
|||
|
|
@ -73,6 +73,32 @@ public class ParagraphTest {
|
|||
assertEquals("md", Paragraph.getRequiredReplName(text));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void effectiveTextTest() {
|
||||
InterpreterFactory interpreterFactory = mock(InterpreterFactory.class);
|
||||
Interpreter interpreter = mock(Interpreter.class);
|
||||
Note note = mock(Note.class);
|
||||
|
||||
Paragraph p = new Paragraph("paragraph", note, null, interpreterFactory);
|
||||
p.setText("%h2 show databases");
|
||||
p.setEffectiveText("%jdbc(h2) show databases");
|
||||
assertEquals("Get right replName", "jdbc", p.getRequiredReplName());
|
||||
assertEquals("Get right scriptBody", "(h2) show databases", p.getScriptBody());
|
||||
|
||||
when(interpreterFactory.getInterpreter(anyString(), anyString(), eq("jdbc"))).thenReturn(interpreter);
|
||||
when(interpreter.getFormType()).thenReturn(Interpreter.FormType.NATIVE);
|
||||
when(note.getId()).thenReturn("noteId");
|
||||
|
||||
try {
|
||||
p.jobRun();
|
||||
} catch (Throwable throwable) {
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
assertEquals("Erase effective Text", "h2", p.getRequiredReplName());
|
||||
assertEquals("Erase effective Text", "show databases", p.getScriptBody());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void should_extract_variable_from_angular_object_registry() throws Exception {
|
||||
//Given
|
||||
|
|
|
|||
Loading…
Reference in a new issue