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
> >
>

Reply via email to