diff --git a/zeppelin-server/src/main/java/org/apache/zeppelin/notebook/NoteManager.java b/zeppelin-server/src/main/java/org/apache/zeppelin/notebook/NoteManager.java index e0469a825a9..20e04a866ba 100644 --- a/zeppelin-server/src/main/java/org/apache/zeppelin/notebook/NoteManager.java +++ b/zeppelin-server/src/main/java/org/apache/zeppelin/notebook/NoteManager.java @@ -305,9 +305,10 @@ public List removeFolder(String folderPath, AuthenticationInfo subject Folder folder = getFolder(folderPath); List noteInfos = folder.getParent().removeFolder(folder.getName(), subject); - // update notesInfo + // update notesInfo and evict the deleted notes from the cache, mirroring removeNote for (NoteInfo noteInfo : noteInfos) { this.notesInfo.remove(noteInfo.getId()); + this.noteCache.removeNote(noteInfo.getId()); } return noteInfos; diff --git a/zeppelin-server/src/test/java/org/apache/zeppelin/notebook/NoteManagerTest.java b/zeppelin-server/src/test/java/org/apache/zeppelin/notebook/NoteManagerTest.java index 4c5235dd2d7..cb23ea8f167 100644 --- a/zeppelin-server/src/test/java/org/apache/zeppelin/notebook/NoteManagerTest.java +++ b/zeppelin-server/src/test/java/org/apache/zeppelin/notebook/NoteManagerTest.java @@ -174,6 +174,20 @@ void testLruCache() throws IOException { assertTrue(noteManager.containsNote(noteNew3.getPath())); } + @Test + void testRemoveFolderEvictsNoteCache() throws IOException { + // add 2 notes under the same folder + Note note1 = createNote("/folder1/note1"); + Note note2 = createNote("/folder1/note2"); + noteManager.addNote(note1, AuthenticationInfo.ANONYMOUS); + noteManager.addNote(note2, AuthenticationInfo.ANONYMOUS); + assertEquals(2, noteManager.getCacheSize()); + + // remove folder should evict its notes from the cache as well + noteManager.removeFolder("/folder1", AuthenticationInfo.ANONYMOUS); + assertEquals(0, noteManager.getCacheSize()); + } + @Test void testConcurrentOperation() throws Exception { int threshold = 10, noteNum = 150;