Skip to content
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

Pending FutureAccess throws CancellationException #13610

Closed
HawkSK opened this issue Apr 24, 2022 · 4 comments · Fixed by #13708
Closed

Pending FutureAccess throws CancellationException #13610

HawkSK opened this issue Apr 24, 2022 · 4 comments · Fixed by #13708

Comments

@HawkSK
Copy link

HawkSK commented Apr 24, 2022

Description of the bug

Some cancelled UI access tasks produce CancellationException that is propagated to com.vaadin.flow.server.ErrorHandler.

Basically, the problem is, that even though there is a check for !pendingAccess.isCancelled(), the state can change to cancelled before execution comes to pendingAccess.get(); (line 2075 VaadinService.runPendingAccessTasks). As a consequence, false alarm errors are shown on the UI.

java.util.concurrent.CancellationException: null
        at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:121) ~[na:na]
        at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191) ~[na:na]
        at com.vaadin.flow.server.FutureAccess.get(FutureAccess.java:62) ~[flow-server-2.7.11.jar!/:2.7.11]
        at com.vaadin.flow.server.VaadinService.runPendingAccessTasks(VaadinService.java:2075) ~[flow-server-2.7.11.jar!/:2.7.11]
        at com.vaadin.flow.server.communication.UidlWriter.createUidl(UidlWriter.java:161) ~[flow-server-2.7.11.jar!/:2.7.11]
        at com.vaadin.flow.server.communication.UidlRequestHandler.writeUidl(UidlRequestHandler.java:124) ~[flow-server-2.7.11.jar!/:2.7.11]
        at com.vaadin.flow.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:93) ~[flow-server-2.7.11.jar!/:2.7.11]
        at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[flow-server-2.7.11.jar!/:2.7.11]
        at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1578) ~[flow-server-2.7.11.jar!/:2.7.11]
        at com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:252) ~[flow-server-2.7.11.jar!/:2.7.11]
        at com.vaadin.flow.spring.SpringServlet.service(SpringServlet.java:111) ~[vaadin-spring-12.4.2.jar!/:na]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.56.jar!/:4.0.1]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:711) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:353) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:313) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
        at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
        at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:51) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) ~[tomcat-embed-core-9.0.56.jar!/:4.0.1]
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.15.jar!/:5.3.15]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.56.jar!/:4.0.1]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.56.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:149) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:147) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:125) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:219) ~[spring-security-web-5.6.1.jar!/:5.6.1]
		at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:213) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at com.nordlicht.commons.keycloak.vaadin.KeycloakAuthenticationFilter.doFilter(KeycloakAuthenticationFilter.java:132) ~[commons-rbac-keycloak-vaadin-22.02.24-RC.jar!/:22.02.24-RC]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:91) ~[spring-web-5.3.15.jar!/:5.3.15]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar!/:5.3.15]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:90) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:75) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar!/:5.3.15]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:110) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:55) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar!/:5.3.15]
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.6.1.jar!/:5.6.1]
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) ~[spring-web-5.3.15.jar!/:5.3.15]
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) ~[spring-web-5.3.15.jar!/:5.3.15]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.15.jar!/:5.3.15]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar!/:5.3.15]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.15.jar!/:5.3.15]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar!/:5.3.15]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) ~[spring-boot-actuator-2.6.3.jar!/:2.6.3]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar!/:5.3.15]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.15.jar!/:5.3.15]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar!/:5.3.15]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.56.jar!/:na]
		 at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1732) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.56.jar!/:na]
        at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]

Expected behavior

Cancelled tasks should not be run and should not throw CancellationException.

Minimal reproducible example

Sorry, I don't have an easily reproducible example, but the situation is, that the UI receives events from the server. The UI reacts to the event with registering a UI.access() callback (f.e. reload data / UI components). It can happen that multiple events of the same type arrive in quick succession, which had previously led to filling pendingAccessQueue with a lot of duplicate callbacks - this had resulted in constantly reloading the UI.
In some of these duplicate cases we decided to cancel the future tasks of the same type when the event arrives (to prevent filling pendingAccessQueue).
Otherwise, the future access task is cancelled when the UI component is detached (onDetach).


Here's an example of the event communication & cancellation. I simplified it a lot, but it's not reproducible, just a showcase.

import com.vaadin.flow.component.AttachEvent;
import com.vaadin.flow.component.Component;
import com.vaadin.flow.component.DetachEvent;
import com.vaadin.flow.component.html.Div;
import com.vaadin.flow.shared.Registration;
import com.vaadin.flow.spring.annotation.SpringComponent;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;

class BottomBarComponent extends Div {
    private final IncomingMessageEventAdapter incomingMessageEventAdapter;
    private final List<IncomingMessageEventAdapter.CancellableRegistration> registrations = new ArrayList<>();

    public BottomBarComponent(IncomingMessageEventAdapter incomingMessageEventAdapter) {
        this.incomingMessageEventAdapter = incomingMessageEventAdapter;
    }


    @Override
    protected void onAttach(AttachEvent attachEvent) {
        registrations.add(incomingMessageEventAdapter.addEventListener(this, this::onIncomingMessage));
    }

    @Override
    protected void onDetach(DetachEvent detachEvent) {
        registrations.forEach(Registration::remove);
    }

    private void onIncomingMessage(IncomingMessageEventAdapter.Event event) {
        registrations.forEach(reg -> reg.cancel(false));

        // Update data + UI here
    }
}

@SpringComponent
public class IncomingMessageEventAdapter {
    private final List<Consumer<Event>> listeners = new CopyOnWriteArrayList<>();

    public CancellableRegistration addEventListener(Component component, Consumer<Event> listener) {
        final var uiAccessFutures = ConcurrentHashMap.<FutureWrapper>newKeySet();

        Consumer<Event> consumer = event -> {
            component.getElement().getNode().runWhenAttached(
                    ui -> {
                        final var taskWrapper = new FutureWrapper();
                        uiAccessFutures.add(taskWrapper);

                        final var accessTask = ui.access(() -> {
                            try {
                                listener.accept(event);
                            } finally {
                                uiAccessFutures.remove(taskWrapper);
                            }
                        });

                        taskWrapper.set(accessTask);
                    }
            );
        };
        listeners.add(consumer);
        return new CancellableRegistration(consumer, uiAccessFutures);
    }

    public void notifyListeners(Event event) {
        listeners.forEach(consumer -> consumer.accept(event));
    }

    public class CancellableRegistration implements Registration {
        private final Consumer<Event> consumer;
        private final Set<FutureWrapper> uiAccessFutures;

        public CancellableRegistration(Consumer<Event> consumer,
                                       Set<FutureWrapper> uiAccessFutures) {
            this.consumer = consumer;
            this.uiAccessFutures = uiAccessFutures;
        }

        @Override
        public void remove() {
            listeners.remove(consumer);
            cancel(false);
        }

        public void cancel(boolean mayInterruptIfRunning) {
            for (var future : uiAccessFutures) {
                Optional.ofNullable(future.get())
                        .ifPresent(task -> task.cancel(mayInterruptIfRunning));
                uiAccessFutures.remove(future);
            }
        }
    }

    public static class Event {
    }

    static class FutureWrapper extends AtomicReference<Future<Void>> {

    }
}

Versions

  • Vaadin / Flow version: 14.8.4 / 2.7.11
  • Java version: 17
  • OS version: Windows 10
HawkSK added a commit to HawkSK/flow that referenced this issue Apr 24, 2022
Ignore CancellationException if the task is cancelled in the meantime.

Closes vaadin#13610
mshabarov added a commit that referenced this issue May 9, 2022
Ignore CancellationException if the task is cancelled in the meantime.

Fixes #13610
taefi pushed a commit that referenced this issue May 13, 2022
Ignore CancellationException if the task is cancelled in the meantime.
Authored-by: @HawkSK
Fixes #13610

Co-authored-by: @mshabarov
vaadin-bot pushed a commit that referenced this issue May 13, 2022
Ignore CancellationException if the task is cancelled in the meantime.
Authored-by: @HawkSK
Fixes #13610

Co-authored-by: @mshabarov
vaadin-bot pushed a commit that referenced this issue May 13, 2022
Ignore CancellationException if the task is cancelled in the meantime.
Authored-by: @HawkSK
Fixes #13610

Co-authored-by: @mshabarov
vaadin-bot pushed a commit that referenced this issue May 13, 2022
Ignore CancellationException if the task is cancelled in the meantime.
Authored-by: @HawkSK
Fixes #13610

Co-authored-by: @mshabarov
vaadin-bot pushed a commit that referenced this issue May 13, 2022
Ignore CancellationException if the task is cancelled in the meantime.
Authored-by: @HawkSK
Fixes #13610

Co-authored-by: @mshabarov
vaadin-bot pushed a commit that referenced this issue May 13, 2022
Ignore CancellationException if the task is cancelled in the meantime.
Authored-by: @HawkSK
Fixes #13610

Co-authored-by: @mshabarov
vaadin-bot added a commit that referenced this issue May 13, 2022
#13779)

Ignore CancellationException if the task is cancelled in the meantime.
Authored-by: @HawkSK
Fixes #13610

Co-authored-by: @mshabarov

Co-authored-by: Mikhail Shabarov <[email protected]>
vaadin-bot added a commit that referenced this issue May 13, 2022
#13778)

Ignore CancellationException if the task is cancelled in the meantime.
Authored-by: @HawkSK
Fixes #13610

Co-authored-by: @mshabarov

Co-authored-by: Mikhail Shabarov <[email protected]>
mshabarov added a commit that referenced this issue May 16, 2022
#13766)

Ignore CancellationException if the task is cancelled in the meantime.
Authored-by: @HawkSK
Fixes #13610

Co-authored-by: @mshabarov

Co-authored-by: Mikhail Shabarov <[email protected]>
mshabarov added a commit that referenced this issue May 16, 2022
#13767)

Ignore CancellationException if the task is cancelled in the meantime.
Authored-by: @HawkSK
Fixes #13610

Co-authored-by: @mshabarov

Co-authored-by: Mikhail Shabarov <[email protected]>
mshabarov added a commit that referenced this issue May 16, 2022
#13765)

Ignore CancellationException if the task is cancelled in the meantime.
Authored-by: @HawkSK
Fixes #13610

Co-authored-by: @mshabarov

Co-authored-by: Mikhail Shabarov <[email protected]>
@vaadin-bot
Copy link
Collaborator

This ticket/PR has been released with Vaadin 23.1.0.beta2 and is also targeting the upcoming stable 23.1.0 version.

@vaadin-bot
Copy link
Collaborator

This ticket/PR has been released with Vaadin 23.0.11.

@vaadin-bot
Copy link
Collaborator

This ticket/PR has been released with Vaadin 22.0.16.

@vaadin-bot
Copy link
Collaborator

This ticket/PR has been released with Vaadin 14.8.13.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment