Yes, it looks like we can ignore latecomer OUTPUT_APPEND and OUTPUT_UPDATE, as well.
Thanks! moon On Tue, Feb 7, 2017 at 8:57 PM Alexander Shoshin <alexander_shos...@epam.com> wrote: > Thanks, I got it ) > > Then I'm going to follow the way you suggested - to ignore an > OUTPUT_UPDATE_ALL event after a job is finished, because we can't guarantee > that all events will be delivered before 'interpret(..)' method ends - we > don't know how many events we should receive from the concrete interpreter. > > Should we ignore latecomer OUTPUT_APPEND and OUTPUT_UPDATE events as well? > > Regards, > Alexander > > -----Original Message----- > From: moon soo Lee [mailto:m...@apache.org] > Sent: Tuesday, February 07, 2017 8:28 AM > To: dev@zeppelin.apache.org > Subject: Re: ZEPPELIN-1856 > > onOutputClear() method is connected with InterpreterOutput.clear() method. > clear() method is designed for the use case inside of > Interpreter.interpret() like, > > InterpreterOutput.write("something"); // notebook displays "something" > InterpreterOutput.clear(); // notebook clears "something" > InterpreterOutput.write("something else"); // notebook displays "something > else" > > For example, it can be useful when some interpreter want to print progress > information (like logs, etc) while it's running, and when it finishes, > clear output and display result. > > Will there be a way to fix flaky test ZEPPELIN-1856 while keeping this > ability? > > Thanks, > moon > > On Mon, Feb 6, 2017 at 6:08 PM Alexander Shoshin < > alexander_shos...@epam.com> > wrote: > > > Hi moon, > > Thanks for the answer. > > > > A agree that one of possible ways to solve the problem is to > > synchronize OUTPUT_UPDATE_ALL event delivery and 'interpret()' result > return. > > > > But I still don't understand why we need to clear 'Paragraph.results' > > from 'onOutputClear()' method. I thought that the main goal of this > > method is to clear results on UI through 'broadcastParagraph(..)'. And > > if we also try to clear 'Paragraph.results' from this method we can > > find that it is either already cleared (by 'InterpreterContext' > > initialization in > > 'Paragraph.jobRun()') or filled with 'interpret()' result. After > > ignoring OUTPUT_UPDATE_ALL event in case of FINISHED status we will > > come in situation where we always clear an empty 'Paragraph.results'. > > Does it make sense? > > > > Regards, > > Alexander > > > > -----Original Message----- > > From: moon soo Lee [mailto:m...@apache.org] > > Sent: Saturday, February 04, 2017 4:30 AM > > To: dev@zeppelin.apache.org > > Subject: Re: ZEPPELIN-1856 > > > > Hi, > > > > Thanks for working on issue ZEPPELIN-1856. > > I think removing 'note.clearParagraphOutput(paragraphId);' from > > 'onOutputClear()' is not the best solution, because without the line > > 'onOutputClear()' does not do anything useful. > > > > InterpreterContext is constructed before call > > RemoteInterpreterServer.interpret(). So OUTPUT_UPDATE_ALL supposed to > > arrive before RemoteInterpreterServer.interpret() returns. Apparently, > > it looks like it doesn't. So i think we need to tackle this problem. > > > > OUTPUT_UPDATE_ALL event is delivered via > > RemoteInterpreterEventClient/RemoteInterpreterEventPoller, while > > RemoteInterpreterServer.interpret() does not, and > > RemoteInterpreterEventClient/RemoteInterpreterEventPoller does not > > guarantee message deliver before interpret() returns. That's origin of > > problem i think. > > > > Therefore, proper way solving this problem is add some mechanism that > > guarantee RemoteInterpreterEventClient/RemoteInterpreterEventPoller > > deliver the OUTPUT_UPDATE_ALL event before interpret() returns. Or > > simple workaround could be ignore OUTPUT_UPDATE_ALL event when > > paragraph becomes FINISHED status (after interpret() returns). > > > > Thanks, > > moon > > > > On Sat, Feb 4, 2017 at 12:02 AM Alexander Shoshin < > > alexander_shos...@epam.com> wrote: > > > > > Hi, > > > > > > I'm working on issue > > > https://issues.apache.org/jira/browse/ZEPPELIN-1856 > > > and I found that we receive a NullPointerException sometimes because > > > a paragraph result is cleared twice when we run a job. First > > > Paragraph.result is cleared just before running > > > RemoteInterpreter.interpret(..) and this is ok. But then we receive > > > an OUTPUT_UPDATE_ALL event from the RemoteInterpreterServer and set > > > Paragraph.result to null again that may lead to a > > > NullPointerException if Paragraph.result was already filled by > > > RemoteInterpreter.interpret(..) responce. > > > > > > To resolve this problem we need to remove > > > note.clearParagraphOutput(paragraphId) line from the onOutputClear() > > > method in NotebookServer.java class: > > > > > > @Override > > > public void onOutputClear(String noteId, String paragraphId) { > > > Notebook notebook = notebook(); > > > final Note note = notebook.getNote(noteId); > > > note.clearParagraphOutput(paragraphId); // this line seems to be > > > wrong > > > Paragraph paragraph = note.getParagraph(paragraphId); > > > broadcastParagraph(note, paragraph); } > > > > > > This method is called only when > > > RemoteInterpreterServer.interpret(..) > > > initializes an InterpreterContext and sends an OUTPUT_UPDATE_ALL event. > > > Is it safe to remove this line or I miss something? It was added by > > > https://github.com/apache/zeppelin/pull/1658. > > > > > > Thanks, > > > Alexander > > > > > >