Skip to content

Concurrency Issue in CollectionCacheValue #328

@h-engelhardt

Description

@h-engelhardt

Every so often we get the following stack trace, while a lot of requests are happening at once. Shouldn't the inserting of the entityClass be synchronized to be safe here?

[task-1] e.k.b.common.web.ApiErrorHandling        : Internal Server Error: Index 50 out of bounds for length 49 java.lang.ArrayIndexOutOfBoundsException: Index 50 out of bounds for length 49
	at java.base/java.util.ArrayList.add(ArrayList.java:484)
	at java.base/java.util.ArrayList.add(ArrayList.java:496)
	at com.arangodb.springframework.core.template.CollectionCacheValue.addEntityClass(CollectionCacheValue.java:35)
	at com.arangodb.springframework.core.template.ArangoTemplate._collection(ArangoTemplate.java:161)
	at com.arangodb.springframework.core.template.ArangoTemplate._collection(ArangoTemplate.java:141)
	at com.arangodb.springframework.core.template.ArangoTemplate._collection(ArangoTemplate.java:134)
	at com.arangodb.springframework.core.template.ArangoTemplate.collection(ArangoTemplate.java:723)
	at com.arangodb.springframework.core.convert.resolver.RelationsResolver.lambda$_resolve$2(RelationsResolver.java:87)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:1024)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
	at com.arangodb.springframework.core.convert.resolver.RelationsResolver._resolve(RelationsResolver.java:88)
	at com.arangodb.springframework.core.convert.resolver.RelationsResolver._resolveOne(RelationsResolver.java:67)
	at com.arangodb.springframework.core.convert.resolver.RelationsResolver.lambda$resolveOne$0(RelationsResolver.java:50)
	at com.arangodb.springframework.core.convert.resolver.AbstractResolver$ProxyInterceptor.resolve(AbstractResolver.java:192)
	at com.arangodb.springframework.core.convert.resolver.AbstractResolver$ProxyInterceptor.ensureResolved(AbstractResolver.java:184)
	at com.arangodb.springframework.core.convert.resolver.AbstractResolver$ProxyInterceptor.intercept(AbstractResolver.java:150)
	at com.arangodb.springframework.core.convert.resolver.AbstractResolver$ProxyInterceptor.invoke(AbstractResolver.java:142)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223)
	at jdk.proxy2/jdk.proxy2.$Proxy662.getEntity(Unknown Source)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions