Cassandra
  1. Cassandra
  2. CASSANDRA-4097

Classes in org.apache.cassandra.deps:avro:1.4.0-cassandra-1 clash with core Avro classes

    Details

    • Type: Improvement Improvement
    • Status: Resolved
    • Priority: Minor Minor
    • Resolution: Fixed
    • Fix Version/s: 2.0 beta 1
    • Component/s: Core
    • Labels:
      None

      Description

      Cassandra has this dependency:

      build.xml
      ...
      <dependency groupId="org.apache.cassandra.deps" artifactId="avro" version="1.4.0-cassandra-1">
      ...

      Unfortunately this JAR file contains classes in the org.apache.avro package that are incompatible with classes of the same fully-qualified name in the current release of Avro. For example, the inner class org.apache.avro.Schema$Parser found in Avro 1.6.1 is missing from the Cassandra version of that class. This makes it impossible to have both Cassandra and the latest Avro version on the classpath (my use case is an application that embeds Cassandra but also uses Avro 1.6.1 for unrelated serialization purposes). A simple and risk-free solution would be to change the package declaration of Cassandra's Avro classes from org.apache.avro to (say) org.apache.cassandra.avro, assuming that the above dependency is only used by Cassandra and no other projects (which seems a reasonable assumption given its name).

        Activity

        Hide
        Dave Brosius added a comment -

        avro has been removed.

        Show
        Dave Brosius added a comment - avro has been removed.
        Hide
        Andrew Swan added a comment -

        Hi Rahul,

        For unrelated reasons we stopped using Avro, so I don't run into this problem any more.

        However it seems like it would be easy to fix - just move the conflicting classes from one package to another, and rebuild any dependent projects (e.g. Cassandra itself). I guess there aren't enough people using both Avro and Cassandra in the same JVM for this to be worth solving.

        Show
        Andrew Swan added a comment - Hi Rahul, For unrelated reasons we stopped using Avro, so I don't run into this problem any more. However it seems like it would be easy to fix - just move the conflicting classes from one package to another, and rebuild any dependent projects (e.g. Cassandra itself). I guess there aren't enough people using both Avro and Cassandra in the same JVM for this to be worth solving.
        Hide
        rahul jain added a comment -

        Hi Andrew,

        I am also facing same issue. What was your resolution? Have you already submitted your change? Can you please share your fix?

        Regards,
        Rahul

        Show
        rahul jain added a comment - Hi Andrew, I am also facing same issue. What was your resolution? Have you already submitted your change? Can you please share your fix? Regards, Rahul
        Hide
        Andrew Swan added a comment -

        In the lib folder there are two files with "avro" in the name:

        • lib/avro-1.4.0-fixes.jar
        • lib/avro-1.4.0-sources-fixes.jar

        The latter JAR file indeed contains the source code for the classes that need their packages changed, but this JAR file looks to be a build artifact (e.g. it has a generated manifest file), not a genuine source folder. Surely that source is elsewhere. If I'm to contribute a patch that moves these classes, I'm going to need to change the real source files, not just the contents of this JAR file, correct?

        Show
        Andrew Swan added a comment - In the lib folder there are two files with " avro " in the name: lib/avro-1.4.0-fixes.jar lib/avro-1.4.0-sources-fixes.jar The latter JAR file indeed contains the source code for the classes that need their packages changed, but this JAR file looks to be a build artifact (e.g. it has a generated manifest file), not a genuine source folder. Surely that source is elsewhere. If I'm to contribute a patch that moves these classes, I'm going to need to change the real source files, not just the contents of this JAR file, correct?
        Hide
        Jonathan Ellis added a comment -

        look for avro in the lib dir

        Show
        Jonathan Ellis added a comment - look for avro in the lib dir
        Hide
        Andrew Swan added a comment -

        Hi Jonathan,

        I've checked out the source from http://git-wip-us.apache.org/repos/asf/cassandra.git, and there's no lib/avro directory. There's a lib directory, but the only sub-directory it contains is "licenses". Am I looking in the right place?

        Show
        Andrew Swan added a comment - Hi Jonathan, I've checked out the source from http://git-wip-us.apache.org/repos/asf/cassandra.git , and there's no lib/avro directory. There's a lib directory, but the only sub-directory it contains is "licenses". Am I looking in the right place?
        Hide
        Jonathan Ellis added a comment - - edited

        ls lib/avro

        Show
        Jonathan Ellis added a comment - - edited ls lib/ avro
        Hide
        Andrew Swan added a comment -

        I'm willing to submit a patch, but I don't even know where the source of the above dependency is to be found. It's not in the Cassandra project itself, nor is it listed among the ASF Git repositories.

        Show
        Andrew Swan added a comment - I'm willing to submit a patch, but I don't even know where the source of the above dependency is to be found. It's not in the Cassandra project itself, nor is it listed among the ASF Git repositories .

          People

          • Assignee:
            Jonathan Ellis
            Reporter:
            Andrew Swan
          • Votes:
            2 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development