Thanks, this is exactly what I needed. I've used it in the past, but
have been "away" long enough that I'd forgotten about it.

On Tue, Apr 11, 2017 at 4:23 PM, A. Soroka <aj...@virginia.edu> wrote:
> Yes, you will want to exercise some control over concurrency here:
>
> https://jena.apache.org/documentation/notes/concurrency-howto.html
>
> ---
> A. Soroka
> The University of Virginia Library
>
>> On Apr 11, 2017, at 1:16 PM, Joshua TAYLOR <joshuaaa...@gmail.com> wrote:
>>
>> I expect the answer to my question is simply "make sure model access
>> is synchronized", but just in case, I'm wondering whether this is
>> expected behavior.  Here's some code that modifies a model from a
>> bunch of different threads. This doesn't cause an error every time,
>> but occasionally throws, as shown in the stacktrace following the
>> code.
>>
>> The class here is called OhDearTest, because I getting a
>> `jena.shared.BrokenException oh dear, already have a slot for ...`
>> earlier, which I'm still trying to reproduce. This code doesn't seem
>> to trigger it. I've included a bit of that stacktrace at the very end.
>>
>> ## Code
>>
>> import org.apache.jena.rdf.model.Model;
>> import org.apache.jena.rdf.model.ModelFactory;
>> import org.apache.jena.rdf.model.Property;
>> import org.apache.jena.rdf.model.Resource;
>>
>> public class OhDearTest {
>>  public static void main(String[] args) throws InterruptedException {
>>    int n = 1000;
>>    Model model = ModelFactory.createDefaultModel();
>>    Property p = model.createProperty("urn:ex:p");
>>    Thread[] thread = new Thread[n];
>>    for (int i = 0; i < n; i++) {
>>      thread[i] = new Thread(() -> {
>>        Resource r = model.createResource();
>>        r.addLiteral(p, "value");
>>      });
>>      thread[i].start();
>>    }
>>    for (int i = 0; i < n; i++) {
>>      thread[i].join();
>>    }
>>  }
>> }
>>
>> ## Stacktrace
>>
>> Exception in thread "Thread-300" Exception in thread "Thread-299"
>> Exception in thread "Thread-304" Exception in thread "Thread-282"
>> Exception in thread "Thread-324" Exception in thread "Thread-331"
>> Exception in thread "Thread-328"
>> java.lang.ArrayIndexOutOfBoundsException: 905
>>    at org.apache.jena.mem.HashCommon.findSlot(HashCommon.java:164)
>>    at 
>> org.apache.jena.mem.HashedTripleBunch.contains(HashedTripleBunch.java:40)
>>    at 
>> org.apache.jena.mem.NodeToTriplesMapMem.add(NodeToTriplesMapMem.java:52)
>>    at 
>> org.apache.jena.mem.GraphTripleStoreBase.add(GraphTripleStoreBase.java:63)
>>    at org.apache.jena.mem.GraphMem.performAdd(GraphMem.java:37)
>>    at org.apache.jena.graph.impl.GraphBase.add(GraphBase.java:181)
>>    at org.apache.jena.rdf.model.impl.ModelCom.add(ModelCom.java:1191)
>>    at 
>> org.apache.jena.rdf.model.impl.ResourceImpl.addLiteral(ResourceImpl.java:285)
>>    at OhDearTest.lambda$0(OhDearTest.java:15)
>>    at java.lang.Thread.run(Thread.java:745)
>> java.lang.ArrayIndexOutOfBoundsException: 789
>>    at org.apache.jena.mem.HashCommon.findSlot(HashCommon.java:164)
>>    at 
>> org.apache.jena.mem.HashedTripleBunch.contains(HashedTripleBunch.java:40)
>>    at 
>> org.apache.jena.mem.NodeToTriplesMapMem.add(NodeToTriplesMapMem.java:52)
>>    at 
>> org.apache.jena.mem.GraphTripleStoreBase.add(GraphTripleStoreBase.java:63)
>>    at org.apache.jena.mem.GraphMem.performAdd(GraphMem.java:37)
>>    at org.apache.jena.graph.impl.GraphBase.add(GraphBase.java:181)
>>    at org.apache.jena.rdf.model.impl.ModelCom.add(ModelCom.java:1191)
>>    at 
>> org.apache.jena.rdf.model.impl.ResourceImpl.addLiteral(ResourceImpl.java:285)
>>    at OhDearTest.lambda$0(OhDearTest.java:15)
>>    at java.lang.Thread.run(Thread.java:745)
>> java.lang.ArrayIndexOutOfBoundsException: 827
>>    at org.apache.jena.mem.HashCommon.findSlot(HashCommon.java:164)
>>    at 
>> org.apache.jena.mem.HashedTripleBunch.contains(HashedTripleBunch.java:40)
>>    at 
>> org.apache.jena.mem.NodeToTriplesMapMem.add(NodeToTriplesMapMem.java:52)
>>    at 
>> org.apache.jena.mem.GraphTripleStoreBase.add(GraphTripleStoreBase.java:63)
>>    at org.apache.jena.mem.GraphMem.performAdd(GraphMem.java:37)
>>    at org.apache.jena.graph.impl.GraphBase.add(GraphBase.java:181)
>>    at org.apache.jena.rdf.model.impl.ModelCom.add(ModelCom.java:1191)
>>    at 
>> org.apache.jena.rdf.model.impl.ResourceImpl.addLiteral(ResourceImpl.java:285)
>>    at OhDearTest.lambda$0(OhDearTest.java:15)
>>    at java.lang.Thread.run(Thread.java:745)
>> java.lang.ArrayIndexOutOfBoundsException: 1061
>>    at org.apache.jena.mem.HashCommon.findSlot(HashCommon.java:164)
>>    at org.apache.jena.mem.HashedBunchMap.put(HashedBunchMap.java:66)
>>    at 
>> org.apache.jena.mem.NodeToTriplesMapMem.add(NodeToTriplesMapMem.java:51)
>>    at 
>> org.apache.jena.mem.GraphTripleStoreBase.add(GraphTripleStoreBase.java:60)
>>    at org.apache.jena.mem.GraphMem.performAdd(GraphMem.java:37)
>>    at org.apache.jena.graph.impl.GraphBase.add(GraphBase.java:181)
>>    at org.apache.jena.rdf.model.impl.ModelCom.add(ModelCom.java:1191)
>>    at 
>> org.apache.jena.rdf.model.impl.ResourceImpl.addLiteral(ResourceImpl.java:285)
>>    at OhDearTest.lambda$0(OhDearTest.java:15)
>>    at java.lang.Thread.run(Thread.java:745)
>> java.lang.ArrayIndexOutOfBoundsException: 918
>>    at org.apache.jena.mem.HashCommon.findSlot(HashCommon.java:164)
>>    at org.apache.jena.mem.HashedBunchMap.get(HashedBunchMap.java:59)
>>    at 
>> org.apache.jena.mem.NodeToTriplesMapMem.add(NodeToTriplesMapMem.java:50)
>>    at 
>> org.apache.jena.mem.GraphTripleStoreBase.add(GraphTripleStoreBase.java:60)
>>    at org.apache.jena.mem.GraphMem.performAdd(GraphMem.java:37)
>>    at org.apache.jena.graph.impl.GraphBase.add(GraphBase.java:181)
>>    at org.apache.jena.rdf.model.impl.ModelCom.add(ModelCom.java:1191)
>>    at 
>> org.apache.jena.rdf.model.impl.ResourceImpl.addLiteral(ResourceImpl.java:285)
>>    at OhDearTest.lambda$0(OhDearTest.java:15)
>>    at java.lang.Thread.run(Thread.java:745)
>> java.lang.ArrayIndexOutOfBoundsException: 1109
>>    at org.apache.jena.mem.HashCommon.findSlot(HashCommon.java:164)
>>    at org.apache.jena.mem.HashedBunchMap.get(HashedBunchMap.java:59)
>>    at 
>> org.apache.jena.mem.NodeToTriplesMapMem.add(NodeToTriplesMapMem.java:50)
>>    at 
>> org.apache.jena.mem.GraphTripleStoreBase.add(GraphTripleStoreBase.java:60)
>>    at org.apache.jena.mem.GraphMem.performAdd(GraphMem.java:37)
>>    at org.apache.jena.graph.impl.GraphBase.add(GraphBase.java:181)
>>    at org.apache.jena.rdf.model.impl.ModelCom.add(ModelCom.java:1191)
>>    at 
>> org.apache.jena.rdf.model.impl.ResourceImpl.addLiteral(ResourceImpl.java:285)
>>    at OhDearTest.lambda$0(OhDearTest.java:15)
>>    at java.lang.Thread.run(Thread.java:745)
>> java.lang.ArrayIndexOutOfBoundsException: 1144
>>    at org.apache.jena.mem.HashedBunchMap.put$(HashedBunchMap.java:87)
>>    at org.apache.jena.mem.HashedBunchMap.put(HashedBunchMap.java:70)
>>    at 
>> org.apache.jena.mem.NodeToTriplesMapMem.add(NodeToTriplesMapMem.java:51)
>>    at 
>> org.apache.jena.mem.GraphTripleStoreBase.add(GraphTripleStoreBase.java:60)
>>    at org.apache.jena.mem.GraphMem.performAdd(GraphMem.java:37)
>>    at org.apache.jena.graph.impl.GraphBase.add(GraphBase.java:181)
>>    at org.apache.jena.rdf.model.impl.ModelCom.add(ModelCom.java:1191)
>>    at 
>> org.apache.jena.rdf.model.impl.ResourceImpl.addLiteral(ResourceImpl.java:285)
>>    at OhDearTest.lambda$0(OhDearTest.java:15)
>>    at java.lang.Thread.run(Thread.java:745)
>>
>> ## The Oh Dear Exception
>>
>> The code above doesn't seem to produce this, but it's what I initially ran 
>> into.
>>
>> Caused by: org.apache.jena.shared.BrokenException: oh dear, already
>> have a slot for 24e48338:15b5d4bfe76:-7ff3, viz 13
>>        at org.apache.jena.mem.HashedBunchMap.grow(HashedBunchMap.java:109)
>>        at org.apache.jena.mem.HashedBunchMap.put$(HashedBunchMap.java:90)
>>        at org.apache.jena.mem.HashedBunchMap.put(HashedBunchMap.java:70)
>>        at 
>> org.apache.jena.mem.NodeToTriplesMapMem.add(NodeToTriplesMapMem.java:51)
>>        at 
>> org.apache.jena.mem.GraphTripleStoreBase.add(GraphTripleStoreBase.java:60)
>>        at org.apache.jena.mem.GraphMem.performAdd(GraphMem.java:37)
>>        at org.apache.jena.graph.impl.GraphBase.add(GraphBase.java:181)
>>        at org.apache.jena.rdf.model.impl.ModelCom.add(ModelCom.java:1191)
>>        at org.apache.jena.rdf.model.impl.ModelCom.add(ModelCom.java:184)
>>        at org.apache.jena.rdf.model.impl.ModelCom.add(ModelCom.java:172)
>>        at 
>> org.apache.jena.rdf.model.impl.ResourceImpl.addProperty(ResourceImpl.java:263)
>>
>>
>> --
>> Joshua Taylor, http://www.cs.rpi.edu/~tayloj/
>



-- 
Joshua Taylor, http://www.cs.rpi.edu/~tayloj/

Reply via email to