You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "James Smyth (JIRA)" <ji...@apache.org> on 2014/07/22 23:32:40 UTC

[jira] [Created] (AVRO-1549) Overlapping protocol names result in overwritten classes.

James Smyth created AVRO-1549:
---------------------------------

             Summary: Overlapping protocol names result in overwritten classes.
                 Key: AVRO-1549
                 URL: https://issues.apache.org/jira/browse/AVRO-1549
             Project: Avro
          Issue Type: Bug
          Components: java
            Reporter: James Smyth
            Priority: Minor


If two .avdl files have the same 'protocol' name specified at the top, Java code generation will only produce one of them, and ignore the other (or, I would speculate, generates one, then overwrites it with the second one).

Example:

test1.avdl:

@namespace("my.example")
protocol example
{
    void test();
}

test2.avdl:

@namespace("my.example")
protocol example
{
    void testOverwrite();
}

Generates a Java class example.java:

package my.example;

@SuppressWarnings("all")
@org.apache.avro.specific.AvroGenerated
public interface example {
  public static final org.apache.avro.Protocol PROTOCOL = org.apache.avro.Protocol.parse("{\"protocol\":\"example\",\"namespace\":\"my.example\",\"types\":[],\"messages\":{\"testOverwrite\":{\"request\":[],\"response\":\"null\"}}}");
  java.lang.Void testOverwrite() throws org.apache.avro.AvroRemoteException;

  @SuppressWarnings("all")
  public interface Callback extends example {
    public static final org.apache.avro.Protocol PROTOCOL = my.example.example.PROTOCOL;
    void testOverwrite(org.apache.avro.ipc.Callback<java.lang.Void> callback) throws java.io.IOException;
  }
}

While the error may be clear here, I ran into an issue on my project born out of this. We had an avdl file populated with methods that was importing another avdl that was populated with common objects used by a number of other avdl files. The included file had the same protocol name as the file that was including it. This resulted in a Java class with no methods in it. 

Being new to Avro, it took me quite a while to narrow down the cause, though now it seems obvious. It would have been helpful if the code generation had noticed the duplicate protocol name and thrown an error or least a warning.



--
This message was sent by Atlassian JIRA
(v6.2#6252)