/** {@inheritDoc} */ @Override public Set<Long> call() throws IgniteCheckedException { assert ignite != null; if (log.isInfoEnabled()) log.info("Running GetAndIncrementJob on node: " + ignite.cluster().localNode().id()); IgniteAtomicSequence seq = ignite.atomicSequence(seqName, 0, true); assert seq != null; // Result set. Set<Long> resSet = new HashSet<>(); // Get sequence value and try to put it result set. for (int i = 0; i < retries; i++) { long val = seq.getAndIncrement(); assert !resSet.contains(val) : "Element already in set : " + val; resSet.add(val); } return resSet; }
/** {@inheritDoc} */ @Override public Serializable execute() { synchronized (mux) { execCnt++; } if (log.isInfoEnabled()) log.info("Executing job: " + jobCtx.getJobId()); long now = System.currentTimeMillis(); while (!isCancelled && now < thresholdTime) { synchronized (mux) { try { mux.wait(thresholdTime - now); } catch (InterruptedException ignored) { // No-op. } } now = System.currentTimeMillis(); } synchronized (mux) { return isCancelled ? 1 : 0; } }
/** {@inheritDoc} */ @Override public void spiStart(String gridName) throws IgniteSpiException { // Start SPI start stopwatch. startStopwatch(); // Ack start. if (log.isInfoEnabled()) log.info(startInfo()); }
/** {@inheritDoc} */ @Override public Collection<? extends ComputeJob> split(int gridSize, Serializable arg) { if (log.isInfoEnabled()) log.info("Splitting task [task=" + this + ", gridSize=" + gridSize + ", arg=" + arg + ']'); Collection<GridCancelTestJob> jobs = new ArrayList<>(SPLIT_COUNT); for (int i = 0; i < SPLIT_COUNT; i++) jobs.add(new GridCancelTestJob()); return jobs; }
/** {@inheritDoc} */ @Override public Object reduce(List<ComputeJobResult> results) { if (log.isInfoEnabled()) log.info("Aggregating job [job=" + this + ", results=" + results + ']'); int res = 0; for (ComputeJobResult result : results) { assert result != null; if (result.getData() != null) res += (Integer) result.getData(); } return res; }
/** {@inheritDoc} */ @Override public void start() throws IgniteCheckedException { IpcSharedMemoryNativeLoader.load(log); pid = IpcSharedMemoryUtils.pid(); if (pid == -1) throw new IpcEndpointBindException("Failed to get PID of the current process."); if (size <= 0) throw new IpcEndpointBindException("Space size should be positive: " + size); String tokDirPath = this.tokDirPath; if (F.isEmpty(tokDirPath)) throw new IpcEndpointBindException("Token directory path is empty."); tokDirPath = tokDirPath + '/' + locNodeId.toString() + '-' + IpcSharedMemoryUtils.pid(); tokDir = U.resolveWorkDirectory(tokDirPath, false); if (port <= 0 || port >= 0xffff) throw new IpcEndpointBindException("Port value is illegal: " + port); try { srvSock = new ServerSocket(); // Always bind to loopback. srvSock.bind(new InetSocketAddress("127.0.0.1", port)); } catch (IOException e) { // Although empty socket constructor never throws exception, close it just in case. U.closeQuiet(srvSock); throw new IpcEndpointBindException( "Failed to bind shared memory IPC endpoint (is port already " + "in use?): " + port, e); } gcWorker = new GcWorker(gridName, "ipc-shmem-gc", log); new IgniteThread(gcWorker).start(); if (log.isInfoEnabled()) log.info( "IPC shared memory server endpoint started [port=" + port + ", tokDir=" + tokDir.getAbsolutePath() + ']'); }
/** {@inheritDoc} */ @Override public Serializable execute() { if (log.isInfoEnabled()) log.info("Execute TestGridifyJob.execute(" + argument(0) + ')'); TestAopTarget target = new TestAopTarget(); try { if ("1".equals(argument(0))) return target.gridifyNonDefaultClass("10"); else if ("2".equals(argument(0))) return target.gridifyNonDefaultName("20"); else if ("3".equals(argument(0))) return target.gridifyNonDefaultClassResource("30"); else if ("4".equals(argument(0))) return target.gridifyNonDefaultNameResource("40"); } catch (TestGridifyException e) { throw new RuntimeException("Failed to execute target method.", e); } assert false : "Argument must be equals to \"0\" [gridifyArg=" + argument(0) + ']'; // Never reached. return null; }
/** {@inheritDoc} */ @Override public void cancel() { synchronized (mux) { isCancelled = true; cancelCnt++; mux.notifyAll(); } log.warning("Job cancelled: " + jobCtx.getJobId()); }
/** {@inheritDoc} */ @Override protected Object executeJob(int gridSize, String type) { log.info(">>> Starting new grid node [currGridSize=" + gridSize + ", arg=" + type + "]"); if (type == null) throw new IllegalArgumentException("Node type to start should be specified."); IgniteConfiguration cfg = getConfig(type); // Generate unique for this VM grid name. String gridName = cfg.getGridName() + " (" + UUID.randomUUID() + ")"; // Update grid name (required to be unique). cfg.setGridName(gridName); // Start new node in current VM. Ignite g = G.start(cfg); log.info( ">>> Grid started [nodeId=" + g.cluster().localNode().id() + ", name='" + g.name() + "']"); return true; }
/** {@inheritDoc} */ @Override public void spiStop() throws IgniteSpiException { // Ack stop. if (log.isInfoEnabled()) log.info(stopInfo()); }
/** * Log info message to loggers. * * @param msg Message text. * @param loggers Loggers. */ private void info(String msg, IgniteLogger... loggers) { for (IgniteLogger logger : loggers) if (logger != null && logger.isInfoEnabled()) logger.info(msg); }
/** {@inheritDoc} */ @SuppressWarnings("ErrorNotRethrown") @Override public IpcEndpoint accept() throws IgniteCheckedException { while (!Thread.currentThread().isInterrupted()) { Socket sock = null; boolean accepted = false; try { sock = srvSock.accept(); accepted = true; InputStream inputStream = sock.getInputStream(); ObjectInputStream in = new ObjectInputStream(inputStream); ObjectOutputStream out = new ObjectOutputStream(sock.getOutputStream()); IpcSharedMemorySpace inSpace = null; IpcSharedMemorySpace outSpace = null; boolean err = true; try { IpcSharedMemoryInitRequest req = (IpcSharedMemoryInitRequest) in.readObject(); if (log.isDebugEnabled()) log.debug("Processing request: " + req); IgnitePair<String> p = inOutToken(req.pid(), size); String file1 = p.get1(); String file2 = p.get2(); assert file1 != null; assert file2 != null; // Create tokens. new File(file1).createNewFile(); new File(file2).createNewFile(); if (log.isDebugEnabled()) log.debug("Created token files: " + p); inSpace = new IpcSharedMemorySpace(file1, req.pid(), pid, size, true, log); outSpace = new IpcSharedMemorySpace(file2, pid, req.pid(), size, false, log); IpcSharedMemoryClientEndpoint ret = new IpcSharedMemoryClientEndpoint(inSpace, outSpace, log); out.writeObject( new IpcSharedMemoryInitResponse( file2, outSpace.sharedMemoryId(), file1, inSpace.sharedMemoryId(), pid, size)); err = !in.readBoolean(); endpoints.add(ret); return ret; } catch (UnsatisfiedLinkError e) { throw IpcSharedMemoryUtils.linkError(e); } catch (IOException e) { if (log.isDebugEnabled()) log.debug( "Failed to process incoming connection " + "(was connection closed by another party):" + e.getMessage()); } catch (ClassNotFoundException e) { U.error(log, "Failed to process incoming connection.", e); } catch (ClassCastException e) { String msg = "Failed to process incoming connection (most probably, shared memory " + "rest endpoint has been configured by mistake)."; LT.warn(log, null, msg); sendErrorResponse(out, e); } catch (IpcOutOfSystemResourcesException e) { if (!omitOutOfResourcesWarn) LT.warn(log, null, OUT_OF_RESOURCES_MSG); sendErrorResponse(out, e); } catch (IgniteCheckedException e) { LT.error(log, e, "Failed to process incoming shared memory connection."); sendErrorResponse(out, e); } finally { // Exception has been thrown, need to free system resources. if (err) { if (inSpace != null) inSpace.forceClose(); // Safety. if (outSpace != null) outSpace.forceClose(); } } } catch (IOException e) { if (!Thread.currentThread().isInterrupted() && !accepted) throw new IgniteCheckedException("Failed to accept incoming connection.", e); if (!closed) LT.error( log, null, "Failed to process incoming shared memory connection: " + e.getMessage()); } finally { U.closeQuiet(sock); } } // while throw new IgniteInterruptedCheckedException("Socket accept was interrupted."); }