Inactive [FIX/ADMN] NoLagg v1.88.1 - Prevent common lag causes on your server [2338]

Discussion in 'Inactive/Unsupported Plugins' started by bergerkiller, Sep 17, 2011.

  1. Offline

    bergerkiller

    I had already made this plugin before after having a major lag issue. (lots of torches being filled, turned into items, lag for 20 minutes) It also works for 1060.

    Some feature ideas are taken over from PerformanceTweaks by @LexManos so some credit goes to him. Code, however, written from scratch by me. :)

    Important:

    If you get a warning message [NoLagg TLN] followed up with a stack trace in the log, this has to do with the main thread not having responded within 10 seconds. When a plugin takes more than this time to enable, it will show that. The warning is NOT an error and is no bug, and not a bug related to NoLagg. To disable this feature, disable 'threadlocknotifier' in the config.yml. This feature is mainly intended to notify you what plugin is causing the server to freeze, may it ever happen. It is used to debug plugins in general, as they may get stuck for whatever reason.

    NoLagg's features in a nutshell

    Description

    Prevent lag caused by many items

    Every time an item gets spawned, it is buffered per chunk. For example, you spawn 30 items using Q and the maximum allowed items per chunk is 20, then the 10 remaining items are not spawned. They are spawned as soon the item count in this chunk is < 20 again.

    Read more...

    Form item stacks - fully automatically

    Whenever two or more (configurable) items or experience orbs get near each other, they form a single stack of that item type. If someone drops 64 dirt blocks on the ground using Q, it will show a single item of 64 dirt instead.

    Read more...

    Prevent lag caused by TNT

    This plugin takes over tnt ignition caused by explosions. When exploding stacks of tnt, it does not rush all tnts into a single tick, but detonate them nicely in sync. This results in pretty awesome fireworks. :)

    Read more...

    Prevent lag caused by lighting glitches

    Whenever a new chunk is generated, it's lighting information is generated and all nearby players receive the updated chunk data. If the auto-method fails, you can use /nolagg fix to do it manually. This fixing fixes, for example, dark spots in and around caves lagging the client.

    Read more...

    Set entity spawn limits

    You can set a spawn limit on virtually every entity in the game. From mobs to items to TNT. Only thing being excluded is Players, since I can't simply kick someone 'like that'. :)
    Note: It removes already spawned entities too. So, if you want to keep your animals alive, don't set mob or animal limits, or it will possibly clear your farm animals. (or you can disable the spawn limiter all together)

    I recommend finding an alternative plugin for this instead. Removing entities after they are spawned causes more lag than it prevents!

    Global auto-saver

    Since asynchronous chunk saving is now implemented internally, it is no longer a problem to save entire worlds frequently. You can set auto-save intervals in the configuration. If used with an interval higher than 400 ticks (20 seconds) it will use a scheduled task instead of the internal saver to prevent chunks never getting saved. Another benefit is that player information is also auto-saved, preventing your players losing their inventory state.

    New chunk sending mechanics

    Instead of loading chunks all around the player, the player direction is used to load the visible chunks first. This means that players can expect chunks in front of them to load quickly, while chunks on the sides take a bit longer to appear. When the player looks into another direction, the direction changes and thus the new visible chunks get loaded first. Only if all chunks ahead of the player are loaded, chunks around the player are sent. This all can be configured using a simple minimum and maximum sending rate.

    Read more...

    Examining the server tick rate

    If you encounter very low tick rates and you want to find out what plugin is causing it, you can use the examine component to find it out. It comes with a graphic viewer, which makes bug tracking the easiest thing ever.

    Read more...

    Prevent cross-thread access for events

    As it seems, some plugins don't follow the rules and use Bukkit methods in another thread. This plugin will notify you and cancel if possible whenever this happens so other plugins understand their mistake. If you encounter a lot of spam in the console, first check the stack trace for the plugin that caused the error. Report this error to the author or remove the plugin, if you have questions you are free to ask.



    Configuration (on BukkitDev)

    Commands and Permissions (on BukkitDev)

    Synchronized code accessed by another thread? (BukkitDev)



    Media



    Video by brandcool86


    FAQ

    - Help I experience missing chunks
    If you are using Spout, don't use Reloads. This is also the reason why Spout added a warning when a player tries to reload the server. Not using Spout, then it's a bug which you can report.

    - Can this plugin be used with PTweaks
    (this message was really old...) Yes, they are compatible, but if certain features overlap, make sure you disable these features in either plugin.

    - I get a warning about the async auto save and interval. Wat do?
    Change the autoSaveInterval value in the configuration to a value higher than 400, like 600. The warning is to prevent endless autosaves to occur, clogging up CPU.

    - I have experienced CPU usage
    CPU usage is not the same as lag. NoLagg uses multiple (2-3) extra threads to prevent tick and network lag. If a lot has to be done, it does this quicker, but this takes more CPU obviously.

    - I have lag when using NoLagg
    See also the FAQ above. Explain what type of lag you have: tick lag, client lag, network lag and/or 'block placement' lag. You can use /nolagg monitor to check the tick rate. If this is normal (>15), then you have network lag. Client lag is when the FPS drops. Block placement lag is lag when the tick rate is normal and other network messages, like chat, are instant.

    - WorldEdit causes lag...
    YES because it is unsafe to take over the main thread while another plugin is having hold over it. I can try fixing this, but it could ultimately lead to some serious concurrency exceptions. Don't expect this to be implemented very soon...

    - Do spawn limits interfere with mob-spawning plugins like MobArena?
    No, it does not. It only limits mobs spawned by 'nature': all custom creature spawns are ignored throughout the run of the plugin. Only after you reload will it lose track of these entities and will it remove custom-spawned mobs. If you use MobArena, be sure nothing is going on when you reload the server.

    - Does item stacking interfere with Showcase or BleedingMobs?
    It supports Showcase and ShowcaseStandalone entirely. (showcased items are completely ignored at all times) The same applies to the 'particles' created by the BleedingMobs plugin. Know of a plugin where it stacks items which should not be stacked? Post the plugin name so I can add support. You are an owner and want to add support? Only having a function in your plugin to check if an item is 'ignored' is enough.

    - Can this plugin be used with Chunk Manager
    If you want to use the Chunk Manager with Nolagg, disable the chunk sending of Nolagg first. If you don't do that, this plugin will do that by itself and send a warning in the log. Of course, compare the results first. :)

    - What are the best settings if I have a lot of RAM memory?
    This plugin does not deal with reduced RAM memory. If I could, I would, but you simply can't reduce the amount of memory Java uses. This data is locked and secured, so I can't simply throw away bits of data or write and read data from/to disk. Any plugin claiming to reduce RAM usage on a server, is probably 'garbage collecting'. This fakes having less RAM usage by removing unused data, but Java does this by itself as well once it hits a certain limit. All these plugins will do is make the Garbage Collector run in overdrive, which will only kill your tick rate and/or CPU speeds. A bad thing.

    - I get a lot of 'Synchronized code accessed from another thread' errors
    Find out what plugin is acting up by inspecting the stack trace. If the plugin that causes this is inactive, all you can do is wait for a refurnished version or someone to fix it for you, or use an alternative plugin. If it's still under development, notify the author of this, it IS an error caused by that plugin. If you can't find out the cause, PM me or post in this thread.


    Before you begin writing a lag issue

    This is very important, just posting a 'it causuz lagz und shitz' won't do, won't help and I won't be able to help you any further either. Question is if I even want to help you, if you post such a message without anything worth looking at. Things to include in your message:
    - Errors in the log if possible
    - What CB version you use and what NoLagg version you use
    - When this lag occurs. Tick rate drop in general?
    - The configuration you used when running this plugin
    - What type of lag if applicable. Options are: tick lag, client lag, network lag (see above)

    Important links

    NoLagg Download page and others at Dev Bukkit
    View the source code of NoLagg at GitHub

    Use an archive extracting program (WinRar, WinZip) to open the archive.

    TODO-list:
    - Add option to disable physics when the tick delay becomes too high

    Changelog

    Show your appreciation for my plugins by donating
    [​IMG]
     
  2. Offline

    spunkiie

    @bergerkiller

    Sorry my dumbness but I can't get it.

    If 1.53.4 works like a charm while versions ABOVE don't. How It can be a Bukkit problem ? :\
     
  3. Offline

    bergerkiller

    @spunkiie Does 1.53.4 still work like a charm with the current version then? AFAIK it broke along the way, since I left the code alone mostly.

    @mrgreaper That must be the nbt tag compounds again...I'll look at the mods' source (including BuildCraft) and see what data value is used. I have a feeling that one of my custom buffered nbt tag compounds is having a bug.

    Did you use 1.56.3 when this happened? .1 had an issue with the list compound.
     
  4. Offline

    Averus

    bufferGarbageCollectInterval ?
    any info plz
     
  5. Offline

    bergerkiller

    @Averus It sets how often the internal buffered pool data (chunks and chunk packets) are cleared from unused buffers. I guess I'll remove it in the next version, as it has no real purpose anyway.
     
    Averus likes this.
  6. Offline

    mrgreaper

    latest version that was here yesterday i believe...
    biggest way to test is forestry, your blugin seems fine with all the others i in fact thought it was an issue with the port at first but nope with out nolag its fine with it farms and electric engines often forget what they are, fast way to re create the issue, make some engines, around a quarry (power them with say a generator miles from spawn so the chunk is deloaded) leave the area (go to spawn walk a few miles or something) return and you will see the engines have become biogas engines some times a reboot fixes it

    i dont know if that helps at all. were using an alternative at mo that claims to do the same but i dont see any mention of item cache on it so im guessing it misses that bit lol
     
  7. Offline

    bergerkiller

    @mrgreaper There were multiple updates yesterday (and a very late one for 1.56.3)

    Firefox is failing on me, so had to use Chromium to update the pages...
    Does 1.56.4 (the latest version) resolve those issues? Care has been taken to make my custom NBT tags suitable as original NBT tags, so hopefully that resolves those issues...
     
  8. Offline

    spunkiie

    @bergerkiller

    Yeap, I'm using spawnlimits with version 1.53.4 right now and it's working perfectly.
     
  9. Offline

    mrgreaper

    NoLagg v1.56.4.zip

    has the bug in it. engine changed straight away and a brown screen error we havent had since we removed your plugin...sorry chap
     
  10. Offline

    bergerkiller

    @mrgreaper Looked at the server source code of Forestry, and straight away I noticed that it uses the old function names of the nbt tag compounds. My guess is that NoLagg fails to even access the internal nbt tag maps and lists, as they use an (obfuscated) name.

    I've never seen/used client mods with a server before, so how do you run a multiplayer Forestry server? I understand that it uses Modloader...which automatically makes it impossible for me to use it. (Modloader never worked, always crashed my client in the end)

    I'll at least work on a way to disable the buffered chunk loading feature...
     
  11. Offline

    mrgreaper

    via the good people here http://www.mcportcentral.co.za/index.php?topic=12.0

    its only forestry your plugin hates ic2, redpower, buildcraft... all work fine, in fact your plugin really helps with build craft (some times a chest becomes full and the pipe from a quarry will continue to push items through so they pop out like drops, well after a few thousand of them your area is very laggy..with your plugin thats not an issue)

    the forestry thing makes it unviable though :(
     
  12. Offline

    Krunch

    @mrgreaper @bergerkiller From what I can understand from what bergerkiller said it just might be the Forestry developpers fault for not using the latest Minecraft classes.

    @mrgreaper Uh.... the link you gave is for MC 1.8.1... did you try going here? http://www.mcportcentral.co.za/index.php?topic=393.0

    That's for MC 1.0.1, might work better.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jul 14, 2016
  13. Offline

    dockter

    getting reports that CB 1713 (MC1.1) kills nolagg.
     
  14. Offline

    bergerkiller

    @dockter I don't even doubt that, note the message all above this thread.
    Since most of the servers' native source code is still obfuscated (named 'public void a(Chunk chunk, World world)'), basically every single new CB build will break something. It's what you can expect when the 'server' is not properly de-obfuscated...it's a pain to work with.

    @Krunch yup, that is what I mean. But I have no idea how often Forestry is updated, or how it even works. (I downloaded the server, all that I saw was a bunch of class files)

    Nevertheless, I'm adding an option to toggle buffered loading on and off.

    @mrgreaper uploaded version 1.56.5 for you, it's on GitHub.
    The added configuration node:
    Code:
    # Sets if chunk data is re-used dynamically
    # If you encounter chunk corruption, errors or block-related issues, disable this
    # If you do not have issues, leave it enabled, as it reduces the RAM access and chunk loading times
    useBufferedChunkLoading: true
     
  15. Offline

    Credomane

    @bergerkiller Just so you know your async chunk saving will nearly kill the server if a world needs to be generated.
    That 2 minute gap in time is the server being completely frozen, btw. Your plugin was keeping the server locked until it erred and decided let Minecraft do its job. This has also happened a few times when I get people exploring new areas and generating new chunks. The exploration one only kicks everyone off for a few seconds before they can rejoin. Doesn't throw any errors but once I had this happen I put 2 + 2 together.

    I was panicking because while I could type in the console it was doing nothing.
    Code:
    2012-01-12 18:52:52 [INFO] credomane: Starting creation of world 'cb_creative'...
    2012-01-12 18:52:52 [INFO] [Multiverse-Core] Loading World & Settings - 'cb_creative' - NORMAL with seed: -1972039793
    2012-01-12 18:52:52 [INFO] Placed stronghold in INVALID biome at (-43, -30)
    2012-01-12 18:52:52 [INFO] Preparing start region for level 5 (Seed: -1972039793)
    2012-01-12 18:52:53 [INFO] Preparing spawn area for cb_creative, 8%
    2012-01-12 18:52:54 [INFO] Preparing spawn area for cb_creative, 12%
    2012-01-12 18:52:55 [INFO] Preparing spawn area for cb_creative, 20%
    2012-01-12 18:52:56 [INFO] Preparing spawn area for cb_creative, 24%
    2012-01-12 18:52:57 [INFO] Preparing spawn area for cb_creative, 32%
    2012-01-12 18:52:58 [INFO] Preparing spawn area for cb_creative, 36%
    2012-01-12 18:52:59 [INFO] Preparing spawn area for cb_creative, 44%
    2012-01-12 18:53:00 [INFO] Preparing spawn area for cb_creative, 48%
    2012-01-12 18:53:01 [INFO] Preparing spawn area for cb_creative, 57%
    2012-01-12 18:53:02 [INFO] Preparing spawn area for cb_creative, 65%
    2012-01-12 18:53:03 [INFO] Preparing spawn area for cb_creative, 69%
    2012-01-12 18:53:04 [INFO] Preparing spawn area for cb_creative, 77%
    2012-01-12 18:53:05 [INFO] Preparing spawn area for cb_creative, 85%
    2012-01-12 18:53:06 [INFO] Preparing spawn area for cb_creative, 93%
    2012-01-12 18:53:07 [INFO] [dynmap] Loaded 3 maps of world 'cb_creative'.
    2012-01-12 18:53:07 [INFO] credomane : Complete!
    2012-01-12 18:53:07 [WARNING] Can't keep up! Did the system time change, or is the server overloaded?
    2012-01-12 18:53:16 [WARNING] Can't keep up! Did the system time change, or is the server overloaded?
    2012-01-12 18:53:18 [WARNING] Can't keep up! Did the system time change, or is the server overloaded?
    2012-01-12 18:55:12 [SEVERE] [NoLagg] Async auto save terminated, built-in autosave is now active:
    2012-01-12 18:55:12 [SEVERE] java.lang.OutOfMemoryError: Java heap space
    2012-01-12 18:55:12 [SEVERE]    at java.util.HashMap.addEntry(HashMap.java:770)
    2012-01-12 18:55:12 [SEVERE]    at java.util.HashMap.put(HashMap.java:402)
    2012-01-12 18:55:12 [SEVERE]    at java.util.HashSet.add(HashSet.java:217)
    2012-01-12 18:55:12 [SEVERE]    at java.util.AbstractCollection.addAll(AbstractCollection.java:322)
    2012-01-12 18:55:12 [SEVERE]    at java.util.HashSet.<init>(HashSet.java:117)
    2012-01-12 18:55:12 [SEVERE]    at com.bergerkiller.bukkit.nolagg.saving.ChunkSaving.getTickList(ChunkSaving.java:60)
    2012-01-12 18:55:12 [SEVERE]    at com.bergerkiller.bukkit.nolagg.scheduler.ChunkOperation.preexecute(ChunkOperation.java:48)
    2012-01-12 18:55:12 [SEVERE]    at com.bergerkiller.bukkit.nolagg.scheduler.ChunkScheduler.schedule(ChunkScheduler.java:105)
    2012-01-12 18:55:12 [SEVERE]    at com.bergerkiller.bukkit.nolagg.scheduler.ChunkScheduler.schedule(ChunkScheduler.java:96)
    2012-01-12 18:55:12 [SEVERE]    at com.bergerkiller.bukkit.nolagg.saving.AsyncAutoSave$1.run(AsyncAutoSave.java:55)
    2012-01-12 18:55:12 [SEVERE]    at org.bukkit.craftbukkit.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:137)
    2012-01-12 18:55:12 [SEVERE]    at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:493)
    2012-01-12 18:55:12 [SEVERE]    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:425)
    2012-01-12 18:55:12 [SEVERE]    at net.minecraft.server.ThreadServerApplication.run(SourceFile:457)
    
     
  16. Offline

    bergerkiller

    @Credomane Interesting, as soon the world is fully loaded (all chunks loaded) it starts to do that...
    Could possibly be an overflow of chunk saving information...but where. It's obvious that the auto-saver causes it, so it either causes an infinite saving loop or it simply has to save too many chunks. Since it locks the main thread, that means that it froze during the scheduling of the saves. OutOfMemory means something for infinitely larger, I expect a collection somewhere...

    For now, all I can come up with is having too many 'to save' chunks getting queued for saving simultaneously, creating a vast amount of tick list collections all getting stored. Adding a simple maximum to it (1000?) will probably fix that easily. Just a question: how large is the spawn area of the world you created?
     
  17. Offline

    ledhead900

    NBT is the error I had right? I just wish to clear up that I am not directly blaming any plugin on my post I actually have no idea what causes it I am just reporting what I see looking for possible advice on what may cause it.
     
  18. Offline

    BrickedKeyboard

    I need help. I've found that a certain plugin causes a concurrency exception crash 100% of the time when I use it. It works fine when the NoLagg mod is not loaded. Here's the line that triggers the crash :

    player.kickPlayer("[Redirect] please reconnect to: " + addrParts[0]) ;

    This is obviously calling the bukkit method kickPlayer, and it's doing so inside another thread called networkThread. This mod NEEDS such a thread because networking has lots of waiting.

    I didn't write this mod, and there is several thousands lines of source. I don't have the experience needed to rearchitect it so that the method that calls player.kickplayer is in the main thread.

    However, I feel like I should be able to create a new runnable, pass it that string as an argument, then pass the runnable to bukkit's scheduler, so that the player can be kicked without causing exceptions.

    Can you help me do this? I feel like I am ALMOST there...I just need an example of code doing this.
     
  19. Offline

    bergerkiller

    @ledhead900 It's not an error, it's a type of 'data format' used by Minecraft, which uses data bound to names (tags) to store information, which is then compressed. I had to write a custom buffered implementation to prevent the byte array tag from allocating new bytes on-the-fly. Some mods use deprecated (very old) coding, nothing I can do about that.

    @BrickedKeyboard
    Code:
    final Player fPayer = player;
    final String msg = "[Redirect] please reconnect to: " + addrParts[0];
    plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
        public void run() {
            fPlayer.kickPlayer(msg);
        }
    }, 0);
    
     
  20. I'm pretty sure this will horribly break most "autobackup" plugins, which trigger a save, wait for it to finish, and then zip the world folder up as a copy. Since it will be mid-saving right after the save operation "finishes" now, it will nearly always be backing up a corrupt copy of the world. You may want to put in an option to make saves be sync again, specifically for this case.
     
    ledhead900 likes this.
  21. Offline

    Sh4d0w

    Is nolagg serious? I've tested it the first time with v1.54.4. But there was a critical bug, which regenereted existing chunks. 2 times doing a backup from another day. So next version have fixed this issue. And the hole time comes a lot of newer versions out, which fix some problems. Why are you realeasing not a better version, but programing accurately to prevent some huge bugs.

    Now in v1.56.4 there is another fix for chunk loader. I'm not sure if nolagg produce more and more corrupted chunks.
    I wanna use this plugin, but i'm really unsure because of that.
     
  22. Offline

    BrickedKeyboard

    The code I attempted to use :
    net.minecraft.server.mffs.Functions.DisplayInfo("test message" );

    final Player fPlayer = player;
    String message = "[Redirect] please reconnect to: " + addrParts[0];
    final String msg = message;
    int success = Global.plugin.getServer().getScheduler().scheduleSyncDelayedTask(Global.plugin, new Runnable() {
    public void run() {
    fPlayer.kickPlayer(msg);
    }
    });
    net.minecraft.server.mffs.Functions.DisplayInfo("Return value is " +success );

    I am certain that the code never fires because that test message at the bottom is never displayed, while the one at the top IS displayed. So I know the code reached here, and I know that the kick is never executed because my client doesn't get kicked.

    By commenting out the above and swapping back in

    player.kickPlayer("[Redirect] please reconnect to: " + addrParts[0]) ;

    it works fine, but of course the server crashes instantly, as usual. (unless I remove your mod, of course)

    Note that "Global.plugin" is used a dozen places in the same source file to do similar things, so I am reasonably sure it is the correct variable.
     
  23. Offline

    Borch

    @BrickedKeyboard That's odd. There should at least be some exception on the console, as Java doesn't just exit from a method half-way through for no reason. Or maybe the method calling this one has a try-catch block with an empty catch part? Try this:

    Code:
    try {
        final Player fPayer = player;
        final String msg = "[Redirect] please reconnect to: " + addrParts[0];
        plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable()     {
            public void run() {
                fPlayer.kickPlayer(msg);
            }
        }, 0);
    } catch (Exception e) {
        System.out.println("UH OH:");
        e.printStackStrace();
    }
    If case the parent method hides any exception, this should show you again where things go wrong in the console.
    Also no idea what net.minecraft.server.mffs.Functions.DisplayInfo is, why not just System.out.println?
     
  24. Offline

    BrickedKeyboard

    Sorry, there was a generic error...and the code never reaches net.minecraft.server.mffs.Functions.DisplayInfo("Return value is " +success );



    That's just a convenient output function I spotted elsewhere in the code that I know works.

    Ok, now it sorta works. Except it isn't actually kicking players, just sending them a message !???

    What I ended up having to do : A new class.
    Then, I had to instantiate that class and feed an instance of it to the scheduler. ARGH. Now I see why multithreading is so unpopular. All this mess is to make ONE line of code get executed in sync with the main thread.


    BootTask leather = new BootTask("[Redirect] please reconnect to: " + addrParts[0], player);
    int result = Global.plugin.getServer().getScheduler().scheduleSyncDelayedTask(Global.plugin, leather, 1);




    public class BootTask implements Runnable
    {
    private final String message;
    private final Player person;
    public BootTask (String mesg, Player kickee)
    {
    message = mesg;
    person = kickee;
    }
    @Override
    public void run()
    {
    person.kickPlayer(message);
    }
    }

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jul 14, 2016
  25. Offline

    Credomane

    @bergerkiller I guess I did leave out the multiverse command I had just typed in my client. /mv create cb_creative normal -s cb_creative That is all it was. There were 4 other players online at the time including myself. I was "afk" in the portal room working on making a creative world. The other three were working on their homes.
    With NoLagg world generation takes 20-30 seconds and the server is unresponsive for the next 2-3 minutes.
    Without NoLagg creating a world take less than 2 seconds and no one notices.

    My server hardware is a quad-core Intel Xeon E5620, 12GB RAM, 1TB (raid 0+1).
    The OS is Debian Linux 64-bit.
    Minecraft gets 2GB ram and 60gb all to itself.

    [edit]
    It would be awesome to get NoLagg once again without the chunk loading/saving features. Your plugin works great without them but with them it is causing too many problems to risk using your NoLagg anymore.

    [edit2]
    ....where did the mention of ssd come from. -_-
     
  26. What about craft bukkit 1.1-r1 ? will be released nolagg for some non recomended versions?
     
  27. Offline

    bergerkiller

    @Thulinma not needed, the native source code got turned around already. It uses a saving queue of chunks. So whenever you unload a chunk:
    Since it already performs saving operations async natively (was added recently), it makes no difference to not do it. Actually, I could get rid of async auto saving now that it is added internally, didn't do that because it creates the chunk nbt compounds on the main thread, which is not really needed.

    tldr; chunks are already written to file in a separate thread (I believe, could be the list is handled by a synced task instead)

    @Sh4d0w same here. It's not fun programming when you finish the day with 'everything is stable, ran the server for a full day and not a single issue', and read of a wide variety of bugs the next day. Most are genuine of course, but even more are caused by other plugins I don't run on my server, or caused by things I simply don't do on my server regularly.

    @tomikcz Once I got everything fail-protected in NoLagg, I'll see if I can handle errors in a different way, completely disabling certain features if it fails, printing only a single error. Then I'll work for compatibility, since the newer CB build will probably contain alot of bugs.

    TBH, I don't want it to have so many issues, but debugging complicated data routing COMBINED with an infinite amount of errors I can't even know about as they are native, it gets pretty hard. Note that 1.56.5 adds an option in the configuration to disable the buffered chunk loader, may you have issues with it.

    EDIT

    Might just remove the async chunk saver, I see the Minecraft developers found a way to implement it internally now. (FileIOThread.java)

    The chunk saving interval can be pretty much removed as well now, since saving is now instant to the main thread.
     
  28. Offline

    Borch

    I hope there's not too much turned around in 1.1, other than every variable/method having a different name.
    As it looks now there are only a few bugs in CB, probably as there aren't that many changes compared to 1.8 -> 1.0
    I might play around with 1.1 tonight to see if there are any major issues. :)
    Hoping for a NoLagg update soon.
     
  29. Offline

    bergerkiller

    @Borch I guess I can quickly update this, as everything just became a lot simpler. Not having to deal with chunk redirections for async saving is a great weight off of my back.

    'CustomChunkLoader' is now called 'BufferedChunkRegionLoader', as that is all that it is now :)
     
  30. Offline

    Bertware

    1718 broke it :(

    19:30:30 [INFO] This server is running Craftbukkit version git-Bukkit-1.0.1-R1-40-ge30dc2f-b1718jnks (MC: 1.1) (Implementing API version 1.1-R1-SNAPSHOT)
    [...]
    19:30:32 [SEVERE] [NoLagg] Failed to initialize async chunk saving implementation:
    19:30:32 [SEVERE] java.lang.NoSuchMethodError: net.minecraft.server.WorldSettings.<init>(JIZZ)V
    19:30:32 [SEVERE] at com.bergerkiller.bukkit.nolagg.DummyWorld.getDummySettings(DummyWorld.java:59)
    19:30:32 [SEVERE] at com.bergerkiller.bukkit.nolagg.DummyWorld.<init>(DummyWorld.java:66)
    19:30:32 [SEVERE] at com.bergerkiller.bukkit.nolagg.DummyWorld.<init>(DummyWorld.java:63)
    19:30:32 [SEVERE] at com.bergerkiller.bukkit.nolagg.ChunkSaving.init(ChunkSaving.java:31)
    19:30:32 [SEVERE] at com.bergerkiller.bukkit.nolagg.NoLagg.onEnable(NoLagg.java:132)
    19:30:32 [SEVERE] at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:230)
    19:30:32 [SEVERE] at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:970)
    19:30:32 [SEVERE] at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:280)
    19:30:32 [SEVERE] at org.bukkit.craftbukkit.CraftServer.loadPlugin(CraftServer.java:190)
    19:30:32 [SEVERE] at org.bukkit.craftbukkit.CraftServer.enablePlugins(CraftServer.java:173)
    19:30:32 [SEVERE] at net.minecraft.server.MinecraftServer.t(MinecraftServer.java:355)
    19:30:32 [SEVERE] at net.minecraft.server.MinecraftServer.a(MinecraftServer.java:342)
    19:30:32 [SEVERE] at net.minecraft.server.MinecraftServer.init(MinecraftServer.java:174)
    19:30:32 [SEVERE] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:406)
    19:30:32 [SEVERE] at net.minecraft.server.ThreadServerApplication.run(SourceFile:465)
    19:30:32 [WARNING] [NoLagg] Async auto-saving disabled: Chunk saving implementation is disabled
    19:30:32 [INFO] [NoLagg] Auto-save field bound to 'u'!
    19:30:32 [INFO] [NoLagg] NoLagg version 1.51 is enabled!

    Upgraded from latest recommended build to this one to get 1.1.

    greets,
     
  31. Offline

    bergerkiller

    @Bertware probably already fixed, since I removed the async chunk saving implementation just now. (why reinvent the wheel? It is now natively included)

    It only was a serious pain to get around the private 'PendingChunkToSave'-class, had to copy and paste a lot of code and use reflection to get around it :(
    Hope they'll make it public in a next version.
     

Share This Page