Skip to content

Can't access boards from admin interface #1034

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
rowleya opened this issue Sep 5, 2023 · 2 comments · Fixed by #1054
Closed

Can't access boards from admin interface #1034

rowleya opened this issue Sep 5, 2023 · 2 comments · Fixed by #1054
Assignees
Labels
bug Something isn't working

Comments

@rowleya
Copy link
Member

rowleya commented Sep 5, 2023

When trying to access a board the following error happens:

2023-09-05 06:46:21.911 ERROR 3440280 --- [http-nio-9090-exec-6] o.a.c.c.C.[.[.[.[dispatcherServlet]      : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: Failed to create proxy for controller method return type: public abstract java.util.concurrent.CompletableFuture uk.ac.manchester.spinnaker.alloc.admin.AdminController.getTemperatures(int,org.springframework.ui.ModelMap)] with root cause

java.lang.IllegalAccessException: module java.base does not open java.util.concurrent to unnamed module @1888ff2c
        at java.lang.invoke.MethodHandles.privateLookupIn(MethodHandles.java:259) ~[?:?]
        at jdk.internal.reflect.GeneratedMethodAccessor33.invoke(Unknown Source) ~[?:?]
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
        at org.springframework.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:575) ~[spring-core-5.3.29.jar!/:5.3.29]
        at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:363) ~[spring-core-5.3.29.jar!/:5.3.29]
        at org.springframework.cglib.proxy.Enhancer.generate(Enhancer.java:585) ~[spring-core-5.3.29.jar!/:5.3.29]
        at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:110) ~[spring-core-5.3.29.jar!/:5.3.29]
        at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:108) ~[spring-core-5.3.29.jar!/:5.3.29]
        at org.springframework.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54) ~[spring-core-5.3.29.jar!/:5.3.29]
        at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
        at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61) ~[spring-core-5.3.29.jar!/:5.3.29]
        at org.springframework.cglib.core.internal.LoadingCache.get(LoadingCache.java:34) ~[spring-core-5.3.29.jar!/:5.3.29]
        at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:134) ~[spring-core-5.3.29.jar!/:5.3.29]
        at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:319) ~[spring-core-5.3.29.jar!/:5.3.29]
        at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:572) ~[spring-core-5.3.29.jar!/:5.3.29]
        at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:419) ~[spring-core-5.3.29.jar!/:5.3.29]
        at org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder$ControllerMethodInvocationInterceptor.initProxy(MvcUriComponentsBuilder.java:808) ~[spring-webmvc-5.3.29.jar!/:5.3.29]
        at org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder$ControllerMethodInvocationInterceptor.intercept(MvcUriComponentsBuilder.java:733) ~[spring-webmvc-5.3.29.jar!/:5.3.29]
        at org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder$ControllerMethodInvocationInterceptor.invoke(MvcUriComponentsBuilder.java:745) ~[spring-webmvc-5.3.29.jar!/:5.3.29]
        at jdk.proxy2.$Proxy190.getTemperatures(Unknown Source) ~[?:?]
        at uk.ac.manchester.spinnaker.alloc.admin.AdminControllerImpl.board(AdminControllerImpl.java:711) ~[classes!/:?]
        at uk.ac.manchester.spinnaker.alloc.admin.AdminControllerImpl$$FastClassBySpringCGLIB$$fdefff82.invoke(<generated>) ~[classes!/:?]
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-5.3.29.jar!/:5.3.29]
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793) ~[spring-aop-5.3.29.jar!/:5.3.29]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.3.29.jar!/:5.3.29]
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.29.jar!/:5.3.29]
        at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:67) ~[spring-security-core-5.8.6.jar!/:5.8.6]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.29.jar!/:5.3.29]
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) ~[spring-aop-5.3.29.jar!/:5.3.29]
        at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708) ~[spring-aop-5.3.29.jar!/:5.3.29]
        at uk.ac.manchester.spinnaker.alloc.admin.AdminControllerImpl$$EnhancerBySpringCGLIB$$447cbf82.board(<generated>) ~[classes!/:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.29.jar!/:5.3.29]
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.29.jar!/:5.3.29]
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.29.jar!/:5.3.29]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.29.jar!/:5.3.29]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.29.jar!/:5.3.29]
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.29.jar!/:5.3.29]
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072) ~[spring-webmvc-5.3.29.jar!/:5.3.29]
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) ~[spring-webmvc-5.3.29.jar!/:5.3.29]
...

(More lines in the stack trace but pretty sure these are irrelevent)

@rowleya rowleya added the bug Something isn't working label Sep 5, 2023
@dkfellows
Copy link
Member

This is horrible.

We're trying to generate a URI for a method on the admin interface (the line in the log says uri(admin().getTemperatures(board.getId(), model))). The admin() part of that calls MvcUriComponentsBuilder.on, which is part of Spring MVC, which builds a proxy class. The proxy class building is blowing up, probably on java.util.concurrent.CompletableFuture (returned by some methods), but since that's a public class of that package it's not too clear what's going boom.

What version of Java is this running in?

@dkfellows
Copy link
Member

Ah!

It seems that the fix is to use Future instead of CompletableFuture in the interface return signature.

dkfellows added a commit that referenced this issue Sep 12, 2023
Also actually use worker threads from the pool (oops!). Fixes #1034
@rowleya rowleya mentioned this issue Sep 12, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
2 participants