diff --git a/lang/java/avro/src/main/java/org/apache/avro/file/DataFileStream.java b/lang/java/avro/src/main/java/org/apache/avro/file/DataFileStream.java index 2bb24b3fa12..e2e79d8eaed 100644 --- a/lang/java/avro/src/main/java/org/apache/avro/file/DataFileStream.java +++ b/lang/java/avro/src/main/java/org/apache/avro/file/DataFileStream.java @@ -330,7 +330,10 @@ DataBlock nextRawBlock(DataBlock reuse) throws IOException { vin.readFixed(syncBuffer); availableBlock = false; if (!Arrays.equals(syncBuffer, header.sync)) - throw new IOException("Invalid sync!"); + throw new IOException("Invalid sync marker! The sync marker in the data block doesn't match the " + + "file header's sync marker. This likely indicates data corruption, truncated file, " + + "or incorrectly concatenated Avro files. Verify file integrity and ensure proper " + + "file transmission or creation."); return reuse; } diff --git a/lang/java/avro/src/test/java/org/apache/avro/TestDataFileCorruption.java b/lang/java/avro/src/test/java/org/apache/avro/TestDataFileCorruption.java index e4659488d17..1a8d54f3012 100644 --- a/lang/java/avro/src/test/java/org/apache/avro/TestDataFileCorruption.java +++ b/lang/java/avro/src/test/java/org/apache/avro/TestDataFileCorruption.java @@ -87,7 +87,10 @@ void corruptedFile() throws IOException { assertEquals("fig", r.next().toString()); assertFalse(r.hasNext()); } catch (AvroRuntimeException e) { - assertEquals("Invalid sync!", e.getCause().getMessage()); + assertEquals("Invalid sync marker! The sync marker in the data block doesn't match the " + + "file header's sync marker. This likely indicates data corruption, truncated file, " + + "or incorrectly concatenated Avro files. Verify file integrity and ensure proper " + + "file transmission or creation.", e.getCause().getMessage()); } }