Commit Graph

61 Commits

Author SHA1 Message Date
Spottedleaf
e14d95e83c Name craft scheduler threads according to the plugin using them
Provides quick access to culprits running far more threads than
they should be
2020-07-19 15:17:01 -07:00
Aleksander Jagiello
0312fd2b42 Add getMainThreadExecutor to BukkitScheduler 2021-01-24 22:17:54 +01:00
ossi
2e59889281 Fix CraftScheduler#runTaskTimerAsynchronously(Plugin, Consumer<BukkitTask>, long, long) scheduling a non-repeating task instead of a repeating one. 2020-06-12 01:38:06 +03:00
Aikar
a13afc05a6 Improved Async Task Scheduler
The Craft Scheduler still uses the primary thread for task scheduling.
This results in the main thread still having to do work as part of the
dispatching of async tasks.

If plugins make use of lots of async tasks, such as particle emitters
that want to keep the logic off the main thread, the main thread still
receives quite a bit of load from processing all of these queued tasks.

Additionally, resizing and managing the pending entries for all of
these asynchronous tasks takes up time on the main thread too.

This commit replaces the implementation of the scheduler when working
with asynchronous tasks, by forwarding calls to the new scheduler.

The Async Scheduler uses a single thread executor for "management" tasks.
The Management Thread is responsible for all adding and dispatching of
scheduled tasks.

The mainThreadHeartbeat will send a heartbeat task to the management thread
with the currentTick value, so that it can find which tasks to execute.

Scheduling of an async tasks also dispatches a management task, ensuring
that any Queue resizing operation occurs off of the main thread.

The async queue uses a complete separate PriorityQueue, ensuring that resize
operations are decoupled from the sync tasks queue.
2018-03-16 22:59:43 -04:00
Aikar
5a81bf12ef Remove CraftScheduler Async Task Debugger
I have not once ever seen this system help debug a crash.
One report of a suspected memory leak with the system.

This adds additional overhead to asynchronous task dispatching
2017-02-05 00:04:04 -05:00
Joseph Hirschfeld
68979dd492 Add exception reporting event 2016-03-03 03:15:41 -06:00
Aikar
770ee3eebd Remove Spigot timings 2016-03-03 04:00:11 -06:00
Jake Potrebic
a82a09d198 CB fixes
* Missing Level -> LevelStem generic in StructureCheck
  Need to use the right for injectDatafixingContext (Spottedleaf)

* Fix summon_entity effect attempting to add incorrect entity (granny)

* Removed incorrect parent perm for `minecraft.debugstick.always` (Machine_Maker)

* Fixed method signature of Marker#addPassenger (Machine_Maker)

* Removed unneeded UOE in CustomWorldChunkManager (extends BiomeSource) (Machine_Maker)

* Honor Server#getLootTable method contract (Machine_Maker)

Co-authored-by: Spottedleaf <Spottedleaf@users.noreply.github.com>
2022-02-25 07:14:48 -08:00
CraftBukkit/Spigot
78524cb95e Spigot Timings
Overhauls the Timings System adding performance tracking all around the Minecraft Server

By: Aikar <aikar@aikar.co>
2013-01-10 00:18:11 -05:00
CraftBukkit/Spigot
30e4583dbe Remap CraftBukkit to Mojang+Yarn Mappings
By: Initial Source <noreply+automated@papermc.io>
2024-12-11 22:26:55 +01:00
CraftBukkit/Spigot
5a6e315a79 #1503: Simplify CAS loop to getAndSet
By: sunmisc <jolyjdia@gmail.com>
2024-11-23 21:12:04 +11:00
CraftBukkit/Spigot
d3a23f42c3 Update to Minecraft 1.21.2
By: md_5 <git@md-5.net>
2024-10-23 02:15:00 +11:00
CraftBukkit/Spigot
3e6f41a01b #1297: Change Consumer and Predicates to super
By: DerFrZocker <derrieple@gmail.com>
2023-11-14 19:50:14 +13:00
CraftBukkit/Spigot
ff78bf30f6 #1182: Consolidate Preconditions use and minor cleanup
By: Doc <nachito94@msn.com>
2023-06-12 19:41:02 +10:00
CraftBukkit/Spigot
71d4016a4d #891: Fix scheduler task ID overflow and duplication issues
By: Phoenix616 <max@themoep.de>
2021-07-17 11:39:56 +10:00
CraftBukkit/Spigot
b2efd58164 Organise imports
By: md_5 <git@md-5.net>
2021-03-09 08:47:33 +11:00
CraftBukkit/Spigot
18886036f4 Misc checkstyle fixes
By: md_5 <git@md-5.net>
2020-04-14 12:34:43 +10:00
CraftBukkit/Spigot
bfea9a3269 Add Override annotations where appropriate
By: md_5 <git@md-5.net>
2019-04-28 11:38:01 +10:00
CraftBukkit/Spigot
09673c1a03 Apply import ordering rules to CraftBukkit classes
By: md_5 <git@md-5.net>
2019-04-23 14:54:36 +10:00
CraftBukkit/Spigot
7afe4d02f8 Begin implementation of CheckStyle style checking
By: md_5 <git@md-5.net>
2019-04-23 14:00:30 +10:00
CraftBukkit/Spigot
a0f2b74c8d Update to Minecraft 1.14-pre5
By: md_5 <git@md-5.net>
2019-04-23 12:00:00 +10:00
CraftBukkit/Spigot
fe7c2ee97f Identify CraftScheduler threads with useful names
By: md_5 <git@md-5.net>
2019-01-05 16:21:07 +11:00
CraftBukkit/Spigot
1114d726cd SPIGOT-4500: callSyncMethod broken
By: md_5 <git@md-5.net>
2018-11-24 17:52:29 +11:00
CraftBukkit/Spigot
9e6d9e593e SPIGOT-4498: Crash on startup
By: md_5 <git@md-5.net>
2018-11-23 14:20:59 +11:00
CraftBukkit/Spigot
dcef5ef747 SPIGOT-4472: Add Consumer scheduler methods
By: md_5 <git@md-5.net>
2018-11-23 11:40:18 +11:00
CraftBukkit/Spigot
0e8e610b0e SPIGOT-3619: Improve CraftScheduler#isCurrentlyRunning
* No longer returns opposite of what it should
* Works for sync tasks as well

By: blablubbabc <lukas@wirsindwir.de>
2018-06-17 15:04:25 +02:00
CraftBukkit/Spigot
39a4128d9d Remove magic values in scheduler package
By: Senmori <thesenmori@gmail.com>
2018-03-07 13:41:24 -05:00
CraftBukkit/Spigot
6f9b17e08b Fix active async tasks not cancelled by CraftScheduler#cancelTasks(Plugin)
By: blablubbabc <lukas@wirsindwir.de>
2017-08-29 13:19:14 +02:00
CraftBukkit/Spigot
587e93b11a Add BukkitTask#isCancelled
By: blablubbabc <lukas@wirsindwir.de>
2017-08-29 13:46:18 +02:00
CraftBukkit/Spigot
6d76725098 Correct scheduler behaviour with intervals of >= Integer.MAX_VALUE (circa 3 years).
By: md_5 <git@md-5.net>
2017-07-25 15:36:44 +10:00
CraftBukkit/Spigot
714d2583c4 Explicitly log exception from asynchronous tasks.
Previously an UnhandledException would be thrown and the stack trace / message would be printed to System.err in the default UncaughtExceptionHandler for ThreadGroup. This was undesirable as it meant that logging frameworks / exception monitors such as Sentry were unable to get the exception. Additionally it would cause the death of the thread in the ExecutorService. This change mimics the behaviour of exceptions occuring during synchronous tasks.

By: hibo98 <hibo98.niklas@gmail.com>
2016-10-24 18:47:47 +11:00
CraftBukkit/Spigot
2a63c00f21 Run sync tasks scheduled for the same tick FIFO
By: AgentLV <contact@agentlv.net>
2016-09-10 23:09:29 +02:00
CraftBukkit/Spigot
5d8e9e97fd Implement deprecated methods. Adds BUKKIT-5752
By: Wesley Wolfe <wesley.d.wolfe+git@gmail.com>
2014-08-07 19:35:16 -05:00
CraftBukkit/Spigot
2772c52bf3 Throw exception for disabled plugin tasks. Fixes BUKKIT-3951
Without this check, any non-null reference to a plugin is considered
'valid' for registering a task in the scheduler. This is obviously
unintentional behavior and has been changed to throw an
IllegalPluginAccessException. It is now consistent with the
SimplePluginManager event registration contract.

This in affect also addresses BUKKIT-3950 for uninitialized plugin
references (ones without a description).

By: Wesley Wolfe <weswolf@aol.com>
2013-03-31 15:37:17 -05:00
CraftBukkit/Spigot
2c6b6e11dd Remove erroneous break statement in scheduler. Fixes BUKKIT-3395
By: Wesley Wolfe <weswolf@aol.com>
2013-01-27 23:00:14 -06:00
CraftBukkit/Spigot
eeded7f6fd Remove runner leak on async tasks. Fixes BUKKIT-3288
In some situations, an async task could be cancelled with no tasks
pending. This means the finally {} block from run() never gets executed
properly on the last async task to have run, as it expected to be
executed again.

This fix takes the only spot that the task period is set to cancelled
and will check to see if the task should be purged from the runners
list.

By: Wesley Wolfe <weswolf@aol.com>
2012-12-23 05:13:33 -06:00
CraftBukkit/Spigot
77e811ab06 Fixed some async tasks running synchronously. Fixes BUKKIT-2934
Additionally refactored cancel method to be more object-oriented.

By: Wesley Wolfe <weswolf@aol.com>
2012-11-14 16:47:21 -06:00
CraftBukkit/Spigot
dd1816bda4 Implement new scheduler API. Adds BUKKIT-836
The implementation for the new methods mimics the old methods. The final
call for the old methods now maps to the new methods with an additional
call to get id.

By: Wesley Wolfe <weswolf@aol.com>
2012-10-06 16:23:56 -05:00
CraftBukkit/Spigot
0d3ff61b07 Fix typo causing a task to be repeated in debug. Addresses BUKKIT-2549
An internal method for making the debug output for CraftScheduler's
async tasks was erroneously using the 'this' reference when the loop
should be referencing the current task.

By: Wesley Wolfe <weswolf@aol.com>
2012-09-28 02:39:22 -05:00
CraftBukkit/Spigot
2a57bac117 Bulk pending cleanup.
By: Wesley Wolfe <weswolf@aol.com>
2012-09-09 23:19:28 -05:00
CraftBukkit/Spigot
c650c443b3 Add information about async tasks to CrashReports. Addresses BUKKIT-2491
Async tasks are notorious for causing CMEs and corrupted data when
accessing the API. This change makes a linked list to track recent tasks
that may no longer be running. It is accessed via the toString method on
the scheduler. This behavior is not guaranteed, but it is accessible as
such currently.

Although toString is located in the scheduler, its contract does not
guarantee an accurate or up to date call when accessed from a second
thread.

By: Wesley Wolfe <weswolf@aol.com>
2012-09-09 00:34:41 -05:00
CraftBukkit/Spigot
e719bbd88c Fix Future task waiting logic. Fixes BUKKIT-2408
Previously, the timeout would erroneously get converted to milliseconds
twice. The second conversion was removed.

Spurious wakeups were not handled properly, and would instead throw a
TimeoutException even if the waited time was not reached..

By: Wesley Wolfe <weswolf@aol.com>
2012-08-26 10:25:11 -05:00
CraftBukkit/Spigot
b1d40801aa Rewrite scheduler. Fixes BUKKIT-1831, and BUKKIT-845
The new scheduler uses a non-blocking methodology. Combining volatile
references to make a linked reference chain, with the atomic reference
handling the tail, tasks are queued without waiting for locks. The main
thread will no longer limit the length of time spend for scheduled tasks,
but no task will run twice in the same tick. Scheduling a new task inside of
a synchronous task will always run the new task during the same tick,
assuming there is no supplied delay > 0.

Asynchronous tasks are now run using a thread pool. Any thread-local
implemenation should now account for threads being reused between
executions.

Race conditions were carefully examined and the order of logic is now very
important. Each task is placed in a secondary collection before removal from
primary collections. Thus, by reading tasks from the collections in the same
order they travel, it retains state-safety. This does make modifications
less responsive in some situations, as the task may be transitioning before
the modifier accesses it. This cost outweighs the requirement to synchronize
on the scheduler; previously any conflict would be first-come-first-serve,
with the main thread backing out arbitrarily.

By: Wesley Wolfe <weswolf@aol.com>
2012-08-14 06:09:51 -05:00
CraftBukkit/Spigot
fa547512af Deprecation cleanup.
By: Erik Broes <erikbroes@grum.nl>
2012-01-30 21:51:53 +01:00
CraftBukkit/Spigot
af11cea8fe Revert "Do not immediately re-queue repeating tasks, or they may simply keep repeating on this tick, until the 35ms time limit runs out." See 3632d99122 (commitcomment-478252)
This reverts commit 3632d99122e8795cadb8f94e14e42eb4aa6d7c4c.

By: Dinnerbone <dinnerbone@dinnerbone.com>
2011-07-14 23:21:28 +01:00
CraftBukkit/Spigot
e2f2ed1c17 Do not immediately re-queue repeating tasks, or they may simply keep repeating on this tick, until the 35ms time limit runs out.
By: Afforess <afforess@gmail.com>
2011-07-13 17:26:33 -07:00
CraftBukkit/Spigot
f7df7a7870 Possible fix for cancelled CraftScheduler tasks still running.
By: EvilSeph <evilseph@unaligned.org>
2011-06-30 02:18:11 -04:00
CraftBukkit/Spigot
9bf573516b Generic cleanup of the org.bukkit.craftbukkit classes.
By: Erik Broes <erikbroes@grum.nl>
2011-06-12 01:12:43 +02:00
CraftBukkit/Spigot
776b9efd3e Whitespace + general cleanup
By: Erik Broes <erikbroes@grum.nl>
2011-05-14 16:29:42 +02:00
CraftBukkit/Spigot
7bbe446bd6 Improved the Scheduler.
Adds nag message when async tasks are not properly shut down and adds a limiter for sync tasks. Once they use 35ms in a single tick, any remaining tasks are not executed until later ticks. Adds a method to report the pending tasks and one to report active worker threads

By: Raphfrk <raphfrk@gmail.com>
2011-04-28 20:10:39 +01:00