SBPrime / AsyncWorldEdit-Premium

Async WorldEdit - Edit millions of blocks without lag! (Premium version)
Other
19 stars 4 forks source link

Player Client Crash, Loggout from the Player #219

Open suerion opened 4 years ago

suerion commented 4 years ago

Hello, allowOffline - allow block placing for offline players (in conflict with cleanOnLogout) cleanOnLogout - enable or disable auto cancelation of loging out player

we had decided, to turn on this, because our architect had a lot of works and they could not stay alltime while pasting.

but we had the problem, if the player logged out, the job is running as well, but he does not set any blocks in this chunks in the time he was logged out. But when the player logged in again the job doing as well, but the chunks, while he was offline area missing in the pasting.

is there a permission, or ned we an instance logger? i hope you could help us.

Thanks for working on this plugin

suerion commented 4 years ago

Works already fine with BlocksHub, sorry for my request

suerion commented 4 years ago

We dont resolved this issue. While the player is offline, the job is ongoing, but it could not place blocks, we had all access configs, set to true. But it doesn‘t help.

After i logged in again, the job has done some chunkes, but doesnt paste the blocks in the chunks.

Blockshub is installed and on there configs, there are the worlds setted

973103E4-4C80-4E01-86C5-D500B34C151A

SBPrime commented 4 years ago

I tried to reproduce this, could you please send you config? It worked for simlpe set/replace and for paste. Could you try with a smaller area/paste (you can slow down awe by doing /awe speed 1 or so). It looks like it might be related to chunks.

suerion commented 4 years ago

Hello, yes i would send it to you,

awe:
  #Do not change
  version: 23
  rendering:
    #amount of time (in ticks) the server will place a chunk of blocks
    interval: 1
    #how often that a user will get an update on the current que (number of intervals)
    talk-interval: 10
    #number of seconds before repeating a message
    talk-cooldown: 5
    #maximum size of the blocks queue
    queue-max-size-hard: 10000000
    #maximum number of blocks on the global queue before unlocking it
    queue-max-size-soft: 5000000
    #how many datapoints should be included in the BPS calculation (default: 5)
    bps-avg-data-points: 5
  memory:
    #minimum free memory (in kilobytes)
    #When the server memory runs below this value all operations are going to cancel
    #Use -1 for no limit
    minimumHard: 400000
    #the minimum free memory (In kilobytes) required to allow
    #block queuing after the hard limit is reached (soft hard)
    minimumSoft: 600000
    #Force GC to run each X milliseconds (-1 - disable) when memory is low
    #Warning: if this is not handled correctly it can lead to TPS drop and timeouts!
    gcTimeout: 10000
  dispatcher:
    #maximum number of jobs performed in one run
    max-jobs: 1
    #maximum number of idle runs before disabling the dispatcher
    max-idle-runs: 200
    #maximum number of milliseconds the dispatcher can use
    #This value should be lower than 50% of 1 tick (25ms)
    max-time: 20
  #Maximum number of blocks in que mode before AWE forces block placing.
  #Use -1 to disable force flush.
  forceFlushBlocks: 10000
  #Check for updates
  checkVersion: true  
  physicsFreeze:
    #Disable or enable blocks physics freeze when placing blocks  
    enabled: true
    #List of block for witch the physics freeze will be disabled
    blackList:
    - "minecraft:acacia_stairs"
    - "minecraft:andesite_stairs"
    - "minecraft:birch_stairs"
    - "minecraft:brick_stairs"
    - "minecraft:cobblestone_stairs"
    - "minecraft:dark_oak_stairs"
    - "minecraft:dark_prismarine_stairs"
    - "minecraft:diorite_stairs"
    - "minecraft:end_stone_brick_stairs"
    - "minecraft:granite_stairs"
    - "minecraft:jungle_stairs"
    - "minecraft:mossy_stone_brick_stairs"
    - "minecraft:nether_brick_stairs"
    - "minecraft:oak_stairs"
    - "minecraft:polished_andesite_stairs"
    - "minecraft:polished_diorite_stairs"
    - "minecraft:polished_granite_stairs"
    - "minecraft:prismarine_brick_stairs"
    - "minecraft:prismarine_stairs"
    - "minecraft:purpur_stairs"
    - "minecraft:quartz_stairs"
    - "minecraft:red_nether_brick_stairs"
    - "minecraft:red_sandstone_stairs"
    - "minecraft:sandstone_stairs"
    - "minecraft:smooth_quartz_stairs"
    - "minecraft:smooth_red_sandstone_stairs"
    - "minecraft:smooth_sandstone_stairs"
    - "minecraft:spruce_stairs"
    - "minecraft:stone_brick_stairs"
    - "minecraft:stone_stairs"
  # The class scanner configuration
  classScanner:
    # List of classes that should be skipped by the class scanner
    # Each entry is a regexp and it represents a single class that should be ignored.
    blackList:
        # If the entry contains no items (empty list) the entire class will be ignored (all fields)
        net\.minecraft\..*: {}
        org\.bukkit\..*: {}
        org\.spigotmc\..*: {}
        io\.netty\..*: {}
        com\.sk89q\.worldedit\.function\.mask\.BlockMask:
            # The list of fields (regexp) that will be ignored by the class scanner
            - "blocks"
        com\.sk89q\.worldedit\.extent\.reorder\.ChunkBatchingExtent:
            - "batches"
  #File containing all the messages
  strings: "english.yml"
  messages:
    #Show debug messages (valid options: https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Level.html)
    debugLevel: OFF
    #Show undo cleanup messages
    #Valid options: 
    # * off - no message (only errors),
    # * startup - show the message only on startup
    # * [Default] on - show all undo cleanup messages
    undoCleanup: on
  #Disable async mode for
  overrides:
    #WorldEdit api calls
    disableForWeApi: false
    #for console player
    disableForConsole: false
    #for unknown player
    disableForUnknown: false
  #Blocks hub plugin options  
  blocksHub:
    log:
        #Enable block change logging
        isEnabled: true
        #Enable block change logging for Direct Chunk API
        isDcEnabled: true
    #The block access control
    access:
        #Enable blocks access control
        isEnabled: true
        #Enable blocks access control for Direct Chunk API
        isDcEnabled: true
        #Allow NULL player to place blocks (used by some plugins)
        allowNull: true
        #Allow unknown player to place blocks
        allowUnknown: true
        #Allow console player to place blocks
        allowConsole: true
        #Allow offline player to place blocks
        allowOffline: true
  undo:
    #What to do with the undo data when server is running low on memory and 
    #the operation is running on the main thread
    #Allowed values: 
    # * off - memory is not checked while storing undo data (can lead to server crash)
    # * drop - do not store the undo data
    # * cancel - cancel current operation (throws max block changed)    
    memoryLowMain: cancel
    #What to do with the undo data when server is running low on memory and 
    #the operation is not running on the main thread
    #Allowed values: 
    # * off - memory is not checked while storing undo data (can lead to server crash)
    # * drop - do not store the undo data
    # * cancel - cancel current operation (throws max block changed)    
    # * wait - wait for GC to free up some memory
    memoryLow: wait
    #What to do with the undo data when server is running low on memory and 
    #the operation is not running on the main thread
    #Allowed values: 
    # * off - memory is not checked while storing undo data (can lead to server crash)
    # * drop - do not store the undo data
    # * wait - wait for GC to free up some memory
    memoryLowStorage: wait
    #Store the undo data on disk (a bit slower but does not use so much RAM)
    storeOnDisk: true
    #How much time should the WorldEdit session be kept after player logged out
    #Values: -1 Do not remove, 0 - immediately, X - Number of minutes
    keepSessionOnLogoutFor: 0
    #How long should the undo files be kept on the disk after the undo is no 
    #logger used in WE.
    #Values: -1 Do not delete, 0 - Delete immediately, X - Number of minutes to store 
    #the file
    keepUndoFileFor: 0
    #The number of minutes between undo files cleanup
    undoFileCleanupInterval: 30
  #The direct chunk options
  directChunk:
    #Do auto relight after each edit    
    autoRelight: true
    #New chunk light level (0-15)
    newSectionLightLevel: 0
    #Placed block light level (0-15), -1 for auto
    blockLightLevel: -1
  #Permissions options
  permissions:
    #If you are OP you will have all AWE permissions
    #Warning this causes the negative permissions to not work.
    opHasAll: true
    #Disable the global queue bypass, the player queue bypass works like before
    #If you do not want to run out of memory you should not set
    #the disableQueueBypass to false and opHasAll to true
    disableQueueBypass: true
  #Player permission groups.
  #Permission node: AWE.Groups.<group name 
  permissionGroups:
    #The group entry (at least one group is required!)
    #If a player has multiple groups, the last one defined in the config
    #is assigned. (Lower the group the lower the 'weight' if you can compare it to PEX)
    default:
      #Indicates that the group is called default.
      #Only one group can be default, if multiple groups are set to default
      #the first one is used as default. The default group is used for players
      #that do not have any other permission groups assigned to them.
      isDefault: true
      #Maximum number of jobs a player can have. -1 = no job limit
      maxJobs: 1
      #Enable or disable auto job cancellation on player quit
      cleanOnLogout: false
      #Default AWE status for logging in players 
      defaultMode: on
      #Disable the WorldEdit undo
      disableUndo: false
      renderer:
        #blocks to place (per-interval), this determines the max speed of block placing
        #if you experience lag lower this and the next number (time), use -1 for no limit
        blocks: 20000
        #Maximum number of milliseconds spend on placing blocks, use -1 for no limit
        time: 75
      queue:
        #maximum size of the player block queue
        limit-hard: 500000
        #number of blocks on the player queue when to stop placing blocks
        limit-soft: 250000
      messages:
        #Whether or not to show progress using BarAPI
        progress-bar: true
        #minimum number of blocks to display the progress bar
        progress-bar-min: 100
        #Whether or not to show progress using the chat messages
        progress-chat: true
        #is async world edit talkative 
        talkative: true
      #The WorldEdit config override
      worldedit:
        #Maximum number of undoos
        historySize: 15
        #Maximum number of changed blocks
        maxBlockChanged: -1
        #List of disallowed block ID
        disallowed-blocks:
        - "minecraft:oak_sapling"
        - "minecraft:jungle_sapling"
        - "minecraft:dark_oak_sapling:"
        - "minecraft:spruce_sapling"
        - "minecraft:birch_sapling"
        - "minecraft:acacia_sapling"
        - "minecraft:black_bed"
        - "minecraft:blue_bed"
        - "minecraft:brown_bed"
        - "minecraft:cyan_bed"
        - "minecraft:gray_bed"
        - "minecraft:green_bed"
        - "minecraft:light_blue_bed"
        - "minecraft:light_gray_bed"
        - "minecraft:lime_bed"
        - "minecraft:magenta_bed"
        - "minecraft:orange_bed"
        - "minecraft:pink_bed"
        - "minecraft:purple_bed"
        - "minecraft:red_bed"
        - "minecraft:white_bed"
        - "minecraft:yellow_bed"
        - "minecraft:powered_rail"
        - "minecraft:detector_rail"
        - "minecraft:grass"
        - "minecraft:dead_bush"
        - "minecraft:moving_piston"
        - "minecraft:piston_head"
        - "minecraft:sunflower"
        - "minecraft:rose_bush"
        - "minecraft:dandelion"
        - "minecraft:poppy"
        - "minecraft:brown_mushroom"
        - "minecraft:red_mushroom"
        - "minecraft:tnt"
        - "minecraft:torch"
        - "minecraft:fire"
        - "minecraft:redstone_wire"
        - "minecraft:wheat"
        - "minecraft:potatoes"
        - "minecraft:carrots"
        - "minecraft:melon_stem"
        - "minecraft:pumpkin_stem"
        - "minecraft:beetroots"
        - "minecraft:rail"
        - "minecraft:lever"
        - "minecraft:redstone_torch"
        - "minecraft:redstone_wall_torch"
        - "minecraft:repeater"
        - "minecraft:comparator"
        - "minecraft:stone_button"
        - "minecraft:birch_button"
        - "minecraft:acacia_button"
        - "minecraft:dark_oak_button"
        - "minecraft:jungle_button"
        - "minecraft:oak_button"
        - "minecraft:spruce_button"
        - "minecraft:cactus"
        - "minecraft:sugar_cane"
        - "minecraft:bedrock"
        #The disallowed black list handling
        disallowedBlocksUsage:
          #Use black list in patterns
          patterns: true
          #Block set (every block set operation)
          blockSet: false
    #Example of additional vip group:
    #vip:
    #  #you can remove this, the isDefault is by default set to false
    #  isDefault: false 
    #  maxJobs: -1
    #    cleanOnLogout: false
    #  #You can omit entries with that are same value as in the default group
    #  #defaultMode: on
    #  #Disable the WorldEdit undo
    #  disableUndo: true
    #  renderer:
    #    blocks: 20000
    #    time: -1
  #List of WorldEdit operations that AWE won't run in async mode
  disabledOperations: {}
  #  - undo
  #  - redo
  #  - fillXZ
  #  - fillXY
  #  - fillZY
  #  - fill3d
  #  - removeAbove
  #  - removeBelow
  #  - removeNear
  #  - setBlocks
  #  - replaceBlocks
  #  - makeCuboidFaces
  #  - makeCuboidWalls
  #  - overlayCuboidBlocks
  #  - naturalizeCuboidBlocks
  #  - stackCuboidRegion
  #  - moveCuboidRegion
  #  - drainArea
  #  - fixLiquid
  #  - makeCylinder
  #  - makeSphere
  #  - makePyramid
  #  - thaw
  #  - simulateSnow
  #  - green
  #  - makePumpkinPatches
  #  - makeForest
  #  - makeShape
  #  - deformRegion
  #  - hollowOutRegion
  #  - paste
  #  - copy
  #  - cut
  #  - regenerate
  #  - center
  #  - drawLine
  #  - drawSpline
  #  - makeBiomeShape
  #  - forest
  #  - flora
  #  - setBiome
  #  - loadSchematic
  #  - saveSchematic
  #  - craftScript
  #  - makeFaces
  #  - makeWalls
  #  - overlayBlocks
  #  - naturalizeBlocks
  #  - stackRegion
  #  - moveRegion
  #  - schematicInfo
  #  - placeSchematic
  #  - chunkSet
  #  - chunkClear
  #  - chunkFill
  #  - chunkClone
  #  - chunkPaste
  #  - chunkCopy
  #  - chunkRelight
  #  - brush
  #  - smooth
  #  - tool
  #  - tree
  #  - pickaxe
SBPrime commented 4 years ago

Out of curiosity: why do you have this:

    #maximum number of jobs performed in one run
    max-jobs: 1

Regarding the reported problem: I was unable to reproduce using your config. Please try using a smaller area. Also could you send log output for single block change with awe debug level set to DEBUG?

suerion commented 4 years ago

Because we work often with 2 or more players and if we work with the same command (paste, or undo, or copy) at the same time, it crash our server

yes, we would try it

SBPrime commented 4 years ago

Ok but this is from this:

  dispatcher:
    #maximum number of jobs performed in one run
    max-jobs: 1
    #maximum number of idle runs before disabling the dispatcher
    max-idle-runs: 200
    #maximum number of milliseconds the dispatcher can use
    #This value should be lower than 50% of 1 tick (25ms)
    max-time: 20

It is used for block get operations. If its set to low i might influence block get speed, this influences the stage 1 of operations (block queuing). If this parameter is set to high it might cause TPS drop and server lag.

suerion commented 4 years ago

https://codeshare.io/5wv4gP

ther you could look about the consol output

suerion commented 4 years ago

i had tried the output with LEVEL ALL

i had also tried an big region, because this offline thing was great for big regions, after it will work

here is the code https://codeshare.io/5Rvn4j

between 4872 an 8548 i closed the client

SBPrime commented 4 years ago

This does not seam right: [Server thread/INFO]: [AsyncWorldEdit] [BP RUN] Blocks placed: 0 Time: 0 Is demanding task: N

I see setBlocks in the log ware there other ppl on the server? Also did you change anything in the config? What was the operation? paste? How large was the operation? Did you try as I suggested a small area with placing speed set to 1? I would suggest testing it with a 160x1x160 and do a set stone.

suerion commented 4 years ago

Hello, this is my debug server local on my pc with all the settings from our Server,

no there are no other players there,

i did nothing change on the config,

1 try 1.130.200 Blocks this logg is above your answere

2 try with blockspeed 1 and 6000 blocks (160x160) 3 try with blockspeed 1 and 60000 block i will give you the log after it has finished pasted

i only do //copy and //paste

could it be, that we need do set in the config an higher block pasting? i would test, a 3000x3x100 copy and look in the log

suerion commented 4 years ago

here the log from try 2 and 3, i had closed the server after 50%

https://codeshare.io/5DErwk

suerion commented 4 years ago

1 thing we tested on the server, 3 player was on the server, one copied and pasted and then he logged out, after this, the job is working, but he don't place blocks.

the other players looked at the projekt, but it not worked right.

i think it wasn't a chunk problem

suerion commented 4 years ago

4 try, 7000000 blocks to place,

changings from the queue

      renderer:
        #blocks to place (per-interval), this determines the max speed of block placing
        #if you experience lag lower this and the next number (time), use -1 for no limit
        blocks: 20000000
        #Maximum number of milliseconds spend on placing blocks, use -1 for no limit
        time: 75
      queue:
        #maximum size of the player block queue
        limit-hard: 50000000
        #number of blocks on the player queue when to stop placing blocks
        limit-soft: 25000000

https://codeshare.io/5vjxWm i had logged out 9 times or more

SBPrime commented 4 years ago

I don't need any additional logs. Ok, lets go slow ;) On the local machine are you able to reproduce the error with a small set? Do you have only WE + AWE + BH (CP) on the local test server? Let me know how such scenario works. If it works with a small but not with big one it might be related to allowed blocks to queue.

suerion commented 4 years ago

the first try and the last one, does not work, try 2 and 3 are okey with blockspeed 1 and it works with normal speed

only the big ones are the problem. how we could add more allowed blocks?

this are the plugins for the debuging system Unbenannt

it is only a testing system.

SBPrime commented 4 years ago

Check here: https://github.com/SBPrime/AsyncWorldEdit/blob/master/AsyncWorldEdit/src/main/resources/config.yml#L209

How large was the edit that failed? Width/Height/Depth?

suerion commented 4 years ago

Good Morning,

I had tried it on the 4th test queue:

maximum size of the player block queue

    limit-hard: 50000000
    #number of blocks on the player queue when to stop placing blocks
    limit-soft: 25000000

Allways, when i logged out, it don’t pasted blocks.

I don‘t get it why, is there everywhere an other blocking the queue? I copied ~7.000.000 blocks and then pasted it.

The queue looks okay, but allways i logged out, it doesnt paste

https://codeshare.io/5vjxWm This was the log with this changings

It looks allways, like, they are unable to edit the chunks after the player logged out.

But it does not has a problem with no loading chunks, it look like, they doesn‘t have permission to change the chunks while the player is offline.

We tried an test on the server and allways the player has logged out, the other players are seeing on the consol, the job is working okey, but he doesn‘t has permission to write the blocks in the chunks

suerion commented 4 years ago

@SBPrime had you found some things for the offline code? we are searching as well, but we don't get it.

it would be nice, some big files would be worked to finish that, without stopping after offline or player crash

SBPrime commented 4 years ago

No luck on reproducing sorry. I will be looking into it.

suerion commented 4 years ago

i could try with dyndns, i will give you op and then we look on my debugging server? if you want to see it, we could try it so

suerion commented 4 years ago

this problem is already given on debugg server, if you would jump on it, i could send you the ip

I tested the newest update

suerion commented 4 years ago

https://youtu.be/QC4hlQkNJE8