Uploaded image for project: 'Accumulo'
  1. Accumulo
  2. ACCUMULO-2589 Create new client API
  3. ACCUMULO-729

refactor core to reduce client application dependency version conflicts

    XMLWordPrintableJSON

Details

    • Sub-task
    • Status: Resolved
    • Major
    • Resolution: Not A Problem
    • None
    • None
    • client
    • None

    Description

      Accumulo client applications often include things like thrift servers. If the client application uses a different version of a library (like libthrift) than the Accumulo client library uses then baby Jesus cries (and it doesn't work).

      Version conflicts have been common among our users for the following libraries:

      • log4j/slf4j
      • thrift
      • zookeeper
      • hadoop

      This problem is solvable with a moderate amount of effort. The Accumulo client library should create a separate classloader to load its dependencies. We can then separate the core code into interfaces and implementations. For example, the following methods can load the implementations through reflection, and all of their dependencies can be contained in that ClassLoader:

      • Instance.getConnector(...)
      • Instance.getConfiguration(...)
      • Instance.*

      It's probably only the Instance methods that need to do the reflection trick, since everything else is loaded from a connector, whose implementation would be loaded from the other ClassLoader.

      This exercise would also make the Accumulo client API more explicit, which would improve accessibility and reduce the false sense of continuity that may be perceived around some of the classes in core.

      Attachments

        Activity

          People

            Unassigned Unassigned
            afuchs Adam Fuchs
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: