-
Notifications
You must be signed in to change notification settings - Fork 36
Open
Description
Expected behavior
Thread-safe & fast
Actual behavior
Routerstate(mappingLookups&uriLookups) can not be guaranteed- expect
synchronizedindeRegister() - too much performance loss, cause' of
mappingLookups(CopyOnWriteArrayList) &uriLookups(ConcurrentHashMap)`
Lines 39 to 80 in b2138d5
| @Override | |
| public void register(Route route) { | |
| if (route == null) { | |
| return; | |
| } | |
| RouteWrap routeWrap = new RouteWrap(route); | |
| //Add synchronized to avoid same routeWraps add to router without log | |
| synchronized (this) { | |
| router.mappingLookups.forEach(registered -> { | |
| if (registered.predicate.mayAmbiguousWith(routeWrap.predicate)) { | |
| logger.warn("Found ambiguous route:\n{}\n{}", routeWrap.route, registered); | |
| } | |
| }); | |
| router.add(routeWrap); | |
| } | |
| logger.debug("Registering route: {}", route); | |
| } | |
| @Override | |
| public void deRegister(Route route) { | |
| if (route == null) { | |
| return; | |
| } | |
| RouteWrap routeWrap = new RouteWrap(route); | |
| RouteWrap target = null; | |
| for (RouteWrap item : router.mappingLookups) { | |
| if (isEquals(item, routeWrap)) { | |
| target = item; | |
| break; | |
| } | |
| } | |
| if (target != null) { | |
| logger.debug("deRegistering route: {}", route); | |
| router.remove(target); | |
| } | |
| } | |
| @Override | |
| public Route route(RequestContext context) { | |
| return router.route(context); | |
| } |
Steps to reproduce
Env
- Restlight version: 1.0.0-SNAPSHOT
Metadata
Metadata
Assignees
Labels
No labels