BanManagement / BanManager

A plugin for Minecraft to manage punishments and moderate more effectively
https://banmanagement.com/
Other
116 stars 90 forks source link

Random Exception #908

Closed Wolf2323 closed 3 years ago

Wolf2323 commented 3 years ago

Issue report

Tell us about your environment

BanManager config.yml:


# 
# Aliases will be found and blocked automatically, e.g. msg will block tell
debug: false
databases:
  local:
    enabled: true
    storageType: mysql
    host: 
    port: 
    name: 
    user: 
    password: 
    maxConnections: 10
    useSSL: false
    verifyServerCertificate: false
    leakDetection: 3000
    tables:
      players: bm_players
      playerBans: bm_player_bans
      playerBanRecords: bm_player_ban_records
      playerMutes: bm_player_mutes
      playerMuteRecords: bm_player_mute_records
      playerKicks: bm_player_kicks
      playerNotes: bm_player_notes
      playerHistory: bm_player_history
      playerReports: bm_player_reports
      playerReportLocations: bm_player_report_locations
      playerReportStates: bm_player_report_states
      playerReportCommands: bm_player_report_commands
      playerReportComments: bm_player_report_comments
      playerWarnings: bm_player_warnings
      ipBans: bm_ip_bans
      ipBanRecords: bm_ip_ban_records
      ipMutes: bm_ip_mutes
      ipMuteRecords: bm_ip_mute_records
      ipRangeBans: bm_ip_range_bans
      ipRangeBanRecords: bm_ip_range_ban_records
      rollbacks: bm_rollbacks
      nameBans: bm_name_bans
      nameBanRecords: bm_name_ban_records
  global:
    enabled: false
    storageType: mysql
    host: 
    port: 
    name: 
    user: 
    password: 
    maxConnections: 10
    useSSL: false
    verifyServerCertificate: false
    leakDetection: 3000
    tables:
      playerBans: bm_player_ban_all
      playerUnbans: bm_player_unban_all
      playerMutes: bm_player_mute_all
      playerUnmutes: bm_player_unmute_all
      playerNotes: bm_player_note_all
      ipBans: bm_ip_ban_all
      ipUnbans: bm_ip_unban_all
mutedCommandBlacklist:
- msg
softMutedCommandBlacklist:
- msg
duplicateIpCheck: true
bypassDuplicateChecks:
- 0.0.0.0
- 127.0.0.1
logKicks: false
logIps: true
displayNotifications: true
broadcastOnSync: true
timeLimits: {}
cooldowns:
  ban: 10
  tempban: 10
  mute: 10
  tempmute: 10
  banip: 10
  tempbanip: 10
  warn: 10
  tempwarn: 10
  report: 10
warningCooldown: 10
warningActions:
  enabled: false
warningMute: false
hooks:
  enabled: false
checkForUpdates: true
offlineAutoComplete: true
punishAlts: false
denyAlts: true
cleanUp:
  kicks: 30
  banRecords: 0
  ipBanRecords: 0
  ipMuteRecords: 0
  muteRecords: 0
  readWarnings: 0
  unreadWarnings: 0
  playerHistory: 0
maxOnlinePerIp: 2
maxMultiaccountsRecently: 0
multiaccountsTime: 300
checkOnJoin: true
createNoteReasons: false
onlineMode: true
chatPriority: normal
blockInvalidReasons: false

Describe your issue: I found this exception in the log, there is no more context to this exception:

[12:51:01] [Craft Scheduler Thread - 218 - BanManager/WARN]: [BanManager] Plugin BanManager v7.2.2 generated an exception while executing task 24
java.lang.NullPointerException: Nodes must be provided.
    at me.confuser.banmanager.common.snakeyaml.nodes.NodeTuple.<init>(NodeTuple.java:28) ~[?:?]
    at me.confuser.banmanager.common.snakeyaml.representer.BaseRepresenter.representMapping(BaseRepresenter.java:164) ~[?:?]
    at me.confuser.banmanager.common.snakeyaml.representer.SafeRepresenter$RepresentMap.representData(SafeRepresenter.java:320) ~[?:?]
    at me.confuser.banmanager.common.snakeyaml.representer.BaseRepresenter.representData(BaseRepresenter.java:95) ~[?:?]
    at me.confuser.banmanager.common.snakeyaml.representer.BaseRepresenter.represent(BaseRepresenter.java:65) ~[?:?]
    at me.confuser.banmanager.common.snakeyaml.Yaml.dumpAll(Yaml.java:271) ~[?:?]
    at me.confuser.banmanager.common.snakeyaml.Yaml.dumpAll(Yaml.java:262) ~[?:?]
    at me.confuser.banmanager.common.snakeyaml.Yaml.dumpAll(Yaml.java:234) ~[?:?]
    at me.confuser.banmanager.common.snakeyaml.Yaml.dump(Yaml.java:209) ~[?:?]
    at me.confuser.banmanager.common.configuration.file.YamlConfiguration.saveToString(YamlConfiguration.java:83) ~[?:?]
    at me.confuser.banmanager.common.configuration.file.FileConfiguration.save(FileConfiguration.java:54) ~[?:?]
    at me.confuser.banmanager.common.configs.Config.save(Config.java:86) ~[?:?]
    at me.confuser.banmanager.common.runnables.SaveLastChecked.run(SaveLastChecked.java:16) ~[?:?]
    at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftTask.run(CraftTask.java:99) ~[patched_1.16.4.jar:git-Tuinity-"f06591a"]
    at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:58) ~[patched_1.16.4.jar:git-Tuinity-"f06591a"]
    at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[patched_1.16.4.jar:git-Tuinity-"f06591a"]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
    at java.lang.Thread.run(Thread.java:834) [?:?]

How to replicate:

Further information:

confuser commented 3 years ago

Can you provide a copy of your schedules.yml contents please?

Wolf2323 commented 3 years ago

Of course ;)

# Scheduler intervals in seconds, recommended to leave as default values.
# Setting to 0 disables the scheduler from running.
# Only change if you know what you are doing!
scheduler:
  expiresCheck: 0
  playerBans: 0
  playerMutes: 0
  playerWarnings: 0
  ipBans: 0
  ipRangeBans: 0
  rollbacks: 0
  nameBans: 0
  externalPlayerBans: 0
  externalPlayerMutes: 0
  externalPlayerNotes: 0
  externalIpBans: 0
  saveLastChecked: 0
lastChecked:
  externalPlayerNotes: 0
  playerMutes: 1610377562
  ipRangeBans: 1610377562
  expiresCheck: 1610377562
  nameBans: 1610377562
  externalPlayerMutes: 0
  rollbacks: 1610377562
  playerBans: 1610377562
  externalPlayerBans: 0
  externalIpBans: 0
  playerWarnings: 1610377562
  ipBans: 1610377562
Wolf2323 commented 3 years ago

We got one more exception maybe that helps:

[19:02:32] [bm-local housekeeper/WARN]: [bm-local housekeeper] WARN me.confuser.banmanager.common.hikari.pool.ProxyLeakTask - Connection leak detection triggered for me.confuser.banmanager.common.mysql.cj.jdbc.ConnectionImpl@5bc5d24b on thread Craft Scheduler Thread - 1139 - BanManager, stack trace follows
[19:02:32] [bm-local housekeeper/WARN]: java.lang.Exception: Apparent connection leak detected
[19:02:32] [bm-local housekeeper/WARN]:     at me.confuser.banmanager.common.hikari.HikariDataSource.getConnection(HikariDataSource.java:128)
[19:02:32] [bm-local housekeeper/WARN]:     at me.confuser.banmanager.common.ormlite.jdbc.DataSourceConnectionSource.getReadWriteConnection(DataSourceConnectionSource.java:147)
[19:02:32] [bm-local housekeeper/WARN]:     at me.confuser.banmanager.common.ormlite.jdbc.DataSourceConnectionSource.getReadOnlyConnection(DataSourceConnectionSource.java:127)
[19:02:32] [bm-local housekeeper/WARN]:     at me.confuser.banmanager.common.ormlite.stmt.StatementExecutor.buildIterator(StatementExecutor.java:243)
[19:02:32] [bm-local housekeeper/WARN]:     at me.confuser.banmanager.common.ormlite.dao.BaseDaoImpl.createIterator(BaseDaoImpl.java:1108)
[19:02:32] [bm-local housekeeper/WARN]:     at me.confuser.banmanager.common.ormlite.dao.BaseDaoImpl.iterator(BaseDaoImpl.java:611)
[19:02:32] [bm-local housekeeper/WARN]:     at me.confuser.banmanager.common.ormlite.dao.BaseDaoImpl.iterator(BaseDaoImpl.java:605)
[19:02:32] [bm-local housekeeper/WARN]:     at me.confuser.banmanager.common.ormlite.stmt.QueryBuilder.iterator(QueryBuilder.java:394)
[19:02:32] [bm-local housekeeper/WARN]:     at me.confuser.banmanager.common.storage.PlayerBanRecordStorage.findUnbans(PlayerBanRecordStorage.java:66)
[19:02:32] [bm-local housekeeper/WARN]:     at me.confuser.banmanager.common.runnables.BanSync.newUnbans(BanSync.java:85)
[19:02:32] [bm-local housekeeper/WARN]:     at me.confuser.banmanager.common.runnables.BanSync.run(BanSync.java:27)
[19:02:32] [bm-local housekeeper/WARN]:     at me.confuser.banmanager.common.runnables.Runner.run(Runner.java:27)
[19:02:32] [bm-local housekeeper/WARN]:     at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftTask.run(CraftTask.java:99)
[19:02:32] [bm-local housekeeper/WARN]:     at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:58)
[19:02:32] [bm-local housekeeper/WARN]:     at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22)
[19:02:32] [bm-local housekeeper/WARN]:     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[19:02:32] [bm-local housekeeper/WARN]:     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[19:02:32] [bm-local housekeeper/WARN]:     at java.base/java.lang.Thread.run(Thread.java:834)
confuser commented 3 years ago

We got one more exception maybe that helps:

[19:02:32] [bm-local housekeeper/WARN]: [bm-local housekeeper] WARN me.confuser.banmanager.common.hikari.pool.ProxyLeakTask - Connection leak detection triggered for me.confuser.banmanager.common.mysql.cj.jdbc.ConnectionImpl@5bc5d24b on thread Craft Scheduler Thread - 1139 - BanManager, stack trace follows
[19:02:32] [bm-local housekeeper/WARN]: java.lang.Exception: Apparent connection leak detected
[19:02:32] [bm-local housekeeper/WARN]:   at me.confuser.banmanager.common.hikari.HikariDataSource.getConnection(HikariDataSource.java:128)
[19:02:32] [bm-local housekeeper/WARN]:   at me.confuser.banmanager.common.ormlite.jdbc.DataSourceConnectionSource.getReadWriteConnection(DataSourceConnectionSource.java:147)
[19:02:32] [bm-local housekeeper/WARN]:   at me.confuser.banmanager.common.ormlite.jdbc.DataSourceConnectionSource.getReadOnlyConnection(DataSourceConnectionSource.java:127)
[19:02:32] [bm-local housekeeper/WARN]:   at me.confuser.banmanager.common.ormlite.stmt.StatementExecutor.buildIterator(StatementExecutor.java:243)
[19:02:32] [bm-local housekeeper/WARN]:   at me.confuser.banmanager.common.ormlite.dao.BaseDaoImpl.createIterator(BaseDaoImpl.java:1108)
[19:02:32] [bm-local housekeeper/WARN]:   at me.confuser.banmanager.common.ormlite.dao.BaseDaoImpl.iterator(BaseDaoImpl.java:611)
[19:02:32] [bm-local housekeeper/WARN]:   at me.confuser.banmanager.common.ormlite.dao.BaseDaoImpl.iterator(BaseDaoImpl.java:605)
[19:02:32] [bm-local housekeeper/WARN]:   at me.confuser.banmanager.common.ormlite.stmt.QueryBuilder.iterator(QueryBuilder.java:394)
[19:02:32] [bm-local housekeeper/WARN]:   at me.confuser.banmanager.common.storage.PlayerBanRecordStorage.findUnbans(PlayerBanRecordStorage.java:66)
[19:02:32] [bm-local housekeeper/WARN]:   at me.confuser.banmanager.common.runnables.BanSync.newUnbans(BanSync.java:85)
[19:02:32] [bm-local housekeeper/WARN]:   at me.confuser.banmanager.common.runnables.BanSync.run(BanSync.java:27)
[19:02:32] [bm-local housekeeper/WARN]:   at me.confuser.banmanager.common.runnables.Runner.run(Runner.java:27)
[19:02:32] [bm-local housekeeper/WARN]:   at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftTask.run(CraftTask.java:99)
[19:02:32] [bm-local housekeeper/WARN]:   at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:58)
[19:02:32] [bm-local housekeeper/WARN]:   at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22)
[19:02:32] [bm-local housekeeper/WARN]:   at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[19:02:32] [bm-local housekeeper/WARN]:   at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[19:02:32] [bm-local housekeeper/WARN]:   at java.base/java.lang.Thread.run(Thread.java:834)

Set leakDetection to 0 in your config

Wolf2323 commented 3 years ago

So this should solve my secons stacktrace. What is with the first exception?

confuser commented 3 years ago

So this should solve my secons stacktrace. What is with the first exception?

saveLastChecked: 0 is likely the cause, any particular reason you have them all set to 0?

Wolf2323 commented 3 years ago

Our case it, that we do not have multiple servers. So we do not need a scheduler, that pull the bans again from the database. So i tryed to disable them with the value 0. And i could not find any other way to disable them.

confuser commented 3 years ago

Reset them back to the defaults, otherwise you'll experience somewhat odd behaviour, such as bans not expiring etc