Repository: aurora Updated Branches: refs/heads/master d10165544 -> ad86177a0
Migrate from findbugs to spotbugs Findbugs [1] is no longer developed and replaced by spotbugs [2] as mostly a drop-in replacement. [1] https://github.com/findbugsproject/findbugs [2] https://mailman.cs.umd.edu/pipermail/findbugs-discuss/2017-September/004383.html Reviewed at https://reviews.apache.org/r/63564/ Project: http://git-wip-us.apache.org/repos/asf/aurora/repo Commit: http://git-wip-us.apache.org/repos/asf/aurora/commit/ad86177a Tree: http://git-wip-us.apache.org/repos/asf/aurora/tree/ad86177a Diff: http://git-wip-us.apache.org/repos/asf/aurora/diff/ad86177a Branch: refs/heads/master Commit: ad86177a0b241f206eedb51bb708b74f5292afdc Parents: d101655 Author: Stephan Erb <s...@apache.org> Authored: Tue Nov 7 08:26:58 2017 +0100 Committer: Stephan Erb <s...@apache.org> Committed: Tue Nov 7 08:26:58 2017 +0100 ---------------------------------------------------------------------- build.gradle | 18 +-- config/findbugs/excludeFilter.xml | 129 ------------------ config/spotbugs/excludeFilter.xml | 136 +++++++++++++++++++ .../scheduler/offers/OfferOrderBuilder.java | 4 +- 4 files changed, 145 insertions(+), 142 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/aurora/blob/ad86177a/build.gradle ---------------------------------------------------------------------- diff --git a/build.gradle b/build.gradle index 26051ac..ddf153d 100644 --- a/build.gradle +++ b/build.gradle @@ -17,11 +17,11 @@ plugins { id 'com.github.hierynomus.license' version '0.11.0' id 'com.moowork.node' version '1.2.0' id 'me.champeau.gradle.jmh' version '0.4.4' + id "com.github.spotbugs" version "1.6.0" } apply plugin: 'application' apply plugin: 'checkstyle' -apply plugin: 'findbugs' apply plugin: 'jacoco' apply plugin: 'pmd' @@ -85,7 +85,6 @@ For more details, please see https://issues.apache.org/jira/browse/AURORA-1169 ext.asyncHttpclientRev = '2.0.37' ext.jacksonRev = '2.5.1' ext.jerseyRev = '1.19' - ext.jsrRev = '3.0.1' ext.junitRev = '4.12' ext.logbackRev = '1.2.3' ext.mybatisRev = '3.4.1' @@ -112,7 +111,6 @@ For more details, please see https://issues.apache.org/jira/browse/AURORA-1169 failOnVersionConflict() force "com.fasterxml.jackson.core:jackson-annotations:${jacksonRev}" force "com.fasterxml.jackson.core:jackson-core:${jacksonRev}" - force "com.google.code.findbugs:jsr305:${jsrRev}" force "com.google.code.gson:gson:${gsonRev}" force "com.google.guava:guava:${guavaRev}" force "com.google.protobuf:protobuf-java:${protobufRev}" @@ -187,7 +185,6 @@ project(':commons') { } dependencies { - compile "com.google.code.findbugs:jsr305:${jsrRev}" compile "com.google.code.gson:gson:${gsonRev}" compile "com.google.guava:guava:${guavaRev}" compile "com.google.inject:guice:${guiceRev}" @@ -373,7 +370,6 @@ dependencies { compile 'aopalliance:aopalliance:1.0' compile "ch.qos.logback:logback-classic:${logbackRev}" compile "com.beust:jcommander:1.72" - compile "com.google.code.findbugs:jsr305:${jsrRev}" compile "com.google.inject:guice:${guiceRev}" compile "com.google.inject.extensions:guice-assistedinject:${guiceRev}" compile "com.google.protobuf:protobuf-java:${protobufRev}" @@ -417,7 +413,7 @@ dependencies { def runCodeQuality = project.hasProperty('q') def codeQualityTasks = [ Checkstyle, - FindBugs, + com.github.spotbugs.SpotBugsTask, nl.javadude.gradle.plugins.license.License, Pmd ] @@ -432,18 +428,18 @@ checkstyle { toolVersion = '7.3' } -findbugs { - toolVersion = '3.0.1' +spotbugs { + toolVersion = '3.1.0' effort = "max" } -tasks.withType(FindBugs) { +tasks.withType(com.github.spotbugs.SpotBugsTask) { reports { xml.enabled = false html.enabled = true } - maxHeapSize = '2g' - excludeFilter = rootProject.file('config/findbugs/excludeFilter.xml') + maxHeapSize = '1g' + excludeFilter = rootProject.file('config/spotbugs/excludeFilter.xml') } pmd { http://git-wip-us.apache.org/repos/asf/aurora/blob/ad86177a/config/findbugs/excludeFilter.xml ---------------------------------------------------------------------- diff --git a/config/findbugs/excludeFilter.xml b/config/findbugs/excludeFilter.xml deleted file mode 100644 index 4d5b36f..0000000 --- a/config/findbugs/excludeFilter.xml +++ /dev/null @@ -1,129 +0,0 @@ -<!-- -Licensed 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. ---> -<FindBugsFilter> - <!-- Warnings triggered in thrift-generated code. --> - <Match> - <Or> - <Package name="org.apache.aurora.gen" /> - <Package name="org.apache.aurora.gen.comm" /> - <Package name="org.apache.aurora.gen.storage" /> - <Package name="org.apache.aurora.gen.test" /> - <Package name="org.apache.aurora.benchmark.generated" /> - <Package name="org.openjdk.jmh.infra.generated" /> - <!-- Un-namespaced structs used by the executor. --> - <Class name="ProcessState" /> - <Class name="ProcessStatus" /> - <Class name="RunnerHeader" /> - <Class name="RunnerState" /> - <Class name="TaskStatus" /> - </Or> - <Or> - <Bug pattern="BC_IMPOSSIBLE_CAST" /> - <Bug pattern="CN_IDIOM" /> - <Bug pattern="DLS_DEAD_LOCAL_STORE" /> - <Bug pattern="NM_CLASS_NAMING_CONVENTION" /> - <Bug pattern="UUF_UNUSED_FIELD" /> - <Bug pattern="URF_UNREAD_FIELD" /> - </Or> - </Match> - - <!-- Warnings triggered for mybatis shim classes. --> - <Match> - <Package name="org.apache.aurora.scheduler.storage.db.views" /> - <Or> - <!-- The shim classes trip these warnings since we have no code that explicitly sets fields, - but mybatis reflects and sets them for us. - --> - <Bug pattern="NP_UNWRITTEN_FIELD" /> - <Bug pattern="UWF_UNWRITTEN_FIELD" /> - </Or> - </Match> - - <!-- We don't make use of Java serialization and this can prevent, for example, declaring an - HttpServlet as an anonymous inner class for testing. --> - <Match> - <Bug pattern="SE_BAD_FIELD" /> - </Match> - - <!-- We must maintain reflexivity with WildcardPermission's equals, so we cannot override - it even though we add fields in our subclass. We cannot use delegation because - WildcardPermission's implies method checks that its argument is an instance of - WildcardPermission. --> - <Match> - <Or> - <Class name="org.apache.aurora.scheduler.spi.Permissions$JobScopedRpcPermission" /> - <Class name="org.apache.aurora.scheduler.spi.Permissions$UnscopedRpcPermission" /> - </Or> - <Bug pattern="EQ_DOESNT_OVERRIDE_EQUALS" /> - </Match> - - <!-- Method is intentionally only callable by EventBus. --> - <Match> - <Class name="org.apache.aurora.scheduler.events.PubsubEventModule$1" /> - <Bug pattern="UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS" /> - </Match> - - <!-- Technical debt. --> - <Match> - <Class name="org.apache.aurora.scheduler.log.mesos.MesosLog$LogStream" /> - <Bug pattern="IS2_INCONSISTENT_SYNC" /> - </Match> - <Match> - <Class name="org.apache.aurora.scheduler.http.Utilization" /> - <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE" /> - </Match> - <Match> - <Class name="~org\.apache\.aurora.*$" /> - <Bug pattern="NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE" /> - </Match> - <Match> - <Or> - <Class name="org.apache.aurora.scheduler.storage.backup.StorageBackup$StorageBackupImpl" /> - <Class name="org.apache.aurora.scheduler.storage.backup.StorageBackupTest" /> - </Or> - <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" /> - </Match> - <Match> - <Or> - <Class name="org.apache.aurora.scheduler.app.SchedulerIT$IntPosition" /> - <Class name="org.apache.aurora.scheduler.log.mesos.MesosLog$LogStream$LogPosition" /> - <Class name="org.apache.aurora.scheduler.log.testing.FileLog$FileStream$CounterPosition" /> - </Or> - <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" /> - </Match> - <Match> - <Or> - <Class name="org.apache.aurora.scheduler.cron.testing.AbstractCronIT" /> - <Class name="org.apache.aurora.scheduler.log.mesos.MesosLogTest" /> - <Class name="org.apache.aurora.scheduler.thrift.ThriftIT" /> - <Class name="org.apache.aurora.scheduler.thrift.ThriftIT$1" /> - </Or> - <Bug pattern="DM_DEFAULT_ENCODING" /> - </Match> - - <Match> - <!-- False positives on a check introduced in findbugs 3.0.1 --> - <Or> - <Class name="org.apache.aurora.scheduler.storage.db.DbStorage$3" /> - <Class name="org.apache.aurora.scheduler.http.api.security.AuthorizeHeaderTokenTest" /> - </Or> - <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT" /> - </Match> - - <Match> - <!-- Options fields may be flagged as always null, since they are set reflectively. --> - <Class name="~org.apache.aurora.scheduler.*Options" /> - <Bug pattern="UWF_NULL_FIELD" /> - </Match> -</FindBugsFilter> http://git-wip-us.apache.org/repos/asf/aurora/blob/ad86177a/config/spotbugs/excludeFilter.xml ---------------------------------------------------------------------- diff --git a/config/spotbugs/excludeFilter.xml b/config/spotbugs/excludeFilter.xml new file mode 100644 index 0000000..51790cc --- /dev/null +++ b/config/spotbugs/excludeFilter.xml @@ -0,0 +1,136 @@ +<!-- +Licensed 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. +--> +<FindBugsFilter> + <!-- Warnings triggered in thrift-generated code. --> + <Match> + <Or> + <Package name="org.apache.aurora.gen" /> + <Package name="org.apache.aurora.gen.comm" /> + <Package name="org.apache.aurora.gen.storage" /> + <Package name="org.apache.aurora.gen.test" /> + <Package name="org.apache.aurora.benchmark.generated" /> + <Package name="org.openjdk.jmh.infra.generated" /> + <!-- Un-namespaced structs used by the executor. --> + <Class name="ProcessState" /> + <Class name="ProcessStatus" /> + <Class name="RunnerHeader" /> + <Class name="RunnerState" /> + <Class name="TaskStatus" /> + </Or> + <Or> + <Bug pattern="BC_IMPOSSIBLE_CAST" /> + <Bug pattern="CN_IDIOM" /> + <Bug pattern="DLS_DEAD_LOCAL_STORE" /> + <Bug pattern="NM_CLASS_NAMING_CONVENTION" /> + <Bug pattern="UUF_UNUSED_FIELD" /> + <Bug pattern="URF_UNREAD_FIELD" /> + </Or> + </Match> + + <!-- Warnings triggered for mybatis shim classes. --> + <Match> + <Package name="org.apache.aurora.scheduler.storage.db.views" /> + <Or> + <!-- The shim classes trip these warnings since we have no code that explicitly sets fields, + but mybatis reflects and sets them for us. + --> + <Bug pattern="NP_UNWRITTEN_FIELD" /> + <Bug pattern="UWF_UNWRITTEN_FIELD" /> + </Or> + </Match> + + <!-- We don't make use of Java serialization and this can prevent, for example, declaring an + HttpServlet as an anonymous inner class for testing. --> + <Match> + <Bug pattern="SE_BAD_FIELD" /> + </Match> + + <!-- We must maintain reflexivity with WildcardPermission's equals, so we cannot override + it even though we add fields in our subclass. We cannot use delegation because + WildcardPermission's implies method checks that its argument is an instance of + WildcardPermission. --> + <Match> + <Or> + <Class name="org.apache.aurora.scheduler.spi.Permissions$JobScopedRpcPermission" /> + <Class name="org.apache.aurora.scheduler.spi.Permissions$UnscopedRpcPermission" /> + </Or> + <Bug pattern="EQ_DOESNT_OVERRIDE_EQUALS" /> + </Match> + + <!-- Method is intentionally only callable by EventBus. --> + <Match> + <Class name="org.apache.aurora.scheduler.events.PubsubEventModule$1" /> + <Bug pattern="UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS" /> + </Match> + + <!-- Technical debt. --> + <Match> + <Class name="org.apache.aurora.scheduler.log.mesos.MesosLog$LogStream" /> + <Bug pattern="IS2_INCONSISTENT_SYNC" /> + </Match> + <Match> + <Class name="org.apache.aurora.scheduler.http.Utilization" /> + <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE" /> + </Match> + <Match> + <Class name="~org\.apache\.aurora.*$" /> + <Bug pattern="NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE" /> + </Match> + <Match> + <Or> + <Class name="org.apache.aurora.scheduler.storage.backup.StorageBackup$StorageBackupImpl" /> + <Class name="org.apache.aurora.scheduler.storage.backup.StorageBackupTest" /> + </Or> + <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" /> + </Match> + <Match> + <Or> + <Class name="org.apache.aurora.scheduler.app.SchedulerIT$IntPosition" /> + <Class name="org.apache.aurora.scheduler.log.mesos.MesosLog$LogStream$LogPosition" /> + <Class name="org.apache.aurora.scheduler.log.testing.FileLog$FileStream$CounterPosition" /> + </Or> + <Bug pattern="EQ_COMPARETO_USE_OBJECT_EQUALS" /> + </Match> + <Match> + <Or> + <Class name="org.apache.aurora.scheduler.cron.testing.AbstractCronIT" /> + <Class name="org.apache.aurora.scheduler.log.mesos.MesosLogTest" /> + <Class name="org.apache.aurora.scheduler.thrift.ThriftIT" /> + <Class name="org.apache.aurora.scheduler.thrift.ThriftIT$1" /> + </Or> + <Bug pattern="DM_DEFAULT_ENCODING" /> + </Match> + + <Match> + <!-- False positives on a check introduced in findbugs 3.0.1 --> + <Or> + <Class name="org.apache.aurora.scheduler.storage.db.DbStorage$3" /> + <Class name="org.apache.aurora.scheduler.http.api.security.AuthorizeHeaderTokenTest" /> + </Or> + <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT" /> + </Match> + + <Match> + <!-- Options fields may be flagged as always null, since they are set reflectively. --> + <Class name="~org.apache.aurora.scheduler.*Options" /> + <Bug pattern="UWF_NULL_FIELD" /> + </Match> + + <Match> + <!-- FIXME: We ignore return values of guava collection builders and thus trip this warning. + We need to wait until either https://github.com/spotbugs/spotbugs/issues/463 or + https://github.com/google/guava/issues/2960 has been resolved --> + <Bug pattern="RV_RETURN_VALUE_IGNORED" /> + </Match> +</FindBugsFilter> http://git-wip-us.apache.org/repos/asf/aurora/blob/ad86177a/src/main/java/org/apache/aurora/scheduler/offers/OfferOrderBuilder.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/aurora/scheduler/offers/OfferOrderBuilder.java b/src/main/java/org/apache/aurora/scheduler/offers/OfferOrderBuilder.java index 2676da0..9b395fa 100644 --- a/src/main/java/org/apache/aurora/scheduler/offers/OfferOrderBuilder.java +++ b/src/main/java/org/apache/aurora/scheduler/offers/OfferOrderBuilder.java @@ -74,11 +74,11 @@ final class OfferOrderBuilder { return Ordering .natural() .onResultOf(o -> { - Double resource = bagFromMesosResources( + double resource = bagFromMesosResources( getRevocableOfferResources(o.getOffer())).valueOf(resourceType); // resource will be 0.0 if there is no revocable cpus available. Since the purpose of // this ordering is to bin-pack revocable then we push those offers to the back. - return resource.equals(0.0) ? Double.MAX_VALUE : resource; + return resource == 0.0 ? Double.MAX_VALUE : resource; }); }