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

Each language Avro supports should be a separate package

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Critical
    • Resolution: Fixed
    • None
    • 1.3.0
    • c, c++, java, python
    • None
    • We currently release Avro as a single monolithic tarball with ant being used to build all the languages that Avro supports.

    • Incompatible change, Reviewed

    Description

      Build Issue
      While ant is used for building Java projects, it is almost never used to build python, c++ or c projects. C and C++ projects are often managed using autotools while Python uses setuptools. Forcing these languages to use a foreign build system ('ant') is suboptimal and will cause us headaches as we move forward.

      Release issue
      Releasing a single monolithic package forces users of one language to download binary and source for all languages. For example, at this time the Avro C distribution is only 384K in size (built using autotools 'make distcheck' target). People interested in using the C implementation would be forced to download a large monolithic tarball (currently 3.8 MB) that includes dozens of third-party jar files for the Java implementation. Furthermore, C users would be forced to use 'ant' as the top-level build tool. This monolithic approach would also prevent us from submitting Avro for inclusion in Linux distribution yum/apt repositories as RPM and Debian packages. It's important to allow C/C++ code to have a pristine release tarball on which to base Debian and RPM packaging.

      Solution
      Create top-level directories: 'java', 'python', 'c++ ' , 'c', 'shared' and 'release'. Each language directory would contain the source for that language and use the build system natural for that language, e.g. ant, autotools, setuptools, gem, etc. The 'shared' directory would have, for example, common test schema and data files for interoperability testing between each language. A simple top-level bash script would call into each language to build a release package, documentation, etc. into the 'release' directory. Each Avro release would then be compromised of package(s) for each language Avro supports, e.g. avro-java-1.2.3.tar.gz, pyavro-1.2.3.tar.gz, avro-c++-1.2.3.tar.gz and avro-c-1.2.3.tar.gz. Later on, we'll also likely have libavro-devel-1.2.3-1.x86_64.rpm too.

      Attachments

        1. AVRO-163.patch
          2 kB
          Matt Massie
        2. AVRO-163.patch
          3 kB
          Matt Massie
        3. AVRO-163-cpp.patch
          2 kB
          Matt Massie
        4. AVRO-163.sh
          0.6 kB
          Doug Cutting
        5. AVRO-163.patch
          2.17 MB
          Doug Cutting

        Issue Links

          Activity

            People

              cutting Doug Cutting
              massie Matt Massie
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - 8h
                  8h
                  Remaining:
                  Remaining Estimate - 8h
                  8h
                  Logged:
                  Time Spent - Not Specified
                  Not Specified