From 39f1d72a1fe8d9f15345add5b66a69ee8c99a40e Mon Sep 17 00:00:00 2001 From: Cotton-Ben Date: Sat, 29 Mar 2014 21:38:22 -0400 Subject: [PATCH] repaired my breaks. --- .../net/openhft/jcache/BondVOInterface.java | 99 +++++++---- .../OffHeapDefaultDataContainerTest.java | 165 ++++++++++-------- .../net/openhft/jcache/BondVOInterface.class | Bin 1119 -> 976 bytes .../OffHeapDefaultDataContainerTest.class | Bin 14040 -> 14983 bytes 4 files changed, 155 insertions(+), 109 deletions(-) diff --git a/src/main/java/net/openhft/jcache/BondVOInterface.java b/src/main/java/net/openhft/jcache/BondVOInterface.java index 3a5ec85..6e1b47e 100755 --- a/src/main/java/net/openhft/jcache/BondVOInterface.java +++ b/src/main/java/net/openhft/jcache/BondVOInterface.java @@ -1,59 +1,82 @@ +/* + * Copyright 2013 Peter Lawrey + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package net.openhft.jcache; -import net.openhft.lang.io.Bytes; import net.openhft.lang.model.constraints.MaxSize; -//import org.infinispan.offheap.container.entries.OffHeapInternalCacheEntry; - public interface BondVOInterface { + /* add support for entry based locking */ + void busyLockEntry() throws InterruptedException; - /* add support for entry based locking */ - void busyLockEntry() throws InterruptedException; - void unlockEntry(); + void unlockEntry(); - void setRecord(Bytes record); - Bytes getRecord(); + long getIssueDate(); - void setEntry(Bytes entry); - Bytes getEntry(); + void setIssueDate(long issueDate); /* time in millis */ - long getIssueDate(); - void setIssueDate(long issueDate); /* time in millis */ + long getMaturityDate(); - long getMaturityDate(); - void setMaturityDate(long maturityDate); /* time in millis */ + void setMaturityDate(long maturityDate); /* time in millis */ - long addAtomicMaturityDate(long toAdd); + long addAtomicMaturityDate(long toAdd); - double getCoupon(); - void setCoupon(double coupon); + double getCoupon(); - double addAtomicCoupon(double toAdd); + void setCoupon(double coupon); - void setSymbol(@MaxSize(20) String symbol); - String getSymbol(); + double addAtomicCoupon(double toAdd); - //OpenHFT Off-Heap array[ ] processing notice ‘At’ suffix - void setMarketPxIntraDayHistoryAt(@MaxSize(7) int tradingDayHour, MarketPx mPx); - MarketPx getMarketPxIntraDayHistoryAt(int tradingDayHour); + void setSymbol(@MaxSize(20) String symbol); - /* nested interface - empowering an Off-Heap hierarchical “TIER of prices” - as array[ ] value */ - interface MarketPx { - double getCallPx(); - void setCallPx(double px); + String getSymbol(); - double getParPx(); - void setParPx(double px); + // OpenHFT Off-Heap array[ ] processing notice ‘At’ suffix + void setMarketPxIntraDayHistoryAt(@MaxSize(7) int tradingDayHour, MarketPx mPx); - double getMaturityPx(); - void setMaturityPx(double px); + /* 7 Hours in the Trading Day: + * index_0 = 9.30am, + * index_1 = 10.30am, + …, + * index_6 = 4.30pm + */ - double getBidPx(); - void setBidPx(double px); + MarketPx getMarketPxIntraDayHistoryAt(int tradingDayHour); - double getAskPx(); - void setAskPx(double px); - } -} + /* nested interface - empowering an Off-Heap hierarchical “TIER of prices” + as array[ ] value */ + interface MarketPx { + double getCallPx(); + + void setCallPx(double px); + + double getParPx(); + + void setParPx(double px); + double getMaturityPx(); + + void setMaturityPx(double px); + + double getBidPx(); + + void setBidPx(double px); + + double getAskPx(); + + void setAskPx(double px); + } +} diff --git a/src/test/java/net/openhft/jcache/OffHeapDefaultDataContainerTest.java b/src/test/java/net/openhft/jcache/OffHeapDefaultDataContainerTest.java index 2ba2de1..1b843db 100755 --- a/src/test/java/net/openhft/jcache/OffHeapDefaultDataContainerTest.java +++ b/src/test/java/net/openhft/jcache/OffHeapDefaultDataContainerTest.java @@ -1,6 +1,8 @@ package net.openhft.jcache; +import net.openhft.collections.SharedHashMap; +import net.openhft.collections.SharedHashMapBuilder; import net.openhft.lang.model.DataValueClasses; import org.infinispan.container.DataContainer; import org.infinispan.container.entries.InternalCacheEntry; @@ -14,6 +16,8 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; +import java.io.File; +import java.io.IOException; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -34,14 +38,23 @@ @Test(groups = "unit", testName = "jcache.OffHeapDataContainerTest") public class OffHeapDefaultDataContainerTest extends AbstractInfinispanTest { DataContainer jcacheDataContainer; + SharedHashMap shm; @BeforeMethod - public void setUp() throws InterruptedException { + public void setUp() throws InterruptedException, IOException { Thread.sleep(2000); System.out.println("ISPN7 JCACHE DataContainer view of OpenHFT SHM is being created"); this.jcacheDataContainer = createJcacheContainer(); + this.shm = new SharedHashMapBuilder() + .generatedValueType(true) + .entrySize(512) + .create( + new File("/dev/shm/openHFT_SHM"), + String.class, + BondVOInterface.class + ); Thread.sleep(2000); System.out.println("ISPN7 JCACHE DataContainer created jcacheDataContainer=["+jcacheDataContainer.toString()+"]"); Thread.sleep(2000); @@ -50,6 +63,7 @@ public void setUp() throws InterruptedException { @AfterMethod public void tearDown() { this.jcacheDataContainer = null; + this.shm = null; } @@ -72,34 +86,33 @@ protected DataContainer createJcacheContainer() { public void testOpenHFTasOffHeapJcacheOperandProvider() throws InterruptedException { //TODO: build a join to OpenHFT MetaData - this comes in OpenHFT 3.0d - BondVOInterface bondV = DataValueClasses.newDirectReference(BondVOInterface.class); - bondV.setSymbol("IBM_HIGH_YIELD_30_YR_5.5"); + this.shm.acquireUsing("369604103", bondV); + bondV.setSymbol("IBM_HY_30_YR_5.5"); bondV.setIssueDate(20140315); //beware the ides of March bondV.setMaturityDate(20440315); //30 years bondV.setCoupon(0.055); //5.5% this.jcacheDataContainer.put( - "IBMHY2044", + "369604103", bondV, new OffHeapEmbeddedMetadata .OffHeapBuilder() - .maxIdle(100, - TimeUnit.MINUTES) + .maxIdle(100,TimeUnit.MINUTES) .build() ); Thread.sleep(2000); - System.out.println("ISPN7 JCACHE put() the BondVOInterface (IBMHY2044) into DataContainer bondV=["+bondV+"]"); + System.out.println("ISPN7 JCACHE put() the BondVOInterface (\"369604103\") into DataContainer bondV=["+bondV+"]"); Thread.sleep(2000); - System.out.println("Using ISPN7 JCACHE to get(IBMHT2044) BondVOInterface <-- DataContainer (bondV=["+bondV+"])"); + System.out.println("Using ISPN7 JCACHE to get(\"369604103\") BondVOInterface <-- DataContainer (bondV=["+bondV+"])"); Thread.sleep(2000); - InternalCacheEntry bondEntry = this.jcacheDataContainer.get("IBMHY2044"); + InternalCacheEntry bondEntry = this.jcacheDataContainer.get("369604103"); Thread.sleep(2000); - System.out.println("ISPN7 JCACHE got the (IBMHT2044) BondVOInterface from DataContainer (entry.getSymbol()=["+ + System.out.println("ISPN7 JCACHE got the (\"369604103\") BondVOInterface from DataContainer (entry.getSymbol()=["+ ((BondVOInterface) bondEntry).getSymbol() + "])"); @@ -108,10 +121,10 @@ public void testOpenHFTasOffHeapJcacheOperandProvider() throws InterruptedExcept assert bondEntry.getLastUsed() <= System.currentTimeMillis(); long entryLastUsed = bondEntry.getLastUsed(); Thread.sleep(2000); - bondEntry = this.jcacheDataContainer.get("IBMHY2044"); + bondEntry = this.jcacheDataContainer.get("369604103"); assert bondEntry.getLastUsed() > entryLastUsed; this.jcacheDataContainer.put( - "IBMHY2044", + "369604103", bondV, new OffHeapEmbeddedMetadata .OffHeapBuilder() @@ -121,7 +134,7 @@ public void testOpenHFTasOffHeapJcacheOperandProvider() throws InterruptedExcept this.jcacheDataContainer.purgeExpired(); this.jcacheDataContainer.put( - "IBMHY2044", + "369604103", bondV, new OffHeapEmbeddedMetadata .OffHeapBuilder() @@ -131,17 +144,17 @@ public void testOpenHFTasOffHeapJcacheOperandProvider() throws InterruptedExcept Thread.sleep(2000); assert this.jcacheDataContainer.size() == 1; - bondEntry= jcacheDataContainer.get("IBMHY2044"); + bondEntry= jcacheDataContainer.get("369604103"); assert bondEntry != null : "Entry should not be null!"; assert bondEntry.getClass().equals(mortaltype()) : "Expected "+mortaltype()+", was " + bondEntry.getClass().getSimpleName(); assert bondEntry.getCreated() <= System.currentTimeMillis(); - this.jcacheDataContainer.put("IBMHY2044", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().lifespan(0, TimeUnit.MINUTES).build()); + this.jcacheDataContainer.put("369604103", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().lifespan(0, TimeUnit.MINUTES).build()); Thread.sleep(10); assert this.jcacheDataContainer.get("k") == null; assert this.jcacheDataContainer.size() == 0; - this.jcacheDataContainer.put("IBMHY2044", "v", new OffHeapEmbeddedMetadata.OffHeapBuilder().lifespan(0, TimeUnit.MINUTES).build()); + this.jcacheDataContainer.put("369604103", "v", new OffHeapEmbeddedMetadata.OffHeapBuilder().lifespan(0, TimeUnit.MINUTES).build()); Thread.sleep(100); assert this.jcacheDataContainer.size() == 1; this.jcacheDataContainer.purgeExpired(); @@ -156,12 +169,13 @@ public void testOpenHFTasOffHeapJcacheOperandProvider() throws InterruptedExcept public void testResetOfCreationTime() throws Exception { long now = System.currentTimeMillis(); BondVOInterface bondV = DataValueClasses.newDirectReference(BondVOInterface.class); - bondV.setSymbol("IBM_HIGH_YIELD_30_YR_5.5"); + this.shm.acquireUsing("369604103", bondV); + bondV.setSymbol("IBM_HY_30_YR_5.5"); bondV.setIssueDate(20140315); //beware the ides of March bondV.setMaturityDate(20440315); //30 years bondV.setCoupon(0.055); //5.5% this.jcacheDataContainer.put( - "IBMHY2044", + "369604103", bondV, new OffHeapEmbeddedMetadata .OffHeapBuilder() @@ -172,7 +186,7 @@ public void testResetOfCreationTime() throws Exception { assert created1 >= now; Thread.sleep(100); this.jcacheDataContainer.put( - "IBMHY2044", + "369604103", bondV, new OffHeapEmbeddedMetadata .OffHeapBuilder() @@ -187,25 +201,26 @@ public void testResetOfCreationTime() throws Exception { public void testUpdatingLastUsed() throws Exception { long idle = 600000; BondVOInterface bondV = DataValueClasses.newDirectReference(BondVOInterface.class); - bondV.setSymbol("IBM_HIGH_YIELD_30_YR_5.5"); + this.shm.acquireUsing("369604103", bondV); + bondV.setSymbol("IBM_HY_30_YR_5.5"); bondV.setIssueDate(20140315); //beware the ides of March bondV.setMaturityDate(20440315); //30 years bondV.setCoupon(0.055); //5.5% this.jcacheDataContainer.put( - "IBMHY2044", + "369604103", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder() .build() ); - InternalCacheEntry ice = this.jcacheDataContainer.get("k"); + InternalCacheEntry ice = this.jcacheDataContainer.get("369604103"); assert ice.getClass().equals(immortaltype()); assert ice.toInternalCacheValue().getExpiryTime() == -1; assert ice.getMaxIdle() == -1; assert ice.getLifespan() == -1; - this.jcacheDataContainer.put("IBMHY2044", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().maxIdle(idle, TimeUnit.MILLISECONDS).build()); + this.jcacheDataContainer.put("369604103", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().maxIdle(idle, TimeUnit.MILLISECONDS).build()); long oldTime = System.currentTimeMillis(); Thread.sleep(100); // for time calc granularity - ice =this.jcacheDataContainer.get("IBMHY2044"); + ice =this.jcacheDataContainer.get("369604103"); assert ice.getClass().equals(transienttype()); assert ice.toInternalCacheValue().getExpiryTime() > -1; assert ice.getLastUsed() > oldTime; @@ -216,7 +231,7 @@ public void testUpdatingLastUsed() throws Exception { oldTime = System.currentTimeMillis(); Thread.sleep(100); // for time calc granularity - assert this.jcacheDataContainer.get("IBMHY2044") != null; + assert this.jcacheDataContainer.get("369604103") != null; // check that the last used stamp has been updated on a get assert ice.getLastUsed() > oldTime; @@ -243,13 +258,14 @@ protected Class transientmortaltype() { public void testExpirableToImmortalAndBack() { BondVOInterface bondV = DataValueClasses.newDirectReference(BondVOInterface.class); - bondV.setSymbol("IBM_HIGH_YIELD_30_YR_5.5"); + this.shm.acquireUsing("369604103", bondV); + bondV.setSymbol("IBM_HY_30_YR_5.5"); bondV.setIssueDate(20140315); //beware the ides of March bondV.setMaturityDate(20440315); //30 years bondV.setCoupon(0.055); //5.5% String value = "v"; - this.jcacheDataContainer.put("IBMHY2044", value, new OffHeapEmbeddedMetadata.OffHeapBuilder().lifespan(100, TimeUnit.MINUTES).build()); + this.jcacheDataContainer.put("369604103", value, new OffHeapEmbeddedMetadata.OffHeapBuilder().lifespan(100, TimeUnit.MINUTES).build()); assertContainerEntry(this.mortaltype(), value); value = "v2"; @@ -280,8 +296,8 @@ private void assertContainerEntry( Class type, String expectedValue ) { - assert this.jcacheDataContainer.containsKey("IBMHY2044"); - InternalCacheEntry entry = this.jcacheDataContainer.get("IBMHY2044"); + assert this.jcacheDataContainer.containsKey("369604103"); + InternalCacheEntry entry = this.jcacheDataContainer.get("369604103"); assertEquals(type, entry.getClass()); assertEquals(expectedValue, entry.getValue()); } @@ -289,22 +305,24 @@ private void assertContainerEntry( public void testKeySet() { + BondVOInterface bondV = DataValueClasses.newDirectReference(BondVOInterface.class); - bondV.setSymbol("IBM_HIGH_YIELD_30_YR_5.5"); + this.shm.acquireUsing("369604103", bondV); + bondV.setSymbol("IBM_HY_30_YR_5.5"); bondV.setIssueDate(20140315); //beware the ides of March bondV.setMaturityDate(20440315); //30 years bondV.setCoupon(0.055); //5.5% this.jcacheDataContainer.put( - "k1", + "369603001", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder() .lifespan(100, TimeUnit.MINUTES) .build() ); - this.jcacheDataContainer.put("k2", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().build()); + this.jcacheDataContainer.put("369603002", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().build()); this.jcacheDataContainer.put( - "k3", + "369603002", bondV, new OffHeapEmbeddedMetadata .OffHeapBuilder() @@ -312,7 +330,7 @@ public void testKeySet() { .build() ); this.jcacheDataContainer.put( - "k4", + "369603003", bondV, new OffHeapEmbeddedMetadata .OffHeapBuilder() @@ -322,10 +340,10 @@ public void testKeySet() { ); Set expected = new HashSet(); - expected.add("k1"); - expected.add("k2"); - expected.add("k3"); - expected.add("k4"); + expected.add("369603001"); + expected.add("369603002"); + expected.add("369603003"); + expected.add("369603004"); for (Object o : this.jcacheDataContainer.keySet()) { assert expected.remove(o); @@ -338,7 +356,8 @@ public void testKeySet() { public void testContainerIteration() { BondVOInterface bondV = DataValueClasses.newDirectReference(BondVOInterface.class); - bondV.setSymbol("IBM_HIGH_YIELD_30_YR_5.5"); + this.shm.acquireUsing("369604103", bondV); + bondV.setSymbol("IBM_HY_30_YR_5.5"); bondV.setIssueDate(20140315); //beware the ides of March bondV.setMaturityDate(20440315); //30 years bondV.setCoupon(0.055); //5.5% @@ -370,10 +389,10 @@ public void testContainerIteration() { .build()); Set expected = new HashSet(); - expected.add("k1"); - expected.add("k2"); - expected.add("k3"); - expected.add("k4"); + expected.add("369603001"); + expected.add("369603002"); + expected.add("369603003"); + expected.add("369603004"); for (InternalCacheEntry ice : jcacheDataContainer) { assert expected.remove(ice.getKey()); @@ -385,22 +404,23 @@ public void testContainerIteration() { public void testKeys() { BondVOInterface bondV = DataValueClasses.newDirectReference(BondVOInterface.class); - bondV.setSymbol("IBM_HIGH_YIELD_30_YR_5.5"); + this.shm.acquireUsing("369604103", bondV); + bondV.setSymbol("IBM_HY_30_YR_5.5"); bondV.setIssueDate(20140315); //beware the ides of March bondV.setMaturityDate(20440315); //30 years bondV.setCoupon(0.055); //5.5% - jcacheDataContainer.put("k1", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().lifespan(100, TimeUnit.MINUTES).build()); - jcacheDataContainer.put("k2", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().build()); - jcacheDataContainer.put("k3", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().maxIdle(100, TimeUnit.MINUTES).build()); - jcacheDataContainer.put("k4", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder() + jcacheDataContainer.put("369603001", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().lifespan(100, TimeUnit.MINUTES).build()); + jcacheDataContainer.put("369603002", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().build()); + jcacheDataContainer.put("369603003", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().maxIdle(100, TimeUnit.MINUTES).build()); + jcacheDataContainer.put("369603004", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder() .maxIdle(100, TimeUnit.MINUTES).lifespan(100, TimeUnit.MINUTES).build()); Set expected = new HashSet(); - expected.add("k1"); - expected.add("k2"); - expected.add("k3"); - expected.add("k4"); + expected.add("369603001"); + expected.add("369603002"); + expected.add("369603003"); + expected.add("369603004"); for (Object o : jcacheDataContainer.keySet()) assert expected.remove(o); @@ -410,23 +430,24 @@ public void testKeys() { public void testValues() { BondVOInterface bondV = DataValueClasses.newDirectReference(BondVOInterface.class); - bondV.setSymbol("IBM_HIGH_YIELD_30_YR_5.5"); + this.shm.acquireUsing("369604103", bondV); + bondV.setSymbol("IBM_HY_30_YR_5.5"); bondV.setIssueDate(20140315); //beware the ides of March bondV.setMaturityDate(20440315); //30 years bondV.setCoupon(0.055); //5.5% - jcacheDataContainer.put("k1", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().lifespan(100, TimeUnit.MINUTES).build()); - jcacheDataContainer.put("k2", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().build()); - jcacheDataContainer.put("k3", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().maxIdle(100, TimeUnit.MINUTES).build()); - jcacheDataContainer.put("k4", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder() + jcacheDataContainer.put("369603001", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().lifespan(100, TimeUnit.MINUTES).build()); + jcacheDataContainer.put("369603002", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().build()); + jcacheDataContainer.put("369603003", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().maxIdle(100, TimeUnit.MINUTES).build()); + jcacheDataContainer.put("369603004", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder() .maxIdle(100, TimeUnit.MINUTES).lifespan(100, TimeUnit.MINUTES).build()); Set expected = new HashSet(); - expected.add("v1"); - expected.add("v2"); - expected.add("v3"); - expected.add("v4"); + expected.add("369603001"); + expected.add("369603002"); + expected.add("369603003"); + expected.add("369603004"); for (Object o : jcacheDataContainer.values()) assert expected.remove(o); @@ -436,22 +457,23 @@ public void testValues() { public void testEntrySet() { BondVOInterface bondV = DataValueClasses.newDirectReference(BondVOInterface.class); - bondV.setSymbol("IBM_HIGH_YIELD_30_YR_5.5"); + this.shm.acquireUsing("369604103", bondV); + bondV.setSymbol("IBM_HY_30_YR_5.5"); bondV.setIssueDate(20140315); //beware the ides of March bondV.setMaturityDate(20440315); //30 years bondV.setCoupon(0.055); //5.5% - jcacheDataContainer.put("k1", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().lifespan(100, TimeUnit.MINUTES).build()); - jcacheDataContainer.put("k2", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().build()); - jcacheDataContainer.put("k3", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().maxIdle(100, TimeUnit.MINUTES).build()); - jcacheDataContainer.put("k4", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder() + jcacheDataContainer.put("369603001", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().lifespan(100, TimeUnit.MINUTES).build()); + jcacheDataContainer.put("369603002", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().build()); + jcacheDataContainer.put("369603003", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder().maxIdle(100, TimeUnit.MINUTES).build()); + jcacheDataContainer.put("369603004", bondV, new OffHeapEmbeddedMetadata.OffHeapBuilder() .maxIdle(100, TimeUnit.MINUTES).lifespan(100, TimeUnit.MINUTES).build()); Set expected = new HashSet(); - expected.add(OffHeapCoreImmutables.immutableInternalCacheEntry(jcacheDataContainer.get("k1"))); - expected.add(OffHeapCoreImmutables.immutableInternalCacheEntry(jcacheDataContainer.get("k2"))); - expected.add(OffHeapCoreImmutables.immutableInternalCacheEntry(jcacheDataContainer.get("k3"))); - expected.add(OffHeapCoreImmutables.immutableInternalCacheEntry(jcacheDataContainer.get("k4"))); + expected.add(OffHeapCoreImmutables.immutableInternalCacheEntry(jcacheDataContainer.get("369603001"))); + expected.add(OffHeapCoreImmutables.immutableInternalCacheEntry(jcacheDataContainer.get("369603002"))); + expected.add(OffHeapCoreImmutables.immutableInternalCacheEntry(jcacheDataContainer.get("369603003"))); + expected.add(OffHeapCoreImmutables.immutableInternalCacheEntry(jcacheDataContainer.get("369603004"))); Set> actual = new HashSet>(); for (Map.Entry o : jcacheDataContainer.entrySet()) actual.add(o); @@ -462,7 +484,8 @@ public void testEntrySet() { public void testGetDuringKeySetLoop() { BondVOInterface bondV = DataValueClasses.newDirectReference(BondVOInterface.class); - bondV.setSymbol("IBM_HIGH_YIELD_30_YR_5.5"); + this.shm.acquireUsing("369604103", bondV); + bondV.setSymbol("IBM_HY_30_YR_5.5"); bondV.setIssueDate(20140315); //beware the ides of March bondV.setMaturityDate(20440315); //30 years bondV.setCoupon(0.055); //5.5% diff --git a/target/classes/net/openhft/jcache/BondVOInterface.class b/target/classes/net/openhft/jcache/BondVOInterface.class index 5611cc47649f1eaac7cd07d26620abf8564658ac..77cc335974d9ae608a0f1795b2e6934a8f93b52b 100644 GIT binary patch delta 156 zcmcc5ae-a<)W2Q(7#J9g8FbhgG}sw5*%`DZ3fpsOGcs_O=H=ukXKy^clZlaUax1fc zwip8g3nPO#g9MnCWRPNDWRM1G=3xXfWPn)KlR*xsLY_eZtU{4N395pR386w6ET_Vt Z3e?HOpav$@8CZcd7f=y15VNpx0s!OH5k3F_ delta 306 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