|
16 | 16 | package io.cryostat.reports; |
17 | 17 |
|
18 | 18 | import java.io.BufferedInputStream; |
| 19 | +import java.io.IOException; |
19 | 20 | import java.io.InputStream; |
20 | 21 | import java.net.URI; |
21 | 22 | import java.net.URISyntaxException; |
@@ -86,40 +87,38 @@ public Uni<Map<String, AnalysisResult>> reportFor(ActiveRecording recording, Str |
86 | 87 | logger.tracev( |
87 | 88 | "inprocess reportFor active recording {0} {1}", |
88 | 89 | recording.target.jvmId, recording.remoteId); |
89 | | - return process(stream, filter); |
| 90 | + return process(stream, filter).invoke(safeClose(stream)); |
90 | 91 | } else { |
91 | 92 | logger.tracev( |
92 | 93 | "sidecar reportFor active recording {0} {1}", |
93 | 94 | recording.target.jvmId, recording.remoteId); |
94 | | - return fireRequest(stream, filter); |
| 95 | + return fireRequest(stream, filter).invoke(safeClose(stream)); |
95 | 96 | } |
96 | 97 | } |
97 | 98 |
|
98 | 99 | @Override |
99 | 100 | public Uni<Map<String, AnalysisResult>> reportFor( |
100 | 101 | String jvmId, String filename, String filter) { |
101 | | - InputStream stream; |
102 | 102 | 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); |
114 | 110 | var uri = getPresignedPath(jvmId, filename); |
115 | 111 | 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)); |
119 | 116 | } |
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); |
123 | 122 | } |
124 | 123 | } |
125 | 124 |
|
@@ -193,6 +192,16 @@ private URI getPresignedPath(String jvmId, String filename) throws URISyntaxExce |
193 | 192 | return URI.create(presigner.presignGetObject(presignRequest).url().toString()).normalize(); |
194 | 193 | } |
195 | 194 |
|
| 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 | + |
196 | 205 | public static class ReportGenerationException extends RuntimeException { |
197 | 206 | public ReportGenerationException(Throwable cause) { |
198 | 207 | super(cause); |
|
0 commit comments