Giter VIP home page Giter VIP logo

hugecollections-old's People

Contributors

ashelleyhft avatar danielshaya avatar ellison121 avatar hft-team-city avatar jacksjpt avatar jaromirs avatar jozsefbartokhft avatar lburgazzoli avatar leventov avatar peter-lawrey avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hugecollections-old's Issues

VanillaShortShortMultiMap is full when capacity is still available

The following code reproduces an issue of the map being full despite having 25% of its capacity still available.

import java.io.File;
import java.io.IOException;
import java.util.Iterator;

import net.openhft.collections.SharedHashMap;
import net.openhft.collections.SharedHashMapBuilder;

public class SharedHashMapBug {

public static void main(String[] args) 
{   
    SharedHashMap<String, byte[]> sharedHashMap = null;
    Iterator<String> it = null;

    int numEntries = 2048;
    int entrySize = 32768;
    int removeThreshold = (int)(numEntries * 0.75);

    SharedHashMapBuilder builder = new SharedHashMapBuilder();
    builder.entries(numEntries);
    builder.entrySize(entrySize);
    String shmPath = System.getProperty("java.io.tmpdir") + System.getProperty("file.separator") + "SharedHashMap";

    File file = new File(shmPath);
    file.delete();

    try {
        sharedHashMap = builder.create(new File(shmPath), String.class, byte[].class);
    } catch (IOException e) {
        e.printStackTrace();
    }

    if(sharedHashMap != null)
    {
        byte[] value = new byte[30000];

        int index = 0;
        while(index < (numEntries * 1024))
        {
            String key = String.valueOf(index);             

            if(sharedHashMap.longSize() > removeThreshold)
            {
                if((it == null) || (!it.hasNext()))
                {
                    it = sharedHashMap.keySet().iterator();
                }

                if(it.hasNext())
                {
                    String removalKey = it.next();
                    byte[] removalValue = sharedHashMap.remove(removalKey);

                    if(removalValue == null)
                    {
                        System.out.println("no entry to remove for " + removalKey);
                    }
                }
            }

            //System.out.println("put(" + key + ", " + value + " );");
            sharedHashMap.put(key, value);

            ++index;
        }
    }
}

}

Here is the output when run:

Exception in thread "main" java.lang.IllegalStateException: VanillaShortShortMultiMap is full
at net.openhft.collections.VanillaShortShortMultiMap.nextPos(VanillaShortShortMultiMap.java:199)
at net.openhft.collections.AbstractVanillaSharedHashMap$Segment.put(VanillaSharedHashMap.java:823)
at net.openhft.collections.AbstractVanillaSharedHashMap.put0(VanillaSharedHashMap.java:348)
at net.openhft.collections.AbstractVanillaSharedHashMap.put(VanillaSharedHashMap.java:330)
at SharedHashMapBug.main(SharedHashMapBug.java:62)

OpenHFT SHM as JCACHE Operand : testKeySet() failing ...

Our @testsuite to adapt SHM as an ISPN7 JCACHE operand is currently failing the testKeySet() test .

line 291 at https://github.com/Cotton-Ben/infinispan/blob/master/off-heap/src/test/java/org/infinispan/offheap/test/OffHeapDefaultDataContainerTest.java makes the exact same OpenHFT invoke as was used in the infoQ whitepaper.

 BondVOInterface bondV = DataValueClasses.newDirectReference(BondVOInterface.class);

could you guys take a look and provide counsel?

here is the stack trace.

[TestNG] Running:
/root/.IdeaIC13/system/temp-testng-customsuite.xml

ISPN7 JCACHE DataContainer view of OpenHFT SHM is being created
OpenHFT /dev/shmSHM/bondVO.@t=1395590961708 entries=[{}]
initialize
ISPN7 JCACHE DataContainer created jcacheDataContainer=[org.infinispan.offheap.container.OffHeapDefaultDataContainer@50431425]
warning: Supported source version 'RELEASE_6' from annotation processor 'org.sonatype.guice.bean.scanners.index.SisuIndexAPT6' less than -source '1.7'
1 warning
java.lang.AssertionError: java.lang.NullPointerException
at net.openhft.lang.model.DataValueClassCache.newDirectReference(DataValueClassCache.java:39)
at net.openhft.lang.model.DataValueClasses.newDirectReference(DataValueClasses.java:36)
at org.infinispan.offheap.OffHeapDefaultDataContainerTest.testKeySet(OffHeapDefaultDataContainerTest.java:291)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:767)
at org.testng.TestRunner.run(TestRunner.java:617)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1123)
at org.testng.TestNG.run(TestNG.java:1031)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:125)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.lang.NullPointerException
at net.openhft.lang.model.DataValueGenerator.methodSet(DataValueGenerator.java:691)
at net.openhft.lang.model.DataValueGenerator.generateNativeObject(DataValueGenerator.java:539)
at net.openhft.lang.model.DataValueGenerator.acquireNativeClass(DataValueGenerator.java:482)
at net.openhft.lang.model.DataValueClassCache.directClassFor(DataValueClassCache.java:48)
at net.openhft.lang.model.DataValueClassCache.newDirectReference(DataValueClassCache.java:37)
... 32 more

Process finished with exit code 0

Chronicle Map not thread-safe in certain circumstances

When concurrent threads reading/writing to DIFFERENT map entries through standard DataValueClass generated getter/setters (marshalling to corresponding UNSAFE methods) and if these map entries phyically reside in the SAME SEGMENT then there is possibility of corruption of data.
Problem seems since version 3.0.2 collections i.e. I cannot reliably reproduce on that version..but I can pretty consistantly reproduce on latest 3.2.1 collections and 6.4.6 lang on two completely different platforms i.e. ubuntu 12.04 AMD Athlon(tm) 64 X2 Dual Core Processor 3600+ × 2 and on MacOSX 10.7.5 2.2GHz Core i7 using the same test program below : NOTE : ignore the junit test result .. its the logging that indicates the actual problem.

package com.nimrod.test;

import static org.junit.Assert.*;

import java.io.File;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;

import net.openhft.collections.SharedHashMap;
import net.openhft.collections.SharedHashMapBuilder;
import net.openhft.lang.model.DataValueClasses;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TestSharedHashMap {
final static Logger logger = LoggerFactory.getLogger(TestSharedHashMap.class);
SharedHashMap<String, TestDataValue> shm;
TestDataValue data1 = DataValueClasses.newDirectReference(TestDataValue.class);
TestDataValue data2 = DataValueClasses.newDirectReference(TestDataValue.class);
TestDataValue data3 = DataValueClasses.newDirectReference(TestDataValue.class);
TestDataValue data4 = DataValueClasses.newDirectReference(TestDataValue.class);
TestDataValue data5 = DataValueClasses.newDirectReference(TestDataValue.class);
TestDataValue data6 = DataValueClasses.newDirectReference(TestDataValue.class);
TestDataValue data7 = DataValueClasses.newDirectReference(TestDataValue.class);
TestDataValue data8 = DataValueClasses.newDirectReference(TestDataValue.class);

ThreadPoolExecutor threads = (ThreadPoolExecutor)Executors.newFixedThreadPool(2);

final CountDownLatch endGate = new CountDownLatch(2);

@Before
public void setUp() throws Exception {
    try {
        shm = new SharedHashMapBuilder()
        .generatedValueType(true)
        .entries(2048)
        .entrySize(256)
        .file(new File("/run/shm/TestOpenHFT")).kClass(String.class).vClass(TestDataValue.class).create();

//For older versions
// shm = new SharedHashMapBuilder()
// .generatedValueType(true)
// //.entries(2048)
// .entrySize(1024)
// .create(new File("/run/shm/TestOpenHFT"),String.class,TestDataValue.class);

        //Map entries are loaded into various segments in mappeddatastore
        shm.acquireUsing("1111.2222.A0", data1);

        shm.acquireUsing("1111.2222.B0", data2);

        shm.acquireUsing("1111.2222.A1", data3);

        shm.acquireUsing("1111.2222.B1", data4);

        shm.acquireUsing("1111.2222.A2", data5);

        shm.acquireUsing("1111.2222.B2", data6);

        //data7 typically points to data in same segment as data1 points to i.e. segmentnum=0
        //To see segments i added line
        //LOG.info("key="+key+" segmentnum="+segmentNum);
        //in method : V lookupUsing(K key, V value, boolean create) in class VanillaSharedHashMap

        shm.acquireUsing("1111.2222.A3", data7);

        shm.acquireUsing("1111.2222.B3", data8);
    } catch(Exception e) {
        endGate.countDown();
        endGate.countDown();
        e.printStackTrace();
    }
}

@After
public void tearDown() {
    try {
        endGate.await();
        shm.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

@Test
public void test() {
    //Simple case just to prove all is OK
    data1.setLongString("AAAAAAAAAAAAAAAAAAAA");
    assertEquals("AAAAAAAAAAAAAAAAAAAA", data1.getLongString());
    data7.setLongString("BBBBBBBBBBBBBBBBBBBB");
    assertEquals("BBBBBBBBBBBBBBBBBBBB", data7.getLongString());

    logger.info("Start threads to test concurrent read/write in same segment .. this should usually fail");
    //..change data7 to another e.g. data2 and should work
    threads.execute(new TestTask(data1,"AAAAAAAAAAAAAAAAAAAA"));
    threads.execute(new TestTask(data7,"BBBBBBBBBBBBBBBBBBBB"));
}

class TestTask implements Runnable {
    TestDataValue data; 
    String msg;
    TestTask(TestDataValue data, String msg) {
        this.data = data;
        this.msg = msg;
    }
    public void run() {
        for(int i=0;i<100;i++) {
            data.setLongString(msg);
            logger.info("test "+i+" "+data.getLongString());
            try {
                assertEquals(msg, data.getLongString());
            } catch (AssertionError e) {
                logger.error("AssertionError",e);
                break;
            }
        }
        endGate.countDown();
    }

}

}

custom marshalling/serialization

Hi Peter,

As we have hundreds of datastructures, we go down the serialization route. I need a way to efficiently plug in a custom serializer.

checking AbstractBytes

public void writeObject(@Nullable Object obj) {
        if (obj == null) {
            writeByte(NULL);
            return;
        }

        Class<?> clazz = obj.getClass();
        final BytesMarshallerFactory bytesMarshallerFactory = bytesMarshallerFactory();
        BytesMarshaller em = bytesMarshallerFactory.acquireMarshaller(clazz, false);
        if (em == NoMarshaller.INSTANCE && autoGenerateMarshaller(obj))
            em = bytesMarshallerFactory.acquireMarshaller(clazz, true);

        if (em != NoMarshaller.INSTANCE) {
            if (em instanceof CompactBytesMarshaller) {
                writeByte(((CompactBytesMarshaller) em).code());
                em.write(this, obj);
                return;
            }
            writeByte(ENUMED);
            writeEnum(clazz);
            em.write(this, obj);
            return;
        }
        writeByte(SERIALIZED);
        // TODO this is the lame implementation, but it works.
        try {
            ObjectOutputStream oos = new ObjectOutputStream(this.outputStream());
            oos.writeObject(obj);
        } catch (IOException e) {
            throw new IllegalStateException(e);
        }
        checkEndOfBuffer();
    }

Is there a way to basically shortcut this routine (e.g. also avoid

Class<?> clazz = obj.getClass();
final BytesMarshallerFactory bytesMarshallerFactory = bytesMarshallerFactory();
BytesMarshaller em = bytesMarshallerFactory.acquireMarshaller(clazz, false);

as this lookup can be like 10% percent in case of smallish objects. If we can agree on some 'pluggable' interface I can do the work and contribute. Or is there another way to customize serialization ?

regards,
Rüdiger

HugeHashMap with JPA elements

Hi everyone,

i am having an issue with my HugeHashMap and Database persist.
In fact, when i persist my objects from the HugeHashMap i don't get what i was expecting.

I have an Instance that contains an id, a word context as a String, some positions as integers,..
And instead of having the values i got this for each Instance in HugeHashMap:
id="table.Instance[ id=000171fe-15a2-46fd-97eb-957d42940f8a ]"
Auto="0"
Context=""
position1="0"
position2="0"
position3="0"
position4="0"
position5="0"
foreignId=""

Here is the code where i manage the HugeHashMap:

public void generateInstances(String path) throws IOException, ParseException, InvalidTokenOffsetsException{
        HugeConfig config = HugeConfig.DEFAULT.clone();
        HugeHashMap<String, Instance> instanceArray = new HugeHashMap<String, Instance>(config,String.class,Instance.class);
        HugeHashMap<Integer,TermeinstancedocumentPK> tidArray = new HugeHashMap<Integer,TermeinstancedocumentPK>(config,Integer.class,TermeinstancedocumentPK.class);
        ArrayList<Context> contexesArray = new ArrayList<>();
        Integer idtid=1;
        DocumentIndexer lucene = new DocumentIndexer(path);
        Project p = this.getProject();        
        for(Notion n : p.getNotionCollection()){
            for (Term t : n.getTermCollection()) {
                for (Variable v : t.getVariableCollection()) {
                    contexesArray = lucene.getContextes(v.getName(),90);
                    for(Context c : contexesArray){
                        boolean instanceAlreadyExists=false;
                        String rightContext = c.getRightContext();
                        String[] contextRight = rightContext.split("\n");
                        StringJoiner joiner = new StringJoiner(" | ");
                        for(String s: contextRight){
                            joiner.add(s);
                        }
                        rightContext = joiner.toString();
                        String leftContext = c.getLeftContext();
                        int leftContextSizeBefore=leftContext.length();
                        String[] contextLeft = leftContext.split("\n");
                        StringJoiner joiner2 = new StringJoiner(" | ");
                        for(String s: contextLeft){
                            joiner2.add(s);
                        }
                        leftContext = joiner2.toString();
                        int leftContextSizeAfter=leftContext.length();
                        int relativeLeftContextSize = leftContextSizeAfter-leftContextSizeBefore;
                        String context = leftContext + c.getTerm() + rightContext;
                        Instance i = new Instance();
                        if(instanceArray.containsKey(context)){
                                instanceAlreadyExists=true;
                                i=instanceArray.get(context);
                        }
                        if(!instanceAlreadyExists){
                            String idinst = UUID.randomUUID().toString();
                            i.setId(idinst);
                            i.setContexte(context);
                            i.setPositionBeginTermeInstance(c.getStartTerm()+relativeLeftContextSize);
                            i.setPositionEndTermeInstance(c.getEndTerm()+relativeLeftContextSize);
                            i.setPositionBeginTermeTxtBrut(c.getStartTerm());
                            i.setPositionEndTermeTxtBrut(c.getEndTerm());
                            i.setContexteSize(c.getContext().length());
                            i.setProjectId(p);
                            if((p.getNbWordMinForAuto()!=-1 &&(this.getNbWord(v.getName())>p.getNbWordMinForAuto()))
                                | (p.getNbCharMinForAuto()!=-1 && (this.getNbChar(v.getName())>p.getNbCharMinForAuto()))){
                                i.setAuto(true);
                            }
                            TermeinstancedocumentPK tidPK = new TermeinstancedocumentPK(t.getId(),c.getUuid(), idinst,c.getIndexStart());
                            instanceArray.put(context,i);
                            tidArray.put(idtid,tidPK);
                            idtid++;
                        }
                        else{
                            if((p.getNbWordMinForAuto()!=-1 &&(this.getNbWord(v.getName())>p.getNbWordMinForAuto()))
                                | (p.getNbCharMinForAuto()!=-1 && (this.getNbChar(v.getName())>p.getNbCharMinForAuto()))){
                                instanceArray.get(context).setAuto(true);
                            }
                            TermeinstancedocumentPK tidPK = new TermeinstancedocumentPK(t.getId(),c.getUuid(), i.getId(),c.getIndexStart());
                            tidArray.put(idtid,tidPK);
                            idtid++;
                        }
                    }
                contexesArray.clear();
                }
            }
        }
        lucene.close();
        this.addInstances(instanceArray);
        this.addTIDs(tidArray);
        instanceArray.clear();
        tidArray.clear();
    }

//the method to persist is like that
public void addInstances(HugeHashMap<String,Instance> ints){
        this.open();
        em.getTransaction().begin();
        for(Instance inst : ints.values()){
            em.persist(inst); 
        }
        em.getTransaction().commit();
        this.close();
    }

Do you have any idea to solve this problem?

Thanks

too many Segment.getKey() invocations

I attached a profiler to my application and I saw that call tree:

image

I invoked Map.get() 8379 times and also net.openhft.collections.HugeHashMap$Segment.get is invoked same amount but Segment.getKey() is invoked 9.903.392 times.

Why getKey() invocation count is more about 1000 times than Map.get() count?

My get code:

for (Long key : cache.keySet()) {
    sr = cache.get(key);

    if (sr != null && sr.isDirty() && sr.isInDb()) {
        ++updateCount;

        sr.setClean();
        try {
            cache.put(key, sr);
        } catch (Exception e) {
        // discard
        }
    }
}

Using Shared/HugeHashMap

looking into using shared or huge hash map within our application and got couple of questions:

  1. We have our binary encoded data and we use flyweight to access it. If we are using huge hash map assuming we only access the data via a single thread, what is the best way to access the binary data without copying it (basically we only need the starting address of the value then we can map the flyweight to it)

  2. Similar question on using shared map on using flyweight to read the information. I assume since we will be using multiple thread reading it we will need to do copy in

  3. For the shared map is there a true locking (all read and write will block each other?)

  4. If used for a long time is there a memory fragmentation we need to worry about?

  5. Is it ok to have multiple shared map backed by multiple memory map files in terms of OS stability?

Thanks very much for such a great work!

problem using SharedHashMapBuilder ...

Hi,

I fetched/merged into my clone'd workspaces all updates from each of my upstream views of the various OpenHFT parent repo modules.

I then re-ran my Test at https://github.com/Cotton-Ben/HugeCollections/blob/master/collections/src/test/java/net/openhft/collections/fromdocs/com/jpmorgan/pingpong_latency/PingPongPlayerLeft.java

via

java  org.junit.runner.JUnitCore net.openhft.collections.fromdocs.com.jpmorgan.pingpong_latency.PingPongPlayerLeft

Since this update, when the following line #18 in my Test is executed:

SharedHashMap<String, BondVOInterface> shmLeft = new SharedHashMapBuilder()
                .generatedValueType(true)
                .entrySize(320)
                .create(
                        new File("/dev/shm/BondPortfolioSHM"),
                        String.class,
                        BondVOInterface.class
                );

This test now fails with the following exception:

Time: 0.107
There was 1 failure:
1) bondExample(net.openhft.collections.fromdocs.com.jpmorgan.pingpong_latency.PingPongPlayerLeft)
java.lang.IllegalArgumentException: invalid size: 343048307875968
    at net.openhft.lang.io.MappedStore.<init>(MappedStore.java:54)
    at net.openhft.lang.io.MappedStore.<init>(MappedStore.java:49)
    at net.openhft.collections.AbstractVanillaSharedHashMap.createMappedStoreAndSegments(VanillaSharedHashMap.java:148)
    at net.openhft.collections.VanillaSharedHashMap.<init>(VanillaSharedHashMap.java:45)
    at net.openhft.collections.SharedHashMapBuilder.create(SharedHashMapBuilder.java:264)
    at net.openhft.collections.fromdocs.com.jpmorgan.pingpong_latency.PingPongPlayerLeft.bondExample(PingPongPlayerLeft.java:18)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.junit.runners.Suite.runChild(Suite.java:127)
    at org.junit.runners.Suite.runChild(Suite.java:26)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:117)
    at org.junit.runner.JUnitCore.runMain(JUnitCore.java:96)
    at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:47)
    at org.junit.runner.JUnitCore.main(JUnitCore.java:40)

FAILURES!!!
Tests run: 1,  Failures: 1

Should I expect the way that line #18 above is coded in my Test to work as before without exception? Any recommendation for remedy?

how to get exactly 1 OpenHFT test to run

Sorry I am abusing you guys with mvn questions but stackOverflow gave me no remedy. Here is what I try

cd /apps/OpenHFT/
mvn -pl HugeCollections  \
       -Dtest=net.openhft.collections.fromdocs.OpenJDKAndHashMapExampleTest#bondExample \
      test

but after hacking at this, I can't get past the message /"[ERROR] failed to execute goal: maven-surefire-plugin .... (default-test) on project: No tests were executed!"/

any ideas? and again sorry to be a bother. I am doing lots of OpenHFT demos and this demo requires I demo the capability from a KornShell cmd line (not IntelliJ)

Thanks.

Cache size exceed bug

Hi,

I'm using HugeCollecitons for Product Catalogue purpose. I created a HugeHashMap using:

cache = new HugeHashMap<>(HugeConfig.SMALL.clone(), kClass, vClass);

With this configuration if I put small objects (objects smaller than bucket size), it works fine.

But if I put larger objects (objects larger than bucket size), I face problems at keySet and entrySet functions. Those objects are missing at set results, but I can access object with get method.

CHM v. SHM ... perf results comparison accounting question

CLarifying my question:

How do we account for /proc/$PID/status differences between

[email protected] --->
VmPeak: 35,151,672 kB
VmSize: 35,151,096 kB

vs.

[email protected]@/ext4 -->
VmPeak: 13,761,320 kB
VmSize: 2,432,980 kB

In the SHM.200M test, Does the OpenHFT internals' mmap(2) from On-Heap to Off-Heap to /ext4 somehow also take the SHM data structure off-PID?

I would have suspected that both PIDs (but not both JVM heaps, of course) would have had very similar VmPeak: /proc/$PID/status reported results.

SharedHashMap causing crash on Windows OS

We are experiencing issues when using SharedHashMap (collections-3.2.1) on Windows OS. Under certain circumstances the whole JVM crashes after inserting 10M items into the map. Following code can be used to reproduce the issue:

    @Test
public void crashJVMWindowsTest() throws IOException {
    final SharedHashMap<CharSequence, CharSequence> map = new SharedHashMapBuilder().entries(15_000_000)
        .minSegments(128).file(getPersistenceFile()).kClass(CharSequence.class).vClass(CharSequence.class).create();

    for (int i = 0; i < 10_000_000; ++i) {
        String s = String.valueOf(i);
        map.put(s, s);
    }       

    map.close();    
}

It seems there is an issue when a map segment is being locked:

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j sun.misc.Unsafe.compareAndSwapLong(Ljava/lang/Object;JJJ)Z+0
j net.openhft.lang.io.NativeBytes.compareAndSwapLong(JJJ)Z+13
j net.openhft.lang.io.AbstractBytes.tryLockNanos8a(JJ)Z+12
j net.openhft.lang.io.AbstractBytes.tryLockNanosLong(JJ)Z+41
j net.openhft.collections.AbstractVanillaSharedHashMap$Segment.lock()V+12
j net.openhft.collections.AbstractVanillaSharedHashMap$Segment.put(Lnet/openhft/lang/io/Bytes;Ljava/lang/Object;Ljava/lang/Object;IZ)Ljava/lang/Object;+1
j net.openhft.collections.AbstractVanillaSharedHashMap.put0(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object;+60
j net.openhft.collections.AbstractVanillaSharedHashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;+4
j test.Test.crashTest()V+52
j test.Test.main([Ljava/lang/String;)V+0
v ~StubRoutines::call_stub

Environment:
Windows 8.1 64-bit
Java(TM) SE Runtime Environment (build 1.7.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)

We were not able to reproduce this issue on Unix-based OS.

Thanks for your help.

TCPSocketReplication4WayMapTest testBufferOverflow failed (Windows 8.1)

After "git clone https://github.com/OpenHFT/OpenHFT" into an empty repo and the checkout (checkout.bat), followed by replacing the Java-Chronicle project with the one from lburgazzoli branch, I got an error in the HugeCollection project when running "mvn install".

-------------------------------------------------------------------------------
Test set: net.openhft.collections.TCPSocketReplication4WayMapTest
-------------------------------------------------------------------------------
Tests run: 3, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 352.679 sec <<< FAILURE! - in net.openhft.collections.TCPSocketReplication4WayMapTest
testBufferOverflow(net.openhft.collections.TCPSocketReplication4WayMapTest)  Time elapsed: 348.71 sec  <<< FAILURE!
java.lang.AssertionError: map4 expected:<{790=EXAMPLE-1, 527=EXAMPLE-1, 535=EXAMPLE-1, 614=EXAMPLE-1, 390=EXAMPLE-1, 564=EXAMPLE-1, 450=EXAMPLE-1, 684=EXAMPLE-1, 21=EXAMPLE-1, 34=EXAMPLE-1, 53=EXAMPLE-1, 633=EXAMPLE-1, 692=EXAMPLE-1, 835=EXAMPLE-1, 879=EXAMPLE-1, 254=EXAMPLE-1, 103=EXAMPLE-1, 1010=EXAMPLE-1, 585=EXAMPLE-1, 785=EXAMPLE-1, 811=EXAMPLE-1, 911=EXAMPLE-1, 257=EXAMPLE-1, 95=EXAMPLE-1, 134=EXAMPLE-1, 181=EXAMPLE-1, 400=EXAMPLE-1, 507=EXAMPLE-1, 238=EXAMPLE-1, 686=EXAMPLE-1, 762=EXAMPLE-1, 492=EXAMPLE-1, 519=EXAMPLE-1, 459=EXAMPLE-1, 341=EXAMPLE-1, 841=EXAMPLE-1, 76=EXAMPLE-1, 174=EXAMPLE-1, 664=EXAMPLE-1, 974=EXAMPLE-1, 558=EXAMPLE-1, 380=EXAMPLE-1, 435=EXAMPLE-1, 125=EXAMPLE-1, 793=EXAMPLE-1, 114=EXAMPLE-1, 608=EXAMPLE-1, 465=EXAMPLE-1, 117=EXAMPLE-1, 903=EXAMPLE-1, 940=EXAMPLE-1, 288=EXAMPLE-1, 737=EXAMPLE-1, 742=EXAMPLE-1, 120=EXAMPLE-1, 140=EXAMPLE-1, 109=EXAMPLE-1, 869=EXAMPLE-1, 312=EXAMPLE-1, 776=EXAMPLE-1, 920=EXAMPLE-1, 636=EXAMPLE-1, 389=EXAMPLE-1, 538=EXAMPLE-1, 598=EXAMPLE-1, 894=EXAMPLE-1, 765=EXAMPLE-1, 667=EXAMPLE-1, 32=EXAMPLE-1, 756=EXAMPLE-1, 845=EXAMPLE-1, 223=EXAMPLE-1, 698=EXAMPLE-1, 961=EXAMPLE-1, 267=EXAMPLE-1, 736=EXAMPLE-1, 168=EXAMPLE-1, 383=EXAMPLE-1, 628=EXAMPLE-1, 240=EXAMPLE-1, 148=EXAMPLE-1, 914=EXAMPLE-1, 643=EXAMPLE-1, 992=EXAMPLE-1, 934=EXAMPLE-1, 917=EXAMPLE-1, 550=EXAMPLE-1, 78=EXAMPLE-1, 57=EXAMPLE-1, 860=EXAMPLE-1, 469=EXAMPLE-1, 346=EXAMPLE-1, 99=EXAMPLE-1, 375=EXAMPLE-1, 551=EXAMPLE-1, 751=EXAMPLE-1, 352=EXAMPLE-1, 418=EXAMPLE-1, 501=EXAMPLE-1, 226=EXAMPLE-1, 524=EXAMPLE-1, 799=EXAMPLE-1, 484=EXAMPLE-1, 4=EXAMPLE-1, 431=EXAMPLE-1, 386=EXAMPLE-1, 630=EXAMPLE-1, 233=EXAMPLE-1, 218=EXAMPLE-1, 530=EXAMPLE-1, 204=EXAMPLE-1, 702=EXAMPLE-1, 308=EXAMPLE-1, 49=EXAMPLE-1, 968=EXAMPLE-1, 954=EXAMPLE-1, 282=EXAMPLE-1, 154=EXAMPLE-1, 677=EXAMPLE-1, 592=EXAMPLE-1, 703=EXAMPLE-1, 602=EXAMPLE-1, 87=EXAMPLE-1, 937=EXAMPLE-1, 882=EXAMPLE-1, 326=EXAMPLE-1, 995=EXAMPLE-1, 332=EXAMPLE-1, 274=EXAMPLE-1, 65=EXAMPLE-1, 804=EXAMPLE-1, 593=EXAMPLE-1, 983=EXAMPLE-1, 948=EXAMPLE-1, 929=EXAMPLE-1, 878=EXAMPLE-1, 444=EXAMPLE-1, 434=EXAMPLE-1, 584=EXAMPLE-1, 750=EXAMPLE-1, 229=EXAMPLE-1, 433=EXAMPLE-1, 355=EXAMPLE-1, 576=EXAMPLE-1, 1021=EXAMPLE-1, 1022=EXAMPLE-1, 722=EXAMPLE-1, 605=EXAMPLE-1, 928=EXAMPLE-1, 533=EXAMPLE-1, 885=EXAMPLE-1, 335=EXAMPLE-1, 986=EXAMPLE-1, 591=EXAMPLE-1, 191=EXAMPLE-1, 428=EXAMPLE-1, 180=EXAMPLE-1, 957=EXAMPLE-1, 905=EXAMPLE-1, 518=EXAMPLE-1, 441=EXAMPLE-1, 157=EXAMPLE-1, 11=EXAMPLE-1, 83=EXAMPLE-1, 9=EXAMPLE-1, 828=EXAMPLE-1, 172=EXAMPLE-1, 64=EXAMPLE-1, 893=EXAMPLE-1, 366=EXAMPLE-1, 1000=EXAMPLE-1, 829=EXAMPLE-1, 273=EXAMPLE-1, 194=EXAMPLE-1, 725=EXAMPLE-1, 908=EXAMPLE-1, 745=EXAMPLE-1, 642=EXAMPLE-1, 888=EXAMPLE-1, 12=EXAMPLE-1, 567=EXAMPLE-1, 22=EXAMPLE-1, 838=EXAMPLE-1, 784=EXAMPLE-1, 137=EXAMPLE-1, 266=EXAMPLE-1, 361=EXAMPLE-1, 41=EXAMPLE-1, 652=EXAMPLE-1, 108=EXAMPLE-1, 570=EXAMPLE-1, 689=EXAMPLE-1, 116=EXAMPLE-1, 321=EXAMPLE-1, 369=EXAMPLE-1, 844=EXAMPLE-1, 547=EXAMPLE-1, 216=EXAMPLE-1, 923=EXAMPLE-1, 820=EXAMPLE-1, 468=EXAMPLE-1, 217=EXAMPLE-1, 902=EXAMPLE-1, 20=EXAMPLE-1, 128=EXAMPLE-1, 728=EXAMPLE-1, 1004=EXAMPLE-1, 276=EXAMPLE-1, 1019=EXAMPLE-1, 374=EXAMPLE-1, 123=EXAMPLE-1, 209=EXAMPLE-1, 143=EXAMPLE-1, 851=EXAMPLE-1, 994=EXAMPLE-1, 1020=EXAMPLE-1, 639=EXAMPLE-1, 943=EXAMPLE-1, 980=EXAMPLE-1, 801=EXAMPLE-1, 232=EXAMPLE-1, 655=EXAMPLE-1, 779=EXAMPLE-1, 475=EXAMPLE-1, 301=EXAMPLE-1, 66=EXAMPLE-1, 242=EXAMPLE-1, 627=EXAMPLE-1, 936=EXAMPLE-1, 160=EXAMPLE-1, 33=EXAMPLE-1, 483=EXAMPLE-1, 340=EXAMPLE-1, 279=EXAMPLE-1, 731=EXAMPLE-1, 676=EXAMPLE-1, 759=EXAMPLE-1, 513=EXAMPLE-1, 45=EXAMPLE-1, 425=EXAMPLE-1, 952=EXAMPLE-1, 299=EXAMPLE-1, 504=EXAMPLE-1, 711=EXAMPLE-1, 683=EXAMPLE-1, 294=EXAMPLE-1, 854=EXAMPLE-1, 582=EXAMPLE-1, 960=EXAMPLE-1, 810=EXAMPLE-1, 410=EXAMPLE-1, 526=EXAMPLE-1, 619=EXAMPLE-1, 349=EXAMPLE-1, 16=EXAMPLE-1, 318=EXAMPLE-1, 440=EXAMPLE-1, 478=EXAMPLE-1, 207=EXAMPLE-1, 659=EXAMPLE-1, 245=EXAMPLE-1, 1018=EXAMPLE-1, 79=EXAMPLE-1, 826=EXAMPLE-1, 783=EXAMPLE-1, 68=EXAMPLE-1, 7=EXAMPLE-1, 873=EXAMPLE-1, 525=EXAMPLE-1, 990=EXAMPLE-1, 75=EXAMPLE-1, 556=EXAMPLE-1, 8=EXAMPLE-1, 517=EXAMPLE-1, 482=EXAMPLE-1, 693=EXAMPLE-1, 413=EXAMPLE-1, 208=EXAMPLE-1, 791=EXAMPLE-1, 90=EXAMPLE-1, 734=EXAMPLE-1, 463=EXAMPLE-1, 239=EXAMPLE-1, 163=EXAMPLE-1, 286=EXAMPLE-1, 29=EXAMPLE-1, 641=EXAMPLE-1, 112=EXAMPLE-1, 857=EXAMPLE-1, 46=EXAMPLE-1, 625=EXAMPLE-1, 56=EXAMPLE-1, 891=EXAMPLE-1, 809=EXAMPLE-1, 393=EXAMPLE-1, 408=EXAMPLE-1, 265=EXAMPLE-1, 935=EXAMPLE-1, 264=EXAMPLE-1, 330=EXAMPLE-1, 358=EXAMPLE-1, 447=EXAMPLE-1, 310=EXAMPLE-1, 966=EXAMPLE-1, 876=EXAMPLE-1, 640=EXAMPLE-1, 559=EXAMPLE-1, 214=EXAMPLE-1, 741=EXAMPLE-1, 842=EXAMPLE-1, 717=EXAMPLE-1, 696=EXAMPLE-1, 788=EXAMPLE-1, 166=EXAMPLE-1, 466=EXAMPLE-1, 416=EXAMPLE-1, 107=EXAMPLE-1, 249=EXAMPLE-1, 381=EXAMPLE-1, 892=EXAMPLE-1, 365=EXAMPLE-1, 612=EXAMPLE-1, 993=EXAMPLE-1, 132=EXAMPLE-1, 272=EXAMPLE-1, 115=EXAMPLE-1, 472=EXAMPLE-1, 915=EXAMPLE-1, 481=EXAMPLE-1, 457=EXAMPLE-1, 197=EXAMPLE-1, 215=EXAMPLE-1, 719=EXAMPLE-1, 344=EXAMPLE-1, 690=EXAMPLE-1, 373=EXAMPLE-1, 419=EXAMPLE-1, 615=EXAMPLE-1, 797=EXAMPLE-1, 662=EXAMPLE-1, 230=EXAMPLE-1, 511=EXAMPLE-1, 775=EXAMPLE-1, 2=EXAMPLE-1, 768=EXAMPLE-1, 646=EXAMPLE-1, 674=EXAMPLE-1, 423=EXAMPLE-1, 542=EXAMPLE-1, 700=EXAMPLE-1, 307=EXAMPLE-1, 280=EXAMPLE-1, 573=EXAMPLE-1, 497=EXAMPLE-1, 818=EXAMPLE-1, 135=EXAMPLE-1, 315=EXAMPLE-1, 590=EXAMPLE-1, 324=EXAMPLE-1, 754=EXAMPLE-1, 927=EXAMPLE-1, 522=EXAMPLE-1, 298=EXAMPLE-1, 71=EXAMPLE-1, 1017=EXAMPLE-1, 626=EXAMPLE-1, 202=EXAMPLE-1, 823=EXAMPLE-1, 618=EXAMPLE-1, 331=EXAMPLE-1, 399=EXAMPLE-1, 665=EXAMPLE-1, 901=EXAMPLE-1, 843=EXAMPLE-1, 682=EXAMPLE-1, 231=EXAMPLE-1, 631=EXAMPLE-1, 977=EXAMPLE-1, 146=EXAMPLE-1, 101=EXAMPLE-1, 236=EXAMPLE-1, 649=EXAMPLE-1, 946=EXAMPLE-1, 92=EXAMPLE-1, 932=EXAMPLE-1, 720=EXAMPLE-1, 378=EXAMPLE-1, 675=EXAMPLE-1, 327=EXAMPLE-1, 955=EXAMPLE-1, 740=EXAMPLE-1, 141=EXAMPLE-1, 227=EXAMPLE-1, 155=EXAMPLE-1, 757=EXAMPLE-1, 516=EXAMPLE-1, 58=EXAMPLE-1, 760=EXAMPLE-1, 490=EXAMPLE-1, 44=EXAMPLE-1, 668=EXAMPLE-1, 80=EXAMPLE-1, 432=EXAMPLE-1, 63=EXAMPLE-1, 104=EXAMPLE-1, 263=EXAMPLE-1, 14=EXAMPLE-1, 777=EXAMPLE-1, 297=EXAMPLE-1, 505=EXAMPLE-1, 106=EXAMPLE-1, 634=EXAMPLE-1, 866=EXAMPLE-1, 900=EXAMPLE-1, 149=EXAMPLE-1, 763=EXAMPLE-1, 248=EXAMPLE-1, 912=EXAMPLE-1, 258=EXAMPLE-1, 398=EXAMPLE-1, 121=EXAMPLE-1, 867=EXAMPLE-1, 407=EXAMPLE-1, 617=EXAMPLE-1, 213=EXAMPLE-1, 716=EXAMPLE-1, 650=EXAMPLE-1, 921=EXAMPLE-1, 687=EXAMPLE-1, 91=EXAMPLE-1, 579=EXAMPLE-1, 536=EXAMPLE-1, 637=EXAMPLE-1, 350=EXAMPLE-1, 175=EXAMPLE-1, 292=EXAMPLE-1, 188=EXAMPLE-1, 221=EXAMPLE-1, 372=EXAMPLE-1, 508=EXAMPLE-1, 794=EXAMPLE-1, 609=EXAMPLE-1, 1001=EXAMPLE-1, 743=EXAMPLE-1, 456=EXAMPLE-1, 599=EXAMPLE-1, 289=EXAMPLE-1, 766=EXAMPLE-1, 353=EXAMPLE-1, 624=EXAMPLE-1, 600=EXAMPLE-1, 15=EXAMPLE-1, 833=EXAMPLE-1, 473=EXAMPLE-1, 539=EXAMPLE-1, 673=EXAMPLE-1, 969=EXAMPLE-1, 422=EXAMPLE-1, 699=EXAMPLE-1, 367=EXAMPLE-1, 709=EXAMPLE-1, 322=EXAMPLE-1, 37=EXAMPLE-1, 333=EXAMPLE-1, 989=EXAMPLE-1, 224=EXAMPLE-1, 25=EXAMPLE-1, 169=EXAMPLE-1, 271=EXAMPLE-1, 364=EXAMPLE-1, 817=EXAMPLE-1, 941=EXAMPLE-1, 918=EXAMPLE-1, 384=EXAMPLE-1, 306=EXAMPLE-1, 906=EXAMPLE-1, 220=EXAMPLE-1, 926=EXAMPLE-1, 1003=EXAMPLE-1, 30=EXAMPLE-1, 88=EXAMPLE-1, 984=EXAMPLE-1, 580=EXAMPLE-1, 883=EXAMPLE-1, 356=EXAMPLE-1, 681=EXAMPLE-1, 949=EXAMPLE-1, 832=EXAMPLE-1, 975=EXAMPLE-1, 1002=EXAMPLE-1, 565=EXAMPLE-1, 836=EXAMPLE-1, 502=EXAMPLE-1, 309=EXAMPLE-1, 782=EXAMPLE-1, 67=EXAMPLE-1, 387=EXAMPLE-1, 205=EXAMPLE-1, 545=EXAMPLE-1, 126=EXAMPLE-1, 774=EXAMPLE-1, 283=EXAMPLE-1, 658=EXAMPLE-1, 170=EXAMPLE-1, 189=EXAMPLE-1, 583=EXAMPLE-1, 531=EXAMPLE-1, 255=EXAMPLE-1, 603=EXAMPLE-1, 70=EXAMPLE-1, 161=EXAMPLE-1, 479=EXAMPLE-1, 816=EXAMPLE-1, 773=EXAMPLE-1, 442=EXAMPLE-1, 865=EXAMPLE-1, 111=EXAMPLE-1, 262=EXAMPLE-1, 277=EXAMPLE-1, 97=EXAMPLE-1, 568=EXAMPLE-1, 964=EXAMPLE-1, 874=EXAMPLE-1, 247=EXAMPLE-1, 540=EXAMPLE-1, 192=EXAMPLE-1, 534=EXAMPLE-1, 153=EXAMPLE-1, 173=EXAMPLE-1, 723=EXAMPLE-1, 363=EXAMPLE-1, 707=EXAMPLE-1, 712=EXAMPLE-1, 781=EXAMPLE-1, 886=EXAMPLE-1, 732=EXAMPLE-1, 548=EXAMPLE-1, 606=EXAMPLE-1, 362=EXAMPLE-1, 302=EXAMPLE-1, 858=EXAMPLE-1, 51=EXAMPLE-1, 164=EXAMPLE-1, 445=EXAMPLE-1, 981=EXAMPLE-1, 498=EXAMPLE-1, 158=EXAMPLE-1, 571=EXAMPLE-1, 470=EXAMPLE-1, 959=EXAMPLE-1, 708=EXAMPLE-1, 74=EXAMPLE-1, 462=EXAMPLE-1, 370=EXAMPLE-1, 93=EXAMPLE-1, 930=EXAMPLE-1, 411=EXAMPLE-1, 786=EXAMPLE-1, 1006=EXAMPLE-1, 296=EXAMPLE-1, 950=EXAMPLE-1, 27=EXAMPLE-1, 48=EXAMPLE-1, 342=EXAMPLE-1, 563=EXAMPLE-1, 339=EXAMPLE-1, 371=EXAMPLE-1, 195=EXAMPLE-1, 129=EXAMPLE-1, 59=EXAMPLE-1, 726=EXAMPLE-1, 958=EXAMPLE-1, 715=EXAMPLE-1, 808=EXAMPLE-1, 313=EXAMPLE-1, 138=EXAMPLE-1, 889=EXAMPLE-1, 455=EXAMPLE-1, 880=EXAMPLE-1, 13=EXAMPLE-1, 924=EXAMPLE-1, 124=EXAMPLE-1, 421=EXAMPLE-1, 821=EXAMPLE-1, 496=EXAMPLE-1, 973=EXAMPLE-1, 574=EXAMPLE-1, 187=EXAMPLE-1, 448=EXAMPLE-1, 938=EXAMPLE-1, 623=EXAMPLE-1, 653=EXAMPLE-1, 150=EXAMPLE-1, 305=EXAMPLE-1, 1014=EXAMPLE-1, 520=EXAMPLE-1, 953=EXAMPLE-1, 647=EXAMPLE-1, 729=EXAMPLE-1, 746=EXAMPLE-1, 376=EXAMPLE-1, 597=EXAMPLE-1, 0=EXAMPLE-1, 489=EXAMPLE-1, 212=EXAMPLE-1, 391=EXAMPLE-1, 414=EXAMPLE-1, 752=EXAMPLE-1, 852=EXAMPLE-1, 672=EXAMPLE-1, 406=EXAMPLE-1, 680=EXAMPLE-1, 831=EXAMPLE-1, 319=EXAMPLE-1, 1015=EXAMPLE-1, 38=EXAMPLE-1, 577=EXAMPLE-1, 998=EXAMPLE-1, 347=EXAMPLE-1, 780=EXAMPLE-1, 290=EXAMPLE-1, 925=EXAMPLE-1, 476=EXAMPLE-1, 270=EXAMPLE-1, 336=EXAMPLE-1, 397=EXAMPLE-1, 514=EXAMPLE-1, 43=EXAMPLE-1, 657=EXAMPLE-1, 243=EXAMPLE-1, 749=EXAMPLE-1, 824=EXAMPLE-1, 130=EXAMPLE-1, 426=EXAMPLE-1, 72=EXAMPLE-1, 5=EXAMPLE-1, 909=EXAMPLE-1, 987=EXAMPLE-1, 855=EXAMPLE-1, 26=EXAMPLE-1, 802=EXAMPLE-1, 515=EXAMPLE-1, 554=EXAMPLE-1, 978=EXAMPLE-1, 495=EXAMPLE-1, 1005=EXAMPLE-1, 304=EXAMPLE-1, 691=EXAMPLE-1, 110=EXAMPLE-1, 721=EXAMPLE-1, 461=EXAMPLE-1, 102=EXAMPLE-1, 864=EXAMPLE-1, 910=EXAMPLE-1, 420=EXAMPLE-1, 359=EXAMPLE-1, 256=EXAMPLE-1, 133=EXAMPLE-1, 849=EXAMPLE-1, 17=EXAMPLE-1, 211=EXAMPLE-1, 706=EXAMPLE-1, 85=EXAMPLE-1, 714=EXAMPLE-1, 827=EXAMPLE-1, 761=EXAMPLE-1, 557=EXAMPLE-1, 246=EXAMPLE-1, 596=EXAMPLE-1, 287=EXAMPLE-1, 405=EXAMPLE-1, 261=EXAMPLE-1, 18=EXAMPLE-1, 792=EXAMPLE-1, 588=EXAMPLE-1, 807=EXAMPLE-1, 464=EXAMPLE-1, 613=EXAMPLE-1, 913=EXAMPLE-1, 136=EXAMPLE-1, 144=EXAMPLE-1, 830=EXAMPLE-1, 311=EXAMPLE-1, 868=EXAMPLE-1, 47=EXAMPLE-1, 764=EXAMPLE-1, 500=EXAMPLE-1, 113=EXAMPLE-1, 772=EXAMPLE-1, 967=EXAMPLE-1, 621=EXAMPLE-1, 735=EXAMPLE-1, 877=EXAMPLE-1, 237=EXAMPLE-1, 537=EXAMPLE-1, 671=EXAMPLE-1, 454=EXAMPLE-1, 543=EXAMPLE-1, 991=EXAMPLE-1, 815=EXAMPLE-1, 632=EXAMPLE-1, 1013=EXAMPLE-1, 338=EXAMPLE-1, 295=EXAMPLE-1, 701=EXAMPLE-1, 916=EXAMPLE-1, 972=EXAMPLE-1, 382=EXAMPLE-1, 316=EXAMPLE-1, 81=EXAMPLE-1, 467=EXAMPLE-1, 439=EXAMPLE-1, 396=EXAMPLE-1, 178=EXAMPLE-1, 616=EXAMPLE-1, 562=EXAMPLE-1, 748=EXAMPLE-1, 438=EXAMPLE-1, 933=EXAMPLE-1, 167=EXAMPLE-1, 488=EXAMPLE-1, 345=EXAMPLE-1, 798=EXAMPLE-1, 663=EXAMPLE-1, 840=EXAMPLE-1, 769=EXAMPLE-1, 186=EXAMPLE-1, 147=EXAMPLE-1, 222=EXAMPLE-1, 89=EXAMPLE-1, 694=EXAMPLE-1, 198=EXAMPLE-1, 898=EXAMPLE-1, 203=EXAMPLE-1, 947=EXAMPLE-1, 281=EXAMPLE-1, 39=EXAMPLE-1, 755=EXAMPLE-1, 252=EXAMPLE-1, 656=EXAMPLE-1, 666=EXAMPLE-1, 28=EXAMPLE-1, 899=EXAMPLE-1, 325=EXAMPLE-1, 253=EXAMPLE-1, 871=EXAMPLE-1, 770=EXAMPLE-1, 55=EXAMPLE-1, 152=EXAMPLE-1, 388=EXAMPLE-1, 360=EXAMPLE-1, 697=EXAMPLE-1, 394=EXAMPLE-1, 506=EXAMPLE-1, 60=EXAMPLE-1, 523=EXAMPLE-1, 379=EXAMPLE-1, 417=EXAMPLE-1, 944=EXAMPLE-1, 3=EXAMPLE-1, 430=EXAMPLE-1, 622=EXAMPLE-1, 971=EXAMPLE-1, 1011=EXAMPLE-1, 278=EXAMPLE-1, 190=EXAMPLE-1, 171=EXAMPLE-1, 96=EXAMPLE-1, 705=EXAMPLE-1, 710=EXAMPLE-1, 884=EXAMPLE-1, 284=EXAMPLE-1, 409=EXAMPLE-1, 806=EXAMPLE-1, 713=EXAMPLE-1, 293=EXAMPLE-1, 834=EXAMPLE-1, 73=EXAMPLE-1, 487=EXAMPLE-1, 730=EXAMPLE-1, 963=EXAMPLE-1, 956=EXAMPLE-1, 122=EXAMPLE-1, 142=EXAMPLE-1, 862=EXAMPLE-1, 758=EXAMPLE-1, 595=EXAMPLE-1, 424=EXAMPLE-1, 354=EXAMPLE-1, 228=EXAMPLE-1, 491=EXAMPLE-1, 329=EXAMPLE-1, 529=EXAMPLE-1, 813=EXAMPLE-1, 452=EXAMPLE-1, 685=EXAMPLE-1, 404=EXAMPLE-1, 453=EXAMPLE-1, 847=EXAMPLE-1, 23=EXAMPLE-1, 669=EXAMPLE-1, 300=EXAMPLE-1, 509=EXAMPLE-1, 443=EXAMPLE-1, 259=EXAMPLE-1, 193=EXAMPLE-1, 819=EXAMPLE-1, 897=EXAMPLE-1, 887=EXAMPLE-1, 587=EXAMPLE-1, 98=EXAMPLE-1, 269=EXAMPLE-1, 601=EXAMPLE-1, 670=EXAMPLE-1, 437=EXAMPLE-1, 688=EXAMPLE-1, 156=EXAMPLE-1, 303=EXAMPLE-1, 334=EXAMPLE-1, 427=EXAMPLE-1, 24=EXAMPLE-1, 320=EXAMPLE-1, 814=EXAMPLE-1, 651=EXAMPLE-1, 942=EXAMPLE-1, 907=EXAMPLE-1, 486=EXAMPLE-1, 795=EXAMPLE-1, 206=EXAMPLE-1, 185=EXAMPLE-1, 494=EXAMPLE-1, 403=EXAMPLE-1, 177=EXAMPLE-1, 985=EXAMPLE-1, 94=EXAMPLE-1, 896=EXAMPLE-1, 850=EXAMPLE-1, 1009=EXAMPLE-1, 10=EXAMPLE-1, 739=EXAMPLE-1, 744=EXAMPLE-1, 604=EXAMPLE-1, 151=EXAMPLE-1, 922=EXAMPLE-1, 201=EXAMPLE-1, 566=EXAMPLE-1, 368=EXAMPLE-1, 645=EXAMPLE-1, 654=EXAMPLE-1, 337=EXAMPLE-1, 771=EXAMPLE-1, 474=EXAMPLE-1, 52=EXAMPLE-1, 54=EXAMPLE-1, 503=EXAMPLE-1, 800=EXAMPLE-1, 323=EXAMPLE-1, 837=EXAMPLE-1, 581=EXAMPLE-1, 35=EXAMPLE-1, 241=EXAMPLE-1, 635=EXAMPLE-1, 512=EXAMPLE-1, 77=EXAMPLE-1, 546=EXAMPLE-1, 275=EXAMPLE-1, 458=EXAMPLE-1, 789=EXAMPLE-1, 31=EXAMPLE-1, 62=EXAMPLE-1, 607=EXAMPLE-1, 127=EXAMPLE-1, 1012=EXAMPLE-1, 561=EXAMPLE-1, 747=EXAMPLE-1, 848=EXAMPLE-1, 119=EXAMPLE-1, 919=EXAMPLE-1, 870=EXAMPLE-1, 251=EXAMPLE-1, 50=EXAMPLE-1, 881=EXAMPLE-1, 40=EXAMPLE-1, 385=EXAMPLE-1, 553=EXAMPLE-1, 260=EXAMPLE-1, 460=EXAMPLE-1, 853=EXAMPLE-1, 803=EXAMPLE-1, 863=EXAMPLE-1, 225=EXAMPLE-1, 235=EXAMPLE-1, 351=EXAMPLE-1, 532=EXAMPLE-1, 638=EXAMPLE-1, 997=EXAMPLE-1, 778=EXAMPLE-1, 999=EXAMPLE-1, 69=EXAMPLE-1, 661=EXAMPLE-1, 61=EXAMPLE-1, 856=EXAMPLE-1, 610=EXAMPLE-1, 210=EXAMPLE-1, 629=EXAMPLE-1, 343=EXAMPLE-1, 555=EXAMPLE-1, 839=EXAMPLE-1, 412=EXAMPLE-1, 939=EXAMPLE-1, 162=EXAMPLE-1, 890=EXAMPLE-1, 679=EXAMPLE-1, 979=EXAMPLE-1, 328=EXAMPLE-1, 578=EXAMPLE-1, 962=EXAMPLE-1, 846=EXAMPLE-1, 182=EXAMPLE-1, 234=EXAMPLE-1, 429=EXAMPLE-1, 451=EXAMPLE-1, 285=EXAMPLE-1, 904=EXAMPLE-1, 805=EXAMPLE-1, 586=EXAMPLE-1, 695=EXAMPLE-1, 753=EXAMPLE-1, 105=EXAMPLE-1, 859=EXAMPLE-1, 724=EXAMPLE-1, 184=EXAMPLE-1, 415=EXAMPLE-1, 718=EXAMPLE-1, 1007=EXAMPLE-1, 159=EXAMPLE-1, 145=EXAMPLE-1, 589=EXAMPLE-1, 493=EXAMPLE-1, 436=EXAMPLE-1, 165=EXAMPLE-1, 733=EXAMPLE-1, 528=EXAMPLE-1, 965=EXAMPLE-1, 1023=EXAMPLE-1, 822=EXAMPLE-1, 982=EXAMPLE-1, 644=EXAMPLE-1, 19=EXAMPLE-1, 446=EXAMPLE-1, 86=EXAMPLE-1, 594=EXAMPLE-1, 176=EXAMPLE-1, 620=EXAMPLE-1, 485=EXAMPLE-1, 471=EXAMPLE-1, 931=EXAMPLE-1, 544=EXAMPLE-1, 660=EXAMPLE-1, 1008=EXAMPLE-1, 970=EXAMPLE-1, 183=EXAMPLE-1, 36=EXAMPLE-1, 767=EXAMPLE-1, 895=EXAMPLE-1, 521=EXAMPLE-1, 872=EXAMPLE-1, 727=EXAMPLE-1, 250=EXAMPLE-1, 1=EXAMPLE-1, 510=EXAMPLE-1, 200=EXAMPLE-1, 291=EXAMPLE-1, 139=EXAMPLE-1, 392=EXAMPLE-1, 449=EXAMPLE-1, 42=EXAMPLE-1, 796=EXAMPLE-1, 179=EXAMPLE-1, 357=EXAMPLE-1, 314=EXAMPLE-1, 825=EXAMPLE-1, 572=EXAMPLE-1, 268=EXAMPLE-1, 787=EXAMPLE-1, 196=EXAMPLE-1, 118=EXAMPLE-1, 996=EXAMPLE-1, 951=EXAMPLE-1, 945=EXAMPLE-1, 738=EXAMPLE-1, 480=EXAMPLE-1, 611=EXAMPLE-1, 317=EXAMPLE-1, 395=EXAMPLE-1, 541=EXAMPLE-1, 861=EXAMPLE-1, 988=EXAMPLE-1, 976=EXAMPLE-1, 552=EXAMPLE-1, 812=EXAMPLE-1, 219=EXAMPLE-1, 100=EXAMPLE-1, 348=EXAMPLE-1, 575=EXAMPLE-1, 499=EXAMPLE-1, 875=EXAMPLE-1, 131=EXAMPLE-1, 244=EXAMPLE-1, 82=EXAMPLE-1, 377=EXAMPLE-1, 84=EXAMPLE-1, 569=EXAMPLE-1, 477=EXAMPLE-1, 402=EXAMPLE-1, 648=EXAMPLE-1, 6=EXAMPLE-1, 560=EXAMPLE-1, 549=EXAMPLE-1, 704=EXAMPLE-1, 1016=EXAMPLE-1, 199=EXAMPLE-1, 401=EXAMPLE-1, 678=EXAMPLE-1}> 
                                but was:<{790=EXAMPLE-1, 835=EXAMPLE-1, 879=EXAMPLE-1, 1010=EXAMPLE-1, 785=EXAMPLE-1, 811=EXAMPLE-1, 911=EXAMPLE-1, 762=EXAMPLE-1, 841=EXAMPLE-1, 974=EXAMPLE-1, 793=EXAMPLE-1, 903=EXAMPLE-1, 940=EXAMPLE-1, 737=EXAMPLE-1, 742=EXAMPLE-1, 869=EXAMPLE-1, 776=EXAMPLE-1, 920=EXAMPLE-1, 894=EXAMPLE-1, 765=EXAMPLE-1, 756=EXAMPLE-1, 845=EXAMPLE-1, 961=EXAMPLE-1, 736=EXAMPLE-1, 914=EXAMPLE-1, 992=EXAMPLE-1, 934=EXAMPLE-1, 917=EXAMPLE-1, 860=EXAMPLE-1, 751=EXAMPLE-1, 799=EXAMPLE-1, 968=EXAMPLE-1, 954=EXAMPLE-1, 937=EXAMPLE-1, 882=EXAMPLE-1, 995=EXAMPLE-1, 804=EXAMPLE-1, 983=EXAMPLE-1, 948=EXAMPLE-1, 929=EXAMPLE-1, 878=EXAMPLE-1, 750=EXAMPLE-1, 1021=EXAMPLE-1, 1022=EXAMPLE-1, 722=EXAMPLE-1, 928=EXAMPLE-1, 885=EXAMPLE-1, 986=EXAMPLE-1, 957=EXAMPLE-1, 905=EXAMPLE-1, 828=EXAMPLE-1, 893=EXAMPLE-1, 1000=EXAMPLE-1, 829=EXAMPLE-1, 725=EXAMPLE-1, 908=EXAMPLE-1, 745=EXAMPLE-1, 888=EXAMPLE-1, 838=EXAMPLE-1, 784=EXAMPLE-1, 844=EXAMPLE-1, 923=EXAMPLE-1, 820=EXAMPLE-1, 902=EXAMPLE-1, 728=EXAMPLE-1, 1004=EXAMPLE-1, 1019=EXAMPLE-1, 851=EXAMPLE-1, 994=EXAMPLE-1, 1020=EXAMPLE-1, 943=EXAMPLE-1, 980=EXAMPLE-1, 801=EXAMPLE-1, 779=EXAMPLE-1, 936=EXAMPLE-1, 731=EXAMPLE-1, 759=EXAMPLE-1, 952=EXAMPLE-1, 854=EXAMPLE-1, 960=EXAMPLE-1, 810=EXAMPLE-1, 1018=EXAMPLE-1, 826=EXAMPLE-1, 783=EXAMPLE-1, 873=EXAMPLE-1, 990=EXAMPLE-1, 791=EXAMPLE-1, 734=EXAMPLE-1, 857=EXAMPLE-1, 891=EXAMPLE-1, 809=EXAMPLE-1, 935=EXAMPLE-1, 966=EXAMPLE-1, 876=EXAMPLE-1, 741=EXAMPLE-1, 842=EXAMPLE-1, 717=EXAMPLE-1, 788=EXAMPLE-1, 892=EXAMPLE-1, 993=EXAMPLE-1, 915=EXAMPLE-1, 719=EXAMPLE-1, 797=EXAMPLE-1, 775=EXAMPLE-1, 768=EXAMPLE-1, 818=EXAMPLE-1, 754=EXAMPLE-1, 927=EXAMPLE-1, 1017=EXAMPLE-1, 823=EXAMPLE-1, 901=EXAMPLE-1, 843=EXAMPLE-1, 977=EXAMPLE-1, 946=EXAMPLE-1, 932=EXAMPLE-1, 720=EXAMPLE-1, 955=EXAMPLE-1, 740=EXAMPLE-1, 757=EXAMPLE-1, 760=EXAMPLE-1, 777=EXAMPLE-1, 866=EXAMPLE-1, 900=EXAMPLE-1, 763=EXAMPLE-1, 912=EXAMPLE-1, 867=EXAMPLE-1, 716=EXAMPLE-1, 921=EXAMPLE-1, 794=EXAMPLE-1, 1001=EXAMPLE-1, 743=EXAMPLE-1, 766=EXAMPLE-1, 833=EXAMPLE-1, 969=EXAMPLE-1, 989=EXAMPLE-1, 817=EXAMPLE-1, 941=EXAMPLE-1, 918=EXAMPLE-1, 906=EXAMPLE-1, 926=EXAMPLE-1, 1003=EXAMPLE-1, 984=EXAMPLE-1, 883=EXAMPLE-1, 949=EXAMPLE-1, 832=EXAMPLE-1, 975=EXAMPLE-1, 1002=EXAMPLE-1, 836=EXAMPLE-1, 782=EXAMPLE-1, 774=EXAMPLE-1, 816=EXAMPLE-1, 773=EXAMPLE-1, 865=EXAMPLE-1, 964=EXAMPLE-1, 874=EXAMPLE-1, 723=EXAMPLE-1, 781=EXAMPLE-1, 886=EXAMPLE-1, 732=EXAMPLE-1, 858=EXAMPLE-1, 981=EXAMPLE-1, 959=EXAMPLE-1, 930=EXAMPLE-1, 786=EXAMPLE-1, 1006=EXAMPLE-1, 950=EXAMPLE-1, 726=EXAMPLE-1, 958=EXAMPLE-1, 715=EXAMPLE-1, 808=EXAMPLE-1, 889=EXAMPLE-1, 880=EXAMPLE-1, 924=EXAMPLE-1, 821=EXAMPLE-1, 973=EXAMPLE-1, 938=EXAMPLE-1, 1014=EXAMPLE-1, 953=EXAMPLE-1, 729=EXAMPLE-1, 746=EXAMPLE-1, 752=EXAMPLE-1, 852=EXAMPLE-1, 831=EXAMPLE-1, 1015=EXAMPLE-1, 998=EXAMPLE-1, 780=EXAMPLE-1, 925=EXAMPLE-1, 749=EXAMPLE-1, 824=EXAMPLE-1, 909=EXAMPLE-1, 987=EXAMPLE-1, 855=EXAMPLE-1, 802=EXAMPLE-1, 978=EXAMPLE-1, 495=EXAMPLE-1, 1005=EXAMPLE-1, 304=EXAMPLE-1, 110=EXAMPLE-1, 721=EXAMPLE-1, 461=EXAMPLE-1, 102=EXAMPLE-1, 864=EXAMPLE-1, 910=EXAMPLE-1, 420=EXAMPLE-1, 359=EXAMPLE-1, 256=EXAMPLE-1, 133=EXAMPLE-1, 849=EXAMPLE-1, 17=EXAMPLE-1, 211=EXAMPLE-1, 85=EXAMPLE-1, 714=EXAMPLE-1, 827=EXAMPLE-1, 761=EXAMPLE-1, 246=EXAMPLE-1, 287=EXAMPLE-1, 405=EXAMPLE-1, 261=EXAMPLE-1, 18=EXAMPLE-1, 792=EXAMPLE-1, 807=EXAMPLE-1, 464=EXAMPLE-1, 913=EXAMPLE-1, 136=EXAMPLE-1, 144=EXAMPLE-1, 830=EXAMPLE-1, 311=EXAMPLE-1, 868=EXAMPLE-1, 47=EXAMPLE-1, 764=EXAMPLE-1, 500=EXAMPLE-1, 113=EXAMPLE-1, 772=EXAMPLE-1, 967=EXAMPLE-1, 735=EXAMPLE-1, 877=EXAMPLE-1, 237=EXAMPLE-1, 454=EXAMPLE-1, 991=EXAMPLE-1, 815=EXAMPLE-1, 1013=EXAMPLE-1, 338=EXAMPLE-1, 295=EXAMPLE-1, 916=EXAMPLE-1, 972=EXAMPLE-1, 382=EXAMPLE-1, 316=EXAMPLE-1, 81=EXAMPLE-1, 467=EXAMPLE-1, 439=EXAMPLE-1, 396=EXAMPLE-1, 178=EXAMPLE-1, 748=EXAMPLE-1, 438=EXAMPLE-1, 933=EXAMPLE-1, 167=EXAMPLE-1, 488=EXAMPLE-1, 345=EXAMPLE-1, 798=EXAMPLE-1, 840=EXAMPLE-1, 769=EXAMPLE-1, 186=EXAMPLE-1, 147=EXAMPLE-1, 222=EXAMPLE-1, 89=EXAMPLE-1, 198=EXAMPLE-1, 898=EXAMPLE-1, 203=EXAMPLE-1, 947=EXAMPLE-1, 281=EXAMPLE-1, 39=EXAMPLE-1, 755=EXAMPLE-1, 252=EXAMPLE-1, 28=EXAMPLE-1, 899=EXAMPLE-1, 325=EXAMPLE-1, 253=EXAMPLE-1, 871=EXAMPLE-1, 770=EXAMPLE-1, 55=EXAMPLE-1, 152=EXAMPLE-1, 388=EXAMPLE-1, 360=EXAMPLE-1, 394=EXAMPLE-1, 506=EXAMPLE-1, 60=EXAMPLE-1, 523=EXAMPLE-1, 379=EXAMPLE-1, 417=EXAMPLE-1, 944=EXAMPLE-1, 3=EXAMPLE-1, 430=EXAMPLE-1, 971=EXAMPLE-1, 1011=EXAMPLE-1, 278=EXAMPLE-1, 190=EXAMPLE-1, 171=EXAMPLE-1, 96=EXAMPLE-1, 705=EXAMPLE-1, 710=EXAMPLE-1, 884=EXAMPLE-1, 284=EXAMPLE-1, 409=EXAMPLE-1, 806=EXAMPLE-1, 713=EXAMPLE-1, 293=EXAMPLE-1, 834=EXAMPLE-1, 73=EXAMPLE-1, 487=EXAMPLE-1, 730=EXAMPLE-1, 963=EXAMPLE-1, 956=EXAMPLE-1, 122=EXAMPLE-1, 142=EXAMPLE-1, 862=EXAMPLE-1, 758=EXAMPLE-1, 595=EXAMPLE-1, 424=EXAMPLE-1, 354=EXAMPLE-1, 228=EXAMPLE-1, 491=EXAMPLE-1, 329=EXAMPLE-1, 529=EXAMPLE-1, 813=EXAMPLE-1, 452=EXAMPLE-1, 685=EXAMPLE-1, 404=EXAMPLE-1, 453=EXAMPLE-1, 847=EXAMPLE-1, 23=EXAMPLE-1, 669=EXAMPLE-1, 300=EXAMPLE-1, 509=EXAMPLE-1, 443=EXAMPLE-1, 259=EXAMPLE-1, 193=EXAMPLE-1, 819=EXAMPLE-1, 897=EXAMPLE-1, 887=EXAMPLE-1, 587=EXAMPLE-1, 98=EXAMPLE-1, 269=EXAMPLE-1, 601=EXAMPLE-1, 670=EXAMPLE-1, 437=EXAMPLE-1, 688=EXAMPLE-1, 156=EXAMPLE-1, 303=EXAMPLE-1, 334=EXAMPLE-1, 427=EXAMPLE-1, 24=EXAMPLE-1, 320=EXAMPLE-1, 814=EXAMPLE-1, 651=EXAMPLE-1, 942=EXAMPLE-1, 907=EXAMPLE-1, 486=EXAMPLE-1, 795=EXAMPLE-1, 206=EXAMPLE-1, 185=EXAMPLE-1, 494=EXAMPLE-1, 403=EXAMPLE-1, 177=EXAMPLE-1, 985=EXAMPLE-1, 94=EXAMPLE-1, 896=EXAMPLE-1, 850=EXAMPLE-1, 1009=EXAMPLE-1, 10=EXAMPLE-1, 739=EXAMPLE-1, 744=EXAMPLE-1, 604=EXAMPLE-1, 151=EXAMPLE-1, 922=EXAMPLE-1, 201=EXAMPLE-1, 566=EXAMPLE-1, 368=EXAMPLE-1, 645=EXAMPLE-1, 654=EXAMPLE-1, 337=EXAMPLE-1, 771=EXAMPLE-1, 474=EXAMPLE-1, 52=EXAMPLE-1, 54=EXAMPLE-1, 503=EXAMPLE-1, 800=EXAMPLE-1, 323=EXAMPLE-1, 837=EXAMPLE-1, 581=EXAMPLE-1, 35=EXAMPLE-1, 241=EXAMPLE-1, 635=EXAMPLE-1, 512=EXAMPLE-1, 77=EXAMPLE-1, 546=EXAMPLE-1, 275=EXAMPLE-1, 458=EXAMPLE-1, 789=EXAMPLE-1, 31=EXAMPLE-1, 62=EXAMPLE-1, 607=EXAMPLE-1, 127=EXAMPLE-1, 1012=EXAMPLE-1, 561=EXAMPLE-1, 747=EXAMPLE-1, 848=EXAMPLE-1, 119=EXAMPLE-1, 919=EXAMPLE-1, 870=EXAMPLE-1, 251=EXAMPLE-1, 50=EXAMPLE-1, 881=EXAMPLE-1, 40=EXAMPLE-1, 385=EXAMPLE-1, 553=EXAMPLE-1, 260=EXAMPLE-1, 460=EXAMPLE-1, 853=EXAMPLE-1, 803=EXAMPLE-1, 863=EXAMPLE-1, 225=EXAMPLE-1, 235=EXAMPLE-1, 351=EXAMPLE-1, 532=EXAMPLE-1, 638=EXAMPLE-1, 997=EXAMPLE-1, 778=EXAMPLE-1, 999=EXAMPLE-1, 69=EXAMPLE-1, 661=EXAMPLE-1, 61=EXAMPLE-1, 856=EXAMPLE-1, 610=EXAMPLE-1, 210=EXAMPLE-1, 629=EXAMPLE-1, 343=EXAMPLE-1, 555=EXAMPLE-1, 839=EXAMPLE-1, 412=EXAMPLE-1, 939=EXAMPLE-1, 162=EXAMPLE-1, 890=EXAMPLE-1, 679=EXAMPLE-1, 979=EXAMPLE-1, 328=EXAMPLE-1, 578=EXAMPLE-1, 962=EXAMPLE-1, 846=EXAMPLE-1, 182=EXAMPLE-1, 234=EXAMPLE-1, 429=EXAMPLE-1, 451=EXAMPLE-1, 285=EXAMPLE-1, 904=EXAMPLE-1, 805=EXAMPLE-1, 586=EXAMPLE-1, 695=EXAMPLE-1, 753=EXAMPLE-1, 105=EXAMPLE-1, 859=EXAMPLE-1, 724=EXAMPLE-1, 184=EXAMPLE-1, 415=EXAMPLE-1, 718=EXAMPLE-1, 1007=EXAMPLE-1, 159=EXAMPLE-1, 145=EXAMPLE-1, 589=EXAMPLE-1, 493=EXAMPLE-1, 436=EXAMPLE-1, 165=EXAMPLE-1, 733=EXAMPLE-1, 528=EXAMPLE-1, 965=EXAMPLE-1, 1023=EXAMPLE-1, 822=EXAMPLE-1, 982=EXAMPLE-1, 644=EXAMPLE-1, 19=EXAMPLE-1, 446=EXAMPLE-1, 86=EXAMPLE-1, 594=EXAMPLE-1, 176=EXAMPLE-1, 620=EXAMPLE-1, 485=EXAMPLE-1, 471=EXAMPLE-1, 931=EXAMPLE-1, 544=EXAMPLE-1, 660=EXAMPLE-1, 1008=EXAMPLE-1, 970=EXAMPLE-1, 183=EXAMPLE-1, 36=EXAMPLE-1, 767=EXAMPLE-1, 895=EXAMPLE-1, 521=EXAMPLE-1, 872=EXAMPLE-1, 727=EXAMPLE-1, 250=EXAMPLE-1, 1=EXAMPLE-1, 510=EXAMPLE-1, 200=EXAMPLE-1, 291=EXAMPLE-1, 139=EXAMPLE-1, 392=EXAMPLE-1, 449=EXAMPLE-1, 42=EXAMPLE-1, 796=EXAMPLE-1, 179=EXAMPLE-1, 357=EXAMPLE-1, 314=EXAMPLE-1, 825=EXAMPLE-1, 572=EXAMPLE-1, 268=EXAMPLE-1, 787=EXAMPLE-1, 196=EXAMPLE-1, 118=EXAMPLE-1, 996=EXAMPLE-1, 951=EXAMPLE-1, 945=EXAMPLE-1, 738=EXAMPLE-1, 480=EXAMPLE-1, 611=EXAMPLE-1, 317=EXAMPLE-1, 395=EXAMPLE-1, 541=EXAMPLE-1, 861=EXAMPLE-1, 988=EXAMPLE-1, 976=EXAMPLE-1, 552=EXAMPLE-1, 812=EXAMPLE-1, 219=EXAMPLE-1, 100=EXAMPLE-1, 348=EXAMPLE-1, 575=EXAMPLE-1, 499=EXAMPLE-1, 875=EXAMPLE-1, 131=EXAMPLE-1, 244=EXAMPLE-1, 82=EXAMPLE-1, 377=EXAMPLE-1, 84=EXAMPLE-1, 569=EXAMPLE-1, 477=EXAMPLE-1, 402=EXAMPLE-1, 648=EXAMPLE-1, 6=EXAMPLE-1, 560=EXAMPLE-1, 549=EXAMPLE-1, 704=EXAMPLE-1, 1016=EXAMPLE-1, 199=EXAMPLE-1, 401=EXAMPLE-1, 678=EXAMPLE-1}>
    at org.junit.Assert.fail(Assert.java:88)
    at org.junit.Assert.failNotEquals(Assert.java:743)
    at org.junit.Assert.assertEquals(Assert.java:118)
    at net.openhft.collections.TCPSocketReplication4WayMapTest.testBufferOverflow(TCPSocketReplication4WayMapTest.java:135)

SharedHashMap: iterating using keyset, valueset is very slow for larger tables

I had a look and it seems internally complete temporary copies are built up. Unfortunately my map has 5 million entries.

Is there any way to iterate values or keys of a SharedHashMap in a way next entry is computed only whenever "next" is called on the iterator ?. NP with non-standard API as the JDK collection's idea of requiring a keyset/valueset to offer an iterator is not exactly a good design performance wise.

I would try to add this myself, however I am missing kind of a 20 line overview how the basic mechanics work (segments, entries, entrysize, free mem managements, compaction).

2cnd: I am currently using SharedHasmap from a single thread (so I don't need concurrency control). Is there a way to use HugeMap backed by a memory mapped file ? I am looking for a mmaped Huge Hashmap, don't need sharing 4 now ..

PingPong latency test across /dev/shm/SharedHashMap IPC ...

I have a test that involves 2 Java VM PIDs ping-pong'g the put()/get() of a primitive double by K into a /dev/shm/SharedHashMap.

PID 1 represents a ping pong player positoned on the LEFT side of the table.
PID 2 represents a ping pong player positoned on the RIGHT side of the table.

PID 1 only does a shm.put(K, 4.0);
PID 2 only does a shm.put(K,5.0);

After either PID does its .put() it then spins-busy waiting for the player on the other side to "ping-pong" back their put.

PID 1 -- the player on the left -- must always have its JVM started first for the test to work.

I am getting consistently < 10us latency for this ping-pong latency test.

My 2 questions are these -- on line 38 of each .java at

https://github.com/Cotton-Ben/HugeCollections/tree/master/collections/src/test/java/net/openhft/collections/fromdocs/pingpong_latency

(1) why do I have to do a re-assignment

 _bondEntryV = shmLeft.acquireUsing("369604103", bondOffHeap);

instead of just re-using the earlier computed off-Heap reference to '_bondEntryV' in the spin-busy waiting loop?

(2) I see that OpenHFT now has a SharedMapEventListeners API ... is this ready? Are there any existing tests I could inspect to affect my learning how to use this API? This API should provide my relief from having to do these spin-busy waiting loops, correct?

native $$ delimited inner Class support needed for nested Interfaces

isolating this concern into its own separate issue.

3.0e RELEASE should ideally support

DataValueClasses.newDirectReferece(InterfaceWithNestedInterface.class);

invokes.

the 3.0e-SNAPSHOT fixes the GBP to $$ delimiter issue for long and integer on Mac OSX, and Fedora Linux. However, the 3,0e-SNAPSHOT still does not empower the single test at

https://github.com/Cotton-Ben/infinispan/tree/master/off-heap

to pass for the case = BondVOInterface.class (nested interface on top of inner MarketPx interface).

Here is the current @test result (NOTE: MarketPx$$native not being shown -- inner interface still delimited with GBP symbol):

[TestNG] Running:
  C:\Users\ben\.IdeaIC13\system\temp-testng-customsuite.xml

ISPN7 JCACHE DataContainer view of OpenHFT SHM is being created
OpenHFT SHMBuilder starting: /dev/shmSHM/bondVO.@t=1395489757714  entries=[NULL]
OpenHFT SHMBuilder done: /dev/shmSHM/bondVO.@t=1395489757714  entries=[{}]
ISPN7 JCACHE DataContainer created jcacheDataContainer=[org.infinispan.offheap.container.OffHeapDefaultDataContainer@2789eebb]
/org/infinispan/offheap/BondVOInterface$MarketPx£native.java:12: error: class MarketPx£native is public, should be declared in a file named MarketPx£native.java
public class MarketPx£native implements MarketPx, BytesMarshallable, Byteable, Copyable<org.infinispan.offheap.BondVOInterface$MarketPx> {
       ^
/org/infinispan/offheap/BondVOInterface$MarketPx£native.java:12: error: cannot find symbol
public class MarketPx£native implements MarketPx, BytesMarshallable, Byteable, Copyable<org.infinispan.offheap.BondVOInterface$MarketPx> {
                                        ^
  symbol: class MarketPx
/org/infinispan/offheap/BondVOInterface$MarketPx£native.java:12: error: cannot find symbol
public class MarketPx£native implements MarketPx, BytesMarshallable, Byteable, Copyable<org.infinispan.offheap.BondVOInterface$MarketPx> {
                                                                                                              ^
  symbol:   class BondVOInterface$MarketPx
  location: package org.infinispan.offheap
/org/infinispan/offheap/BondVOInterface$MarketPx£native.java:63: error: cannot find symbol
    public void copyFrom(org.infinispan.offheap.BondVOInterface$MarketPx from) {
                                               ^
  symbol:   class BondVOInterface$MarketPx
  location: package org.infinispan.offheap
/org/infinispan/offheap/BondVOInterface$MarketPx£native.java:113: error: cannot find symbol
        if (!(o instanceof MarketPx)) return false;
                           ^
  symbol:   class MarketPx
  location: class MarketPx£native
/org/infinispan/offheap/BondVOInterface$MarketPx£native.java:114: error: cannot find symbol
        MarketPx that = (MarketPx) o;
        ^
  symbol:   class MarketPx
  location: class MarketPx£native
/org/infinispan/offheap/BondVOInterface$MarketPx£native.java:114: error: cannot find symbol
        MarketPx that = (MarketPx) o;
                         ^
  symbol:   class MarketPx
  location: class MarketPx£native
java.lang.AssertionError: java.lang.ClassNotFoundException: org.infinispan.offheap.BondVOInterface$MarketPx£native
    at net.openhft.lang.model.DataValueGenerator.acquireNativeClass(DataValueGenerator.java:315)
    at net.openhft.lang.model.DataValueGenerator.acquireNativeClass(DataValueGenerator.java:302)
    at net.openhft.lang.model.DataValueClassCache.directClassFor(DataValueClassCache.java:48)
    at net.openhft.lang.model.DataValueClassCache.newDirectReference(DataValueClassCache.java:37)
    at net.openhft.lang.model.DataValueClasses.newDirectReference(DataValueClasses.java:36)
    at org.infinispan.offheap.test.OffHeapDefaultDataContainerTest.testOpenHFTasOffHeapJcacheOperandProvider(OffHeapDefaultDataContainerTest.java:75)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1123)
    at org.testng.TestNG.run(TestNG.java:1031)
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
    at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:125)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.lang.ClassNotFoundException: org.infinispan.offheap.BondVOInterface$MarketPx£native
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at net.openhft.compiler.CachedCompiler.loadFromJava(CachedCompiler.java:108)
    at net.openhft.lang.model.DataValueGenerator.acquireNativeClass(DataValueGenerator.java:313)
    ... 35 more
7 errors

Process finished with exit code 0


Difference between setSmallEntrySize and setCapacity

Peter, first of all thanks for such an amazing work on the high performance development.

I have just started going through your OpenHFT Collections API.
Just wanted to know the difference between couple of methods in net.openhft.collections.HugeConfig

  1. setSmallEntrySize(int)
  2. setCapacity(int)

Thank You.

ChronicleMap / ChronicleMapBuilder - actualEntriesPerSegment restricted to minimum of 8

Note : referring to ChronicleMap / ChronicleMapBuilder but I'm actually using SharedHashMap and SharedHashMapBuilder.
So my actual Issue is that setting actualEntriesPerSegment to a value less than 8 (i.e. 1 to 7) results in IllegalArgumentException .. Segment is full...
Is this an intentional restriction?
Seems to occur as a consequence of :
long sizeOfBitSets() {
return align64(entriesPerSegment / 8);
}

I ask because I would like to be able to set actualEntriesPerSegment to 1. My reason for that is because, given the recent change which fixed a previous problem, concurrent reads/writes to different map entries that happen to be in the same segment are effectively queued/blocked behind eachother reducing throughput. So I think a solution would be to have each entry in its own segment.
I appreciate that were I populating the map with millions of entries then a dedicated segment and associated Bytes object would probably not be practical. But in the use case i am exploring I will have 1000's or tens of 1000's of entries and the nature of the accessing and mutating of individual entries tends to be in bursts clustering around 'similar' key values whose hashing value seems to result in a high likelyhood they will have been located in same segment. I understand that I could further randomize keys to reduce this likelyhood...but i would rather not have to and continue using what are the natural keys..and also it will just reduce the likelyhood and not erradicate it.

Comparing behaviour of HugeHashMap with HashMap

Hello,

I wrote a unit test which reads a dictionary file (https://raw.githubusercontent.com/eneko/data-repository/master/data/words.txt) first into net.openhft.collections.HugeHashMap and then java.util.HashMap, adding each word as the key and value, like so:

map.put(term, term);

After this the test dumps the result into a file.

The dump file of the hash map, looks like e.g:

:: Protorosaurus=Protorosaurus
:: vocular=vocular
:: Kunmiut=Kunmiut
:: repaying=repaying
:: aminolysis=aminolysis
:: impavid=impavid
:: preimpair=preimpair
:: bradyphasia=bradyphasia
:: indignation=indignation
:: subshrubby=subshrubby
...

But the result of the hugeHashMap looks like:

:: elaidinic=divulgater
:: circumlocution=elaidinic
:: batitinan=circumlocution
:: chevalier=batitinan
:: conjunctivitis=chevalier
:: Ettarre=conjunctivitis
:: elative=Ettarre
:: elliptically=elative
:: cubicly=elliptically
:: dermatomyoma=cubicly
...

Any ideas why this is so? Why does the dump generated by HugeHashMap not display in most cases a key equaling the value?

I do not expect the line order to be the same, but the content to have in most cases the key equal to the value.

The code for this test can be found here: https://gist.github.com/gilfernandes/145046a9f0b349c078b4

I am using Windows 7, Java 7 and the pom.xml of my test project contains this dependency:

        <dependency>
            <groupId>net.openhft</groupId>
            <artifactId>collections</artifactId>
            <version>3.0.2</version>
        </dependency>

Best regards,

Gil

Adapting OpenHFT SHM as JSR-107 interoperable JCACHE (Off-Heap!) operand

It is my understandng that there will a OpenHFT HC Alpha Release in Maven Central next weekend. At that time, Dmitry and I will take the OpenHFT dependency tag and proceed to build a branch of Red Hat's ISPN 7 that will treat net.openhft.collections.SharedHashMap<K,V> as a Red Hat Infinispan 7 default impl of javax.cache.Cache<K,V>

A diagram of this build effort can be found here: https://raw.github.com/Cotton-Ben/OpenHFT/master/doc/AdaptingOpenHFT-SHM-as-JCACHE-Impl.jpg

Also the Red Hat view of his effort will be tracked here: https://issues.jboss.org/browse/ISPN-871

Questions on HugeCollection

Peter, thanks again for such an amazing work on the high performance development. Since there is no google group on HugeCollection, want to ask you a few questions on HugeCollection via github issue:

  1. By looking at the code, HugeCollection is based on off heap memory storage, do you know if it will be suitable for collection that could be potentially bigger than the available memory?
  2. If not, would memory mapped file backed HugeCollection possible to support that?
  3. Assume either way as long as the address is known, it is possible to use external process to also read the same data? (But not writing to it)
  4. Saw synchronized word in the implementation, assume that supports concurrent read and write. Let me know if my assumption is correct

Super thanks in advanced

Updating an existing entry in HugeHashMap does not work

Hi

There appears to be a bug in the master branch which means that updating an existing entry in HugeHashMap does not work, i.e.

    HugeConfig config = HugeConfig.DEFAULT.clone();

    HugeHashMap<Long, Long> map1 = 
            new HugeHashMap<Long, Long>(config, Long.class, Long.class);

    long key = 55;

    map1.put(key, 10L);
    System.out.println(key + " => " + map1.get(key));
    map1.put(key, 20L);
    System.out.println(key + " => " + map1.get(key));

outputs

55 => 10
55 => 10

cheers
Kilian

SharedHashMap interface signatures

Do you think it might be a little clearer if the

 V acquireUsing(Object key, V value);

signature was changed to

 V getOrCreate(Object key, V value);  //makes it more obvious non-NULL will be returned.

or possibly

V getNonNull(Object key, V value);     //makes it totally obvious non-NULL will be returned.

?

Keeping the current signature is fine, of course, I'm just saying for ( simple minded ) me the last one makes it easier to remember which signature can't return NULL. ;-)

OpenHFT scope of capability re: SHMEntry fields (user JBI supplied) and "barrier" operations

what is the currently supported scope of SHMEntry filed barrier operations (across both Threads and PIDs)?

E.g. If I supply a JBI entry of

<T>  MyField;

and signatures



<T> getMyField();
void setMyField(<T> myField);

boolean compareAndSwapMyField(<T>  expected, <T> value);
<T> getVolatileMyField()
void setOrderedMyField(<T> myField);


should we expect that the run-time OpenHFT generated SHMEntry impl class will provide the capability such that the first 2 methods above are non-barrier crossing impls and that last 3 methods are guaranteed to be barrier crossing impls?

is all of this supported currently?

Missing net.openhft:HugeCollections:2.0 pom

Looks like Maven central does not have the pom for net.openhft:HugeCollections:2.0

> Could not resolve net.openhft:collections:2.0.
  Required by:
      com.github.lburgazzoli:hazelcast-offheap:1.0.0.SNAPSHOT
   > Could not parse POM http://repo1.maven.org/maven2/net/openhft/collections/2.0/collections-2.0.pom
      > Could not find any version that matches net.openhft:HugeCollections:2.0.
   > Could not parse POM http://repo2.maven.org/maven2/net/openhft/collections/2.0/collections-2.0.pom
      > Could not find any version that matches net.openhft:HugeCollections:2.0.
   > Could not parse POM https://oss.sonatype.org/content/repositories/releases/net/openhft/collections/2.0/collections-2.0.pom
      > Could not find any version that matches net.openhft:HugeCollections:

remark on replication/distribution

If you manage to define kind of in/out interfaces for replication messages, I could plug in a multicast based replication, which is favourable over TCP in many setups. (Talking of SharedHashmap)

Error in HugeHashMap for specific configurations

Modifying the existing testcase in HugeHashMapTest giving different values of count makes it fail.

Sample code given below:

    @Test
    public void testPut() throws ExecutionException, InterruptedException {

        int count = 50;
        HugeConfig config = HugeConfig.DEFAULT.clone()
                .setSegments(128)
                .setSmallEntrySize(72) // TODO 64 corrupts the values !!
                .setCapacity(count);

        final HugeHashMap<CharSequence, SampleValues> map =
                new HugeHashMap<CharSequence, SampleValues>(
                        config, CharSequence.class, SampleValues.class);
        long start = System.nanoTime();


        final SampleValues value = new SampleValues();
        StringBuilder user = new StringBuilder();
        for (int i = 0; i < count; i++) {
            value.ee = i;
            value.gg = i;
            value.ii = i;
            map.put(users(user, i), value);
        }
        for (int i = 0; i < count; i++) {
            assertNotNull(map.get(users(user, i), value));
            assertEquals(i, value.ee);
            assertEquals(i, value.gg, 0.0);
            assertEquals(i, value.ii);
        }

        long time = System.nanoTime() - start;
        System.out.printf("Put/get %,d K operations per second%n",
                (int) (count * 4 * 1e6 / time));
    }

The assertion is

java.lang.AssertionError: expected:<30> but was:<22>

With the count of 100, the assertion is

java.lang.AssertionError: expected:<40> but was:<32>

With count of 2000, the assertion is

java.lang.AssertionError: expected:<1247> but was:<1239>

Seems to work for other counts like 5000, 10000 etc.

setSegments(int) is not public in HugeConfig; cannot be accessed from outside package

Hello,

I was just playing around with the examples and I got surprised by this error message on this code:

package com.onepointltd.file.operations;

...

@Test
    public void testHugeMap() {
        HugeConfig config = HugeConfig.DEFAULT.clone()
                .setSegments(128)
                .setSmallEntrySize(128)
                .setCapacity(10000);
    }

I get these error messages:

setSegments(int) is not public in HugeConfig; cannot be accessed from outside package

setSmallEntrySize(int) is not public in HugeConfig; cannot be accessed from outside package

setCapacity(int) is not public in HugeConfig; cannot be accessed from outside package

My current maven dependency is:

<dependency>
            <groupId>net.openhft</groupId>
            <artifactId>collections-sandbox</artifactId>
            <version>3.0.3-SNAPSHOT</version>
            <type>jar</type>
        </dependency>

If this is really a stupid question, please bare with me. I am just a beginner using OpenHFT.

Best regards,

Gil

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.