You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by si...@apache.org on 2021/01/13 03:23:27 UTC
[pulsar] branch master updated: [Spotbugs] Enable spotbugs for
pulsar functions (#8851)
This is an automated email from the ASF dual-hosted git repository.
sijie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new 8c4bddb [Spotbugs] Enable spotbugs for pulsar functions (#8851)
8c4bddb is described below
commit 8c4bddb3fee6fcf9198d63dc81da487d0c4a1081
Author: xiaolong ran <rx...@apache.org>
AuthorDate: Wed Jan 13 11:23:01 2021 +0800
[Spotbugs] Enable spotbugs for pulsar functions (#8851)
Signed-off-by: xiaolong.ran <rx...@apache.org>
### Motivation
Enable spotbugs for pulsar functions
### Modifications
Enable spotbugs for pulsar functions
- [x] Instance
- [x] API
- [x] Java Examples
- [x] Localrun
- [x] Runtime All
- [x] Secrets
---
pulsar-functions/api-java/pom.xml | 22 +++++++
.../src/main/resources/findbugsExclude.xml | 22 +++++++
pulsar-functions/instance/pom.xml | 17 ++++++
.../pulsar/functions/instance/InstanceUtils.java | 2 +
.../pulsar/functions/instance/LogAppender.java | 3 +-
.../instance/state/BKStateStoreProviderImpl.java | 9 ++-
.../apache/pulsar/functions/sink/PulsarSink.java | 9 ++-
.../src/main/resources/findbugsExclude.xml | 71 ++++++++++++++++++++++
pulsar-functions/java-examples/pom.xml | 22 +++++++
.../api/examples/AsyncContextFunction.java | 5 +-
.../functions/api/examples/ContextFunction.java | 5 +-
.../src/main/resources/findbugsExclude.xml | 22 +++++++
pulsar-functions/localrun/pom.xml | 22 +++++++
.../org/apache/pulsar/functions/LocalRunner.java | 13 ++--
.../src/main/resources/findbugsExclude.xml | 26 ++++++++
pulsar-functions/runtime-all/pom.xml | 17 ++++++
.../src/main/resources/findbugsExclude.xml | 31 ++++++++++
pulsar-functions/runtime/pom.xml | 17 ++++++
.../runtime/src/main/resources/findbugsExclude.xml | 31 ++++++++++
pulsar-functions/secrets/pom.xml | 21 +++++++
.../secrets/src/main/resources/findbugsExclude.xml | 22 +++++++
pulsar-functions/worker/pom.xml | 17 ++++++
.../worker/src/main/resources/findbugsExclude.xml | 22 +++++++
23 files changed, 432 insertions(+), 16 deletions(-)
diff --git a/pulsar-functions/api-java/pom.xml b/pulsar-functions/api-java/pom.xml
index e7caabc..45974d7 100644
--- a/pulsar-functions/api-java/pom.xml
+++ b/pulsar-functions/api-java/pom.xml
@@ -51,4 +51,26 @@
</dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>com.github.spotbugs</groupId>
+ <artifactId>spotbugs-maven-plugin</artifactId>
+ <version>${spotbugs-maven-plugin.version}</version>
+ <configuration>
+ <excludeFilterFile>${basedir}/src/main/resources/findbugsExclude.xml</excludeFilterFile>
+ </configuration>
+ <executions>
+ <execution>
+ <id>check</id>
+ <phase>verify</phase>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
</project>
diff --git a/pulsar-functions/api-java/src/main/resources/findbugsExclude.xml b/pulsar-functions/api-java/src/main/resources/findbugsExclude.xml
new file mode 100644
index 0000000..ddde812
--- /dev/null
+++ b/pulsar-functions/api-java/src/main/resources/findbugsExclude.xml
@@ -0,0 +1,22 @@
+<!--
+
+ 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.
+
+-->
+<FindBugsFilter>
+</FindBugsFilter>
\ No newline at end of file
diff --git a/pulsar-functions/instance/pom.xml b/pulsar-functions/instance/pom.xml
index 3a168f2..35102b8 100644
--- a/pulsar-functions/instance/pom.xml
+++ b/pulsar-functions/instance/pom.xml
@@ -200,6 +200,23 @@
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>com.github.spotbugs</groupId>
+ <artifactId>spotbugs-maven-plugin</artifactId>
+ <version>${spotbugs-maven-plugin.version}</version>
+ <configuration>
+ <excludeFilterFile>${basedir}/src/main/resources/findbugsExclude.xml</excludeFilterFile>
+ </configuration>
+ <executions>
+ <execution>
+ <id>check</id>
+ <phase>verify</phase>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/InstanceUtils.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/InstanceUtils.java
index 024599c..e855013 100644
--- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/InstanceUtils.java
+++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/InstanceUtils.java
@@ -140,6 +140,8 @@ public class InstanceUtils {
case SINK:
properties.put("application", "pulsar-sink");
break;
+ default:
+ throw new IllegalArgumentException("Not support component type");
}
properties.put("id", fullyQualifiedName);
properties.put("instance_id", String.valueOf(instanceId));
diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/LogAppender.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/LogAppender.java
index d438bfd..ca669be 100644
--- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/LogAppender.java
+++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/LogAppender.java
@@ -18,6 +18,7 @@
*/
package org.apache.pulsar.functions.instance;
+import java.nio.charset.StandardCharsets;
import org.apache.logging.log4j.core.*;
import org.apache.pulsar.client.api.CompressionType;
import org.apache.pulsar.client.api.Producer;
@@ -47,7 +48,7 @@ public class LogAppender implements Appender {
@Override
public void append(LogEvent logEvent) {
producer.newMessage()
- .value(logEvent.getMessage().getFormattedMessage().getBytes())
+ .value(logEvent.getMessage().getFormattedMessage().getBytes(StandardCharsets.UTF_8))
.property("loglevel", logEvent.getLevel().name())
.sendAsync();
}
diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/state/BKStateStoreProviderImpl.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/state/BKStateStoreProviderImpl.java
index f531ea5..af921a71 100644
--- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/state/BKStateStoreProviderImpl.java
+++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/state/BKStateStoreProviderImpl.java
@@ -119,8 +119,13 @@ public class BKStateStoreProviderImpl implements StateStoreProvider {
} catch (NamespaceNotFoundException nnfe) {
try {
result(storageAdminClient.createNamespace(tableNs, NamespaceConfiguration.newBuilder()
- .setDefaultStreamConf(streamConf)
- .build()));
+ .setDefaultStreamConf(streamConf)
+ .build()));
+ } catch (Exception e) {
+ // there might be two clients conflicting at creating table, so let's retrieve the table again
+ // to make sure the table is created.
+ }
+ try {
result(storageAdminClient.createStream(tableNs, tableName, streamConf));
} catch (Exception e) {
// there might be two clients conflicting at creating table, so let's retrieve the table again
diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/sink/PulsarSink.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/sink/PulsarSink.java
index 05051da..50c8d8a 100644
--- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/sink/PulsarSink.java
+++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/sink/PulsarSink.java
@@ -19,9 +19,12 @@
package org.apache.pulsar.functions.sink;
import com.google.common.annotations.VisibleForTesting;
+
+import java.nio.charset.StandardCharsets;
import lombok.Builder;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
+import lombok.val;
import org.apache.commons.lang3.StringUtils;
import org.apache.pulsar.client.api.BatcherBuilder;
import org.apache.pulsar.client.api.CompressionType;
@@ -126,7 +129,6 @@ public class PulsarSink<T> implements Sink<T> {
builder.maxPendingMessagesAcrossPartitions(producerConfig.getMaxPendingMessagesAcrossPartitions());
}
if (producerConfig.getCryptoConfig() != null) {
- CryptoConfig cryptoConfig = producerConfig.getCryptoConfig();
builder.cryptoKeyReader(crypto.keyReader);
builder.cryptoFailureAction(crypto.failureAction);
for (String encryptionKeyName : crypto.getEncryptionKeys()) {
@@ -366,7 +368,7 @@ public class PulsarSink<T> implements Sink<T> {
// forward user properties to sink-topic
msg.property("__pfn_input_topic__", pulsarRecord.getTopicName().get())
.property("__pfn_input_msg_id__",
- new String(Base64.getEncoder().encode(pulsarRecord.getMessageId().toByteArray())));
+ new String(Base64.getEncoder().encode(pulsarRecord.getMessageId().toByteArray()), StandardCharsets.UTF_8));
} else {
// It is coming from some source
Optional<Long> eventTime = sinkRecord.getSourceRecord().getEventTime();
@@ -424,9 +426,10 @@ public class PulsarSink<T> implements Sink<T> {
Security.addProvider(new BouncyCastleProvider());
}
+ final String[] encryptionKeys = cryptoConfig.getEncryptionKeys();
Crypto.CryptoBuilder bldr = Crypto.builder()
.failureAction(cryptoConfig.getProducerCryptoFailureAction())
- .encryptionKeys(cryptoConfig.getEncryptionKeys());
+ .encryptionKeys(encryptionKeys);
bldr.keyReader(CryptoUtils.getCryptoKeyReaderInstance(
cryptoConfig.getCryptoKeyReaderClassName(), cryptoConfig.getCryptoKeyReaderConfig(), functionClassLoader));
diff --git a/pulsar-functions/instance/src/main/resources/findbugsExclude.xml b/pulsar-functions/instance/src/main/resources/findbugsExclude.xml
new file mode 100644
index 0000000..883605d
--- /dev/null
+++ b/pulsar-functions/instance/src/main/resources/findbugsExclude.xml
@@ -0,0 +1,71 @@
+<!--
+
+ 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.
+
+-->
+<FindBugsFilter>
+ <!-- these public fields may be used in other modules -->
+ <Match>
+ <Class name="org.apache.pulsar.functions.instance.ContextImpl$MessageBuilderImpl"/>
+ <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
+ </Match>
+ <Match>
+ <Class name="org.apache.pulsar.functions.instance.JavaInstanceRunnable"/>
+ <Bug pattern="IS2_INCONSISTENT_SYNC"/>
+ </Match>
+ <Match>
+ <Class name="org.apache.pulsar.functions.sink.PulsarSink"/>
+ <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
+ </Match>
+ <Match>
+ <Class name="org.apache.pulsar.functions.sink.PulsarSink$PulsarSinkEffectivelyOnceProcessor"/>
+ <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
+ </Match>
+ <Match>
+ <Class name="org.apache.pulsar.functions.instance.stats.ComponentStatsManager"/>
+ <Bug pattern="MS_MUTABLE_ARRAY"/>
+ </Match>
+ <Match>
+ <Class name="org.apache.pulsar.functions.instance.stats.ComponentStatsManager"/>
+ <Bug pattern="EI_EXPOSE_REP2"/>
+ </Match>
+ <Match>
+ <Class name="org.apache.pulsar.functions.instance.stats.ComponentStatsManager"/>
+ <Bug pattern="MS_PKGPROTECT"/>
+ </Match>
+ <Match>
+ <Class name="org.apache.pulsar.functions.sink.PulsarSink$Crypto$CryptoBuilder"/>
+ <Bug pattern="EI_EXPOSE_REP2"/>
+ </Match>
+ <Match>
+ <Class name="org.apache.pulsar.functions.source.batch.BatchSourceExecutor"/>
+ <Bug pattern="UC_USELESS_OBJECT"/>
+ </Match>
+ <Match>
+ <Class name="org.apache.pulsar.functions.source.PulsarSource"/>
+ <Bug pattern="SE_BAD_FIELD"/>
+ </Match>
+ <Match>
+ <Class name="org.apache.pulsar.functions.source.batch.BatchSourceExecutor"/>
+ <Bug pattern="RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT"/>
+ </Match>
+ <Match>
+ <Class name="org.apache.pulsar.functions.source.SerDeSchema"/>
+ <Bug pattern="CN_IDIOM_NO_SUPER_CALL"/>
+ </Match>
+</FindBugsFilter>
diff --git a/pulsar-functions/java-examples/pom.xml b/pulsar-functions/java-examples/pom.xml
index 1dfe1b8..104f5b7 100644
--- a/pulsar-functions/java-examples/pom.xml
+++ b/pulsar-functions/java-examples/pom.xml
@@ -48,4 +48,26 @@
</dependency>
</dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>com.github.spotbugs</groupId>
+ <artifactId>spotbugs-maven-plugin</artifactId>
+ <version>${spotbugs-maven-plugin.version}</version>
+ <configuration>
+ <excludeFilterFile>${basedir}/src/main/resources/findbugsExclude.xml</excludeFilterFile>
+ </configuration>
+ <executions>
+ <execution>
+ <id>check</id>
+ <phase>verify</phase>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
</project>
diff --git a/pulsar-functions/java-examples/src/main/java/org/apache/pulsar/functions/api/examples/AsyncContextFunction.java b/pulsar-functions/java-examples/src/main/java/org/apache/pulsar/functions/api/examples/AsyncContextFunction.java
index b70bc7c..77c0e2d 100644
--- a/pulsar-functions/java-examples/src/main/java/org/apache/pulsar/functions/api/examples/AsyncContextFunction.java
+++ b/pulsar-functions/java-examples/src/main/java/org/apache/pulsar/functions/api/examples/AsyncContextFunction.java
@@ -43,9 +43,8 @@ public class AsyncContextFunction implements Function<String, CompletableFuture<
String inputTopics = context.getInputTopics().stream().collect(Collectors.joining(", "));
String funcName = context.getFunctionName();
- String logMessage = String
- .format("A message with value of \"%s\" has arrived on one of the following topics: %s\n",
- input, inputTopics);
+ String logMessage = String.format("A message with value of \"%s\" has arrived on " +
+ "one of the following topics: %s %n", input, inputTopics);
LOG.info(logMessage);
String metricName = String.format("function-%s-messages-received", funcName);
diff --git a/pulsar-functions/java-examples/src/main/java/org/apache/pulsar/functions/api/examples/ContextFunction.java b/pulsar-functions/java-examples/src/main/java/org/apache/pulsar/functions/api/examples/ContextFunction.java
index 489715c..294bac0 100644
--- a/pulsar-functions/java-examples/src/main/java/org/apache/pulsar/functions/api/examples/ContextFunction.java
+++ b/pulsar-functions/java-examples/src/main/java/org/apache/pulsar/functions/api/examples/ContextFunction.java
@@ -31,9 +31,8 @@ public class ContextFunction implements Function<String, Void> {
String inputTopics = context.getInputTopics().stream().collect(Collectors.joining(", "));
String functionName = context.getFunctionName();
- String logMessage = String.format("A message with a value of \"%s\" has arrived on one of the following topics: %s\n",
- input,
- inputTopics);
+ String logMessage = String.format("A message with a value of \"%s\" has arrived on one of " +
+ "the following topics: %s %n", input, inputTopics);
LOG.info(logMessage);
diff --git a/pulsar-functions/java-examples/src/main/resources/findbugsExclude.xml b/pulsar-functions/java-examples/src/main/resources/findbugsExclude.xml
new file mode 100644
index 0000000..ddde812
--- /dev/null
+++ b/pulsar-functions/java-examples/src/main/resources/findbugsExclude.xml
@@ -0,0 +1,22 @@
+<!--
+
+ 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.
+
+-->
+<FindBugsFilter>
+</FindBugsFilter>
\ No newline at end of file
diff --git a/pulsar-functions/localrun/pom.xml b/pulsar-functions/localrun/pom.xml
index 83fd05a..44bdfa3 100644
--- a/pulsar-functions/localrun/pom.xml
+++ b/pulsar-functions/localrun/pom.xml
@@ -59,4 +59,26 @@
<artifactId>grpc-all</artifactId>
</dependency>
</dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>com.github.spotbugs</groupId>
+ <artifactId>spotbugs-maven-plugin</artifactId>
+ <version>${spotbugs-maven-plugin.version}</version>
+ <configuration>
+ <excludeFilterFile>${basedir}/src/main/resources/findbugsExclude.xml</excludeFilterFile>
+ </configuration>
+ <executions>
+ <execution>
+ <id>check</id>
+ <phase>verify</phase>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
</project>
diff --git a/pulsar-functions/localrun/src/main/java/org/apache/pulsar/functions/LocalRunner.java b/pulsar-functions/localrun/src/main/java/org/apache/pulsar/functions/LocalRunner.java
index 5b75c95..d4c6779 100644
--- a/pulsar-functions/localrun/src/main/java/org/apache/pulsar/functions/LocalRunner.java
+++ b/pulsar-functions/localrun/src/main/java/org/apache/pulsar/functions/LocalRunner.java
@@ -24,6 +24,9 @@ import com.beust.jcommander.Parameter;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonParser;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeoutException;
import lombok.Builder;
import lombok.extern.slf4j.Slf4j;
import org.apache.pulsar.common.functions.FunctionConfig;
@@ -300,9 +303,11 @@ public class LocalRunner {
.getProtectionDomain().getCodeSource().getLocation().getFile();
}
- String builtInSink = isBuiltInSink(userCodeFile);
- if (builtInSink != null) {
- sinkConfig.setArchive(builtInSink);
+ if (userCodeFile != null) {
+ String builtInSink = isBuiltInSink(userCodeFile);
+ if (builtInSink != null) {
+ sinkConfig.setArchive(builtInSink);
+ }
}
parallelism = sinkConfig.getParallelism();
@@ -413,7 +418,7 @@ public class LocalRunner {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
log.info(gson.toJson(new JsonParser().parse(json)));
}
- } catch (Exception ex) {
+ } catch (TimeoutException | InterruptedException | ExecutionException e) {
log.error("Could not get status from all local instances");
}
}
diff --git a/pulsar-functions/localrun/src/main/resources/findbugsExclude.xml b/pulsar-functions/localrun/src/main/resources/findbugsExclude.xml
new file mode 100644
index 0000000..719b711
--- /dev/null
+++ b/pulsar-functions/localrun/src/main/resources/findbugsExclude.xml
@@ -0,0 +1,26 @@
+<!--
+
+ 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.
+
+-->
+<FindBugsFilter>
+ <Match>
+ <Class name="org.apache.pulsar.functions.LocalRunner"/>
+ <Bug pattern="REC_CATCH_EXCEPTION"/>
+ </Match>
+</FindBugsFilter>
\ No newline at end of file
diff --git a/pulsar-functions/runtime-all/pom.xml b/pulsar-functions/runtime-all/pom.xml
index 5f27f85..2d03657 100644
--- a/pulsar-functions/runtime-all/pom.xml
+++ b/pulsar-functions/runtime-all/pom.xml
@@ -100,6 +100,23 @@
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>com.github.spotbugs</groupId>
+ <artifactId>spotbugs-maven-plugin</artifactId>
+ <version>${spotbugs-maven-plugin.version}</version>
+ <configuration>
+ <excludeFilterFile>${basedir}/src/main/resources/findbugsExclude.xml</excludeFilterFile>
+ </configuration>
+ <executions>
+ <execution>
+ <id>check</id>
+ <phase>verify</phase>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
</project>
diff --git a/pulsar-functions/runtime-all/src/main/resources/findbugsExclude.xml b/pulsar-functions/runtime-all/src/main/resources/findbugsExclude.xml
new file mode 100644
index 0000000..b4a4e59
--- /dev/null
+++ b/pulsar-functions/runtime-all/src/main/resources/findbugsExclude.xml
@@ -0,0 +1,31 @@
+<!--
+
+ 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.
+
+-->
+<FindBugsFilter>
+ <!-- these public fields may be used in other modules -->
+ <Match>
+ <Class name="org.apache.pulsar.functions.instance.JavaInstanceMain"/>
+ <Bug pattern="DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED"/>
+ </Match>
+ <Match>
+ <Class name="org.apache.pulsar.functions.instance.JavaInstanceMain"/>
+ <Bug pattern="NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE"/>
+ </Match>
+</FindBugsFilter>
\ No newline at end of file
diff --git a/pulsar-functions/runtime/pom.xml b/pulsar-functions/runtime/pom.xml
index 6697e1d..3f89dba 100644
--- a/pulsar-functions/runtime/pom.xml
+++ b/pulsar-functions/runtime/pom.xml
@@ -107,6 +107,23 @@
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>com.github.spotbugs</groupId>
+ <artifactId>spotbugs-maven-plugin</artifactId>
+ <version>${spotbugs-maven-plugin.version}</version>
+ <configuration>
+ <excludeFilterFile>${basedir}/src/main/resources/findbugsExclude.xml</excludeFilterFile>
+ </configuration>
+<!-- <executions>-->
+<!-- <execution>-->
+<!-- <id>check</id>-->
+<!-- <phase>verify</phase>-->
+<!-- <goals>-->
+<!-- <goal>check</goal>-->
+<!-- </goals>-->
+<!-- </execution>-->
+<!-- </executions>-->
+ </plugin>
</plugins>
</build>
diff --git a/pulsar-functions/runtime/src/main/resources/findbugsExclude.xml b/pulsar-functions/runtime/src/main/resources/findbugsExclude.xml
new file mode 100644
index 0000000..b4a4e59
--- /dev/null
+++ b/pulsar-functions/runtime/src/main/resources/findbugsExclude.xml
@@ -0,0 +1,31 @@
+<!--
+
+ 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.
+
+-->
+<FindBugsFilter>
+ <!-- these public fields may be used in other modules -->
+ <Match>
+ <Class name="org.apache.pulsar.functions.instance.JavaInstanceMain"/>
+ <Bug pattern="DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED"/>
+ </Match>
+ <Match>
+ <Class name="org.apache.pulsar.functions.instance.JavaInstanceMain"/>
+ <Bug pattern="NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE"/>
+ </Match>
+</FindBugsFilter>
\ No newline at end of file
diff --git a/pulsar-functions/secrets/pom.xml b/pulsar-functions/secrets/pom.xml
index 9db5309..84737b4 100644
--- a/pulsar-functions/secrets/pom.xml
+++ b/pulsar-functions/secrets/pom.xml
@@ -50,5 +50,26 @@
<version>${project.version}</version>
</dependency>
</dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>com.github.spotbugs</groupId>
+ <artifactId>spotbugs-maven-plugin</artifactId>
+ <version>${spotbugs-maven-plugin.version}</version>
+ <configuration>
+ <excludeFilterFile>${basedir}/src/main/resources/findbugsExclude.xml</excludeFilterFile>
+ </configuration>
+ <executions>
+ <execution>
+ <id>check</id>
+ <phase>verify</phase>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
</project>
diff --git a/pulsar-functions/secrets/src/main/resources/findbugsExclude.xml b/pulsar-functions/secrets/src/main/resources/findbugsExclude.xml
new file mode 100644
index 0000000..ddde812
--- /dev/null
+++ b/pulsar-functions/secrets/src/main/resources/findbugsExclude.xml
@@ -0,0 +1,22 @@
+<!--
+
+ 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.
+
+-->
+<FindBugsFilter>
+</FindBugsFilter>
\ No newline at end of file
diff --git a/pulsar-functions/worker/pom.xml b/pulsar-functions/worker/pom.xml
index a9cd8c1..c99544f 100644
--- a/pulsar-functions/worker/pom.xml
+++ b/pulsar-functions/worker/pom.xml
@@ -186,6 +186,23 @@
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>com.github.spotbugs</groupId>
+ <artifactId>spotbugs-maven-plugin</artifactId>
+ <version>${spotbugs-maven-plugin.version}</version>
+ <configuration>
+ <excludeFilterFile>${basedir}/src/main/resources/findbugsExclude.xml</excludeFilterFile>
+ </configuration>
+<!-- <executions>-->
+<!-- <execution>-->
+<!-- <id>check</id>-->
+<!-- <phase>verify</phase>-->
+<!-- <goals>-->
+<!-- <goal>check</goal>-->
+<!-- </goals>-->
+<!-- </execution>-->
+<!-- </executions>-->
+ </plugin>
</plugins>
</build>
diff --git a/pulsar-functions/worker/src/main/resources/findbugsExclude.xml b/pulsar-functions/worker/src/main/resources/findbugsExclude.xml
new file mode 100644
index 0000000..ddde812
--- /dev/null
+++ b/pulsar-functions/worker/src/main/resources/findbugsExclude.xml
@@ -0,0 +1,22 @@
+<!--
+
+ 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.
+
+-->
+<FindBugsFilter>
+</FindBugsFilter>
\ No newline at end of file