JPPF Issue Tracker
JPPF (jppf)
October 13, 2019
icon_milestone.png 12:06 JPPF 6.0.3
A new milestone has been reached
October 08, 2019
icon_build.png 10:00 JPPF 6.1.3
New version released
bug_report_tiny.png 07:09  Bug report JPPF-606 - ClassNotFoundException when submitting a Callable to an ExecutorService from a JPPF task
lolocohen : Issue closed
bug_report_tiny.png 04:33  Bug report JPPF-606 - ClassNotFoundException when submitting a Callable to an ExecutorService from a JPPF task
lolocohen : Issue created
When submitting a Callable to an ExecutorService from a JPPF task, where the Callable requires a class that has not yet been loaded by the task, I get the following exception:
java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: test/MyTask$MyClass
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:192)
at test.MyTask.run(MyTask.java:13)
at org.jppf.execute.NodeTaskWrapper.run(NodeTaskWrapper.java:191)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NoClassDefFoundError: test/MyTask$MyClass
at test.MyTask.lambda$0(MyTask.java:12)
... 4 more
Caused by: java.lang.ClassNotFoundException: Could not load class 'test.MyTask$MyClass'
at org.jppf.classloader.AbstractJPPFClassLoader.findClass(AbstractJPPFClassLoader.java:156)
at org.jppf.classloader.AbstractJPPFClassLoader.findClass(AbstractJPPFClassLoader.java:111)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at org.jppf.classloader.AbstractJPPFClassLoader.loadClass(AbstractJPPFClassLoader.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 5 more
When invoking Callable.call() directly, instead of submitting the Callable via an executor, then no error occurs
September 25, 2019
task_tiny.png 06:47  Task JPPF-605 - Investigate the performance of the monitoring APIs and administration console
lolocohen : Issue created
We propose to test the admin console and the underlying grid topology and job monitoring APIs it is based in order to find eventual performance issues and fix them. We shall perform stress and performance tests, along with profiling sessions and take action based on the findings.
September 22, 2019
icon_build.png 14:00 JPPF 6.1.2
New version released
icon_build.png 14:00 JPPF 6.0.4
New version released
September 17, 2019
enhancement_tiny.png 07:32  Enhancement JPPF-604 - Various performance improvements
lolocohen : Issue closed
September 15, 2019
enhancement_tiny.png 07:12  Enhancement JPPF-604 - Various performance improvements
lolocohen : Issue created
We have noted several areas that can be improved preformance-wise, including:

* as shown by profiling drivers and nodes, polling of the default [https://www.jppf.org/doc/6.0/index.php?title=Monitoring_data_providers monitoring data provider] incurs an excessive CPU usage due to the use of com.sun.management.OperatingSystemMXBean for system and process CPU usage
* computation of the persistence identifier for the load-balancer state of each connection is also time-consuming, due to using methods for the discovery of the system's network interfaces and IP addresses. This computation is performed unconditionally, but can be avoided when load-balancer persistence si disabled
* the class [https://github.com/jppf-grid/JPPF/blob/master/common/src/java/org/jppf/utils/NetworkUtils.java NetworkUtils], which discovers the local system's network interfaces and IP addresses, can be improved by caching the IP addresses of the system, and discovering them once and for all at class loading time (static initializer)
September 11, 2019
icon_milestone.png 15:23 JPPF 6.1.1
A new milestone has been reached
September 09, 2019
bug_report_tiny.png 07:14  Bug report JPPF-603 - Slave nodes leak
lolocohen : Issue closed
bug_report_tiny.png 06:56  Bug report JPPF-603 - Slave nodes leak
lolocohen : Issue created
When a driver is restarted (via JMX), for each master nodes attached to it, the slave nodes are not terminated. We end up with slave nodes that are no longer attached to a master node.
September 05, 2019
icon_milestone.png 02:43 JPPF 5.0
A new milestone has been reached
August 24, 2019
bug_report_tiny.png 23:25  Bug report JPPF-602 - AbstractExecutionManager uses the wrong configuration to initialize
lolocohen : Issue closed
feature_request_tiny.png 21:49  Feature request JPPF-600 - DSL for complex job selectors
lolocohen : Issue closed
August 23, 2019
bug_report_tiny.png 01:27  Bug report JPPF-602 - AbstractExecutionManager uses the wrong configuration to initialize
lolocohen : Issue created
From [https://www.jppf.org/forums/index.php/topic,8063.0.html this forums thread].

The constrcutor for org.jppf.execute.AbstractExecutionManager is as follows:
public AbstractExecutionManager(final JPPFProperty nbThreadsProperty) {
taskNotificationDispatcher = new TaskExecutionDispatcher(getClass().getClassLoader());
int poolSize = JPPFConfiguration.get(nbThreadsProperty);
if (poolSize <= 0) poolSize = Runtime.getRuntime().availableProcessors();
JPPFConfiguration.set(nbThreadsProperty, poolSize);
log.info("running " + poolSize + " processing thread" + (poolSize > 1 ? "s" : ""));
threadManager = createThreadManager(poolSize);
}
The problem here is in the statement "poolSize = JPPFConfiguration.get(nbThreadsProperty);", which uses the global configuration instead of the config for the JPPF component (client or node) which initializes the execution manger.

Instead, the constructor should have the following signature:
public AbstractExecutionManager(TypedProperties config, final JPPFProperty nbThreadsProperty) { ... }
August 21, 2019
enhancement_tiny.png 07:03  Enhancement JPPF-601 - Add a client API to list the queued jobs in a JPPF client
lolocohen : Issue closed
August 18, 2019
enhancement_tiny.png 06:49  Enhancement JPPF-601 - Add a client API to list the queued jobs in a JPPF client
lolocohen : Issue created
We propose to add an API to obtain information about the jobs queued in a JPPFClient instance, for instance:
public class JPPFClient extends AbstractGenericClient {
// get the list of currently queued jobs
public List getQueuedJobs();

// get a list of currently queued jobs, filtered by a JobSelector
public List getQueuedJobs(JobSelector selector);

// get the current number of queued jobs
public int getQueuedJobsCount();

// get the current number of jobs that satisfy a job selector
public int getQueuedJobsCount(JobSelector selector);
}
August 15, 2019
feature_request_tiny.png 08:03  Feature request JPPF-600 - DSL for complex job selectors
lolocohen : Issue created
We propose to implement a DSL and asociated API for expressing job selectors in a way similar to what we have for [https://www.jppf.org/doc/6.2/index.php?title=Execution_Policies execution policies]. This will significantly improve the expressiveness of job selectors, without having to resort to [https://www.jppf.org/doc/6.2/index.php?title=Server_management#Scripted_job_selector scripted job selectors] for complex selection functions.

This DSL would include a number of predicates and operators:
* boolean predicates: and, or, xor, not
* comparison operators for Comparable metadata values: ==, !=, <, <=, >, >=, between (including or excluding upper and lower bounds)
* contains, one of, regex matching
* any other predicate that we migth find useful or convenient
August 11, 2019
task_tiny.png 10:17  Task JPPF-598 - Fix vulnerabilities found in security scans
lolocohen : Issue closed
task_tiny.png 10:16  Task JPPF-592 - Security scans
lolocohen : Issue closed
enhancement_tiny.png 09:17  Enhancement JPPF-599 - Add job persistence capabilities to docker swarm and kubernetes deployments
lolocohen : Issue created
The current version of the dockerized deployment does not include the ability to persist jobs in the driver. We propose to add this feature to our docker swarm and k8s deployments.
July 31, 2019
task_tiny.png 06:46  Task JPPF-598 - Fix vulnerabilities found in security scans
lolocohen : Issue created
The attached dependency-check report lists a number of vulnerabilities in the PPF dependencies. So far, all vulnerabilities are found in the web admin console and tied to wicket. We will need to upgrade the version of Apache Wicket to 8.x (currently 7.4.0), which was overdue anyway
July 28, 2019
enhancement_tiny.png 09:09  Enhancement JPPF-587 - Ability to create JPPFSchedule instances using java.time.* APIs
lolocohen : Issue closed
July 27, 2019
bug_report_tiny.png 10:11  Bug report JPPF-597 - JPPF serialization fails with java.time.* classes
lolocohen : Issue closed
bug_report_tiny.png 08:00  Bug report JPPF-597 - JPPF serialization fails with java.time.* classes
lolocohen : Issue created
Using JPPF serialization (org.jppf.serialization.DefaultJPPFSerialization) to serialize/deserialize instances of classes in java.time.* packages results in exceptions like the following:
java.io.IOException
at org.jppf.serialization.JPPFObjectInputStream.readObjectOverride(JPPFObjectInputStream.java:96)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:425)
at org.jppf.serialization.DefaultJPPFSerialization.deserialize(DefaultJPPFSerialization.java:81)
at test.time.DateTimeSerialization.copyObject(DateTimeSerialization.java:81)
at test.time.DateTimeSerialization.main(DateTimeSerialization.java:55)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jppf.serialization.Deserializer.readFields(Deserializer.java:180)
at org.jppf.serialization.Deserializer.readObject(Deserializer.java:142)
at org.jppf.serialization.Deserializer.readObject(Deserializer.java:112)
at org.jppf.serialization.JPPFObjectInputStream.readObjectOverride(JPPFObjectInputStream.java:92)
... 4 more
Caused by: java.io.InvalidObjectException: Deserialization via serialization delegate
at java.time.LocalDate.readObject(LocalDate.java:2066)
... 12 more
July 23, 2019
icon_milestone.png 17:28 JPPF 5.2.10
A new milestone has been reached
July 19, 2019
icon_milestone.png 02:42 JPPF 6.1
A new milestone has been reached
icon_milestone.png 00:54 JPPF 6.0.1
A new milestone has been reached
July 16, 2019
bug_report_tiny.png 02:42  Bug report JPPF-596 - Outdated dependency - net.jpountz.lz4 should be replaced with org.lz4.lz4-java
lolocohen : Issue closed
July 15, 2019
bug_report_tiny.png 12:51  Bug report JPPF-596 - Outdated dependency - net.jpountz.lz4 should be replaced with org.lz4.lz4-java
zorba128 : Issue created
Referenced library is dead - it was moved to another namespace long time ago.
This causes some conflicts with more up-to-date libraries.

https://mvnrepository.com/artifact/net.jpountz.lz4/lz4
feature_request_tiny.png 00:55  Feature request JPPF-589 - Docker images for JPPF components
lolocohen : Issue closed
task_tiny.png 00:20  Task JPPF-595 - Remove Android and .Net sections of the documentation
lolocohen : Issue closed
July 14, 2019
icon_milestone.png 18:12 JPPF 4.0
A new milestone has been reached
task_tiny.png 12:05  Task JPPF-595 - Remove Android and .Net sections of the documentation
lolocohen : Issue created
Since we are no longer developing / maintaining the Android and .Net integrations, we propose to remove them from the docuemntation altogether. The source code will be kept in the repository for now.
July 09, 2019
bug_report_tiny.png 05:23  Bug report JPPF-594 - Deadlock in the driver
lolocohen : Issue closed
July 08, 2019
bug_report_tiny.png 23:27  Bug report JPPF-594 - Deadlock in the driver
lolocohen : Issue created
During a run of our Jenkins-automated tests on v6.1, the following deadlock was detected and captured:
Deadlock detected

- thread id 26 "JobScheduler" is waiting to lock java.util.concurrent.locks.ReentrantLock$NonfairSync@58c56e8e which is held by thread id 21 "JPPF-0007"
- thread id 21 "JPPF-0007" is waiting to lock java.util.concurrent.locks.ReentrantLock$NonfairSync@1964bdfb which is held by thread id 26 "JobScheduler"

Stack trace information for the threads listed above

"JobScheduler" - 26 - state: WAITING - blocked count: 5 - blocked time: 4 - wait count: 7 - wait time: 20220
at sun.misc.Unsafe.park(Native Method)
- waiting on java.util.concurrent.locks.ReentrantLock$NonfairSync@58c56e8e
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
at org.jppf.server.protocol.AbstractServerJobBase.getTaskCount(AbstractServerJobBase.java:112)
at org.jppf.server.queue.JPPFPriorityQueue.nextBundle(JPPFPriorityQueue.java:224)
at org.jppf.server.nio.nodeserver.async.AsyncJobScheduler.prepareJobDispatch(AsyncJobScheduler.java:163)
at org.jppf.server.nio.nodeserver.async.AsyncJobScheduler.dispatch(AsyncJobScheduler.java:121)
- locked java.util.LinkedHashSet@1cc4404f
at org.jppf.server.nio.nodeserver.async.AsyncJobScheduler.run(AsyncJobScheduler.java:73)
at java.lang.Thread.run(Thread.java:745)

Locked ownable synchronizers:
- java.util.concurrent.locks.ReentrantLock$NonfairSync@1964bdfb

"JPPF-0007" - 21 - state: WAITING - blocked count: 2 - blocked time: 3 - wait count: 70 - wait time: 20813
at sun.misc.Unsafe.park(Native Method)
- waiting on java.util.concurrent.locks.ReentrantLock$NonfairSync@1964bdfb
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
at org.jppf.server.queue.JPPFPriorityQueue.removeBundle(JPPFPriorityQueue.java:263)
at org.jppf.server.queue.RemoveBundleAction.run(RemoveBundleAction.java:62)
at org.jppf.server.protocol.AbstractServerJob.done(AbstractServerJob.java:333)
at org.jppf.server.protocol.AbstractServerJob.setSubmissionStatus(AbstractServerJob.java:418)
at org.jppf.server.protocol.BundleCompletionListener.lambda$bundleEnded$0(BundleCompletionListener.java:83)
at org.jppf.server.protocol.BundleCompletionListener$$Lambda$29/877663927.run(Unknown Source)
at org.jppf.server.protocol.BundleCompletionListener.bundleEnded(BundleCompletionListener.java:85)
at org.jppf.server.protocol.ServerTaskBundleClient.bundleEnded(ServerTaskBundleClient.java:425)
at org.jppf.server.nio.client.JobEntry.jobEnded(JobEntry.java:73)
at org.jppf.server.nio.client.AsyncClientMessageHandler.jobResultsSent(AsyncClientMessageHandler.java:124)
at org.jppf.server.nio.client.CompletionListener.taskCompleted(CompletionListener.java:62)
at org.jppf.server.protocol.ServerTaskBundleClient.fireTasksCompleted(ServerTaskBundleClient.java:416)
at org.jppf.server.protocol.ServerTaskBundleClient.resultReceived(ServerTaskBundleClient.java:270)
- locked org.jppf.server.protocol.ServerTaskBundleClient@1846b48a
at org.jppf.server.protocol.ServerJob.lambda$handleCancelledTasks$3(ServerJob.java:300)
at org.jppf.server.protocol.ServerJob$$Lambda$33/445459200.accept(Unknown Source)
at org.jppf.utils.collections.CollectionMap.forEach(CollectionMap.java:155)
at org.jppf.server.protocol.ServerJob.handleCancelledTasks(ServerJob.java:300)
at org.jppf.server.protocol.ServerJob.cancel(ServerJob.java:316)
at org.jppf.server.nio.client.AsyncClientContext.cancelJobOnClose(AsyncClientContext.java:238)
at org.jppf.server.nio.client.AsyncClientContext.lambda$cancelJobsOnClose$0(AsyncClientContext.java:209)
at org.jppf.server.nio.client.AsyncClientContext$$Lambda$31/1598015078.accept(Unknown Source)
at java.util.concurrent.ConcurrentHashMap.forEach(ConcurrentHashMap.java:1597)
at org.jppf.server.nio.client.AsyncClientContext.cancelJobsOnClose(AsyncClientContext.java:208)
at org.jppf.server.nio.client.AsyncClientContext.handleException(AsyncClientContext.java:87)
at org.jppf.server.nio.client.AsyncClientMessageHandler.jobReceived(AsyncClientMessageHandler.java:73)
at org.jppf.server.nio.client.AsyncClientMessageReader.handleMessage(AsyncClientMessageReader.java:69)
at org.jppf.server.nio.client.AsyncClientMessageReader$$Lambda$22/2144344426.execute(Unknown Source)
at org.jppf.nio.NioMessageReader$HandlingTask.run(NioMessageReader.java:134)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Locked ownable synchronizers:
- java.util.concurrent.locks.ReentrantLock$NonfairSync@58c56e8e
- java.util.concurrent.ThreadPoolExecutor$Worker@5b1d2887

--------------------------------------------------------------------------------

"main" - 1 - state: WAITING - blocked count: 2 - blocked time: 0 - wait count: 1 - wait time: 21142
at java.lang.Object.wait(Native Method)
- waiting on java.lang.Object@55a86678
at java.lang.Object.wait(Object.java:502)
at org.jppf.server.JPPFDriver.main(JPPFDriver.java:189)

"Reference Handler" - 2 - state: WAITING - blocked count: 5 - blocked time: 0 - wait count: 3 - wait time: 21043
at java.lang.Object.wait(Native Method)
- waiting on java.lang.ref.Reference$Lock@270a3ee0
at java.lang.Object.wait(Object.java:502)
at java.lang.ref.Reference.tryHandlePending(Reference.java:191)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)

"Finalizer" - 3 - state: WAITING - blocked count: 4 - blocked time: 3 - wait count: 4 - wait time: 21030
at java.lang.Object.wait(Native Method)
- waiting on java.lang.ref.ReferenceQueue$Lock@74993a7e
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

"Signal Dispatcher" - 4 - state: RUNNABLE - blocked count: 0 - blocked time: 0 - wait count: 0 - wait time: 0

"Attach Listener" - 5 - state: RUNNABLE - blocked count: 0 - blocked time: 0 - wait count: 0 - wait time: 0

"LauncherSocket-34298" - 12 - state: RUNNABLE - blocked count: 0 - blocked time: 0 - wait count: 0 - wait time: 0 - in native code
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
at java.net.SocketInputStream.read(SocketInputStream.java:171)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at java.net.SocketInputStream.read(SocketInputStream.java:224)
at java.io.DataInputStream.readInt(DataInputStream.java:387)
at org.jppf.process.LauncherListener.run(LauncherListener.java:83)

"DeadlockChecker" - 13 - state: WAITING - blocked count: 1 - blocked time: 0 - wait count: 4 - wait time: 20353
at java.lang.Object.wait(Native Method)
- waiting on java.util.TaskQueue@1e60d97c
at java.lang.Object.wait(Object.java:502)
at java.util.TimerThread.mainLoop(Timer.java:526)
at java.util.TimerThread.run(Timer.java:505)

"ClientClassServer" - 14 - state: RUNNABLE - blocked count: 2 - blocked time: 0 - wait count: 4 - wait time: 0 - in native code
at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
at sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
at sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked sun.nio.ch.WindowsSelectorImpl@6bf33465
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at org.jppf.nio.NioServer.run(NioServer.java:256)

"JPPF-0001" - 15 - state: WAITING - blocked count: 0 - blocked time: 0 - wait count: 1 - wait time: 0
at sun.misc.Unsafe.park(Native Method)
- waiting on java.util.concurrent.SynchronousQueue$TransferStack@7f397481
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:924)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

"JPPF-0002" - 16 - state: WAITING - blocked count: 5 - blocked time: 0 - wait count: 32 - wait time: 20018
at sun.misc.Unsafe.park(Native Method)
- waiting on java.util.concurrent.SynchronousQueue$TransferStack@7f397481
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:924)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

"JPPF-0003" - 17 - state: WAITING - blocked count: 0 - blocked time: 0 - wait count: 1 - wait time: 0
at sun.misc.Unsafe.park(Native Method)
- waiting on java.util.concurrent.SynchronousQueue$TransferStack@7f397481
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:924)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

"JPPF-0004" - 18 - state: WAITING - blocked count: 0 - blocked time: 0 - wait count: 1 - wait time: 0
at sun.misc.Unsafe.park(Native Method)
- waiting on java.util.concurrent.SynchronousQueue$TransferStack@7f397481
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:924)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

"JPPF-0005" - 19 - state: WAITING - blocked count: 0 - blocked time: 0 - wait count: 5 - wait time: 18590
at sun.misc.Unsafe.park(Native Method)
- waiting on java.util.concurrent.locks.ReentrantLock$NonfairSync@1964bdfb
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
at org.jppf.server.queue.JPPFPriorityQueue.getJob(JPPFPriorityQueue.java:345)
at org.jppf.server.nio.client.AsyncClientContext.cancelJobOnClose(AsyncClientContext.java:233)
at org.jppf.server.nio.client.AsyncClientContext.lambda$cancelJobsOnClose$0(AsyncClientContext.java:209)
at org.jppf.server.nio.client.AsyncClientContext$$Lambda$31/1598015078.accept(Unknown Source)
at java.util.concurrent.ConcurrentHashMap.forEach(ConcurrentHashMap.java:1597)
at org.jppf.server.nio.client.AsyncClientContext.cancelJobsOnClose(AsyncClientContext.java:208)
at org.jppf.server.nio.client.AsyncClientContext.handleException(AsyncClientContext.java:87)
at org.jppf.server.nio.client.AsyncClientMessageHandler.jobReceived(AsyncClientMessageHandler.java:73)
at org.jppf.server.nio.client.AsyncClientMessageReader.handleMessage(AsyncClientMessageReader.java:69)
at org.jppf.server.nio.client.AsyncClientMessageReader$$Lambda$22/2144344426.execute(Unknown Source)
at org.jppf.nio.NioMessageReader$HandlingTask.run(NioMessageReader.java:134)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Locked ownable synchronizers:
- java.util.concurrent.ThreadPoolExecutor$Worker@42f30e0a

"JPPF-0006" - 20 - state: WAITING - blocked count: 3 - blocked time: 0 - wait count: 80 - wait time: 20742
at sun.misc.Unsafe.park(Native Method)
- waiting on java.util.concurrent.locks.ReentrantLock$NonfairSync@1964bdfb
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
at org.jppf.server.queue.JPPFPriorityQueue.addBundle(JPPFPriorityQueue.java:104)
at org.jppf.server.nio.client.AsyncClientMessageHandler.jobReceived(AsyncClientMessageHandler.java:89)
at org.jppf.server.nio.client.AsyncClientMessageReader.handleMessage(AsyncClientMessageReader.java:69)
at org.jppf.server.nio.client.AsyncClientMessageReader$$Lambda$22/2144344426.execute(Unknown Source)
at org.jppf.nio.NioMessageReader$HandlingTask.run(NioMessageReader.java:134)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Locked ownable synchronizers:
- java.util.concurrent.ThreadPoolExecutor$Worker@24273305

"JPPF-0007" - 21 - state: WAITING - blocked count: 2 - blocked time: 3 - wait count: 70 - wait time: 20813
at sun.misc.Unsafe.park(Native Method)
- waiting on java.util.concurrent.locks.ReentrantLock$NonfairSync@1964bdfb
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
at org.jppf.server.queue.JPPFPriorityQueue.removeBundle(JPPFPriorityQueue.java:263)
at org.jppf.server.queue.RemoveBundleAction.run(RemoveBundleAction.java:62)
at org.jppf.server.protocol.AbstractServerJob.done(AbstractServerJob.java:333)
at org.jppf.server.protocol.AbstractServerJob.setSubmissionStatus(AbstractServerJob.java:418)
at org.jppf.server.protocol.BundleCompletionListener.lambda$bundleEnded$0(BundleCompletionListener.java:83)
at org.jppf.server.protocol.BundleCompletionListener$$Lambda$29/877663927.run(Unknown Source)
at org.jppf.server.protocol.BundleCompletionListener.bundleEnded(BundleCompletionListener.java:85)
at org.jppf.server.protocol.ServerTaskBundleClient.bundleEnded(ServerTaskBundleClient.java:425)
at org.jppf.server.nio.client.JobEntry.jobEnded(JobEntry.java:73)
at org.jppf.server.nio.client.AsyncClientMessageHandler.jobResultsSent(AsyncClientMessageHandler.java:124)
at org.jppf.server.nio.client.CompletionListener.taskCompleted(CompletionListener.java:62)
at org.jppf.server.protocol.ServerTaskBundleClient.fireTasksCompleted(ServerTaskBundleClient.java:416)
at org.jppf.server.protocol.ServerTaskBundleClient.resultReceived(ServerTaskBundleClient.java:270)
- locked org.jppf.server.protocol.ServerTaskBundleClient@1846b48a
at org.jppf.server.protocol.ServerJob.lambda$handleCancelledTasks$3(ServerJob.java:300)
at org.jppf.server.protocol.ServerJob$$Lambda$33/445459200.accept(Unknown Source)
at org.jppf.utils.collections.CollectionMap.forEach(CollectionMap.java:155)
at org.jppf.server.protocol.ServerJob.handleCancelledTasks(ServerJob.java:300)
at org.jppf.server.protocol.ServerJob.cancel(ServerJob.java:316)
at org.jppf.server.nio.client.AsyncClientContext.cancelJobOnClose(AsyncClientContext.java:238)
at org.jppf.server.nio.client.AsyncClientContext.lambda$cancelJobsOnClose$0(AsyncClientContext.java:209)
at org.jppf.server.nio.client.AsyncClientContext$$Lambda$31/1598015078.accept(Unknown Source)
at java.util.concurrent.ConcurrentHashMap.forEach(ConcurrentHashMap.java:1597)
at org.jppf.server.nio.client.AsyncClientContext.cancelJobsOnClose(AsyncClientContext.java:208)
at org.jppf.server.nio.client.AsyncClientContext.handleException(AsyncClientContext.java:87)
at org.jppf.server.nio.client.AsyncClientMessageHandler.jobReceived(AsyncClientMessageHandler.java:73)
at org.jppf.server.nio.client.AsyncClientMessageReader.handleMessage(AsyncClientMessageReader.java:69)
at org.jppf.server.nio.client.AsyncClientMessageReader$$Lambda$22/2144344426.execute(Unknown Source)
at org.jppf.nio.NioMessageReader$HandlingTask.run(NioMessageReader.java:134)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Locked ownable synchronizers:
- java.util.concurrent.locks.ReentrantLock$NonfairSync@58c56e8e
- java.util.concurrent.ThreadPoolExecutor$Worker@5b1d2887

"JPPF-0008" - 22 - state: RUNNABLE - blocked count: 1 - blocked time: 2 - wait count: 25 - wait time: 20783
at sun.management.ThreadImpl.dumpThreads0(Native Method)
at sun.management.ThreadImpl.dumpAllThreads(ThreadImpl.java:454)
at org.jppf.management.diagnostics.ThreadDump.(ThreadDump.java:48)
at org.jppf.management.diagnostics.Diagnostics.threadDump(Diagnostics.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:112)
at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:46)
at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237)
at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:138)
at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at org.jppf.jmxremote.nio.JMXMessageReader.handleRequest(JMXMessageReader.java:123)
at org.jppf.jmxremote.nio.JMXMessageReader.handleMessage(JMXMessageReader.java:98)
at org.jppf.jmxremote.nio.JMXMessageReader.access$100(JMXMessageReader.java:41)
at org.jppf.jmxremote.nio.JMXMessageReader$HandlingTask.run(JMXMessageReader.java:339)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Locked ownable synchronizers:
- java.util.concurrent.ThreadPoolExecutor$Worker@46f5f779

"NodeClassServer" - 23 - state: RUNNABLE - blocked count: 8 - blocked time: 0 - wait count: 4 - wait time: 0 - in native code
at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
at sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
at sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked sun.nio.ch.WindowsSelectorImpl@6825b89
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at org.jppf.nio.NioServer.run(NioServer.java:256)

"ClientJobServer" - 24 - state: RUNNABLE - blocked count: 0 - blocked time: 0 - wait count: 16 - wait time: 22 - in native code
at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
at sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
at sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked sun.nio.ch.WindowsSelectorImpl@c3cc50e
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at org.jppf.nio.StatelessNioServer.run(StatelessNioServer.java:126)

"NodeJobServer" - 25 - state: RUNNABLE - blocked count: 0 - blocked time: 0 - wait count: 7 - wait time: 10 - in native code
at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
at sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
at sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked sun.nio.ch.WindowsSelectorImpl@e1b0f79
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at org.jppf.nio.StatelessNioServer.run(StatelessNioServer.java:126)

"JobScheduler" - 26 - state: WAITING - blocked count: 5 - blocked time: 4 - wait count: 7 - wait time: 20220
at sun.misc.Unsafe.park(Native Method)
- waiting on java.util.concurrent.locks.ReentrantLock$NonfairSync@58c56e8e
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:870)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1199)
at java.util.concurrent.locks.ReentrantLock$NonfairSync.lock(ReentrantLock.java:209)
at java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:285)
at org.jppf.server.protocol.AbstractServerJobBase.getTaskCount(AbstractServerJobBase.java:112)
at org.jppf.server.queue.JPPFPriorityQueue.nextBundle(JPPFPriorityQueue.java:224)
at org.jppf.server.nio.nodeserver.async.AsyncJobScheduler.prepareJobDispatch(AsyncJobScheduler.java:163)
at org.jppf.server.nio.nodeserver.async.AsyncJobScheduler.dispatch(AsyncJobScheduler.java:121)
- locked java.util.LinkedHashSet@1cc4404f
at org.jppf.server.nio.nodeserver.async.AsyncJobScheduler.run(AsyncJobScheduler.java:73)
at java.lang.Thread.run(Thread.java:745)

Locked ownable synchronizers:
- java.util.concurrent.locks.ReentrantLock$NonfairSync@1964bdfb

"Acceptor" - 27 - state: RUNNABLE - blocked count: 0 - blocked time: 0 - wait count: 27 - wait time: 61 - in native code
at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
at sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
at sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked sun.nio.ch.WindowsSelectorImpl@72706db6
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at org.jppf.nio.StatelessNioServer.run(StatelessNioServer.java:126)

"JMXRemote-1" - 29 - state: RUNNABLE - blocked count: 0 - blocked time: 0 - wait count: 23 - wait time: 13
at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
at sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
at sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked sun.nio.ch.WindowsSelectorImpl@7d2b3f6
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
at org.jppf.nio.StatelessNioServer.run(StatelessNioServer.java:126)

"StatsEventDispatcher-0001" - 30 - state: WAITING - blocked count: 0 - blocked time: 0 - wait count: 59 - wait time: 20913
at sun.misc.Unsafe.park(Native Method)
- waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@64e410e9
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

"NodeChannels-0001" - 34 - state: WAITING - blocked count: 2 - blocked time: 3 - wait count: 3 - wait time: 20227
at sun.misc.Unsafe.park(Native Method)
- waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@575d0676
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

"JobManager-0001" - 37 - state: WAITING - blocked count: 2 - blocked time: 0 - wait count: 7 - wait time: 19701
at sun.misc.Unsafe.park(Native Method)
- waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@5da56d06
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
icon_milestone.png 17:57 JPPF 2.5.5
A new milestone has been reached
July 02, 2019
icon_milestone.png 09:33 JPPF 3.3
A new milestone has been reached
June 30, 2019
bug_report_tiny.png 07:39  Bug report JPPF-593 - Various typos in the documentation
lolocohen : Issue closed
June 29, 2019
bug_report_tiny.png 04:21  Bug report JPPF-593 - Various typos in the documentation
lolocohen : Issue created
We need to fix a number of user-reported errors in the documentation:

- chapter 2.5.2, here under "Job SLA":

nuumber should be number

- chapter 3.4.2 Remove one "the" in the sentence:

In other words, the results are always in the same order as the tasks in the the job.

- chapter 4.1.12 There is a "r" missing in the word "interruptible" in the sentence:

Tasks that do not extend AbstractTask, such as Callable, Runnable, Pojo tasks or tasks annotated with @JPPFRunnable, will need to implement the Interruptibility interface to override the interuptible flag, as in this example:

- chapter 4.4, the yellow box, under Note 2

There is a space missing after the comma: from each task's perspective,the data provider

- chapter 4.5.1.2 First sentence. eligble channels sould be eligible channels

- chapter 4.5.1.4 Second word should be each, not aach

- chapter 4.5.2.10, the yellow box, Note 1:

usally should be usually

- chapter 4.9.1, third word:

heirarchy should be hierarchy

- chapter 4.11, yellow box:

hanldle should be handle

- chapter 4.11.4.1 THe text block under the source:

overriden should be overridden

- chapter 4.12 delete one the" in the sentence:

extensions to the the job SLA specifying if and how the persistence of each job should be handled

- chapter 5.4.1, yellow box, note 2: explicitely should be explicitly

- chapter 5.4.5 ollload schould be offload, attahed should ne attached

- chapter 5.5.1.1.3 exppressed should be expressed, expressd should be expressed
Show moreaction_add_small.png