LuckPerms

LuckPerms

41.4k Downloads

1.10 servers freezing on startup with LP

Sir-Will opened this issue ยท 4 comments

commented

Description

Since an LP update, our 1.10 servers sometimes hang on startup, after force restarting the server it will start up correctly but at some point it will hang again. See thread dump.

1.12 doesn't seem to have the issue.

2022-02-01 16:01:43



### Reproduction Steps

Happens randomly, therefore not 100% reproducible.

### Expected Behaviour

Load dependencies without getting stuck.

### Server Details

spongeforge-1.10.2-2477-5.2.0-BETA-2793

### LuckPerms Version

LuckPerms-Sponge-5.3.98

### Logs and Configs

"Server thread" - Thread t@28
   java.lang.Thread.State: WAITING
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for <7ecf0fd4> (a java.util.concurrent.CountDownLatch$Sync)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedInterruptibly(AbstractQueuedSynchronizer.java:997)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1304)
	at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:231)
	at me.lucko.luckperms.common.dependencies.DependencyManager.loadDependencies(DependencyManager.java:137)
	at me.lucko.luckperms.common.plugin.AbstractLuckPermsPlugin.load(AbstractLuckPermsPlugin.java:111)
	at me.lucko.luckperms.sponge.LPSpongeBootstrap.onEnable(LPSpongeBootstrap.java:171)
	at org.spongepowered.common.event.listener.GamePreInitializationEventListener_LPSpongeBootstrap_onEnable35.handle(Unknown Source)
	at org.spongepowered.common.event.RegisteredListener.handle(RegisteredListener.java:95)
	at org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:313)
	at org.spongepowered.mod.event.SpongeModEventManager.post(SpongeModEventManager.java:342)
	at org.spongepowered.mod.SpongeMod.onStateEvent(SpongeMod.java:234)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
	at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
	- locked <1d930356> (a com.google.common.eventbus.SynchronizedEventSubscriber)
	at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
	at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
	at com.google.common.eventbus.EventBus.post(EventBus.java:275)
	at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:243)
	at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:221)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74)
	at com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47)
	- locked <66da961f> (a com.google.common.eventbus.SynchronizedEventSubscriber)
	at com.google.common.eventbus.EventBus.dispatch(EventBus.java:322)
	at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304)
	at com.google.common.eventbus.EventBus.post(EventBus.java:275)
	at net.minecraftforge.fml.common.LoadController.redirect$onPost$zzb000(LoadController.java:561)
	at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:145)
	at net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:624)
	at net.minecraftforge.fml.server.FMLServerHandler.beginServerLoading(FMLServerHandler.java:99)
	at net.minecraftforge.fml.common.FMLCommonHandler.onServerStart(FMLCommonHandler.java:328)
	at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:121)
	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:431)
	at java.lang.Thread.run(Thread.java:748)

   Locked ownable synchronizers:
	- None

Extra Details

No response

commented

Code in question:

for (Dependency dependency : dependencies) {
this.plugin.getBootstrap().getScheduler().async().execute(() -> {
try {
loadDependency(dependency);
} catch (Throwable e) {
this.plugin.getLogger().severe("Unable to load dependency " + dependency.name() + ".", e);
} finally {
latch.countDown();
}
});
}

Only reason that would break is if the scheduler decides to stop executing tasks or if once of the dependency downloads fails. Would need to see the whole thread dump. This code is common across all platforms and I've never seen an issue with it before, so I lean towards it being a network connectivity issue with the repository that hosts the dependency artifacts.

commented

Does it load the dependency from the repo on every startup? I assumed it loads it from the file, if it exists.

commented

It will skip downloading if the file already exists locally

commented

It will skip downloading if the file already exists locally

Then it shouldn't be downloading anything, as the files were not deleted.

Here is the full thread dump: https://gist.github.com/Sir-Will/8ae76a5b258018ef4d2c813594c13904