Update checkstyle to use import-control for API check (#52)
* Update checkstyle to use import-control for checking use of accumulo API
* Add checkstyle plugin to the build execution to always run
* Add exceptions to API checking to hold the line until we can fix
* Use Guava peeking iterator in place of accumulo peeking iterator
diff --git a/contrib/checkstyle.xml b/contrib/checkstyle.xml
index 68bb068..590efce 100644
--- a/contrib/checkstyle.xml
+++ b/contrib/checkstyle.xml
@@ -17,11 +17,9 @@
<module name="Checker">
<property name="charset" value="UTF-8"/>
<module name="TreeWalker">
- <module name="RegexpSinglelineJava">
- <!--check that only Accumulo public APIs are imported-->
- <property name="format" value="import\s+org\.apache\.accumulo\.(.*\.(impl|thrift|crypto)\..*|(?!core|minicluster|testing).*|core\.(?!client|data|security).*)"/>
- <property name="ignoreComments" value="true" />
- <property name="message" value="Accumulo non-public classes imported" />
+ <!--check that only Accumulo public APIs are imported-->
+ <module name="ImportControl">
+ <property name="file" value="contrib/import-control.xml"/>
</module>
</module>
</module>
diff --git a/contrib/import-control.xml b/contrib/import-control.xml
new file mode 100644
index 0000000..ff2be61
--- /dev/null
+++ b/contrib/import-control.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!DOCTYPE import-control PUBLIC
+ "-//Checkstyle//DTD ImportControl Configuration 1.4//EN"
+ "https://checkstyle.org/dtds/import_control_1_4.dtd">
+
+<!-- This checkstyle rule is configured to ensure only use of Accumulo API -->
+<import-control pkg="org.apache.accumulo.testing" strategyOnMismatch="allowed">
+ <!-- allow this package -->
+ <allow pkg="org.apache.accumulo.testing"/>
+ <!-- API packages -->
+ <allow pkg="org.apache.accumulo.core.client"/>
+ <allow pkg="org.apache.accumulo.core.data"/>
+ <allow pkg="org.apache.accumulo.core.security"/>
+ <allow pkg="org.apache.accumulo.core.iterators"/>
+ <allow pkg="org.apache.accumulo.minicluster"/>
+ <allow pkg="org.apache.accumulo.hadoop.mapreduce"/>
+
+ <!-- exceptions for testing -->
+ <allow pkg="org.apache.accumulo.core.conf"/>
+
+ <!-- TODO refactor code to remove the following exceptions -->
+ <allow class="org.apache.accumulo.core.clientImpl.thrift.TableOperationExceptionType"/>
+ <allow class="org.apache.accumulo.core.clientImpl.thrift.ThriftTableOperationException"/>
+ <allow class="org.apache.accumulo.core.metadata.MetadataTable"/>
+ <allow class="org.apache.accumulo.core.replication.ReplicationTable"/>
+ <allow class="org.apache.accumulo.core.spi.scan.HintScanPrioritizer"/>
+ <allow class="org.apache.accumulo.hadoopImpl.mapreduce.lib.MapReduceClientOnRequiredTable"/>
+ <allow class="org.apache.accumulo.core.crypto.CryptoServiceFactory"/>
+ <allow class="org.apache.accumulo.core.clientImpl.ClientContext"/>
+ <allow class="org.apache.accumulo.core.clientImpl.TabletServerBatchWriter"/>
+ <allow class="org.apache.accumulo.core.file.FileOperations"/>
+ <allow class="org.apache.accumulo.core.file.FileSKVWriter"/>
+ <allow class="org.apache.accumulo.core.file.rfile.RFile"/>
+ <allow class="org.apache.accumulo.core.util.SimpleThreadPool"/>
+ <allow class="org.apache.accumulo.core.util.FastFormat"/>
+ <allow class="org.apache.accumulo.core.cli.ClientOnRequiredTable"/>
+ <allow class="org.apache.accumulo.core.cli.BatchScannerOpts"/>
+ <allow class="org.apache.accumulo.core.cli.ClientOnDefaultTable"/>
+ <allow class="org.apache.accumulo.core.cli.ClientOpts.TimeConverter"/>
+ <allow class="org.apache.accumulo.core.cli.Help"/>
+ <allow class="org.apache.accumulo.core.cli.BatchWriterOpts"/>
+ <allow class="org.apache.accumulo.core.cli.ClientOpts"/>
+ <allow class="org.apache.accumulo.core.cli.ScannerOpts"/>
+ <allow class="org.apache.accumulo.core.util.Pair"/>
+ <allow class="org.apache.accumulo.core.trace.Trace"/>
+ <allow class="org.apache.accumulo.core.trace.TraceSamplers"/>
+ <allow class="org.apache.accumulo.core.trace.Span"/>
+ <allow class="org.apache.accumulo.core.trace.DistributedTrace"/>
+ <!-- End TODO section -->
+
+ <!-- disallow everything else coming from accumulo -->
+ <disallow pkg="org.apache.accumulo"/>
+</import-control>
diff --git a/pom.xml b/pom.xml
index deb0ed2..a1a07be 100644
--- a/pom.xml
+++ b/pom.xml
@@ -118,15 +118,28 @@
</executions>
</plugin>
<plugin>
- <!-- This was added to ensure project only uses public API. Run with the following:
- mvn checkstyle:checkstyle
- -->
+ <!-- This was added to ensure project only uses public API -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
- <version>2.17</version>
+ <version>3.0.0</version>
<configuration>
<configLocation>contrib/checkstyle.xml</configLocation>
</configuration>
+ <dependencies>
+ <dependency>
+ <groupId>com.puppycrawl.tools</groupId>
+ <artifactId>checkstyle</artifactId>
+ <version>8.17</version>
+ </dependency>
+ </dependencies>
+ <executions>
+ <execution>
+ <id>check-style</id>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
</plugin>
</plugins>
</build>
diff --git a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/IsolatedScan.java b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/IsolatedScan.java
index 27e8d9c..14fb2ee 100644
--- a/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/IsolatedScan.java
+++ b/src/main/java/org/apache/accumulo/testing/randomwalk/concurrent/IsolatedScan.java
@@ -30,11 +30,13 @@
import org.apache.accumulo.core.data.Key;
import org.apache.accumulo.core.data.Value;
import org.apache.accumulo.core.security.Authorizations;
-import org.apache.accumulo.core.util.PeekingIterator;
import org.apache.accumulo.testing.randomwalk.RandWalkEnv;
import org.apache.accumulo.testing.randomwalk.State;
import org.apache.accumulo.testing.randomwalk.Test;
+import com.google.common.collect.Iterators;
+import com.google.common.collect.PeekingIterator;
+
public class IsolatedScan extends Test {
@Override
@@ -53,7 +55,7 @@
Authorizations.EMPTY)));
while (iter.hasNext()) {
- PeekingIterator<Entry<Key,Value>> row = new PeekingIterator<>(iter.next());
+ PeekingIterator<Entry<Key,Value>> row = Iterators.peekingIterator(iter.next());
Entry<Key,Value> kv = null;
if (row.hasNext())
kv = row.peek();