Xun Liu created ZEPPELIN-4072: --------------------------------- Summary: Fix CreateNote() function throw Note existed IOException caused travis to fail Key: ZEPPELIN-4072 URL: https://issues.apache.org/jira/browse/ZEPPELIN-4072 Project: Zeppelin Issue Type: Bug Reporter: Xun Liu Assignee: Xun Liu Attachments: WechatIMG1.png, WechatIMG2.png
When using trivis-ci, The exception will be triggered randomly. !WechatIMG1.png|width=767,height=225! !WechatIMG2.png|width=1502,height=172! {code:java} 01:52:28,183 INFO org.apache.zeppelin.storage.LocalConfigStorage:74 - Save notebook authorization to file: /home/travis/build/liuxunorg/zeppelin/zeppelin-server/../conf_RecoveryTest/notebook-authorization.json 01:52:28,192 INFO org.apache.zeppelin.notebook.repo.VFSNotebookRepo:140 - Saving note 2E5FGMPF9 to note1_2E5FGMPF9.zpln 01:52:28,481 INFO org.apache.zeppelin.notebook.repo.VFSNotebookRepo:140 - Saving note 2E5FGMPF9 to note1_2E5FGMPF9.zpln java.io.IOException: Note '/note1' existed at org.apache.zeppelin.notebook.NoteManager.addOrUpdateNoteNode(NoteManager.java:117) at org.apache.zeppelin.notebook.NoteManager.addNote(NoteManager.java:171) at org.apache.zeppelin.notebook.Notebook.createNote(Notebook.java:186) at org.apache.zeppelin.notebook.Notebook.createNote(Notebook.java:167) at org.apache.zeppelin.socket.NotebookServerTest.testGetParagraphList(NotebookServerTest.java:644) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264) at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124) at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200) at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) 01:52:28,550 INFO org.apache.zeppelin.socket.NotebookServer:150 - NotebookServer instantiated: org.apache.zeppelin.socket.NotebookServer@622fdb81 01:52:28,551 INFO org.apache.zeppelin.socket.NotebookServer:161 - Injected NotebookProvider 01:52:28,552 INFO org.apache.zeppelin.socket.NotebookServer:168 - Injected NotebookServiceProvider {code} I think it may be caused by several situations. There are multiple test units in a test class. Each unit creates a note with the same name and then deletes it. If the test unit performs an exception and does not delete the note normally, it will cause other test units to create a note exception with the same name. 1) My simple test to create a note and then delete, are normal, In ZeppelinSparkClusterTest24, problems may be caused by the operation of spark. ============================================================ Cause Analysis: 1. Recently, Notebook added a new one in createNote() to determine if the note name already exists. If it exists, an exception is thrown. 2. In the test case, the code TestUtils.getInstance(Notebook.class) creates a global single instance object. First executed: TestUtils.getInstance(Notebook.class).createNote("note1", anonymous); After executing some test code, eg: spark, python, etc TestUtils.getInstance(Notebook.class).removeNote(note.getId(), anonymous); Delete this note. If the spark, python exception is thrown before removeNote, then the note still exists. Causes other test cases to be abnormal. So in the test code, make sure the note is removed by try(){}finally. -- This message was sent by Atlassian JIRA (v7.6.3#76005)