-More timeouts tunning
This commit is contained in:
tonikelope 2019-10-14 10:47:55 +02:00
parent 5587e2079a
commit 5b2bca7e54
8 changed files with 79 additions and 40 deletions

View File

@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.tonikelope</groupId> <groupId>com.tonikelope</groupId>
<artifactId>MegaBasterd</artifactId> <artifactId>MegaBasterd</artifactId>
<version>6.66</version> <version>6.67</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<dependencies> <dependencies>
<dependency> <dependency>

View File

@ -23,6 +23,7 @@ import java.util.logging.Logger;
public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable { public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
public static final double SLOW_PROXY_PERC = 0.3; public static final double SLOW_PROXY_PERC = 0.3;
public static final int READ_TIMEOUT_RETRY = 3;
private static final Logger LOG = Logger.getLogger(ChunkDownloader.class.getName()); private static final Logger LOG = Logger.getLogger(ChunkDownloader.class.getName());
private final boolean FORCE_SMART_PROXY = false; //True for debugging SmartProxy private final boolean FORCE_SMART_PROXY = false; //True for debugging SmartProxy
private final int _id; private final int _id;
@ -112,7 +113,7 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
int http_error = 0, http_status = -1, conta_error = 0; int http_error = 0, http_status = -1, conta_error = 0;
boolean timeout = false, chunk_error = false, slow_proxy = false, turbo_mode = false; boolean chunk_error = false, slow_proxy = false, turbo_mode = false;
String worker_url = null; String worker_url = null;
@ -234,8 +235,6 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
chunk_error = true; chunk_error = true;
timeout = false;
slow_proxy = false; slow_proxy = false;
File tmp_chunk_file = null, chunk_file = null; File tmp_chunk_file = null, chunk_file = null;
@ -270,27 +269,44 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
int reads = 0; int reads = 0;
while (!_exit && !_download.isStopped() && !_download.getChunkmanager().isExit() && chunk_reads < chunk_size && (reads = is.read(buffer, 0, Math.min((int) (chunk_size - chunk_reads), buffer.length))) != -1) { if (!_exit && !_download.isStopped() && !_download.getChunkmanager().isExit()) {
tmp_chunk_file_os.write(buffer, 0, reads); int retry_timeout = 0;
chunk_reads += reads; do {
_download.getPartialProgress().add((long) reads); try {
_download.getProgress_meter().secureNotify(); if ((reads = is.read(buffer, 0, Math.min((int) (chunk_size - chunk_reads), buffer.length))) != -1) {
if (_download.isPaused() && !_download.isStopped()) { tmp_chunk_file_os.write(buffer, 0, reads);
_download.pause_worker(); chunk_reads += reads;
pause_init_time = System.currentTimeMillis(); _download.getPartialProgress().add((long) reads);
secureWait(); _download.getProgress_meter().secureNotify();
paused += System.currentTimeMillis() - pause_init_time; if (_download.isPaused() && !_download.isStopped()) {
} _download.pause_worker();
pause_init_time = System.currentTimeMillis();
secureWait();
paused += System.currentTimeMillis() - pause_init_time;
}
}
} catch (SocketTimeoutException timeout_exception) {
LOG.log(Level.WARNING, timeout_exception.getMessage());
retry_timeout++;
}
} while (!_exit && !_download.isStopped() && !_download.getChunkmanager().isExit() && chunk_reads < chunk_size && reads != -1 && retry_timeout <= READ_TIMEOUT_RETRY);
} }
@ -362,10 +378,6 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
} catch (IOException ex) { } catch (IOException ex) {
if (ex instanceof SocketTimeoutException) {
timeout = true;
}
LOG.log(Level.SEVERE, ex.getMessage()); LOG.log(Level.SEVERE, ex.getMessage());
} finally { } finally {
@ -385,7 +397,7 @@ public class ChunkDownloader implements Runnable, SecureSingleThreadNotifiable {
_download.getProgress_meter().secureNotify(); _download.getProgress_meter().secureNotify();
} }
if (!_exit && !_download.isStopped() && !timeout && (http_error != 509 || _current_smart_proxy != null) && http_error != 403 && http_error != 503) { if (!_exit && !_download.isStopped() && (http_error != 509 || _current_smart_proxy != null) && http_error != 403 && http_error != 503) {
_error_wait = true; _error_wait = true;

View File

@ -9,6 +9,7 @@ import java.io.IOException;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.Proxy; import java.net.Proxy;
import java.net.SocketTimeoutException;
import java.net.URL; import java.net.URL;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -22,6 +23,8 @@ public class ChunkDownloaderMono extends ChunkDownloader {
private static final Logger LOG = Logger.getLogger(ChunkDownloaderMono.class.getName()); private static final Logger LOG = Logger.getLogger(ChunkDownloaderMono.class.getName());
public static final int READ_TIMEOUT_RETRY = 3;
public ChunkDownloaderMono(Download download) { public ChunkDownloaderMono(Download download) {
super(1, download); super(1, download);
} }
@ -124,27 +127,38 @@ public class ChunkDownloaderMono extends ChunkDownloader {
if (!isExit() && !getDownload().isStopped() && cis != null) { if (!isExit() && !getDownload().isStopped() && cis != null) {
int reads = 0; int reads = 0, retry_timeout = 0;
while (!getDownload().isStopped() && chunk_reads < chunk_size && (reads = cis.read(buffer, 0, Math.min((int) (chunk_size - chunk_reads), buffer.length))) != -1) { do {
getDownload().getOutput_stream().write(buffer, 0, reads); try {
chunk_reads += reads; if ((reads = cis.read(buffer, 0, Math.min((int) (chunk_size - chunk_reads), buffer.length))) != -1) {
getDownload().getPartialProgress().add((long) reads); getDownload().getOutput_stream().write(buffer, 0, reads);
getDownload().getProgress_meter().secureNotify(); chunk_reads += reads;
if (getDownload().isPaused() && !getDownload().isStopped()) { getDownload().getPartialProgress().add((long) reads);
getDownload().pause_worker_mono(); getDownload().getProgress_meter().secureNotify();
secureWait(); if (getDownload().isPaused() && !getDownload().isStopped()) {
getDownload().pause_worker_mono();
secureWait();
}
}
} catch (SocketTimeoutException timeout_exception) {
LOG.log(Level.WARNING, timeout_exception.getMessage());
retry_timeout++;
} }
} } while (!getDownload().isStopped() && chunk_reads < chunk_size && reads != -1 && retry_timeout <= READ_TIMEOUT_RETRY);
if (chunk_reads == chunk_size) { if (chunk_reads == chunk_size) {

View File

@ -10,6 +10,7 @@ import java.io.RandomAccessFile;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.Proxy; import java.net.Proxy;
import java.net.SocketTimeoutException;
import java.net.URL; import java.net.URL;
import java.nio.channels.Channels; import java.nio.channels.Channels;
import java.util.logging.Level; import java.util.logging.Level;
@ -23,6 +24,7 @@ import javax.crypto.CipherInputStream;
public class ChunkUploader implements Runnable, SecureSingleThreadNotifiable { public class ChunkUploader implements Runnable, SecureSingleThreadNotifiable {
public static final int MAX_CHUNK_ERROR = 100; public static final int MAX_CHUNK_ERROR = 100;
public static final int READ_TIMEOUT_RETRY = 3;
private static final Logger LOG = Logger.getLogger(ChunkUploader.class.getName()); private static final Logger LOG = Logger.getLogger(ChunkUploader.class.getName());
private final int _id; private final int _id;
private final Upload _upload; private final Upload _upload;
@ -214,17 +216,28 @@ public class ChunkUploader implements Runnable, SecureSingleThreadNotifiable {
if (chunk_offset + chunk_size == _upload.getFile_size()) { if (chunk_offset + chunk_size == _upload.getFile_size()) {
LOG.log(Level.INFO, "{0} Worker {1} {2} waiting for completion handler...", new Object[]{Thread.currentThread().getName(), _id, _upload.getFile_name()}); LOG.log(Level.INFO, "{0} Worker {1} {2} waiting for completion handler...", new Object[]{Thread.currentThread().getName(), _id, _upload.getFile_name()});
String httpresponse; String httpresponse = null;
try (InputStream is = con.getInputStream(); ByteArrayOutputStream byte_res = new ByteArrayOutputStream()) { try (InputStream is = con.getInputStream(); ByteArrayOutputStream byte_res = new ByteArrayOutputStream()) {
while ((reads = is.read(buffer)) != -1) { int retry_timeout = 0;
byte_res.write(buffer, 0, reads); do {
try {
if ((reads = is.read(buffer)) != -1) {
byte_res.write(buffer, 0, reads);
}
} catch (SocketTimeoutException timeout_exception) {
LOG.log(Level.WARNING, timeout_exception.getMessage());
retry_timeout++;
}
} while (reads != -1 && retry_timeout <= READ_TIMEOUT_RETRY);
if (retry_timeout <= READ_TIMEOUT_RETRY) {
httpresponse = new String(byte_res.toByteArray(), "UTF-8");
} }
httpresponse = new String(byte_res.toByteArray(), "UTF-8");
} }
if (httpresponse.length() > 0) { if (httpresponse.length() > 0) {

View File

@ -53,7 +53,7 @@ import javax.swing.UIManager;
*/ */
public final class MainPanel { public final class MainPanel {
public static final String VERSION = "6.66"; public static final String VERSION = "6.67";
public static final int THROTTLE_SLICE_SIZE = 16 * 1024; public static final int THROTTLE_SLICE_SIZE = 16 * 1024;
public static final int DEFAULT_BYTE_BUFFER_SIZE = 16 * 1024; public static final int DEFAULT_BYTE_BUFFER_SIZE = 16 * 1024;
public static final int STREAMER_PORT = 1337; public static final int STREAMER_PORT = 1337;

View File

@ -10,9 +10,9 @@ public interface Transference {
int MIN_WORKERS = 1; int MIN_WORKERS = 1;
int MAX_WORKERS = 20; int MAX_WORKERS = 20;
int HTTP_CONNECT_TIMEOUT = 15000; int HTTP_CONNECT_TIMEOUT = 10000;
int HTTP_PROXY_CONNECT_TIMEOUT = 15000; int HTTP_PROXY_CONNECT_TIMEOUT = 15000;
int HTTP_READ_TIMEOUT = 15000; int HTTP_READ_TIMEOUT = 10000;
int HTTP_PROXY_READ_TIMEOUT = 15000; int HTTP_PROXY_READ_TIMEOUT = 15000;
int MAX_SIM_TRANSFERENCES = 20; int MAX_SIM_TRANSFERENCES = 20;
int SIM_TRANSFERENCES_DEFAULT = 4; int SIM_TRANSFERENCES_DEFAULT = 4;

View File

@ -26,7 +26,7 @@ import javax.swing.JComponent;
*/ */
public class Upload implements Transference, Runnable, SecureSingleThreadNotifiable { public class Upload implements Transference, Runnable, SecureSingleThreadNotifiable {
public static final int HTTP_READ_TIMEOUT = 30000; public static final int HTTP_READ_TIMEOUT = 60000;
public static final int WORKERS_DEFAULT = 6; public static final int WORKERS_DEFAULT = 6;
public static final int CHUNK_SIZE_MULTI = 1; //Otra cosa da errores al reanudar una subida (investigar) public static final int CHUNK_SIZE_MULTI = 1; //Otra cosa da errores al reanudar una subida (investigar)
private static final Logger LOG = Logger.getLogger(Upload.class.getName()); private static final Logger LOG = Logger.getLogger(Upload.class.getName());

Binary file not shown.

Before

Width:  |  Height:  |  Size: 219 KiB

After

Width:  |  Height:  |  Size: 217 KiB