Yang Jie created SPARK-40036:
--------------------------------

             Summary: LevelDB/RocksDBIterator.next should return false after 
iterator or db close
                 Key: SPARK-40036
                 URL: https://issues.apache.org/jira/browse/SPARK-40036
             Project: Spark
          Issue Type: Bug
          Components: Spark Core
    Affects Versions: 3.4.0
            Reporter: Yang Jie


{code:java}
@Test
public void testHasNextAndNextAfterIteratorClose() throws Exception {
  String prefix = "test_db_iter_close.";
  String suffix = ".ldb";
  File path = File.createTempFile(prefix, suffix);
  path.delete();
  LevelDB db = new LevelDB(path);
  // Write one records for test
  db.write(createCustomType1(0));

  KVStoreIterator<CustomType1> iter =
    db.view(CustomType1.class).closeableIterator();
  // iter should be true
  assertTrue(iter.hasNext());
  // close iter
  iter.close();
  // iter.hasNext should be false after iter close
  assertFalse(iter.hasNext());
  // iter.next should throw NoSuchElementException after iter close
  assertThrows(NoSuchElementException.class, iter::next);

  db.close();
  assertTrue(path.exists());
  FileUtils.deleteQuietly(path);
  assertFalse(path.exists());
}

@Test
public void testHasNextAndNextAfterDBClose() throws Exception {
  String prefix = "test_db_db_close.";
  String suffix = ".ldb";
  File path = File.createTempFile(prefix, suffix);
  path.delete();
  LevelDB db = new LevelDB(path);
  // Write one record for test
  db.write(createCustomType1(0));

  KVStoreIterator<CustomType1> iter =
    db.view(CustomType1.class).closeableIterator();
  // iter should be true
  assertTrue(iter.hasNext());
  // close db
  db.close();
  // iter.hasNext should be false after db close
  assertFalse(iter.hasNext());
  // iter.next should throw NoSuchElementException after db close
  assertThrows(NoSuchElementException.class, iter::next);

  assertTrue(path.exists());
  FileUtils.deleteQuietly(path);
  assertFalse(path.exists());
} {code}
 

For the above two cases, when iterator/db is closed, `hasNext` will return 
true, and `next` will return the value not obtained before close.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@spark.apache.org
For additional commands, e-mail: issues-h...@spark.apache.org

Reply via email to