From 4a05e33d46b5ef50e35f0107bdc8c9530e62b54d Mon Sep 17 00:00:00 2001 From: Peter Lawrey Date: Fri, 19 Dec 2014 21:32:45 +0000 Subject: [PATCH] Add an example for lots of entries. --- .../chronicle/map/ChronicleMapTest.java | 3 +- .../map/example/LotsOfEntriesMain.java | 61 +++++++++++++++++++ 2 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 src/test/java/net/openhft/chronicle/map/example/LotsOfEntriesMain.java diff --git a/src/test/java/net/openhft/chronicle/map/ChronicleMapTest.java b/src/test/java/net/openhft/chronicle/map/ChronicleMapTest.java index ea9a9ba7d..f9cf71bff 100755 --- a/src/test/java/net/openhft/chronicle/map/ChronicleMapTest.java +++ b/src/test/java/net/openhft/chronicle/map/ChronicleMapTest.java @@ -523,7 +523,6 @@ public class ChronicleMapTest { map.close(); } - @Ignore("JIRA raised HCOLL-221") @Test public void testAcquireFromMultipleThreads() throws Exception { int entries = 1000 * 1000; @@ -538,7 +537,7 @@ public class ChronicleMapTest { CharSequence key = getUserCharSequence(0); map.acquireUsing(key, new LongValue$$Native()); - int iterations = 1000; + int iterations = 10000; int noOfThreads = 10; CyclicBarrier barrier = new CyclicBarrier(noOfThreads); diff --git a/src/test/java/net/openhft/chronicle/map/example/LotsOfEntriesMain.java b/src/test/java/net/openhft/chronicle/map/example/LotsOfEntriesMain.java new file mode 100644 index 000000000..67ffcec9c --- /dev/null +++ b/src/test/java/net/openhft/chronicle/map/example/LotsOfEntriesMain.java @@ -0,0 +1,61 @@ +package net.openhft.chronicle.map.example; + +import net.openhft.chronicle.map.ChronicleMap; +import net.openhft.chronicle.map.ChronicleMapBuilder; +import net.openhft.lang.model.constraints.MaxSize; + +import java.io.File; +import java.io.IOException; +import java.util.Random; + +/** + * Created by peter on 19/12/14. + */ +public class LotsOfEntriesMain { + public static void main(String[] args) throws IOException { + workEntries(true); + workEntries(false); + } + + private static void workEntries(boolean add) throws IOException { + long entries = 100_000_000; + File file = new File("/tmp/lotsOfEntries.dat"); + ChronicleMap map = ChronicleMapBuilder + .of(CharSequence.class, MyFloats.class) + .entries(entries) + .entrySize(80) + .createPersistedTo(file); + Random rand = new Random(); + StringBuilder sb = new StringBuilder(); + MyFloats mf = map.newValueInstance(); + if (add) + for (int i = 0; i < 6; i++) + mf.setValueAt(i, i); + long start = System.nanoTime(); + for (long i = 0; i < entries; i++) { + sb.setLength(0); + int length = (int) (24 / (rand.nextFloat() + 24.0 / 1000)); + if (length > 2000) + throw new AssertionError(); + sb.append(i); + while (sb.length() < length) + sb.append("-key"); + if (add) + map.put(sb, mf); + else + map.getUsing(sb, mf); + if (i << -7 == 0 && i % 2000000 == 0) + System.out.println(i); + } + long time = System.nanoTime() - start; + System.out.printf("Map.size: %,d took an average of %,d ns to %s.%n", + map.size(), time / entries, add ? "add" : "get"); + map.close(); + } +} + +interface MyFloats { + public void setValueAt(@MaxSize(6) int index, float f); + + public float getValueAt(int index); +}