Reputation: 35326
My code is throwing the error below:
java.lang.StackOverflowError
at jetbrains.exodus.entitystore.EntityIterableCache.putIfNotCached(EntityIterableCache.java:100)
at jetbrains.exodus.entitystore.iterate.EntityIterableBase.asProbablyCached(EntityIterableBase.java:578)
at jetbrains.exodus.entitystore.iterate.EntityIterableBase.iterator(EntityIterableBase.java:138)
at jetbrains.exodus.entitystore.iterate.binop.MinusIterable$SortedIterator.<init>(MinusIterable.java:72)
at jetbrains.exodus.entitystore.iterate.binop.MinusIterable$SortedIterator.<init>(MinusIterable.java:59)
at jetbrains.exodus.entitystore.iterate.binop.MinusIterable.getIteratorImpl(MinusIterable.java:55)
at jetbrains.exodus.entitystore.iterate.binop.MinusIterable.getIteratorImpl(MinusIterable.java:23)
at jetbrains.exodus.entitystore.iterate.EntityIterableBase.iterator(EntityIterableBase.java:138)
at jetbrains.exodus.entitystore.iterate.binop.MinusIterable$SortedIterator.<init>(MinusIterable.java:72)
at jetbrains.exodus.entitystore.iterate.binop.MinusIterable$SortedIterator.<init>(MinusIterable.java:59)
at jetbrains.exodus.entitystore.iterate.binop.MinusIterable.getIteratorImpl(MinusIterable.java:55)
at jetbrains.exodus.entitystore.iterate.binop.MinusIterable.getIteratorImpl(MinusIterable.java:23)
at jetbrains.exodus.entitystore.iterate.EntityIterableBase.iterator(EntityIterableBase.java:138)
at jetbrains.exodus.entitystore.iterate.binop.MinusIterable$SortedIterator.<init>(MinusIterable.java:72)
at jetbrains.exodus.entitystore.iterate.binop.MinusIterable$SortedIterator.<init>(MinusIterable.java:59)
at jetbrains.exodus.entitystore.iterate.binop.MinusIterable.getIteratorImpl(MinusIterable.java:55)
at jetbrains.exodus.entitystore.iterate.binop.MinusIterable.getIteratorImpl(MinusIterable.java:23)
It does not point exactly where in my code is the root cause, but I know in my code I have this:
EntityIterable tempEntities = txn.findWithProp(entityType, propertyName);
tempEntities.forEach(entity -> {
if (!match(entity.getProperty(propertyName))) {
tempEntities = tempEntities.minus(txn.getSingletonIterable(entity));
}
);
And I know that the count for the tempEntities
is 10,000+ items, since the code did a save for 10,000+ entities prior to this throwing.
Does it mean you can't iterate over like 10K entities with Xodus?
Upvotes: 0
Views: 82
Reputation: 2053
Obviously, you can iterate over 10K entities. Don't create iterables via singletons and binary operations (union, intersect, minus). This is API misusage. Even if you provide sufficient stack size for the JVM, performance problems would haunt you.
Upvotes: 2