Absorb pocketmine/log-pthreads into PM core

this was previously part of the abandoned package pocketmine/spl. It had to be separated in the PM3 days, because RakLib depended on it.

Since RakLib 0.13, RakLib stopped being dependent on or aware of pthreads, so it no longer depends on any thread-related packages.
It's also possible to absorb pocketmine/snooze and pocketmine/classloader back into the core with this in mind.
This commit is contained in:
Dylan K. Taylor 2023-05-20 16:57:24 +01:00
parent 9509d7e04d
commit 097feba4d5
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D
10 changed files with 139 additions and 56 deletions

View File

@ -45,7 +45,6 @@
"pocketmine/errorhandler": "^0.6.0",
"pocketmine/locale-data": "~2.19.0",
"pocketmine/log": "^0.4.0",
"pocketmine/log-pthreads": "dev-stable",
"pocketmine/math": "^0.4.0",
"pocketmine/nbt": "^0.3.2",
"pocketmine/raklib": "^0.15.0",

48
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "507c2a45350440a7717ed089190fe4f0",
"content-hash": "0dc836612512d87a694945ffb87a4096",
"packages": [
{
"name": "adhocore/json-comment",
@ -651,51 +651,6 @@
},
"time": "2021-06-18T19:08:09+00:00"
},
{
"name": "pocketmine/log-pthreads",
"version": "dev-stable",
"source": {
"type": "git",
"url": "https://github.com/pmmp/LogPthreads.git",
"reference": "bb3b5395042d12ec0d7ad5c855fd86eaf12869d3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/pmmp/LogPthreads/zipball/bb3b5395042d12ec0d7ad5c855fd86eaf12869d3",
"reference": "bb3b5395042d12ec0d7ad5c855fd86eaf12869d3",
"shasum": ""
},
"require": {
"ext-pmmpthread": "^6.0",
"php": "^8.1",
"pocketmine/log": "^0.4.0"
},
"conflict": {
"pocketmine/spl": "<0.4"
},
"require-dev": {
"phpstan/extension-installer": "^1.0",
"phpstan/phpstan": "1.10.3",
"phpstan/phpstan-strict-rules": "^1.0"
},
"default-branch": true,
"type": "library",
"autoload": {
"classmap": [
"./src"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"LGPL-3.0"
],
"description": "Logging components specialized for pthreads used by PocketMine-MP and related projects",
"support": {
"issues": "https://github.com/pmmp/LogPthreads/issues",
"source": "https://github.com/pmmp/LogPthreads/tree/stable"
},
"time": "2023-05-19T23:38:36+00:00"
},
{
"name": "pocketmine/math",
"version": "0.4.3",
@ -3298,7 +3253,6 @@
"minimum-stability": "stable",
"stability-flags": {
"pocketmine/classloader": 20,
"pocketmine/log-pthreads": 20,
"pocketmine/snooze": 20
},
"prefer-stable": false,

View File

@ -92,6 +92,7 @@ use pocketmine\resourcepacks\ResourcePackManager;
use pocketmine\scheduler\AsyncPool;
use pocketmine\snooze\SleeperHandler;
use pocketmine\stats\SendUsageTask;
use pocketmine\thread\log\AttachableThreadSafeLogger;
use pocketmine\timings\Timings;
use pocketmine\timings\TimingsHandler;
use pocketmine\updater\UpdateChecker;
@ -417,7 +418,7 @@ class Server{
return $this->autoloader;
}
public function getLogger() : \AttachableThreadSafeLogger{
public function getLogger() : AttachableThreadSafeLogger{
return $this->logger;
}
@ -760,7 +761,7 @@ class Server{
public function __construct(
private \DynamicClassLoader $autoloader,
private \AttachableThreadSafeLogger $logger,
private AttachableThreadSafeLogger $logger,
string $dataPath,
string $pluginPath
){

View File

@ -26,6 +26,7 @@ namespace pocketmine\network\mcpe\raklib;
use pmmp\thread\Thread as NativeThread;
use pmmp\thread\ThreadSafeArray;
use pocketmine\snooze\SleeperNotifier;
use pocketmine\thread\log\ThreadSafeLogger;
use pocketmine\thread\NonThreadSafeValue;
use pocketmine\thread\Thread;
use raklib\generic\SocketException;
@ -55,7 +56,7 @@ class RakLibServer extends Thread{
* @phpstan-param ThreadSafeArray<int, string> $threadToMainBuffer
*/
public function __construct(
protected \ThreadSafeLogger $logger,
protected ThreadSafeLogger $logger,
protected ThreadSafeArray $mainToThreadBuffer,
protected ThreadSafeArray $threadToMainBuffer,
InternetAddress $address,

View File

@ -27,6 +27,7 @@ use pmmp\thread\Thread as NativeThread;
use pmmp\thread\ThreadSafeArray;
use pocketmine\snooze\SleeperHandler;
use pocketmine\snooze\SleeperNotifier;
use pocketmine\thread\log\ThreadSafeLogger;
use pocketmine\utils\Utils;
use function array_keys;
use function array_map;
@ -70,7 +71,7 @@ class AsyncPool{
protected int $size,
private int $workerMemoryLimit,
private \ClassLoader $classLoader,
private \ThreadSafeLogger $logger,
private ThreadSafeLogger $logger,
private SleeperHandler $eventLoop
){}

View File

@ -25,6 +25,7 @@ namespace pocketmine\scheduler;
use pmmp\thread\Thread as NativeThread;
use pocketmine\snooze\SleeperNotifier;
use pocketmine\thread\log\ThreadSafeLogger;
use pocketmine\thread\Worker;
use function gc_enable;
use function ini_set;
@ -34,7 +35,7 @@ class AsyncWorker extends Worker{
private static array $store = [];
public function __construct(
private \ThreadSafeLogger $logger,
private ThreadSafeLogger $logger,
private int $id,
private int $memoryLimit,
private SleeperNotifier $notifier
@ -58,7 +59,7 @@ class AsyncWorker extends Worker{
}
}
public function getLogger() : \ThreadSafeLogger{
public function getLogger() : ThreadSafeLogger{
return $this->logger;
}

View File

@ -0,0 +1,64 @@
<?php
/*
*
* ____ _ _ __ __ _ __ __ ____
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* @author PocketMine Team
* @link http://www.pocketmine.net/
*
*
*/
declare(strict_types=1);
namespace pocketmine\thread\log;
use pmmp\thread\ThreadSafeArray;
abstract class AttachableThreadSafeLogger extends ThreadSafeLogger{
/**
* @var ThreadSafeArray|ThreadSafeLoggerAttachment[]
* @phpstan-var ThreadSafeArray<int, ThreadSafeLoggerAttachment>
*/
protected ThreadSafeArray $attachments;
public function __construct(){
$this->attachments = new ThreadSafeArray();
}
public function addAttachment(ThreadSafeLoggerAttachment $attachment) : void{
$this->attachments[] = $attachment;
}
public function removeAttachment(ThreadSafeLoggerAttachment $attachment) : void{
foreach($this->attachments as $i => $a){
if($attachment === $a){
unset($this->attachments[$i]);
}
}
}
public function removeAttachments() : void{
foreach($this->attachments as $i => $a){
unset($this->attachments[$i]);
}
}
/**
* @return ThreadSafeLoggerAttachment[]
*/
public function getAttachments() : array{
return (array) $this->attachments;
}
}

View File

@ -0,0 +1,30 @@
<?php
/*
*
* ____ _ _ __ __ _ __ __ ____
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* @author PocketMine Team
* @link http://www.pocketmine.net/
*
*
*/
declare(strict_types=1);
namespace pocketmine\thread\log;
use pmmp\thread\ThreadSafe;
abstract class ThreadSafeLogger extends ThreadSafe implements \Logger{
}

View File

@ -0,0 +1,30 @@
<?php
/*
*
* ____ _ _ __ __ _ __ __ ____
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* @author PocketMine Team
* @link http://www.pocketmine.net/
*
*
*/
declare(strict_types=1);
namespace pocketmine\thread\log;
use pmmp\thread\ThreadSafe;
abstract class ThreadSafeLoggerAttachment extends ThreadSafe{
abstract public function log(string $level, string $message) : void;
}

View File

@ -25,13 +25,15 @@ namespace pocketmine\utils;
use LogLevel;
use pmmp\thread\Thread as NativeThread;
use pocketmine\thread\log\AttachableThreadSafeLogger;
use pocketmine\thread\log\ThreadSafeLoggerAttachment;
use pocketmine\thread\Thread;
use pocketmine\thread\Worker;
use function implode;
use function sprintf;
use const PHP_EOL;
class MainLogger extends \AttachableThreadSafeLogger implements \BufferedLogger{
class MainLogger extends AttachableThreadSafeLogger implements \BufferedLogger{
protected bool $logDebug;
private string $format = TextFormat::AQUA . "[%s] " . TextFormat::RESET . "%s[%s/%s]: %s" . TextFormat::RESET;
@ -195,7 +197,7 @@ class MainLogger extends \AttachableThreadSafeLogger implements \BufferedLogger{
$this->logWriterThread->write($time->format("Y-m-d") . " " . TextFormat::clean($message) . PHP_EOL);
/**
* @var \ThreadSafeLoggerAttachment $attachment
* @var ThreadSafeLoggerAttachment $attachment
*/
foreach($this->attachments as $attachment){
$attachment->log($level, $message);