Uploaded image for project: 'Apache Avro'
  1. Apache Avro
  2. AVRO-3904

[rust] Sometimes when calculating schema compatibility the code panics but maybe it should not

    XMLWordPrintableJSON

Details

    Description

      When calculating the schema compatibility can read (schema A can read or not an event written using a schema B) we expect a true or false result, but in some cases the code panics with a message (reason of schema not being compatible) which I think it should not.

      Example:

      let schema_1 = Schema::parse_str(
      r#"{
          "type": "record",
          "name": "StatisticsMap",
          "fields": [
              {"name": "success", "type": {"type": "map", "values": "int"}}
          ]
      }"#)?;
      
      let schema_2 = Schema::parse_str(
          r#"{
      "type": "record",
      "name": "StatisticsMap",
      "fields": [
          {"name": "success", "type": ["null", {"type": "map", "values": "int"}], "default": null}
      ]
      }"#)?
      
      assert!(SchemaCompatibility::can_read(&schema_1, &schema_2)); # true as expected
      
      
      assert!(SchemaCompatibility::can_read(&schema_2, &schema_1)); # expected result false!!
      
      The application panicked (crashed).
      Message:  internal error: entered unreachable code: writers_schema should have been Schema::Map
       
      
      

      PS: If the intention is to give feedback to end users when schemas are not compatible then it makes sense the panic (maybe a Result should be better?) but the feedback should be present every time that the result is false, which is not the case.

      I have a PR ready to fix this in case that we want to change the current behaviour

      Attachments

        Activity

          People

            clesaec Christophe Le Saec
            marcosschroh Marcos Schroh
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 7h 20m
                7h 20m