Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,19 @@ public List<String> kickWhenDownServers() {
return Collections.unmodifiableList(kickWhenDownServers);
}

public Set<String> serversRequiringOnlineChecks() {
Set<String> servers = new LinkedHashSet<>();
if (pauseQueueIfTargetDown) {
for (QueueGroup group : queueGroupList) {
servers.addAll(group.targetServers());
}
}
if (kickWhenDown) {
servers.addAll(kickWhenDownServers);
}
return Collections.unmodifiableSet(servers);
}

public boolean ifTargetDownSendToQueue() {
return ifTargetDownSendToQueue;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,8 @@ default void scheduleTasks(QueueListenerShared queueListener) {
final QueueGroup defaultGroup = config.getDefaultGroup();
// Sends the position message and updates tab on an interval in chat
schedule(() -> {
boolean targetsOnline = defaultGroup.targetServers().stream().anyMatch(queueListener.getServerStatusManager().getOnlineServers()::contains);
boolean targetsOnline = !config.pauseQueueIfTargetDown()
|| defaultGroup.targetServers().stream().anyMatch(queueListener.getServerStatusManager().getOnlineServers()::contains);
Comment on lines 73 to +77
if (targetsOnline) {
for (QueueType type : config.getAllQueueTypes()) {
if (config.positionMessageChat()) {
Expand Down Expand Up @@ -109,9 +110,13 @@ default void scheduleTasks(QueueListenerShared queueListener) {
// Moves the queue when someone logs off the target server on an interval set in the config.yml
schedule(queueListener::moveQueue, config.queueMoveDelay(), config.queueMoveDelay(), TimeUnit.MILLISECONDS);

// Checks the status of all the servers
// Checks the status of servers used by enabled availability features
schedule(() -> {
List<String> servers = new ArrayList<>(config.kickWhenDownServers());
Set<String> servers = config.serversRequiringOnlineChecks();
queueListener.getServerStatusManager().retainServers(servers);
if (servers.isEmpty()) {
return;
}
CountDownLatch latch = new CountDownLatch(servers.size());
for (String server : servers) {
CompletableFuture.runAsync(() -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ public Set<String> getOnlineServers() {
.collect(Collectors.toSet());
}

public void retainServers(Set<String> servers) {
onlinePingCounts.keySet().removeIf(server -> !servers.contains(server));
}

// For testing purposes so we can assert there is no overflow risk
public int getOnlinePingCount(String server) {
return onlinePingCounts.getOrDefault(server, 0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,37 @@ void kickWhenDownServersDeduplicates() {
assertEquals(1, server1Count);
}

@Test
void skipsOnlineChecksWhenNoAvailabilityFeatureNeedsThem() {
Config config = new Config();
config.copyFrom(config);
config.setPauseQueueIfTargetDown(false);
config.setKickWhenDown(false);

assertTrue(config.serversRequiringOnlineChecks().isEmpty());
}

@Test
void checksTargetServersWhenQueuePausingIsEnabled() {
Config config = new Config();
config.copyFrom(config);
config.setPauseQueueIfTargetDown(true);
config.setKickWhenDown(false);

assertEquals(Set.of("main"), config.serversRequiringOnlineChecks());
}

@Test
void checksConfiguredServersWhenDownKickingIsEnabled() {
Config config = new Config();
config.copyFrom(config);
config.setPauseQueueIfTargetDown(false);
config.setKickWhenDown(true);
config.setRawKickWhenDownServers(List.of("main", "queue"));

assertEquals(Set.of("main", "queue"), config.serversRequiringOnlineChecks());
}

@Test
void queueTypesAreSortedByOrder() {
Config config = createConfigWithMultipleQueueTypes();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import net.pistonmaster.pistonqueue.shared.queue.ServerStatusManager;
import org.junit.jupiter.api.Test;

import java.util.Set;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

Expand Down Expand Up @@ -57,6 +59,22 @@ void offlineAfterOneTime() {
assertTrue(serverStatusManager.getOnlineServers().isEmpty());
}

@Test
void removesStatusForServersThatNoLongerNeedChecks() {
Config config = QueueTestUtils.createConfigWithSingleQueueType(5);
config.setMinOnlineChecks(1);

QueueTestUtils.TestQueuePlugin plugin = new QueueTestUtils.TestQueuePlugin(config);
ServerStatusManager serverStatusManager = new ServerStatusManager(plugin::getConfiguration);
serverStatusManager.online("kept");
serverStatusManager.online("removed");

serverStatusManager.retainServers(Set.of("kept"));

assertEquals(Set.of("kept"), serverStatusManager.getOnlineServers());
assertEquals(0, serverStatusManager.getOnlinePingCount("removed"));
}

@Test
void onlineWithZeroMinChecks() {
Config config = QueueTestUtils.createConfigWithSingleQueueType(5);
Expand Down
Loading