You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Pavel Tupitsyn (JIRA)" <ji...@apache.org> on 2016/08/12 18:49:21 UTC
[jira] [Commented] (IGNITE-835) IgniteCache.lock is broken for
PARTITIONED cache without near cache.
[ https://issues.apache.org/jira/browse/IGNITE-835?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15419297#comment-15419297 ]
Pavel Tupitsyn commented on IGNITE-835:
---------------------------------------
Alexey, any update on this issue?
> IgniteCache.lock is broken for PARTITIONED cache without near cache.
> --------------------------------------------------------------------
>
> Key: IGNITE-835
> URL: https://issues.apache.org/jira/browse/IGNITE-835
> Project: Ignite
> Issue Type: Bug
> Components: cache
> Affects Versions: sprint-2
> Reporter: Vladimir Ozerov
> Assignee: Alexey Goncharuk
> Priority: Critical
> Labels: Muted_test
>
> Steps to reproduce:
> 1) Go to GridCacheLockAbstractTest
> 2) Add the test source below.
> 3) Make sure to disable near cache (GridCacheLockAbstractTest.cacheConfiguration() -> setNearConfiguration(null)).
> 4) Run GridCachePartitionedLockSelfTest.testLockReentrancy() and observe assertion failure.
> 5) Enable near cache back and re-run the test. Observe that now it pass.
> {code}
> public void testLockReentrancy() throws Throwable {
> for (int i = 10; i < 100; i++) {
> System.out.println("Key: " + i);
> final int i0 = i;
> final Lock lock = cache1.lock(i);
> lock.lockInterruptibly();
> try {
> final AtomicReference<Throwable> err = new AtomicReference<>();
> Thread t = new Thread(new Runnable() {
> @Override public void run() {
> try {
> assert !lock.tryLock();
> assert !lock.tryLock(100, TimeUnit.MILLISECONDS);
> assert !cache1.lock(i0).tryLock();
> assert !cache1.lock(i0).tryLock(100, TimeUnit.MILLISECONDS);
> }
> catch (Throwable e) {
> err.set(e);
> }
> }
> });
> t.start();
> t.join();
> if (err.get() != null)
> throw err.get();
> lock.lock();
> lock.unlock();
> t = new Thread(new Runnable() {
> @Override public void run() {
> try {
> assert !lock.tryLock();
> assert !lock.tryLock(100, TimeUnit.MILLISECONDS);
> assert !cache1.lock(i0).tryLock();
> assert !cache1.lock(i0).tryLock(100, TimeUnit.MILLISECONDS);
> }
> catch (Throwable e) {
> err.set(e);
> }
> }
> });
> t.start();
> t.join();
> if (err.get() != null)
> throw err.get();
> }
> finally {
> lock.unlock();
> }
> }
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)