/** * Waits for the response from the {@link PartitionMessage}'s recipient * * @throws CacheException if the recipient threw a cache exception during message processing * @throws QueryException if the recipient threw a query exception * @throws RegionDestroyedException if the peer has closed its copy of the region * @return The set of members that failed. */ public Set<InternalDistributedMember> waitForCacheOrQueryException() throws CacheException, QueryException { try { waitForRepliesUninterruptibly(); return this.failedMembers; } catch (ReplyException e) { Throwable t = e.getCause(); if (t instanceof CacheException) { throw (CacheException) t; } else if (t instanceof RegionDestroyedException) { throw (RegionDestroyedException) t; } else if (t instanceof QueryException) { throw (QueryException) t; } else if (t instanceof PrimaryBucketException) { throw new PrimaryBucketException("Peer failed primary test", t); } e.handleCause(); // This won't be reached, because of the above, // but it makes the compiler happy. throw e; } }
@Test(expected = PrimaryBucketException.class) public void lockedKeysAreRemoved() throws Exception { PutAllPRMessage message = spy(new PutAllPRMessage(bucketId, 1, false, false, false, null)); message.addEntry(entryData); doReturn(keys).when(message).getKeysToBeLocked(); when(bucketRegion.waitUntilLocked(keys)).thenReturn(true); when(bucketRegion.doLockForPrimary(false)).thenThrow(new PrimaryBucketException()); message.doLocalPutAll(partitionedRegion, mock(InternalDistributedMember.class), 1); verify(bucketRegion).removeAndNotifyKeys(eq(keys)); }
@Test(expected = PrimaryBucketException.class) public void lockedKeysAreRemoved() throws Exception { RemoveAllPRMessage message = spy(new RemoveAllPRMessage(bucketId, 1, false, false, true, null)); message.addEntry(entryData); doReturn(keys).when(message).getKeysToBeLocked(); when(bucketRegion.waitUntilLocked(keys)).thenReturn(true); when(bucketRegion.doLockForPrimary(false)).thenThrow(new PrimaryBucketException()); message.doLocalRemoveAll(partitionedRegion, mock(InternalDistributedMember.class), true); verify(bucketRegion).removeAndNotifyKeys(eq(keys)); }
@Test(expected = PrimaryBucketException.class) public void lockKeysAndPrimaryReleaseLockHeldIfDoLockForPrimaryThrows() { BucketRegion bucketRegion = spy(new BucketRegion(regionName, regionAttributes, partitionedRegion, cache, internalRegionArgs)); doReturn(keys).when(bucketRegion).getKeysToBeLocked(event); doReturn(true).when(bucketRegion).waitUntilLocked(keys); doThrow(new PrimaryBucketException()).when(bucketRegion).doLockForPrimary(false); bucketRegion.lockKeysAndPrimary(event); verify(bucketRegion).removeAndNotifyKeys(keys); }
public void checkForPrimary() { final boolean isp = getBucketAdvisor().isPrimary(); if (!isp) { this.partitionedRegion.checkReadiness(); checkReadiness(); InternalDistributedMember primaryHolder = getBucketAdvisor().basicGetPrimaryMember(); throw new PrimaryBucketException( "Bucket " + getName() + " is not primary. Current primary holder is " + primaryHolder); } }
throw (ForceReattemptException) t; } else if (t instanceof PrimaryBucketException) { throw new PrimaryBucketException("Peer failed primary test", t);
throw new PrimaryBucketException( "Peer failed primary test", t); } else if (t instanceof CancelException) {
@Override protected RegionEntry basicGetTXEntry(KeyInfo keyInfo) { int bucketId = keyInfo.getBucketId(); if (bucketId == KeyInfo.UNKNOWN_BUCKET) { bucketId = PartitionedRegionHelper.getHashKey(this, null, keyInfo.getKey(), keyInfo.getValue(), keyInfo.getCallbackArg()); keyInfo.setBucketId(bucketId); } if (keyInfo.isCheckPrimary()) { DistributedMember primary = getRegionAdvisor().getPrimaryMemberForBucket(bucketId); if (!primary.equals(getMyId())) { throw new PrimaryBucketException( "Bucket " + bucketId + " is not primary. Current primary holder is " + primary); } } BucketRegion br = this.dataStore.getLocalBucketById(bucketId); RegionEntry re = br.basicGetEntry(keyInfo.getKey()); if (re != null && re.isRemoved()) { re = null; } return re; }
throw new PrimaryBucketException( "Bucket " + bucketId + " is not primary. Current primary holder is " + member);