use of org.apache.ignite.spi.systemview.view.datastructures.SemaphoreView in project ignite by apache.
the class SystemViewSelfTest method testSemaphores.
/**
*/
@Test
public void testSemaphores() throws Exception {
try (IgniteEx g0 = startGrid(0);
IgniteEx g1 = startGrid(1)) {
IgniteSemaphore s1 = g0.semaphore("s1", 3, false, true);
IgniteSemaphore s2 = g0.semaphore("s2", 1, true, true);
SystemView<SemaphoreView> semaphores0 = g0.context().systemView().view(SEMAPHORES_VIEW);
SystemView<SemaphoreView> semaphores1 = g1.context().systemView().view(SEMAPHORES_VIEW);
assertEquals(2, semaphores0.size());
assertEquals(0, semaphores1.size());
String grpName = DEFAULT_VOLATILE_DS_GROUP_NAME + "@" + VOLATILE_DATA_REGION_NAME;
IgniteInternalFuture<?> acquirePermitFut = null;
for (SemaphoreView s : semaphores0) {
if ("s1".equals(s.name())) {
assertEquals(3, s.availablePermits());
assertFalse(s.hasQueuedThreads());
assertEquals(0, s.queueLength());
assertFalse(s.failoverSafe());
assertFalse(s.broken());
assertFalse(s.removed());
acquirePermitFut = runAsync(() -> {
s1.acquire(2);
try {
Thread.sleep(getTestTimeout());
} catch (InterruptedException e) {
throw new RuntimeException(e);
} finally {
s1.release(2);
}
});
assertTrue(waitForCondition(() -> s.availablePermits() == 1, getTestTimeout()));
assertTrue(s.hasQueuedThreads());
assertEquals(1, s.queueLength());
} else {
assertEquals(1, s.availablePermits());
assertFalse(s.hasQueuedThreads());
assertEquals(0, s.queueLength());
assertTrue(s.failoverSafe());
assertFalse(s.broken());
assertFalse(s.removed());
s2.close();
assertTrue(waitForCondition(s::removed, getTestTimeout()));
}
assertEquals(grpName, s.groupName());
assertEquals(CU.cacheId(grpName), s.groupId());
}
IgniteSemaphore l3 = g1.semaphore("s1", 10, true, true);
assertEquals(1, semaphores1.size());
SemaphoreView s = semaphores1.iterator().next();
assertEquals(1, s.availablePermits());
assertTrue(s.hasQueuedThreads());
assertEquals(1, s.queueLength());
assertFalse(s.failoverSafe());
assertFalse(s.broken());
assertFalse(s.removed());
acquirePermitFut.cancel();
assertTrue(waitForCondition(() -> s.availablePermits() == 3, getTestTimeout()));
l3.close();
assertTrue(waitForCondition(s::removed, getTestTimeout()));
assertEquals(0, semaphores0.size());
assertEquals(0, semaphores1.size());
}
}
use of org.apache.ignite.spi.systemview.view.datastructures.SemaphoreView in project ignite by apache.
the class DataStructuresProcessor method registerSystemViews.
/**
* Register system views.
*/
private void registerSystemViews() {
ctx.systemView().registerView(SEQUENCES_VIEW, SEQUENCES_VIEW_DESC, new AtomicSequenceViewWalker(), new PredicateCollectionView<>(dsMap.values(), v -> v instanceof IgniteAtomicSequence), AtomicSequenceView::new);
ctx.systemView().registerView(LONGS_VIEW, LONGS_VIEW_DESC, new AtomicLongViewWalker(), new PredicateCollectionView<>(dsMap.values(), v -> v instanceof IgniteAtomicLong), AtomicLongView::new);
ctx.systemView().registerView(REFERENCES_VIEW, REFERENCES_VIEW_DESC, new AtomicReferenceViewWalker(), new PredicateCollectionView<>(dsMap.values(), v -> v instanceof IgniteAtomicReference), AtomicReferenceView::new);
ctx.systemView().registerView(STAMPED_VIEW, STAMPED_VIEW_DESC, new AtomicStampedViewWalker(), new PredicateCollectionView<>(dsMap.values(), v -> v instanceof IgniteAtomicStamped), AtomicStampedView::new);
ctx.systemView().registerView(LATCHES_VIEW, LATCHES_VIEW_DESC, new CountDownLatchViewWalker(), new PredicateCollectionView<>(dsMap.values(), v -> v instanceof IgniteCountDownLatch), CountDownLatchView::new);
ctx.systemView().registerView(SEMAPHORES_VIEW, SEMAPHORES_VIEW_DESC, new SemaphoreViewWalker(), new PredicateCollectionView<>(dsMap.values(), v -> v instanceof IgniteSemaphore), SemaphoreView::new);
ctx.systemView().registerView(LOCKS_VIEW, LOCKS_VIEW_DESC, new ReentrantLockViewWalker(), new PredicateCollectionView<>(dsMap.values(), v -> v instanceof IgniteLock), ReentrantLockView::new);
ctx.systemView().registerInnerCollectionView(QUEUES_VIEW, QUEUES_VIEW_DESC, new QueueViewWalker(), new TransformCollectionView<>(ctx.cache().cacheDescriptors().values(), desc -> ctx.cache().cache(desc.cacheName()).context().dataStructures(), desc -> desc.cacheType() == CacheType.DATA_STRUCTURES), cctx -> cctx.queues().values(), (cctx, queue) -> new QueueView(queue));
ctx.systemView().registerInnerCollectionView(SETS_VIEW, SETS_VIEW_DESC, new SetViewWalker(), F.viewReadOnly(ctx.cache().cacheDescriptors().values(), desc -> ctx.cache().cache(desc.cacheName()).context().dataStructures(), desc -> desc.cacheType() == CacheType.DATA_STRUCTURES), cctx -> cctx.sets().values(), (cctx, set) -> new SetView(set));
}
Aggregations