/** {@inheritDoc} */ @Override public ComputeJobResultPolicy result(ComputeJobResult res, List<ComputeJobResult> received) { ses.setAttribute("attr7", 7); ses.setAttribute("attr8", 8); return super.result(res, received); }
/** {@inheritDoc} */ @Override public Map<? extends ComputeJob, ClusterNode> map(List<ClusterNode> subgrid, String arg) { ses.setAttribute("fail", true); return Collections.singletonMap(new ComputeJobAdapter(arg) { /** {@inheritDoc} */ @SuppressWarnings({"RedundantTypeArguments"}) @Override public Serializable execute() { boolean fail; try { fail = ses.<String, Boolean>waitForAttribute("fail", 0); } catch (InterruptedException e) { throw new IgniteException("Got interrupted while waiting for attribute to be set.", e); } if (fail) { ses.setAttribute("fail", false); throw new IgniteException("Job exception."); } // This job does not return any result. return Integer.parseInt(this.<String>argument(0)); } }, subgrid.get(0)); }
/** {@inheritDoc} */ @Override protected Collection<? extends ComputeJob> split(int gridSize, Object arg) { Collection<ComputeJob> jobs = new ArrayList<>(JOB_COUNT); for (int i = 0; i < JOB_COUNT; i++) { jobs.add(new ComputeJobAdapter(i) { @LoggerResource private IgniteLogger log; @Override public Serializable execute() { if (log.isInfoEnabled()) log.info("Executing job [index=" + argument(0) + ']'); ses.setAttribute("attr3", 3); ses.setAttribute("attr4", 4); return argument(0); } }); } ses.setAttribute("attr5", 5); ses.setAttribute("attr6", 6); return jobs; }
/** {@inheritDoc} */ @Override public Map<? extends ComputeJob, ClusterNode> map(List<ClusterNode> subgrid, Integer arg) { assert arg != null; assert arg > 1; Map<GridLoadTestJob, ClusterNode> map = new HashMap<>(subgrid.size()); Iterator<ClusterNode> iter = subgrid.iterator(); Collection<UUID> assigned = new ArrayList<>(subgrid.size()); for (int i = 0; i < arg; i++) { // Recycle iterator. if (!iter.hasNext()) iter = subgrid.iterator(); ClusterNode node = iter.next(); assigned.add(node.id()); map.put(new GridLoadTestJob(arg - 1), node); } ctx.setAttribute("nodes", assigned); return map; }
@Override public Serializable execute() { if (log.isInfoEnabled()) log.info("Executing job [index=" + argument(0) + ']'); ses.setAttribute("attr3", 3); ses.setAttribute("attr4", 4); return argument(0); } });
/** {@inheritDoc} */ @Override public Serializable execute() { Integer i = argument(0); int arg = i != null ? i : 0; ses.setAttribute("sendJob" + ctx.getJobId(), 1 + arg); return arg; } }
/** {@inheritDoc} */ @Override public Map<? extends ComputeJob, ClusterNode> map(List<ClusterNode> subgrid, Integer arg) { assert taskSes != null; assert arg != null; assert arg > 1; Map<SessionLoadTestJob, ClusterNode> map = new HashMap<>(subgrid.size()); Iterator<ClusterNode> iter = subgrid.iterator(); Random rnd = new Random(); params = new HashMap<>(arg); for (int i = 0; i < arg; i++) { // Recycle iterator. if (!iter.hasNext()) iter = subgrid.iterator(); String paramName = UUID.randomUUID().toString(); int paramVal = rnd.nextInt(); taskSes.setAttribute(paramName, paramVal); map.put(new SessionLoadTestJob(paramName), iter.next()); params.put(paramName, paramVal); if (log.isDebugEnabled()) log.debug("Set session attribute [name=" + paramName + ", value=" + paramVal + ']'); } return map; }
/** {@inheritDoc} */ @Override public Serializable execute() { assert taskSes != null; Object arg = argument(0); assert arg != null; Serializable ser = taskSes.getAttribute(arg); assert ser != null; int val = (Integer)ser + 1; // Generate garbage. for (int i = 0; i < 10; i++) taskSes.setAttribute(arg, i); // Set final value. taskSes.setAttribute(arg, val); if (log.isDebugEnabled()) log.debug("Set session attribute [name=" + arg + ", value=" + val + ']'); return val; } }
/** {@inheritDoc} */ @Override public ComputeJobResultPolicy result(ComputeJobResult result, List<ComputeJobResult> received) { if (result.getException() != null) throw result.getException(); if (received.size() == 1) { log.info("Got result from setting job: " + result); taskSes.setAttribute("testName", "testVal"); } else log.info("Got result from waiting job: " + result); return received.size() == SPLIT_COUNT ? ComputeJobResultPolicy.REDUCE : ComputeJobResultPolicy.WAIT; }
/** {@inheritDoc} */ @Override public Serializable execute() { assert taskSes != null; assert argument(0) != null; taskSes.setAttribute(TEST_ATTR_KEY, argument(0)); return argument(0); } }
/** {@inheritDoc} */ @Override public ComputeJobResultPolicy result(ComputeJobResult res, List<ComputeJobResult> received) { if (res.getException() != null) throw res.getException(); if (log.isInfoEnabled()) log.info("Set attribute 'testName'."); taskSes.setAttribute("testName", "testVal"); // Signal main process to wait for attribute. startSignal[taskNum].countDown(); if (received.size() == SPLIT_COUNT) { try { // Wait until future receive attribute. if (!stopSignal[taskNum].await(WAIT_TIME, TimeUnit.MILLISECONDS)) fail(); } catch (InterruptedException e) { if (log.isInfoEnabled()) log.info("Task got interrupted: " + e); return ComputeJobResultPolicy.REDUCE; } } return received.size() == SPLIT_COUNT ? ComputeJobResultPolicy.REDUCE : ComputeJobResultPolicy.WAIT; }
@SuppressWarnings({"RedundantTypeArguments"}) @Override public Serializable execute() { boolean fail; try { fail = ses.<String, Boolean>waitForAttribute("fail", 0); } catch (InterruptedException e) { throw new IgniteException("Got interrupted while waiting for attribute to be set.", e); } if (fail) { ses.setAttribute("fail", false); throw new IgniteException("Job exception."); } // This job does not return any result. return Integer.parseInt(this.<String>argument(0)); } }, subgrid.get(0));
/** {@inheritDoc} */ @Override public Serializable execute() { boolean fail; UUID locId = ignite.configuration().getNodeId(); try { fail = ses.<String, Boolean>waitForAttribute("fail", 0); } catch (InterruptedException e) { throw new IgniteException("Got interrupted while waiting for attribute to be set.", e); } if (fail) { ses.setAttribute("fail", false); assert nodeRef.get().id().equals(locId); throw new IgniteException("Job exception."); } assert !nodeRef.get().id().equals(locId); // This job does not return any result. return Integer.parseInt(this.<String>argument(0)); } }, subgrid.get(0));
/** {@inheritDoc} */ @Override public Serializable execute() { assert taskSes != null; try { boolean attr = taskSes.waitForAttribute(TEST_ATTR_KEY, SETS_ATTR_COUNT, 20000); assert attr : "Failed to wait for attribute value."; } catch (InterruptedException e) { throw new IgniteException("Got interrupted while waiting for attribute to be set.", e); } Integer res = taskSes.getAttribute(TEST_ATTR_KEY); assert res != null && res.equals(SETS_ATTR_COUNT) : "Unexpected result [res=" + res + ", expected=" + SETS_ATTR_COUNT + ']'; log.info("Session attribute order was correct for job [res=" + res + ", expected=" + SETS_ATTR_COUNT + ']'); taskSes.setAttribute(TEST_ATTR_KEY, SETS_ATTR_COUNT); return null; } }
@Override public Object execute() { assert taskSes != null; if (log.isInfoEnabled()) { log.info("Computing job [job=" + this + ", arg=" + argument(0) + ']'); log.info("Set attribute 'testName'."); } taskSes.setAttribute("testName", "testVal"); return 1; } });
@Override public Serializable execute() { assert taskSes != null; if (log.isInfoEnabled()) { log.info("Computing job [job=" + this + ", arg=" + argument(0) + ']'); log.info("Set attribute 'testName'."); } taskSes.setAttribute("testName", "testVal"); // Signal main process to wait for attribute. startSignal[taskNum].countDown(); try { // Wait until future receive attribute. if (!stopSignal[taskNum].await(WAIT_TIME, TimeUnit.MILLISECONDS)) fail(); } catch (InterruptedException e) { if (log.isInfoEnabled()) log.info("Job got interrupted [arg=" + argument(0) + ", e=" + e + ']'); return 0; } return 1; } });
@Override @SuppressWarnings({"UnconditionalWait"}) public Serializable execute() { assert taskSes != null; if (log.isInfoEnabled()) log.info("Computing job [job=" + this + ", arg=" + argument(0) + ']'); startSignal.countDown(); try { if (startSignal.await(WAIT_TIME, TimeUnit.MILLISECONDS) == false) fail(); GridTaskSessionAttributeTestListener lsnr = new GridTaskSessionAttributeTestListener(log); taskSes.addAttributeListener(lsnr, false); if (log.isInfoEnabled()) log.info("Set attribute 'testName'."); taskSes.setAttribute("testName", "testVal"); synchronized (lsnr) { lsnr.wait(WAIT_TIME); } return lsnr.getAttributes().isEmpty() ? 0 : 1; } catch (InterruptedException e) { throw new IgniteException("Failed to wait for listener due to interruption.", e); } } });
/** {@inheritDoc} */ @Override public Serializable execute() { assert taskSes != null; assert argument(0) != null; Serializable ser = taskSes.getAttribute(argument(0)); assert ser != null; int val = (Integer)ser + 1; if (log.isDebugEnabled()) log.debug("Executing session load job: " + val); // Generate garbage. for (int i = 0; i < 10; i++) taskSes.setAttribute(argument(0), i); // Set final value (+1 to original value). taskSes.setAttribute(argument(0), val); if (log.isDebugEnabled()) log.debug("Set session attribute [name=" + argument(0) + ", value=" + val + ']'); return val; } }
/** * @param num Number. * @throws InterruptedException if failed. * @throws IgniteCheckedException if failed. */ private void checkTask(int num) throws InterruptedException, IgniteCheckedException { Ignite ignite = G.ignite(getTestIgniteInstanceName()); ComputeTaskFuture<?> fut = executeAsync(ignite.compute(), GridTaskSessionTestTask.class, num); assert fut != null; try { // Wait until jobs begin execution. boolean await = startSignal[num].await(WAIT_TIME, TimeUnit.MILLISECONDS); assert await : "Jobs did not start."; info("Set attribute 'testName'."); fut.getTaskSession().setAttribute("testName", "testVal"); Object res = fut.get(); assert (Integer)res == SPLIT_COUNT : "Invalid result [num=" + num + ", fut=" + fut + ']'; } finally { // We must wait for the jobs to be sure that they have completed // their execution since they use static variable (shared for the tests). fut.get(); } }
/** {@inheritDoc} */ @Override public void onCollision(CollisionContext ctx) { Collection<CollisionJobContext> waitJobs = ctx.waitingJobs(); for (CollisionJobContext job : waitJobs) { IgniteUuid jobId = job.getJobContext().getJobId(); try { job.getTaskSession().setAttribute(jobId, "test-" + jobId); if (log.isInfoEnabled()) log.info("Set session attribute for job: " + jobId); } catch (IgniteException e) { log.error("Failed to set session attribute: " + job, e); } job.activate(); } } }