mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 02:30:08 -08:00
fixed tests
This commit is contained in:
parent
c2ae1386ff
commit
de323a3577
6 changed files with 38 additions and 13 deletions
|
|
@ -31,6 +31,7 @@ import mage.target.TargetAmount;
|
|||
import mage.target.TargetCard;
|
||||
import mage.util.CardUtil;
|
||||
import mage.util.RandomUtil;
|
||||
import mage.util.ThreadUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import java.util.*;
|
||||
|
|
@ -61,7 +62,7 @@ public class ComputerPlayer6 extends ComputerPlayer {
|
|||
new LinkedBlockingQueue<>(),
|
||||
r -> {
|
||||
Thread thread = new Thread(r);
|
||||
thread.setName("AI-SIM-" + thread.getId());
|
||||
thread.setName(ThreadUtils.THREAD_PREFIX_AI_SIMULATION + "-" + thread.getId());
|
||||
return thread;
|
||||
});
|
||||
protected int maxDepth;
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import mage.game.events.TableEvent;
|
|||
import mage.players.Player;
|
||||
import mage.server.game.GameController;
|
||||
import mage.server.managers.ManagerFactory;
|
||||
import mage.util.ThreadUtils;
|
||||
import mage.view.DraftPickView;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
|
|
@ -124,7 +125,7 @@ public class DraftController {
|
|||
}
|
||||
|
||||
private void startDraft() {
|
||||
Thread.currentThread().setName("TOURNEY DRAFT " + tableId);
|
||||
Thread.currentThread().setName(ThreadUtils.THREAD_PREFIX_TOURNEY_DRAFT + " " + tableId);
|
||||
for (final Entry<UUID, DraftSession> entry : draftSessions.entrySet()) {
|
||||
if (!entry.getValue().init()) {
|
||||
logger.fatal("Unable to initialize client for playerId " + entry.getKey());
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package mage.server.game;
|
|||
|
||||
import mage.MageException;
|
||||
import mage.game.Game;
|
||||
import mage.util.ThreadUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import java.util.UUID;
|
||||
|
|
@ -30,7 +31,7 @@ public class GameWorker implements Callable<Boolean> {
|
|||
public Boolean call() {
|
||||
try {
|
||||
// play game
|
||||
Thread.currentThread().setName("GAME " + game.getId());
|
||||
Thread.currentThread().setName(ThreadUtils.THREAD_PREFIX_GAME + " " + game.getId());
|
||||
game.start(choosingPlayerId);
|
||||
|
||||
// save result and start next game or close finished table
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import mage.server.User;
|
|||
import mage.server.draft.DraftController;
|
||||
import mage.server.managers.TableManager;
|
||||
import mage.server.managers.ManagerFactory;
|
||||
import mage.util.ThreadUtils;
|
||||
import mage.view.ChatMessage.MessageColor;
|
||||
import mage.view.ChatMessage.MessageType;
|
||||
import mage.view.ChatMessage.SoundToPlay;
|
||||
|
|
@ -191,7 +192,7 @@ public class TournamentController {
|
|||
}
|
||||
|
||||
private synchronized void startTournament() {
|
||||
Thread.currentThread().setName("TOURNEY " + tableId);
|
||||
Thread.currentThread().setName(ThreadUtils.THREAD_PREFIX_TOURNEY + " " + tableId);
|
||||
for (final TournamentSession tournamentSession : tournamentSessions.values()) {
|
||||
if (!tournamentSession.init()) {
|
||||
logger.fatal("Unable to initialize client userId: " + tournamentSession.userId + " tournamentId " + tournament.getId());
|
||||
|
|
|
|||
|
|
@ -41,31 +41,31 @@ public class ThreadExecutorImpl implements ThreadExecutor {
|
|||
callExecutor = new CachedThreadPoolWithException();
|
||||
((ThreadPoolExecutor) callExecutor).setKeepAliveTime(60, TimeUnit.SECONDS);
|
||||
((ThreadPoolExecutor) callExecutor).allowCoreThreadTimeOut(true);
|
||||
((ThreadPoolExecutor) callExecutor).setThreadFactory(new XMageThreadFactory("CALL"));
|
||||
((ThreadPoolExecutor) callExecutor).setThreadFactory(new XMageThreadFactory(ThreadUtils.THREAD_PREFIX_CALL_REQUEST));
|
||||
|
||||
//gameExecutor = Executors.newFixedThreadPool(config.getMaxGameThreads());
|
||||
gameExecutor = new FixedThreadPoolWithException(config.getMaxGameThreads());
|
||||
((ThreadPoolExecutor) gameExecutor).setKeepAliveTime(60, TimeUnit.SECONDS);
|
||||
((ThreadPoolExecutor) gameExecutor).allowCoreThreadTimeOut(true);
|
||||
((ThreadPoolExecutor) gameExecutor).setThreadFactory(new XMageThreadFactory("GAME"));
|
||||
((ThreadPoolExecutor) gameExecutor).setThreadFactory(new XMageThreadFactory(ThreadUtils.THREAD_PREFIX_GAME));
|
||||
|
||||
//tourney = Executors.newFixedThreadPool(config.getMaxGameThreads() / GAMES_PER_TOURNEY_RATIO);
|
||||
tourneyExecutor = new FixedThreadPoolWithException(config.getMaxGameThreads() / GAMES_PER_TOURNEY_RATIO);
|
||||
((ThreadPoolExecutor) tourneyExecutor).setKeepAliveTime(60, TimeUnit.SECONDS);
|
||||
((ThreadPoolExecutor) tourneyExecutor).allowCoreThreadTimeOut(true);
|
||||
((ThreadPoolExecutor) tourneyExecutor).setThreadFactory(new XMageThreadFactory("TOURNEY"));
|
||||
((ThreadPoolExecutor) tourneyExecutor).setThreadFactory(new XMageThreadFactory(ThreadUtils.THREAD_PREFIX_TOURNEY));
|
||||
|
||||
timeoutExecutor = Executors.newScheduledThreadPool(4);
|
||||
((ThreadPoolExecutor) timeoutExecutor).setKeepAliveTime(60, TimeUnit.SECONDS);
|
||||
((ThreadPoolExecutor) timeoutExecutor).allowCoreThreadTimeOut(true);
|
||||
((ThreadPoolExecutor) timeoutExecutor).setThreadFactory(new XMageThreadFactory("XMAGE TIMEOUT"));
|
||||
((ThreadPoolExecutor) timeoutExecutor).setThreadFactory(new XMageThreadFactory(ThreadUtils.THREAD_PREFIX_TIMEOUT));
|
||||
|
||||
timeoutIdleExecutor = Executors.newScheduledThreadPool(4);
|
||||
((ThreadPoolExecutor) timeoutIdleExecutor).setKeepAliveTime(60, TimeUnit.SECONDS);
|
||||
((ThreadPoolExecutor) timeoutIdleExecutor).allowCoreThreadTimeOut(true);
|
||||
((ThreadPoolExecutor) timeoutIdleExecutor).setThreadFactory(new XMageThreadFactory("XMAGE TIMEOUT_IDLE"));
|
||||
((ThreadPoolExecutor) timeoutIdleExecutor).setThreadFactory(new XMageThreadFactory(ThreadUtils.THREAD_PREFIX_TIMEOUT_IDLE));
|
||||
|
||||
serverHealthExecutor = Executors.newSingleThreadScheduledExecutor(new XMageThreadFactory("HEALTH"));
|
||||
serverHealthExecutor = Executors.newSingleThreadScheduledExecutor(new XMageThreadFactory(ThreadUtils.THREAD_PREFIX_SERVICE_HEALTH));
|
||||
}
|
||||
|
||||
static class CachedThreadPoolWithException extends ThreadPoolExecutor {
|
||||
|
|
@ -157,7 +157,8 @@ class XMageThreadFactory implements ThreadFactory {
|
|||
@Override
|
||||
public Thread newThread(Runnable r) {
|
||||
Thread thread = new Thread(r);
|
||||
thread.setName(prefix + ' ' + thread.getThreadGroup().getName() + '-' + thread.getId());
|
||||
// default name, but threads can change it (example: on game or tourney start)
|
||||
thread.setName(prefix + " " + thread.getThreadGroup().getName() + "-" + thread.getId());
|
||||
return thread;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,23 @@ import java.util.concurrent.Future;
|
|||
*/
|
||||
public final class ThreadUtils {
|
||||
|
||||
// basic
|
||||
public final static String THREAD_PREFIX_GAME = "GAME";
|
||||
public final static String THREAD_PREFIX_AI_SIMULATION = "AI-SIM";
|
||||
public final static String THREAD_PREFIX_CALL_REQUEST = "CALL";
|
||||
public final static String THREAD_PREFIX_TOURNEY = "TOURNEY";
|
||||
public final static String THREAD_PREFIX_TOURNEY_DRAFT = "TOURNEY DRAFT";
|
||||
|
||||
// services
|
||||
public final static String THREAD_PREFIX_SERVICE_HEALTH = "XMAGE HEALTH";
|
||||
|
||||
// etc
|
||||
public final static String THREAD_PREFIX_TIMEOUT = "XMAGE TIMEOUT";
|
||||
public final static String THREAD_PREFIX_TIMEOUT_IDLE = "XMAGE TIMEOUT_IDLE";
|
||||
|
||||
|
||||
|
||||
|
||||
public static void sleep(int millis) {
|
||||
try {
|
||||
Thread.sleep(millis);
|
||||
|
|
@ -68,9 +85,12 @@ public final class ThreadUtils {
|
|||
|
||||
public static boolean isRunGameThread() {
|
||||
String name = Thread.currentThread().getName();
|
||||
if (name.startsWith("GAME ")) {
|
||||
if (name.startsWith(THREAD_PREFIX_GAME)) {
|
||||
// server game
|
||||
return true;
|
||||
} else if (name.startsWith(THREAD_PREFIX_AI_SIMULATION)) {
|
||||
// ai simulation
|
||||
return true;
|
||||
} else if (name.equals("main")) {
|
||||
// unit test
|
||||
return true;
|
||||
|
|
@ -81,7 +101,7 @@ public final class ThreadUtils {
|
|||
|
||||
public static void ensureRunInCallThread() {
|
||||
String name = Thread.currentThread().getName();
|
||||
if (!name.startsWith("CALL")) {
|
||||
if (!name.startsWith(THREAD_PREFIX_CALL_REQUEST)) {
|
||||
// how-to fix: something wrong in your code logic
|
||||
throw new IllegalArgumentException("Wrong code usage: client commands code must run in CALL threads, but used in " + name, new Throwable());
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue