Skip to content

Commit 95398d2

Browse files
committed
Ref #28788: handle stopped app for failed requests
1 parent d570255 commit 95398d2

2 files changed

Lines changed: 20 additions & 12 deletions

File tree

src/main/java/eu/openanalytics/containerproxy/service/ProxyService.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -324,11 +324,7 @@ public void stopProxy(Proxy proxy, boolean async, boolean ignoreAccessControl) {
324324
}
325325
}
326326

327-
public void stopCrashedProxy(String proxyId) {
328-
Proxy proxy = getProxy(proxyId);
329-
if (proxy == null) {
330-
return;
331-
}
327+
public void stopCrashedProxy(Proxy proxy) {
332328
log.warn(String.format("Proxy crashed [user: %s] [spec: %s] [id: %s]", proxy.getUserId(), proxy.getSpec().getId(), proxy.getId()));
333329
stopProxy(proxy, true, true);
334330
}

src/main/java/eu/openanalytics/containerproxy/util/ProxyMappingManager.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
*/
2121
package eu.openanalytics.containerproxy.util;
2222

23+
import eu.openanalytics.containerproxy.model.runtime.Proxy;
24+
import eu.openanalytics.containerproxy.model.runtime.ProxyStatus;
2325
import eu.openanalytics.containerproxy.service.ProxyService;
2426
import eu.openanalytics.containerproxy.service.hearbeat.HeartbeatService;
2527
import io.undertow.io.Sender;
@@ -152,20 +154,30 @@ public void dispatchAsync(String proxyId, String mapping, HttpServletRequest req
152154
return false;
153155
}
154156
if (responseExchange.getStatusCode() == StatusCodes.SERVICE_UNAVAILABLE) {
155-
final String errorPage = "{\"status\":\"error\", \"message\":\"app_crashed\"}";
156-
responseExchange.getResponseHeaders().put(Headers.CONTENT_LENGTH, "" + errorPage.length());
157-
responseExchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "application/json");
158-
Sender sender = responseExchange.getResponseSender();
159-
sender.send(errorPage);
160-
161157
ProxyIdAttachment proxyIdAttachment = responseExchange.getAttachment(ATTACHMENT_KEY_PROXY_ID);
158+
Proxy proxy = null;
162159
if (proxyIdAttachment != null) {
163160
try {
164-
proxyService.stopCrashedProxy(proxyIdAttachment.proxyId);
161+
proxy = proxyService.getProxy(proxyIdAttachment.proxyId);
162+
if (proxy != null) {
163+
proxyService.stopCrashedProxy(proxy);
164+
}
165165
} catch (Throwable t) {
166166
// ignore in order to complete request
167167
}
168168
}
169+
170+
String errorPage;
171+
if (proxy != null && proxy.getStatus() != ProxyStatus.Stopped) {
172+
errorPage = "{\"status\":\"error\", \"message\":\"app_crashed\"}";
173+
} else {
174+
// in-progress request got terminated because the app has been stopped (not crashed)
175+
errorPage = "{\"status\":\"error\", \"message\":\"app_stopped_or_non_existent\"}";
176+
}
177+
responseExchange.getResponseHeaders().put(Headers.CONTENT_LENGTH, "" + errorPage.length());
178+
responseExchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "application/json");
179+
Sender sender = responseExchange.getResponseSender();
180+
sender.send(errorPage);
169181
return true;
170182
}
171183
return false;

0 commit comments

Comments
 (0)