/** * Register interest with ALL_KEYS, and InterestPolicyResult = KEYS_VALUES which is equivalent to * a full GII. * * @param aRegion The region to register interest on. */ protected static void registerInterest(Region aRegion) { Log.getLogWriter() .info("Calling registerInterest for all keys, result interest policy KEYS_VALUES"); aRegion.registerInterest("ALL_KEYS", InterestResultPolicy.KEYS_VALUES); Log.getLogWriter() .info( "Done calling registerInterest for all keys, " + "result interest policy KEYS_VALUES, " + aRegion.getFullPath() + " size is " + aRegion.size()); }
/** * Load a region with keys and values. The number of keys and values is specified by the total * number of keys in keyIntervals. This can be invoked by several threads to accomplish the work. */ public void loadRegion() { final long LOG_INTERVAL_MILLIS = 10000; int numKeysToCreate = keyIntervals.getNumKeys(); long lastLogTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis(); SharedCounters sc = CQUtilBB.getBB().getSharedCounters(); do { long shouldAddCount = CQUtilBB.getBB().getSharedCounters().incrementAndRead(CQUtilBB.SHOULD_ADD_COUNT); if (shouldAddCount > numKeysToCreate) { String aStr = "In loadRegion, shouldAddCount is " + shouldAddCount + ", numOriginalKeysCreated is " + sc.read(CQUtilBB.NUM_ORIGINAL_KEYS_CREATED) + ", numKeysToCreate is " + numKeysToCreate + ", region size is " + aRegion.size(); Log.getLogWriter().info(aStr); NameBB.getBB().printSharedCounters(); throw new StopSchedulingTaskOnClientOrder(aStr); } Object key = NameFactory.getNextPositiveObjectName(); QueryObject value = getValueToAdd(key); value.extra = key; Log.getLogWriter().info("Creating with put, key " + key + ", value " + value.toStringFull()); aRegion.put(key, value); sc.increment(CQUtilBB.NUM_ORIGINAL_KEYS_CREATED); if (System.currentTimeMillis() - lastLogTime > LOG_INTERVAL_MILLIS) { Log.getLogWriter() .info( "Added " + NameFactory.getPositiveNameCounter() + " out of " + numKeysToCreate + " entries into " + TestHelper.regionToString(aRegion, false)); lastLogTime = System.currentTimeMillis(); } } while ((minTaskGranularitySec == -1) || (System.currentTimeMillis() - startTime < minTaskGranularityMS)); }
/** * Verify the contents of the region, taking into account the keys that were destroyed, * invalidated, etc (as specified in keyIntervals) Throw an error of any problems are detected. * This must be called repeatedly by the same thread until StopSchedulingTaskOnClientOrder is * thrown. */ public void verifyRegionContents() { final long LOG_INTERVAL_MILLIS = 10000; // we already completed this check once; we can't do it again without reinitializing the // verify state variables if (verifyRegionContentsCompleted) { throw new TestException( "Test configuration problem; already verified region contents, " + "cannot call this task again without resetting batch variables"); } // iterate keys long lastLogTime = System.currentTimeMillis(); long minTaskGranularitySec = TestConfig.tab().longAt(TestHelperPrms.minTaskGranularitySec); long minTaskGranularityMS = minTaskGranularitySec * TestHelper.SEC_MILLI_FACTOR; long startTime = System.currentTimeMillis(); long size = aRegion.size(); boolean first = true; int numKeysToCheck = keyIntervals.getNumKeys() + numNewKeys; while (verifyRegionContentsIndex < numKeysToCheck) { verifyRegionContentsIndex++; if (first) { Log.getLogWriter() .info( "In verifyRegionContents, region has " + size + " keys; starting verify at verifyRegionContentsIndex " + verifyRegionContentsIndex + "; verifying key names with indexes through (and including) " + numKeysToCheck); first = false; } // check region size the first time through the loop to avoid it being called // multiple times when this is batched if (verifyRegionContentsIndex == 1) { if (totalNumKeys != size) { String tmpStr = "Expected region size to be " + totalNumKeys + ", but it is size " + size; Log.getLogWriter().info(tmpStr); verifyRegionContentsErrStr.append(tmpStr + "\n"); } } Object key = NameFactory.getObjectNameForCounter(verifyRegionContentsIndex); try { if (((verifyRegionContentsIndex >= keyIntervals.getFirstKey(KeyIntervals.NONE)) && (verifyRegionContentsIndex <= keyIntervals.getLastKey(KeyIntervals.NONE))) || ((verifyRegionContentsIndex >= keyIntervals.getFirstKey(KeyIntervals.GET)) && (verifyRegionContentsIndex <= keyIntervals.getLastKey(KeyIntervals.GET)))) { // this key was untouched after its creation checkContainsKey(key, true, "key was untouched"); checkContainsValueForKey(key, true, "key was untouched"); Object value = aRegion.get(key); checkValue(key, value); } else if ((verifyRegionContentsIndex >= keyIntervals.getFirstKey(KeyIntervals.INVALIDATE)) && (verifyRegionContentsIndex <= keyIntervals.getLastKey(KeyIntervals.INVALIDATE))) { checkContainsKey(key, true, "key was invalidated"); checkContainsValueForKey(key, false, "key was invalidated"); } else if ((verifyRegionContentsIndex >= keyIntervals.getFirstKey(KeyIntervals.LOCAL_INVALIDATE)) && (verifyRegionContentsIndex <= keyIntervals.getLastKey(KeyIntervals.LOCAL_INVALIDATE))) { // this key was locally invalidated checkContainsKey(key, true, "key was locally invalidated"); checkContainsValueForKey(key, true, "key was locally invalidated"); Object value = aRegion.get(key); checkValue(key, value); } else if ((verifyRegionContentsIndex >= keyIntervals.getFirstKey(KeyIntervals.DESTROY)) && (verifyRegionContentsIndex <= keyIntervals.getLastKey(KeyIntervals.DESTROY))) { // this key was destroyed checkContainsKey(key, false, "key was destroyed"); checkContainsValueForKey(key, false, "key was destroyed"); } else if ((verifyRegionContentsIndex >= keyIntervals.getFirstKey(KeyIntervals.LOCAL_DESTROY)) && (verifyRegionContentsIndex <= keyIntervals.getLastKey(KeyIntervals.LOCAL_DESTROY))) { // this key was locally destroyed checkContainsKey(key, true, "key was locally destroyed"); checkContainsValueForKey(key, true, "key was locally destroyed"); Object value = aRegion.get(key); checkValue(key, value); } else if ((verifyRegionContentsIndex >= keyIntervals.getFirstKey(KeyIntervals.UPDATE_EXISTING_KEY)) && (verifyRegionContentsIndex <= keyIntervals.getLastKey(KeyIntervals.UPDATE_EXISTING_KEY))) { // this key was updated checkContainsKey(key, true, "key was updated"); checkContainsValueForKey(key, true, "key was updated"); Object value = aRegion.get(key); checkUpdatedValue(key, value); } else if (verifyRegionContentsIndex > keyIntervals.getNumKeys()) { // key was newly added checkContainsKey(key, true, "key was new"); checkContainsValueForKey(key, true, "key was new"); Object value = aRegion.get(key); checkValue(key, value); } } catch (TestException e) { Log.getLogWriter().info(TestHelper.getStackTrace(e)); verifyRegionContentsErrStr.append(e.getMessage() + "\n"); } if (System.currentTimeMillis() - lastLogTime > LOG_INTERVAL_MILLIS) { Log.getLogWriter() .info("Verified key " + verifyRegionContentsIndex + " out of " + totalNumKeys); lastLogTime = System.currentTimeMillis(); } if (System.currentTimeMillis() - startTime >= minTaskGranularityMS) { Log.getLogWriter() .info( "In HydraTask_verifyRegionContents, returning before completing verify " + "because of task granularity (this task must be batched to complete); last key verified is " + key); return; // task is batched; we are done with this batch } } verifyRegionContentsCompleted = true; if (verifyRegionContentsErrStr.length() > 0) { throw new TestException(verifyRegionContentsErrStr.toString()); } String aStr = "In HydraTask_verifyRegionContents, verified " + verifyRegionContentsIndex + " keys/values"; Log.getLogWriter().info(aStr); throw new StopSchedulingTaskOnClientOrder(aStr); }
/** check remote ops done in a normal vm are correctly distributed to PROXY regions */ private void remoteOriginOps(DataPolicy dp, InterestPolicy ip) throws CacheException { initOtherId(); AttributesFactory af = new AttributesFactory(); af.setDataPolicy(dp); af.setSubscriptionAttributes(new SubscriptionAttributes(ip)); af.setScope(Scope.DISTRIBUTED_ACK); CacheListener cl1 = new CacheListener() { public void afterUpdate(EntryEvent e) { clLastEvent = e; clInvokeCount++; } public void afterCreate(EntryEvent e) { clLastEvent = e; clInvokeCount++; } public void afterInvalidate(EntryEvent e) { clLastEvent = e; clInvokeCount++; } public void afterDestroy(EntryEvent e) { clLastEvent = e; clInvokeCount++; } public void afterRegionInvalidate(RegionEvent e) { clLastEvent = e; clInvokeCount++; } public void afterRegionDestroy(RegionEvent e) { clLastEvent = e; clInvokeCount++; } public void afterRegionClear(RegionEvent e) { clLastEvent = e; clInvokeCount++; } public void afterRegionCreate(RegionEvent e) {} public void afterRegionLive(RegionEvent e) {} public void close() {} }; af.addCacheListener(cl1); Region r = createRootRegion("ProxyDUnitTest", af.create()); this.clInvokeCount = 0; doCreateOtherVm(); DMStats stats = getDMStats(); long receivedMsgs = stats.getReceivedMessages(); if (ip.isAll()) { getOtherVm() .invoke( new CacheSerializableRunnable("do put") { public void run2() throws CacheException { Region r = getRootRegion("ProxyDUnitTest"); r.put("p", "v"); } }); assertEquals(1, this.clInvokeCount); assertEquals(Operation.CREATE, this.clLastEvent.getOperation()); assertEquals(true, this.clLastEvent.isOriginRemote()); assertEquals(this.otherId, this.clLastEvent.getDistributedMember()); assertEquals(null, ((EntryEvent) this.clLastEvent).getOldValue()); assertEquals(false, ((EntryEvent) this.clLastEvent).isOldValueAvailable()); // failure assertEquals("v", ((EntryEvent) this.clLastEvent).getNewValue()); assertEquals("p", ((EntryEvent) this.clLastEvent).getKey()); this.clInvokeCount = 0; getOtherVm() .invoke( new CacheSerializableRunnable("do create") { public void run2() throws CacheException { Region r = getRootRegion("ProxyDUnitTest"); r.create("c", "v"); } }); assertEquals(1, this.clInvokeCount); assertEquals(Operation.CREATE, this.clLastEvent.getOperation()); assertEquals(true, this.clLastEvent.isOriginRemote()); assertEquals(this.otherId, this.clLastEvent.getDistributedMember()); assertEquals(null, ((EntryEvent) this.clLastEvent).getOldValue()); assertEquals(false, ((EntryEvent) this.clLastEvent).isOldValueAvailable()); assertEquals("v", ((EntryEvent) this.clLastEvent).getNewValue()); assertEquals("c", ((EntryEvent) this.clLastEvent).getKey()); this.clInvokeCount = 0; getOtherVm() .invoke( new CacheSerializableRunnable("do update") { public void run2() throws CacheException { Region r = getRootRegion("ProxyDUnitTest"); r.put("c", "v2"); } }); assertEquals(1, this.clInvokeCount); assertEquals(Operation.UPDATE, this.clLastEvent.getOperation()); assertEquals(true, this.clLastEvent.isOriginRemote()); assertEquals(this.otherId, this.clLastEvent.getDistributedMember()); assertEquals(null, ((EntryEvent) this.clLastEvent).getOldValue()); assertEquals(false, ((EntryEvent) this.clLastEvent).isOldValueAvailable()); assertEquals("v2", ((EntryEvent) this.clLastEvent).getNewValue()); assertEquals("c", ((EntryEvent) this.clLastEvent).getKey()); this.clInvokeCount = 0; getOtherVm() .invoke( new CacheSerializableRunnable("do invalidate") { public void run2() throws CacheException { Region r = getRootRegion("ProxyDUnitTest"); r.invalidate("c"); } }); assertEquals(1, this.clInvokeCount); assertEquals(Operation.INVALIDATE, this.clLastEvent.getOperation()); assertEquals(true, this.clLastEvent.isOriginRemote()); assertEquals(this.otherId, this.clLastEvent.getDistributedMember()); assertEquals(null, ((EntryEvent) this.clLastEvent).getOldValue()); assertEquals(false, ((EntryEvent) this.clLastEvent).isOldValueAvailable()); assertEquals(null, ((EntryEvent) this.clLastEvent).getNewValue()); assertEquals("c", ((EntryEvent) this.clLastEvent).getKey()); this.clInvokeCount = 0; getOtherVm() .invoke( new CacheSerializableRunnable("do destroy") { public void run2() throws CacheException { Region r = getRootRegion("ProxyDUnitTest"); r.destroy("c"); } }); assertEquals(1, this.clInvokeCount); assertEquals(Operation.DESTROY, this.clLastEvent.getOperation()); assertEquals(true, this.clLastEvent.isOriginRemote()); assertEquals(this.otherId, this.clLastEvent.getDistributedMember()); assertEquals(null, ((EntryEvent) this.clLastEvent).getOldValue()); assertEquals(false, ((EntryEvent) this.clLastEvent).isOldValueAvailable()); assertEquals(null, ((EntryEvent) this.clLastEvent).getNewValue()); assertEquals("c", ((EntryEvent) this.clLastEvent).getKey()); this.clInvokeCount = 0; getOtherVm() .invoke( new CacheSerializableRunnable("do putAll") { public void run2() throws CacheException { Region r = getRootRegion("ProxyDUnitTest"); Map m = new HashMap(); m.put("putAllKey1", "putAllValue1"); m.put("putAllKey2", "putAllValue2"); r.putAll(m); } }); assertEquals(2, this.clInvokeCount); // @todo darrel; check putAll events this.clInvokeCount = 0; getOtherVm() .invoke( new CacheSerializableRunnable("do netsearch") { public void run2() throws CacheException { Region r = getRootRegion("ProxyDUnitTest"); assertEquals(null, r.get("loadkey")); // total miss } }); assertEquals(0, this.clInvokeCount); } else { getOtherVm() .invoke( new CacheSerializableRunnable("do entry ops") { public void run2() throws CacheException { Region r = getRootRegion("ProxyDUnitTest"); r.put("p", "v"); r.create("c", "v"); r.put("c", "v"); // update r.invalidate("c"); r.destroy("c"); { Map m = new HashMap(); m.put("putAllKey1", "putAllValue1"); m.put("putAllKey2", "putAllValue2"); r.putAll(m); } assertEquals(null, r.get("loadkey")); // total miss } }); assertEquals(0, this.clInvokeCount); assertEquals(0, r.size()); // check the stats to make sure none of the above sent up messages assertEquals(receivedMsgs, stats.getReceivedMessages()); } { AttributesMutator am = r.getAttributesMutator(); CacheLoader cl = new CacheLoader() { public Object load(LoaderHelper helper) throws CacheLoaderException { if (helper.getKey().equals("loadkey")) { return "loadvalue"; } else if (helper.getKey().equals("loadexception")) { throw new CacheLoaderException("expected"); } else { return null; } } public void close() {} }; am.setCacheLoader(cl); } receivedMsgs = stats.getReceivedMessages(); getOtherVm() .invoke( new CacheSerializableRunnable("check net loader") { public void run2() throws CacheException { Region r = getRootRegion("ProxyDUnitTest"); assertEquals("loadvalue", r.get("loadkey")); // net load assertEquals(null, r.get("foobar")); // total miss try { r.get("loadexception"); fail("expected CacheLoaderException"); } catch (CacheLoaderException expected) { } } }); assertTrue(stats.getReceivedMessages() > receivedMsgs); if (ip.isAll()) { assertEquals(1, this.clInvokeCount); assertEquals(Operation.NET_LOAD_CREATE, this.clLastEvent.getOperation()); assertEquals(true, this.clLastEvent.isOriginRemote()); assertEquals(this.otherId, this.clLastEvent.getDistributedMember()); assertEquals(null, ((EntryEvent) this.clLastEvent).getOldValue()); assertEquals(false, ((EntryEvent) this.clLastEvent).isOldValueAvailable()); this.clInvokeCount = 0; } else { assertEquals(0, this.clInvokeCount); } { AttributesMutator am = r.getAttributesMutator(); am.setCacheLoader(null); CacheWriter cw = new CacheWriterAdapter() { public void beforeCreate(EntryEvent event) throws CacheWriterException { throw new CacheWriterException("expected"); } }; am.setCacheWriter(cw); } receivedMsgs = stats.getReceivedMessages(); getOtherVm() .invoke( new CacheSerializableRunnable("check net write") { public void run2() throws CacheException { Region r = getRootRegion("ProxyDUnitTest"); try { r.put("putkey", "putvalue"); fail("expected CacheWriterException"); } catch (CacheWriterException expected) { } } }); assertTrue(stats.getReceivedMessages() > receivedMsgs); { AttributesMutator am = r.getAttributesMutator(); am.setCacheWriter(null); } assertEquals(0, this.clInvokeCount); this.clLastEvent = null; getOtherVm() .invoke( new CacheSerializableRunnable("check region invalidate") { public void run2() throws CacheException { Region r = getRootRegion("ProxyDUnitTest"); r.invalidateRegion(); } }); assertEquals(1, this.clInvokeCount); assertEquals(Operation.REGION_INVALIDATE, this.clLastEvent.getOperation()); assertEquals(true, this.clLastEvent.isOriginRemote()); assertEquals(this.otherId, this.clLastEvent.getDistributedMember()); this.clLastEvent = null; getOtherVm() .invoke( new CacheSerializableRunnable("check region clear") { public void run2() throws CacheException { Region r = getRootRegion("ProxyDUnitTest"); r.clear(); } }); assertEquals(2, this.clInvokeCount); assertEquals(Operation.REGION_CLEAR, this.clLastEvent.getOperation()); assertEquals(true, this.clLastEvent.isOriginRemote()); assertEquals(this.otherId, this.clLastEvent.getDistributedMember()); this.clLastEvent = null; getOtherVm() .invoke( new CacheSerializableRunnable("check region destroy") { public void run2() throws CacheException { Region r = getRootRegion("ProxyDUnitTest"); r.destroyRegion(); } }); assertEquals(3, this.clInvokeCount); assertEquals(Operation.REGION_DESTROY, this.clLastEvent.getOperation()); assertEquals(true, this.clLastEvent.isOriginRemote()); assertEquals(this.otherId, this.clLastEvent.getDistributedMember()); assertTrue(r.isDestroyed()); }