1 package jalview.ws2.operations;
3 import static java.lang.String.format;
5 import java.io.IOException;
6 import java.util.HashMap;
9 import jalview.bin.Cache;
10 import jalview.util.MathUtils;
11 import jalview.ws2.WSJob;
12 import jalview.ws2.WSJobStatus;
14 public abstract class AbstractWorker implements WebServiceWorkerI
16 protected long uid = MathUtils.getUID();
22 protected WebServiceWorkerListenersList listeners = new WebServiceWorkerListenersList(this);
24 public void addListener(WebServiceWorkerListener listener)
26 listeners.addListener(listener);
30 private Map<Long, Integer> exceptionCount = new HashMap<>();
32 protected static final int MAX_RETRY = 5;
37 for (WSJob job : getJobs())
39 if (!job.getStatus().isDone() && !job.getStatus().isFailed())
41 Cache.log.debug(format("Polling job %s.", job));
44 getOperation().getWebService().updateProgress(job);
45 exceptionCount.remove(job.getUid());
46 } catch (IOException e)
48 Cache.log.error(format("Polling job %s failed.", job), e);
49 listeners.firePollException(job, e);
50 int count = exceptionCount.getOrDefault(job.getUid(),
54 job.setStatus(WSJobStatus.SERVER_ERROR);
55 Cache.log.warn(format(
56 "Attempts limit exceeded. Droping job %s.", job));
58 exceptionCount.put(job.getUid(), count);
59 } catch (OutOfMemoryError e)
61 job.setStatus(WSJobStatus.BROKEN);
63 format("Out of memory when retrieving job %s", job), e);
66 format("Job %s status is %s", job, job.getStatus()));
68 done &= job.getStatus().isDone() || job.getStatus().isFailed();