mirror of https://github.com/apache/druid.git
Attach IO error to parse error when we can't contact Avro schema registry. (#13403)
* Attach IO error to parse error when we can't contact Avro schema registry. The change in #12080 lost the original exception context. This patch adds it back. * Add hamcrest-core. * Fix format string.
This commit is contained in:
parent
280a0f7158
commit
c6054b7cb7
|
@ -254,6 +254,11 @@
|
|||
<artifactId>mockito-core</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.hamcrest</groupId>
|
||||
<artifactId>hamcrest-core</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.druid</groupId>
|
||||
<artifactId>druid-core</artifactId>
|
||||
|
|
|
@ -140,17 +140,17 @@ public class SchemaRegistryBasedAvroBytesDecoder implements AvroBytesDecoder
|
|||
schema = parsedSchema instanceof AvroSchema ? ((AvroSchema) parsedSchema).rawSchema() : null;
|
||||
}
|
||||
catch (IOException | RestClientException ex) {
|
||||
throw new ParseException(null, "Failed to get Avro schema: %s", id);
|
||||
throw new ParseException(null, ex, "Failed to fetch Avro schema from registry: %s", id);
|
||||
}
|
||||
if (schema == null) {
|
||||
throw new ParseException(null, "Failed to find Avro schema: %s", id);
|
||||
throw new ParseException(null, "No Avro schema in registry: %s", id);
|
||||
}
|
||||
DatumReader<GenericRecord> reader = new GenericDatumReader<>(schema);
|
||||
try {
|
||||
return reader.read(null, DecoderFactory.get().binaryDecoder(bytes.array(), offset, length, null));
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw new ParseException(null, e, "Fail to decode Avro message for schema: %s!", id);
|
||||
throw new ParseException(null, e, "Failed to decode Avro message for schema: %s", id);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -35,6 +35,8 @@ import org.apache.druid.data.input.SomeAvroDatum;
|
|||
import org.apache.druid.jackson.DefaultObjectMapper;
|
||||
import org.apache.druid.java.util.common.parsers.ParseException;
|
||||
import org.apache.druid.utils.DynamicConfigProviderUtils;
|
||||
import org.hamcrest.CoreMatchers;
|
||||
import org.hamcrest.MatcherAssert;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
@ -158,7 +160,7 @@ public class SchemaRegistryBasedAvroBytesDecoderTest
|
|||
new SchemaRegistryBasedAvroBytesDecoder(registry).parse(bb);
|
||||
}
|
||||
|
||||
@Test(expected = ParseException.class)
|
||||
@Test
|
||||
public void testParseWrongId() throws Exception
|
||||
{
|
||||
// Given
|
||||
|
@ -166,7 +168,12 @@ public class SchemaRegistryBasedAvroBytesDecoderTest
|
|||
ByteBuffer bb = ByteBuffer.allocate(5).put((byte) 0).putInt(1234);
|
||||
bb.rewind();
|
||||
// When
|
||||
new SchemaRegistryBasedAvroBytesDecoder(registry).parse(bb);
|
||||
final ParseException e = Assert.assertThrows(
|
||||
ParseException.class,
|
||||
() -> new SchemaRegistryBasedAvroBytesDecoder(registry).parse(bb)
|
||||
);
|
||||
MatcherAssert.assertThat(e.getCause(), CoreMatchers.instanceOf(IOException.class));
|
||||
MatcherAssert.assertThat(e.getCause().getMessage(), CoreMatchers.containsString("no pasaran"));
|
||||
}
|
||||
|
||||
private byte[] getAvroDatum(Schema schema, GenericRecord someAvroDatum) throws IOException
|
||||
|
|
Loading…
Reference in New Issue