kopia lustrzana https://github.com/onthegomap/planetiler
Attempt to fix IOException/GOAWAY happening within parseResults() (#818)
rodzic
e9a2bcc647
commit
d703b626ad
|
@ -41,6 +41,7 @@ public record PlanetilerConfig(
|
||||||
String httpUserAgent,
|
String httpUserAgent,
|
||||||
Duration httpTimeout,
|
Duration httpTimeout,
|
||||||
int httpRetries,
|
int httpRetries,
|
||||||
|
Duration httpRetryWait,
|
||||||
long downloadChunkSizeMB,
|
long downloadChunkSizeMB,
|
||||||
int downloadThreads,
|
int downloadThreads,
|
||||||
double downloadMaxBandwidth,
|
double downloadMaxBandwidth,
|
||||||
|
@ -166,6 +167,7 @@ public record PlanetilerConfig(
|
||||||
"Planetiler downloader (https://github.com/onthegomap/planetiler)"),
|
"Planetiler downloader (https://github.com/onthegomap/planetiler)"),
|
||||||
arguments.getDuration("http_timeout", "Timeout to use when downloading files over HTTP", "30s"),
|
arguments.getDuration("http_timeout", "Timeout to use when downloading files over HTTP", "30s"),
|
||||||
arguments.getInteger("http_retries", "Retries to use when downloading files over HTTP", 1),
|
arguments.getInteger("http_retries", "Retries to use when downloading files over HTTP", 1),
|
||||||
|
arguments.getDuration("http_retry_wait", "How long to wait before retrying HTTP request", "5s"),
|
||||||
arguments.getLong("download_chunk_size_mb", "Size of file chunks to download in parallel in megabytes", 100),
|
arguments.getLong("download_chunk_size_mb", "Size of file chunks to download in parallel in megabytes", 100),
|
||||||
arguments.getInteger("download_threads", "Number of parallel threads to use when downloading each file", 1),
|
arguments.getInteger("download_threads", "Number of parallel threads to use when downloading each file", 1),
|
||||||
Parse.bandwidth(arguments.getString("download_max_bandwidth",
|
Parse.bandwidth(arguments.getString("download_max_bandwidth",
|
||||||
|
|
|
@ -300,10 +300,15 @@ public class Wikidata {
|
||||||
.POST(HttpRequest.BodyPublishers.ofString(query, StandardCharsets.UTF_8))
|
.POST(HttpRequest.BodyPublishers.ofString(query, StandardCharsets.UTF_8))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
InputStream response = null;
|
LongObjectMap<Map<String, String>> result = null;
|
||||||
for (int i = 0; i <= config.httpRetries() && response == null; i++) {
|
for (int i = 0; i <= config.httpRetries() && result == null; i++) {
|
||||||
try {
|
try {
|
||||||
response = client.send(request);
|
var response = client.send(request);
|
||||||
|
if (response != null) {
|
||||||
|
try (var bis = new BufferedInputStream(response)) {
|
||||||
|
result = parseResults(bis);
|
||||||
|
}
|
||||||
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
boolean lastTry = i == config.httpRetries();
|
boolean lastTry = i == config.httpRetries();
|
||||||
if (!lastTry) {
|
if (!lastTry) {
|
||||||
|
@ -312,13 +317,12 @@ public class Wikidata {
|
||||||
LOGGER.error("sparql query failed, exhausted retries: " + e);
|
LOGGER.error("sparql query failed, exhausted retries: " + e);
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
Thread.sleep(config.httpRetryWait());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (response != null) {
|
if (result != null) {
|
||||||
try (var bis = new BufferedInputStream(response)) {
|
return result;
|
||||||
return parseResults(bis);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalStateException("No response or exception"); // should never happen
|
throw new IllegalStateException("No response or exception"); // should never happen
|
||||||
}
|
}
|
||||||
|
|
Ładowanie…
Reference in New Issue