LocalRecoveryStorage extends RecoveryStorage { @Override public Map<String, InterpreterClient> restore() throws IOException { Map<String, InterpreterClient> clients = new HashMap<>(); File[] recoveryFiles = recoveryDir.listFiles(file -> file.getName().endsWith(".recovery")); for (File recoveryFile : recoveryFiles) { String fileName = recoveryFile.getName(); String interpreterSettingName = fileName.substring(0, fileName.length() - ".recovery".length()); String recoveryData = org.apache.zeppelin.util.FileUtils.readFromFile(recoveryFile); clients.putAll(RecoveryUtils.restoreFromRecoveryData( recoveryData, interpreterSettingName, interpreterSettingManager, zConf)); } return clients; } LocalRecoveryStorage(ZeppelinConfiguration zConf);  LocalRecoveryStorage(ZeppelinConfiguration zConf,
                              InterpreterSettingManager interpreterSettingManager); @Override void onInterpreterClientStart(InterpreterClient client); @Override void onInterpreterClientStop(InterpreterClient client); @Override Map<String, InterpreterClient> restore();  }
@Test public void testSingleInterpreterProcess() throws InterpreterException, IOException { InterpreterSetting interpreterSetting = interpreterSettingManager.getByName("test"); interpreterSetting.getOption().setPerUser(InterpreterOption.SHARED); Interpreter interpreter1 = interpreterSetting.getDefaultInterpreter("user1", "note1"); RemoteInterpreter remoteInterpreter1 = (RemoteInterpreter) interpreter1; InterpreterContext context1 = InterpreterContext.builder() .setNoteId("noteId") .setParagraphId("paragraphId") .build(); remoteInterpreter1.interpret("hello", context1); assertEquals(1, interpreterSettingManager.getRecoveryStorage().restore().size()); interpreterSetting.close(); assertEquals(0, interpreterSettingManager.getRecoveryStorage().restore().size()); }
@Test public void testMultipleInterpreterProcess() throws InterpreterException, IOException { InterpreterSetting interpreterSetting = interpreterSettingManager.getByName("test"); interpreterSetting.getOption().setPerUser(InterpreterOption.ISOLATED); Interpreter interpreter1 = interpreterSetting.getDefaultInterpreter("user1", "note1"); RemoteInterpreter remoteInterpreter1 = (RemoteInterpreter) interpreter1; InterpreterContext context1 = InterpreterContext.builder() .setNoteId("noteId") .setParagraphId("paragraphId") .build(); remoteInterpreter1.interpret("hello", context1); assertEquals(1, interpreterSettingManager.getRecoveryStorage().restore().size()); Interpreter interpreter2 = interpreterSetting.getDefaultInterpreter("user2", "note2"); RemoteInterpreter remoteInterpreter2 = (RemoteInterpreter) interpreter2; InterpreterContext context2 = InterpreterContext.builder() .setNoteId("noteId") .setParagraphId("paragraphId") .build(); remoteInterpreter2.interpret("hello", context2); assertEquals(2, interpreterSettingManager.getRecoveryStorage().restore().size()); interpreterSettingManager.restart(interpreterSetting.getId(), "user1", "note1"); assertEquals(1, interpreterSettingManager.getRecoveryStorage().restore().size()); interpreterSetting.close(); assertEquals(0, interpreterSettingManager.getRecoveryStorage().restore().size()); }