ignite-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From robbie <rob.anonu...@gmail.com>
Subject Proper use of ignite semaphore
Date Thu, 08 Jun 2017 08:17:04 GMT
Hi guys,

I have a couple of questions regarding our team’s use of Ignite’s semaphore. 

Our team has used semaphores to throttle the number of compute jobs being
sent to the grid:
e.g. :
In ComputeTaskAdapter.map {
final IgniteSemaphore semaphore = ignite.semaphore(semaphoreName,
throttleSize, true, true);
taskSession.setAttribute(SEMAPHORE_KEY, semaphoreName);
for (ComputeJob job : jobs) {
    semaphore.acquire();
    mapper.send(job);
}
}

The semaphores are then released in ComputeJob.execute {

final String semaphoreName =
taskSession.getAttribute(AbstractComputeTaskAdapter.SEMAPHORE_KEY);
final IgniteSemaphore semaphore = semaphoreName != null ?
ignite.semaphore(semaphoreName, 0, true, false) : null;
try {
    return executeManaged();
}
finally {

    if (semaphore != null) {
        semaphore.release();
    }
    if (latch != null) {
        latch.countDown();
    }
    LOG.info(".. completed sequence #" + sequence + ": " + taskSessionId);
}
}


My question is, is this the proper use of Ignite semaphores? Is it safe to
use semaphores inside compute tasks? During my resiliency testing with this
code, it seems like the locks from semaphores don’t get released whenever I
start killing (kill -9) all but one of our server nodes.





--
View this message in context: http://apache-ignite-users.70518.x6.nabble.com/Proper-use-of-ignite-semaphore-tp13509.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.

Mime
View raw message