Gaffer icon indicating copy to clipboard operation
Gaffer copied to clipboard

Accumulo store uses Accumulo code not part of the public API

Open GCHQDeveloper314 opened this issue 2 years ago • 0 comments

The Accumulo team state that "Code not in the public API should be considered unstable, at risk of changing between versions" (see the Public API Definition and this blog post). This 'unstable' code is currently being used in Gaffer. This potentially prevents uses of newer versions of Accumulo with Gaffer without making code changes and causes compatibility problems for users who want to use other versions of Accumulo.

Accumulo API changes follow semver 2.0, which means that only major versions contain breaking public API changes. The Accumulo store could be used with all versions of Accumulo 2.x.x by improving the codebase to remove all usage of non-public Accumulo API.

There are 19 files which imports and use of code which is not part of the Accumulo public API. This is a little under 10% of all Java files in the Accumulo store.

Files in src/main:

AccumuloStore.java:28
operation/hdfs/handler/job/partitioner/GafferRangePartitioner.java:19
utils/TableUtils.java:31
utils/TableUtils.java:32
utils/AddUpdateTableIterator.java:23
utils/IteratorSettingBuilder.java:23
utils/IteratorSettingBuilder.java:24
utils/IteratorOptionsBuilder.java:19
key/AccumuloKeyPackage.java:19
key/AbstractElementFilter.java:22
key/AbstractElementFilter.java:23
key/AbstractElementFilter.java:24
key/impl/RowIDAggregator.java:24
key/impl/RowIDAggregator.java:25
key/impl/RowIDAggregator.java:26
key/impl/RowIDAggregator.java:27
key/impl/AggregatorIterator.java:21
key/impl/AggregatorIterator.java:22
key/impl/AggregatorIterator.java:23
key/core/impl/CoreKeyBloomFunctor.java:20
key/core/impl/CoreKeyGroupByCombiner.java:26
key/core/impl/CoreKeyGroupByCombiner.java:27
key/core/impl/CoreKeyGroupByCombiner.java:28
key/core/impl/CoreKeyGroupByCombiner.java:29
key/core/impl/CoreKeyGroupByCombiner.java:30
key/core/impl/CoreKeyGroupByCombiner.java:31
key/core/impl/CoreKeyBloomFilterIterator.java:21
key/core/impl/CoreKeyBloomFilterIterator.java:22
key/core/impl/CoreKeyBloomFilterIterator.java:23
key/core/impl/classic/ClassicRangeElementPropertyFilterIterator.java:21
key/core/impl/classic/ClassicRangeElementPropertyFilterIterator.java:22
key/core/impl/classic/ClassicRangeElementPropertyFilterIterator.java:23
key/core/impl/classic/ClassicEdgeDirectedUndirectedFilterIterator.java:20
key/core/impl/classic/ClassicEdgeDirectedUndirectedFilterIterator.java:21
key/core/impl/classic/ClassicEdgeDirectedUndirectedFilterIterator.java:22
key/core/impl/byteEntity/ByteEntityRangeElementPropertyFilterIterator.java:21
key/core/impl/byteEntity/ByteEntityRangeElementPropertyFilterIterator.java:22
key/core/impl/byteEntity/ByteEntityRangeElementPropertyFilterIterator.java:23

Files in src/test:

utils/TableUtilsTest.java:21
utils/TableUtilsTest.java:22
key/impl/AggregatorIteratorTest.java:23
key/impl/AggregatorIteratorTest.java:24
test/bloom/FilterWritabilityTest.java:19
integration/performance/BloomFilterIT.java:19
integration/performance/BloomFilterIT.java:20
integration/performance/BloomFilterIT.java:21
integration/performance/BloomFilterIT.java:25
integration/performance/BloomFilterIT.java:26
integration/performance/BloomFilterIT.java:27
integration/performance/BloomFilterIT.java:28
integration/performance/BloomFilterIT.java:29

GCHQDeveloper314 avatar Jun 06 '22 15:06 GCHQDeveloper314