@@ -1809,11 +1809,6 @@ TEST_P(WriteInteTest, TestPkTableEnableDeletionVector) {
18091809
18101810TEST_P (WriteInteTest, TestPkTableWriteWithIOException) {
18111811 auto file_format = GetParam ();
1812- // Skip parquet format: even with prebuffer disabled, parquet's IO patterns differ
1813- // from orc, making it impossible to find "safe" IO positions for error recovery testing.
1814- if (file_format == " parquet" ) {
1815- GTEST_SKIP () << " Skipping parquet IOException test - IO patterns differ from orc" ;
1816- }
18171812 ::testing::GTEST_FLAG (throw_on_failure) = true;
18181813 // create table
18191814 arrow::FieldVector fields = {
@@ -1830,7 +1825,11 @@ TEST_P(WriteInteTest, TestPkTableWriteWithIOException) {
18301825 bool run_complete = false ;
18311826 auto io_hook = IOHook::GetInstance ();
18321827
1833- for (size_t i = 0 ; i < 500 ; i++) {
1828+ // Loop bound must exceed the workflow's total IO operations so the loop can
1829+ // naturally terminate at the iteration where injection position falls past
1830+ // the last IO. Measured IO counts: orc=310, parquet=506, avro=195, lance=69.
1831+ // 1000 leaves headroom for future format/workflow changes.
1832+ for (size_t i = 0 ; i < 1000 ; i++) {
18341833 auto dir = UniqueTestDirectory::Create ();
18351834 ASSERT_TRUE (dir);
18361835 ScopeGuard guard ([&io_hook]() { io_hook->Clear (); });
0 commit comments