Skip to content

[BUG] Checking for update in a poor network environment seems to block the game #101

@softmanmaker

Description

@softmanmaker

Specify your operating system, minecraft server core and minecraft version

On Linux Mint 22.1, Leaves core (a downstream of Paper), 1.21.10, with Backuper 4.0.2.

Enter your config

# DO NOT CHANGE
configVersion: 13.0
lastBackup: 1767668673
lastChange: 1767733334

backup:
  # (true/false) Automatic backup once in a specified period
  autoBackup: true
  # (MINUTES > 0 or -1) Backup period. To use this value, you need to set autoBackupCron to an empty string and autoBackup to true
  autoBackupPeriod: -1
  # (Expression) Auto-backup schedule expression. If it's defined, it'll be used instead of autoBackupPeriod. Use this site to generate your one: http://www.cronmaker.com
  autoBackupCron: 0 0 3 1/1 * ? *
  
  # (Expression) Set a format for backup file names (see java.time docs). It must contain information about both time and date
  backupFileNameFormat: dd-MM-yyyy HH-mm-ss
  # (Path list) (An example of how to set a list is below) Full directory paths to folders/files that you want to be backed up. Worlds will be backed up automatically, so you do not need to specify world folders there (For example, you can specify "plugins", "config") You can also specify all files with "*".
  # addDirectoryToBackup:
  # - 'path1'
  # - 'path2'
  # - ...
  addDirectoryToBackup: []
  # (Path list) (An example of how to set a list is below) Full directory paths to folders/files that you want to be excluded from backup. If you want to backup everything from the folder1 except some folder1/file1, you can specify folder1 in addDirectoryToBackup and folder1/file1 in excludeDirectoryFromBackup. (The backupsFolder directory will be excluded automatically to prevent the loop)
  # excludeDirectoryFromBackup:
  # - 'path1'
  # - 'path2'
  # - ...
  excludeDirectoryFromBackup: []
  
  # (true/false) Sometimes errors may occur while creating a backup. When this option is enabled, such backups will be deleted
  deleteBrokenBackups: true
  # (true/false) The backup will only occur if the world has been changed since the last backup. If the world has not been changed, this backup cycle will be skipped
  skipDuplicateBackup: true
  # (STOP, RESTART, NOTHING) What to do after an automatic backup
  afterBackup: NOTHING
  
  # (true/false) (True recommended) The backuper will mark all world folders as Read-Only to prevent folder changing that may cause the backup crash. True value may cause access denied errors during the backup (you should just ignore that)
  setWorldsReadOnly: false
  backupPeriod: -1
  backupTime: 3

server:
  # (SECONDS < backupPeriod * 60 or -1) A notification about the server restart will be sent to all players on the server {alertTimeBeforeRestart} seconds before the restart. -1 to disable notifications
  alertTimeBeforeRestart: 60
  # (true/false) Notifications will be sent only if the server is restarted or stopped after the backup
  alertOnlyServerRestart: true
  # (String) Backup alert message. (%d is a number of seconds placeholder)
  alertBackupMessage: Server will be backed up in %d second(s)
  # (String) Backup and restart the alert message. (%d is a number of seconds placeholder)
  alertBackupRestartMessage: Server will be backed up and restarted in %d second(s)
  
  # (Path) Size cache file
  sizeCacheFile: ./plugins/Backuper/sizeCache.json
  # (>= 0) Target number of threads that the backuper will use in parallel (It'll try, but it isn't a hard limitation) (0 to automatically set it equal to the number of threads on the server)
  threadNumber: 0
  
  # (true/false) Check for new versions of the Backuper to stay up to date
  checkUpdates: true
  
  # (true/false) Better logging (Some statistic and other information for debugging, you probably don't need it)
  betterLogging: false
storages:
  local:
    type: local
    # (true/false) Enable local storage to use it via the Backuper
    enabled: true
    # (true/false) With automatic backup, backups will be saved to specified local storage. Works only if 'enabled: true'
    autoBackup: true
    
    # (Path) Full directory where backups will be stored
    backupsFolder: ./plugins/Backuper/Backups
    
    # (>= 0) Max backups in backups folder, 0 to make it unlimited
    maxBackupsNumber: 7
    # (MB >= 0) Max backups folder weight, 0 to make it unlimited
    maxBackupsWeight: 0
    
    # (true/false) Should backups be packaged in a zip archive
    zipArchive: true
    # (0 - 9) archive compression level. A higher value may reduce file size but may also increase the time required to archive and decompress
    zipCompressionLevel: 5
  ftp:
    type: ftp
    # (true/false) Enable FTP storage to use it via the Backuper
    enabled: false
    # (true/false) With automatic backup, backups will be saved to a specified FTP server. Works only if 'enabled: true'
    autoBackup: true
    
    # (Path) FTP server directory where backups will be stored
    backupsFolder: ./
    # (Symbol) Path separator symbol used on FTP SERVER. For example, '/' on UNIX systems. (It is usually '/' even on Windows servers, so change it to '\' only if it does not work with '/')
    pathSeparatorSymbol: /
    
    # (>= 0) Max backups in backups folder, 0 to make it unlimited
    maxBackupsNumber: 0
    # (MB >= 0) Max backups folder weight, 0 to make it unlimited
    maxBackupsWeight: 0
    
    # (true/false) Should backups be packaged in a zip archive
    zipArchive: true
    # (0 - 9) archive compression level. A higher value may reduce file size but may also increase the time required to archive and decompress
    zipCompressionLevel: 5
    
    auth:
      # (Address) FTP server address
      address: ''
      # (Port) FTP server port
      port: 21
      # (Username) FTP server username to use for authentication
      username: ''
      # (Password) FTP server password to use for authentication
      password: ''
  sftp:
    type: sftp
    # (true/false) Enable SFTP storage to use it via the Backuper
    enabled: false
    # (true/false) With automatic backup, backups will be saved to a specified SFTP server. Works only if 'enabled: true'
    autoBackup: true
    
    # (Path) SFTP server directory where backups will be stored
    backupsFolder: ./
    # (Symbol) Path separator symbol used on SFTP SERVER. For example, '/' on UNIX systems and '\' on windows
    pathSeparatorSymbol: /
    
    # (>= 0) Max backups in backups folder, 0 to make it unlimited
    maxBackupsNumber: 0
    # (MB >= 0) Max backups folder weight, 0 to make it unlimited
    maxBackupsWeight: 0
    
    # (true/false) Should backups be packaged in a zip archive
    zipArchive: true
    # (0 - 9) archive compression level. A higher value may reduce file size but may also increase the time required to archive and decompress
    zipCompressionLevel: 5
    
    auth:
      # (Address) SFTP server address
      address: ''
      # (Port) SFTP server port
      port: 22
      # (password/key) SFTP server authentication type
      authType: password
      # (Username) SFTP server username to use for authentication
      username: ''
      # (Password) SFTP server password to use for authentication
      password: ''
      # (Absolute Path) Local path to key file if 'authType: key'
      keyFilePath: ''
      # (true/false) Do you want to specify local knownHostsFile?
      useKnownHostsFile: false
      # (Path) Path to local knownHostsFile if 'useKnownHostsFile: true'
      knownHostsFilePath: ''
      # (Path)
      sshConfigFilePath: ''
  googleDrive:
    type: googleDrive
    # (true/false) Enable Google Drive storage to use it via Backuper
    enabled: false
    # (true/false) With automatic backup, backups will be saved to specified Google Drive. Works only if 'enabled: true'
    autoBackup: true
    
    # Google Drive folder ID where backups will be stored
    backupsFolderId: ''
    # Do you want the Backuper to create its own folder in the specified in `backupsFolderId` directory to store backups there?
    createBackuperFolder: true
    
    # (>= 0) Max backups in backups folder, 0 to make it unlimited
    maxBackupsNumber: 0
    # (MB >= 0) Max backups folder weight, 0 to make it unlimited
    maxBackupsWeight: 0
    
    # (true/false) Should backups be packaged in a zip archive
    zipArchive: true
    # (0 - 9) archive compression level. A higher value may reduce file size but may also increase the time required to archive and decompress
    zipCompressionLevel: 2
    
    auth:
      # Directory where you want to store your Google authentication tokens
      tokenFolderPath: ./plugins/Backuper/GoogleDrive/tokens

Describe the bug

I am the only op in the server. Every time I log in after haven't logged in for a while, the server just gets blocked and killed by watchdog. The logs are as follows.

[20:54:01] [Paper Watchdog Thread/ERROR]: --- DO NOT REPORT THIS TO LEAVES - THIS IS NOT A BUG OR A CRASH  - 1.21.10-144-f7b69b3 (MC: 1.21.10) ---
[20:54:01] [Paper Watchdog Thread/ERROR]: The server has not responded for 10 seconds! Creating thread dump
[20:54:01] [Paper Watchdog Thread/ERROR]: ------------------------------
[20:54:01] [Paper Watchdog Thread/ERROR]: Server thread dump (Look for plugins here before reporting to Leaves!):
[20:54:01] [Paper Watchdog Thread/ERROR]: ------------------------------
[20:54:01] [Paper Watchdog Thread/ERROR]: Current Thread: Server thread
[20:54:01] [Paper Watchdog Thread/ERROR]:       PID: 68 | Suspended: false | Native: true | State: RUNNABLE
[20:54:01] [Paper Watchdog Thread/ERROR]:       Stack:
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/sun.nio.ch.Net.connect0(Native Method)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/sun.nio.ch.Net.connect(Net.java:589)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/sun.nio.ch.Net.connect(Net.java:578)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:583)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/java.net.Socket.connect(Socket.java:751)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:304)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:181)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/sun.net.NetworkClient.doConnect(NetworkClient.java:183)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/sun.net.www.http.HttpClient.openServer(HttpClient.java:531)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/sun.net.www.http.HttpClient.openServer(HttpClient.java:636)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:377)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:193)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1257)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1143)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:179)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1705)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1629)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:223)
[20:54:01] [Paper Watchdog Thread/ERROR]:               Backuper-4.0.2.jar//ru.dvdishka.backuper.Backuper.checkPluginVersion(Backuper.java:167)
[20:54:01] [Paper Watchdog Thread/ERROR]:               Backuper-4.0.2.jar//ru.dvdishka.backuper.Backuper.sendPluginVersionCheckResult(Backuper.java:185)
[20:54:01] [Paper Watchdog Thread/ERROR]:               Backuper-4.0.2.jar//ru.dvdishka.backuper.Backuper.onPlayerJoin(Backuper.java:127)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/java.lang.invoke.DirectMethodHandle$Holder.invokeVirtual(DirectMethodHandle$Holder)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/java.lang.invoke.LambdaForm$MH/0x000071bee0129800.invoke(LambdaForm$MH)
[20:54:01] [Paper Watchdog Thread/ERROR]:               java.base@21.0.9/java.lang.invoke.LambdaForm$MH/0x000071bee0129000.invokeExact_MT(LambdaForm$MH)
[20:54:01] [Paper Watchdog Thread/ERROR]:               io.papermc.paper.event.executor.MethodHandleEventExecutorTemplate/0x000071bee23b0c00.execute(MethodHandleEventExecutorTemplate.java:46)
......

As I am in China mainland, the update check fails most of the time, but before I update Backuper to this version nothing happens. According to the logs I guess that checking for update actually blocks the whole server, and then the server will be killed by the watchdog.

Describe the way to reproduce the bug

Log in as op in a poor network environment.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions