Skip to content

Commit 4cc5ceb

Browse files
committed
refactor stream handling and exception handling
1 parent 039ac20 commit 4cc5ceb

File tree

1 file changed

+29
-20
lines changed

1 file changed

+29
-20
lines changed

src/main/java/io/cryostat/reports/ReportsServiceImpl.java

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package io.cryostat.reports;
1717

1818
import java.io.BufferedInputStream;
19+
import java.io.IOException;
1920
import java.io.InputStream;
2021
import java.net.URI;
2122
import java.net.URISyntaxException;
@@ -86,40 +87,38 @@ public Uni<Map<String, AnalysisResult>> reportFor(ActiveRecording recording, Str
8687
logger.tracev(
8788
"inprocess reportFor active recording {0} {1}",
8889
recording.target.jvmId, recording.remoteId);
89-
return process(stream, filter);
90+
return process(stream, filter).invoke(safeClose(stream));
9091
} else {
9192
logger.tracev(
9293
"sidecar reportFor active recording {0} {1}",
9394
recording.target.jvmId, recording.remoteId);
94-
return fireRequest(stream, filter);
95+
return fireRequest(stream, filter).invoke(safeClose(stream));
9596
}
9697
}
9798

9899
@Override
99100
public Uni<Map<String, AnalysisResult>> reportFor(
100101
String jvmId, String filename, String filter) {
101-
InputStream stream;
102102
try {
103-
stream = helper.getArchivedRecordingStream(jvmId, filename);
104-
} catch (Exception e) {
105-
throw new ReportGenerationException(e);
106-
}
107-
if (!useSidecar()) {
108-
logger.tracev("inprocess reportFor archived recording {0} {1}", jvmId, filename);
109-
return process(stream, filter);
110-
} else if (usePresignedSidecar()) {
111-
logger.tracev(
112-
"sidecar reportFor presigned archived recording {0} {1}", jvmId, filename);
113-
try {
103+
if (!useSidecar()) {
104+
InputStream stream = helper.getArchivedRecordingStream(jvmId, filename);
105+
logger.tracev("inprocess reportFor archived recording {0} {1}", jvmId, filename);
106+
return process(stream, filter).invoke(safeClose(stream));
107+
} else if (usePresignedSidecar()) {
108+
logger.tracev(
109+
"sidecar reportFor presigned archived recording {0} {1}", jvmId, filename);
114110
var uri = getPresignedPath(jvmId, filename);
115111
return sidecar.generatePresigned(uri.getPath(), uri.getQuery(), filter);
116-
} catch (URISyntaxException e) {
117-
logger.error(e);
118-
throw new InternalServerErrorException(e);
112+
} else {
113+
InputStream stream = helper.getArchivedRecordingStream(jvmId, filename);
114+
logger.tracev("sidecar reportFor archived recording {0} {1}", jvmId, filename);
115+
return fireRequest(stream, filter).invoke(safeClose(stream));
119116
}
120-
} else {
121-
logger.tracev("sidecar reportFor archived recording {0} {1}", jvmId, filename);
122-
return fireRequest(stream, filter);
117+
} catch (URISyntaxException e) {
118+
logger.error(e);
119+
throw new InternalServerErrorException(e);
120+
} catch (Exception e) {
121+
throw new ReportGenerationException(e);
123122
}
124123
}
125124

@@ -193,6 +192,16 @@ private URI getPresignedPath(String jvmId, String filename) throws URISyntaxExce
193192
return URI.create(presigner.presignGetObject(presignRequest).url().toString()).normalize();
194193
}
195194

195+
private Runnable safeClose(InputStream stream) {
196+
return () -> {
197+
try {
198+
stream.close();
199+
} catch (IOException e) {
200+
logger.warn(e);
201+
}
202+
};
203+
}
204+
196205
public static class ReportGenerationException extends RuntimeException {
197206
public ReportGenerationException(Throwable cause) {
198207
super(cause);

0 commit comments

Comments
 (0)