Recover.java
package emissary.core.sentinel.protocols.actions;
import emissary.core.IMobileAgent;
import emissary.core.Namespace;
import emissary.core.sentinel.Sentinel;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* Attempts to recover the mobile agents by interrupting the thread
*/
public class Recover extends Action {
@Override
public void trigger(Map<String, Sentinel.Tracker> tracker) {
logger.warn("Sentinel detected locked agents, attempting recovery...");
List<String> agentNames = tracker.values().stream()
.map(Sentinel.Tracker::getAgentName)
.sorted()
.collect(Collectors.toList());
for (String agentName : agentNames) {
try {
IMobileAgent mobileAgent = (IMobileAgent) Namespace.lookup(agentName);
logger.warn("Sentinel attempting recovery for {}", agentName);
mobileAgent.interrupt();
} catch (Exception e) {
throw new IllegalStateException("Recovery unavailable", e);
}
}
}
}