Switch back to tomcat and fix some warnings

This commit is contained in:
anthonyraymond 2018-06-30 20:49:53 +02:00
parent b5c78dd0d7
commit 78df5e9859
19 changed files with 895 additions and 874 deletions

12
pom.xml
View file

@ -21,7 +21,7 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
@ -37,7 +37,7 @@
<commons-codec.version>1.11</commons-codec.version>
<fluent-hc.version>4.5.5</fluent-hc.version>
<generex.version>1.0.2</generex.version>
<google.guava.version>25.0-jre</google.guava.version>
<google.guava.version>25.1-jre</google.guava.version>
<ttorrent-core.version>1.5</ttorrent-core.version>
<!-- TESTS -->
@ -68,20 +68,20 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<!--<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusion>-->
<exclusion>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<!--<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>

View file

@ -28,7 +28,7 @@ public class CoreEventListener {
@Async
@Order(Ordered.HIGHEST_PRECEDENCE)
@EventListener
void handleTorrentFileAddedForSeed(final TorrentFileAddedEvent event) throws IOException {
public void handleTorrentFileAddedForSeed(final TorrentFileAddedEvent event) throws IOException {
logger.debug("Event TorrentFileAddedEvent caught.");
}
@ -44,7 +44,7 @@ public class CoreEventListener {
@Async
@Order(Ordered.HIGHEST_PRECEDENCE)
@EventListener
void handleSeedSessionHasEnded(final GlobalSeedStoppedEvent event) {
public void handleSeedSessionHasEnded(final GlobalSeedStoppedEvent event) {
logger.debug("Event GlobalSeedStoppedEvent caught.");
// TODO : log that the seed session is over
}

View file

@ -5,6 +5,7 @@ import com.google.common.collect.Maps;
import org.araymond.joal.core.bandwith.BandwidthDispatcher;
import org.araymond.joal.core.bandwith.RandomSpeedProvider;
import org.araymond.joal.core.bandwith.Speed;
import org.araymond.joal.core.bandwith.SpeedChangedListener;
import org.araymond.joal.core.client.emulated.BitTorrentClient;
import org.araymond.joal.core.client.emulated.BitTorrentClientProvider;
import org.araymond.joal.core.config.AppConfiguration;
@ -93,9 +94,7 @@ public class SeedManager {
final RandomSpeedProvider randomSpeedProvider = new RandomSpeedProvider(appConfiguration);
this.bandwidthDispatcher = new BandwidthDispatcher(5000, randomSpeedProvider);
this.bandwidthDispatcher.setSpeedListener((speeds -> {
this.publisher.publishEvent(new SeedingSpeedsHasChangedEvent(speeds));
}));
this.bandwidthDispatcher.setSpeedListener(new SeedManagerSpeedChangeListener(this.publisher));
this.bandwidthDispatcher.start();
final AnnounceDataAccessor announceDataAccessor = new AnnounceDataAccessor(bitTorrentClient, bandwidthDispatcher, this.connectionHandler);
@ -235,4 +234,17 @@ public class SeedManager {
}
}
private static final class SeedManagerSpeedChangeListener implements SpeedChangedListener {
private final ApplicationEventPublisher publisher;
private SeedManagerSpeedChangeListener(final ApplicationEventPublisher publisher) {
this.publisher = publisher;
}
@Override
public void speedsHasChanged(final Map<InfoHash, Speed> speeds) {
this.publisher.publishEvent(new SeedingSpeedsHasChangedEvent(speeds));
}
}
}

View file

@ -49,13 +49,14 @@ public class BandwidthDispatcher implements BandwidthDispatcherFacade, Runnable
* And even if it happens, we returns 0 by default.
*/
public TorrentSeedStats getSeedStatForTorrent(final InfoHash infoHash) {
return this.torrentsSeedStats.getOrDefault(infoHash, new TorrentSeedStats());
final TorrentSeedStats torrentSeedStats = this.torrentsSeedStats.get(infoHash);
return torrentSeedStats == null ? new TorrentSeedStats() : torrentSeedStats;
}
public Map<InfoHash, Speed> getSpeedMap() {
try {
this.lock.readLock().lock();
return speedMap;
return Maps.newHashMap(speedMap);
} finally {
this.lock.readLock().unlock();
}
@ -97,7 +98,8 @@ public class BandwidthDispatcher implements BandwidthDispatcherFacade, Runnable
this.lock.readLock().unlock();
for (final Map.Entry<InfoHash, TorrentSeedStats> entry : entrySet) {
final long speedInBytesPerSecond = this.speedMap.getOrDefault(entry.getKey(), new Speed(0)).getBytesPerSeconds();
final Speed speed = this.speedMap.get(entry.getKey());
final long speedInBytesPerSecond = speed == null ? 0: speed.getBytesPerSeconds(); // avoid Map#getOrDefault as it will trigger a lot of Speed object instantiation for nothing.
// Divide by 1000 because of the thread pause interval being in milliseconds
// The multiplication HAS to be done before the division, otherwise we're going to have trailing zeroes
entry.getValue().addUploaded((speedInBytesPerSecond * this.threadPauseInterval) / 1000);

View file

@ -132,7 +132,7 @@ public class BitTorrentClient {
public List<Map.Entry<String, String>> createRequestHeaders() {
final List<Map.Entry<String, String>> headers = new ArrayList<>(this.headers.size() + 1);
this.headers.stream().forEachOrdered(header -> {
for (final Map.Entry<String, String> header : this.headers) {
final String name = header.getKey();
final String value = header.getValue()
.replaceAll("\\{java}", System.getProperty("java.version"))
@ -146,7 +146,7 @@ public class BitTorrentClient {
}
headers.add(new AbstractMap.SimpleImmutableEntry<>(name, value));
});
}
return headers;
}

View file

@ -14,7 +14,6 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Comparator;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;

View file

@ -2,6 +2,7 @@ package org.araymond.joal.core.client.emulated.generator.peerid.generation;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Charsets;
import com.google.common.base.Objects;
import org.apache.commons.lang3.StringUtils;
import org.araymond.joal.core.client.emulated.TorrentClientConfigIntegrityException;
@ -60,7 +61,7 @@ public class RandomPoolWithChecksumPeerIdAlgorithm implements PeerIdAlgorithm {
@VisibleForTesting
byte[] createSecureRandomSeed() {
return Instant.now().toString().getBytes();
return Instant.now().toString().getBytes(Charsets.UTF_8);
}
private Integer getRandomIntBetween10And50() {

View file

@ -62,7 +62,7 @@ public class TorrentFileProvider extends FileAlterationListenerAdaptor {
}
this.archiveFolder = joalFoldersPath.getTorrentArchivedPath();
this.torrentFiles = Collections.synchronizedMap(new HashMap<File, MockedTorrent>());
this.torrentFiles = Collections.synchronizedMap(new HashMap<>());
this.watcher = new TorrentFileWatcher(this, torrentFolder);
this.torrentFileChangeListener = new HashSet<>();
}

View file

@ -69,7 +69,7 @@ public class Client implements TorrentFileChangeAware, ClientFacade {
this.thread = new Thread(() -> {
while (!this.stop) {
final List<AnnounceRequest> availables = this.delayQueue.getAvailables();
availables.forEach(req -> {
for (final AnnounceRequest req : availables) {
this.announcerExecutor.execute(req);
try {
this.lock.writeLock().lock();
@ -78,7 +78,7 @@ public class Client implements TorrentFileChangeAware, ClientFacade {
} finally {
this.lock.writeLock().unlock();
}
});
}
try {
Thread.sleep(1000);

View file

@ -1,12 +1,14 @@
package org.araymond.joal.core.ttorrent.client;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Charsets;
import com.google.common.collect.Lists;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.*;
import java.nio.channels.ServerSocketChannel;
@ -76,8 +78,13 @@ public class ConnectionHandler {
InetAddress readIpFromProvider(final String providerUrl) throws IOException {
final URLConnection urlConnection = new URL(providerUrl).openConnection();
urlConnection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36");
try (final BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()))) {
try (final BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), Charsets.UTF_8))) {
return InetAddress.getByName(in.readLine());
}finally {
// Ensure all streams associated with http connection are closed
final InputStream err = ((HttpURLConnection) urlConnection).getErrorStream();
try { if (err != null) err.close(); }
catch (final IOException ignored) {}
}
}

View file

@ -5,7 +5,6 @@ import org.araymond.joal.core.events.announce.FailedToAnnounceEvent;
import org.araymond.joal.core.events.announce.SuccessfullyAnnounceEvent;
import org.araymond.joal.core.events.announce.TooManyAnnouncesFailedEvent;
import org.araymond.joal.core.events.announce.WillAnnounceEvent;
import org.araymond.joal.core.torrent.torrent.InfoHash;
import org.araymond.joal.core.ttorrent.client.announcer.Announcer;
import org.araymond.joal.core.ttorrent.client.announcer.exceptions.TooMuchAnnouncesFailedInARawException;
import org.araymond.joal.core.ttorrent.client.announcer.request.SuccessAnnounceResponse;
@ -75,7 +74,6 @@ public class AnnounceEventPublisher implements AnnounceResponseHandlerChainEleme
if(logger.isDebugEnabled()) {
logger.debug("Publish FailedToAnnounceEvent event for {}.", announcer.getTorrentInfoHash().humanReadableValue());
}
final InfoHash infoHash = announcer.getTorrentInfoHash();
this.eventPublisher.publishEvent(new FailedToAnnounceEvent(announcer, RequestEvent.STOPPED, throwable.getMessage()));
}

View file

@ -80,7 +80,9 @@ public class TrackerClient {
host += ":" + announceUri.getPort();
}
request.addHeader("Host", host);
headers.forEach(entry -> request.addHeader(entry.getKey(), entry.getValue()));
for (final Map.Entry<String, String> entry : headers) {
request.addHeader(entry.getKey(), entry.getValue());
}
final Response response;
try {

View file

@ -6,7 +6,7 @@ import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.simp.stomp.StompCommand;
import org.springframework.messaging.simp.stomp.StompHeaderAccessor;
import org.springframework.messaging.support.ChannelInterceptorAdapter;
import org.springframework.messaging.support.ChannelInterceptor;
import org.springframework.messaging.support.MessageHeaderAccessor;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
@ -19,7 +19,7 @@ import javax.inject.Inject;
*/
@ConditionalOnWebUi
@Component
public class AuthChannelInterceptorAdapter extends ChannelInterceptorAdapter {
public class AuthChannelInterceptorAdapter implements ChannelInterceptor {
static final String USERNAME_HEADER = "X-Joal-Username";
static final String TOKEN_HEADER = "X-Joal-Auth-Token";

View file

@ -12,7 +12,7 @@ public class SeedingSpeedHasChangedPayload implements MessagePayload {
public SeedingSpeedHasChangedPayload(final SeedingSpeedsHasChangedEvent event) {
this.speeds = event.getSpeeds().entrySet().stream()
.map(entry -> new SpeedPayload(entry.getKey(), Long.valueOf(entry.getValue().getBytesPerSeconds())))
.map(entry -> new SpeedPayload(entry.getKey(), entry.getValue().getBytesPerSeconds()))
.collect(Collectors.toList());
}

View file

@ -34,7 +34,7 @@ public class WebAnnounceEventListener extends WebEventListener {
@Order(Ordered.LOWEST_PRECEDENCE)
@EventListener
void failedToAnnounce(final FailedToAnnounceEvent event) {
public void failedToAnnounce(final FailedToAnnounceEvent event) {
logger.debug("Send FailedToAnnouncePayload to clients.");
this.messagingTemplate.convertAndSend("/announce", new FailedToAnnouncePayload(event));
@ -42,7 +42,7 @@ public class WebAnnounceEventListener extends WebEventListener {
@Order(Ordered.LOWEST_PRECEDENCE)
@EventListener
void successfullyAnnounce(final SuccessfullyAnnounceEvent event) {
public void successfullyAnnounce(final SuccessfullyAnnounceEvent event) {
logger.debug("Send SuccessfullyAnnouncePayload to clients.");
this.messagingTemplate.convertAndSend("/announce", new SuccessfullyAnnouncePayload(event));
@ -50,7 +50,7 @@ public class WebAnnounceEventListener extends WebEventListener {
@Order(Ordered.LOWEST_PRECEDENCE)
@EventListener
void tooManyAnnouncesFailed(final TooManyAnnouncesFailedEvent event) {
public void tooManyAnnouncesFailed(final TooManyAnnouncesFailedEvent event) {
logger.debug("Send TooManyAnnouncesFailedPayload to clients.");
this.messagingTemplate.convertAndSend("/announce", new TooManyAnnouncesFailedPayload(event));
@ -58,7 +58,7 @@ public class WebAnnounceEventListener extends WebEventListener {
@Order(Ordered.LOWEST_PRECEDENCE)
@EventListener
void willAnnounce(final WillAnnounceEvent event) {
public void willAnnounce(final WillAnnounceEvent event) {
logger.debug("Send WillAnnouncePayload to clients.");
this.messagingTemplate.convertAndSend("/announce", new WillAnnouncePayload(event));

View file

@ -32,7 +32,7 @@ public class WebConfigEventListener extends WebEventListener {
@Order(Ordered.LOWEST_PRECEDENCE)
@EventListener
void configHasBeenLoaded(final ConfigHasBeenLoadedEvent event) {
public void configHasBeenLoaded(final ConfigHasBeenLoadedEvent event) {
logger.debug("Send ConfigHasBeenLoadedPayload to clients.");
this.messagingTemplate.convertAndSend("/config", new ConfigHasBeenLoadedPayload(event));
@ -40,7 +40,7 @@ public class WebConfigEventListener extends WebEventListener {
@Order(Ordered.LOWEST_PRECEDENCE)
@EventListener
void configIsInDirtyState(final ConfigurationIsInDirtyStateEvent event) {
public void configIsInDirtyState(final ConfigurationIsInDirtyStateEvent event) {
logger.debug("Send ConfigIsInDirtyStatePayload to clients.");
this.messagingTemplate.convertAndSend("/config", new ConfigIsInDirtyStatePayload(event));
@ -48,7 +48,7 @@ public class WebConfigEventListener extends WebEventListener {
@Order(Ordered.LOWEST_PRECEDENCE)
@EventListener
void clientFilesDiscovered(final ListOfClientFilesEvent event) {
public void clientFilesDiscovered(final ListOfClientFilesEvent event) {
logger.debug("Send ListOfClientFilesPayload to clients.");
this.messagingTemplate.convertAndSend("/config", new ListOfClientFilesPayload(event));

View file

@ -31,7 +31,7 @@ public class WebGlobalEventListener extends WebEventListener {
@Order(Ordered.LOWEST_PRECEDENCE)
@EventListener
void globalSeedStarted(final GlobalSeedStartedEvent event) {
public void globalSeedStarted(final GlobalSeedStartedEvent event) {
logger.debug("Send GlobalSeedStartedPayload to clients.");
final String client = event.getBitTorrentClient().getHeaders().stream()
@ -45,7 +45,7 @@ public class WebGlobalEventListener extends WebEventListener {
@Order(Ordered.LOWEST_PRECEDENCE)
@EventListener
void globalSeedStopped(@SuppressWarnings("unused") final GlobalSeedStoppedEvent event) {
public void globalSeedStopped(@SuppressWarnings("unused") final GlobalSeedStoppedEvent event) {
logger.debug("Send GlobalSeedStoppedPayload to clients.");
this.messagingTemplate.convertAndSend("/global", new GlobalSeedStoppedPayload());

View file

@ -28,7 +28,7 @@ public class WebSpeedEventListener extends WebEventListener {
@Order(Ordered.LOWEST_PRECEDENCE)
@EventListener
void failedToAnnounce(final SeedingSpeedsHasChangedEvent event) {
public void failedToAnnounce(final SeedingSpeedsHasChangedEvent event) {
logger.debug("Send SeedingSpeedHasChangedPayload to clients.");
this.messagingTemplate.convertAndSend("/speed", new SeedingSpeedHasChangedPayload(event));

View file

@ -32,7 +32,7 @@ public class WebTorrentFileEventListener extends WebEventListener {
@Order(Ordered.LOWEST_PRECEDENCE)
@EventListener
void torrentFileAdded(final TorrentFileAddedEvent event) {
public void torrentFileAdded(final TorrentFileAddedEvent event) {
logger.debug("Send TorrentFileAddedPayload to clients.");
this.messagingTemplate.convertAndSend("/torrents", new TorrentFileAddedPayload(event));
@ -40,7 +40,7 @@ public class WebTorrentFileEventListener extends WebEventListener {
@Order(Ordered.LOWEST_PRECEDENCE)
@EventListener
void torrentFileDeleted(final TorrentFileDeletedEvent event) {
public void torrentFileDeleted(final TorrentFileDeletedEvent event) {
logger.debug("Send TorrentFileDeletedPayload to clients.");
this.messagingTemplate.convertAndSend("/torrents", new TorrentFileDeletedPayload(event));
@ -48,7 +48,7 @@ public class WebTorrentFileEventListener extends WebEventListener {
@Order(Ordered.LOWEST_PRECEDENCE)
@EventListener
void failedToAddTorrentFile(final FailedToAddTorrentFileEvent event) {
public void failedToAddTorrentFile(final FailedToAddTorrentFileEvent event) {
logger.debug("Send FailedToAddTorrentFilePayload to clients.");
this.messagingTemplate.convertAndSend("/torrents", new FailedToAddTorrentFilePayload(event));