Skip to content

Commit 07e9046

Browse files
committed
Improve MlModelServer
1 parent 2c82aae commit 07e9046

File tree

1 file changed

+31
-27
lines changed
  • x-pack/plugin/inference/qa/inference-service-tests/src/javaRestTest/java/org/elasticsearch/xpack/inference

1 file changed

+31
-27
lines changed

x-pack/plugin/inference/qa/inference-service-tests/src/javaRestTest/java/org/elasticsearch/xpack/inference/MlModelServer.java

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import java.io.InputStream;
1919
import java.io.OutputStream;
2020
import java.net.InetSocketAddress;
21-
import java.util.Arrays;
2221
import java.util.concurrent.ExecutorService;
2322
import java.util.concurrent.Executors;
2423

@@ -51,35 +50,40 @@ void close() {
5150
private void handle(HttpExchange exchange) throws IOException {
5251
String fileName = exchange.getRequestURI().getPath().substring(1);
5352
String range = exchange.getRequestHeaders().getFirst("Range");
54-
logger.info("Request: {} range={}", fileName, range);
55-
byte[] bytes;
53+
Integer rangeFrom = null;
54+
Integer rangeTo = null;
55+
if (range != null) {
56+
assert range.startsWith("bytes=");
57+
assert range.contains("-");
58+
rangeFrom = Integer.parseInt(range.substring("bytes=".length(), range.indexOf('-')));
59+
rangeTo = Integer.parseInt(range.substring(range.indexOf('-') + 1)) + 1;
60+
}
61+
logger.info("Request: {} range=[{},{})", fileName, rangeFrom, rangeTo);
5662
ClassLoader classloader = Thread.currentThread().getContextClassLoader();
5763
try (InputStream is = classloader.getResourceAsStream(fileName)) {
58-
bytes = is == null ? null : is.readAllBytes();
59-
}
60-
if (bytes == null) {
61-
logger.info("Response: {} 404", fileName);
62-
exchange.sendResponseHeaders(HttpStatus.SC_NOT_FOUND, 0);
63-
} else {
64-
Integer rangeFrom = null;
65-
Integer rangeTo = null;
66-
if (range != null) {
67-
assert range.startsWith("bytes=");
68-
assert range.contains("-");
69-
rangeFrom = Integer.parseInt(range.substring("bytes=".length(), range.indexOf('-')));
70-
rangeTo = Integer.parseInt(range.substring(range.indexOf('-') + 1)) + 1;
71-
}
72-
int httpStatus;
73-
if (range == null) {
74-
httpStatus = HttpStatus.SC_OK;
64+
if (is == null) {
65+
logger.info("Response: {} 404", fileName);
66+
exchange.sendResponseHeaders(HttpStatus.SC_NOT_FOUND, 0);
7567
} else {
76-
httpStatus = HttpStatus.SC_PARTIAL_CONTENT;
77-
bytes = Arrays.copyOfRange(bytes, rangeFrom, rangeTo);
78-
}
79-
logger.info("Response: {} {}", fileName, httpStatus);
80-
exchange.sendResponseHeaders(httpStatus, bytes.length);
81-
try (OutputStream os = exchange.getResponseBody()) {
82-
os.write(bytes);
68+
try (OutputStream os = exchange.getResponseBody()) {
69+
int httpStatus;
70+
int numBytes;
71+
if (range == null) {
72+
httpStatus = HttpStatus.SC_OK;
73+
numBytes = is.available();
74+
} else {
75+
httpStatus = HttpStatus.SC_PARTIAL_CONTENT;
76+
is.skipNBytes(rangeFrom);
77+
numBytes = rangeTo - rangeFrom;
78+
}
79+
logger.info("Response: {} {}", fileName, httpStatus);
80+
exchange.sendResponseHeaders(httpStatus, numBytes);
81+
while (numBytes > 0) {
82+
byte[] bytes = is.readNBytes(Math.min(1<<20, numBytes));
83+
os.write(bytes);
84+
numBytes -= bytes.length;
85+
}
86+
}
8387
}
8488
}
8589
}

0 commit comments

Comments
 (0)