@SuppressWarnings("unchecked") private RequestCollapser<BatchReturnType, ResponseType, RequestArgumentType> getCollapserForGlobalScope(HystrixCollapserBridge<BatchReturnType, ResponseType, RequestArgumentType> commandCollapser) { RequestCollapser<?, ?, ?> collapser = globalScopedCollapsers.get(collapserKey.name()); if (collapser != null) { return (RequestCollapser<BatchReturnType, ResponseType, RequestArgumentType>) collapser; } // create new collapser using 'this' first instance as the one that will get cached for future executions ('this' is stateless so we can do that) RequestCollapser<BatchReturnType, ResponseType, RequestArgumentType> newCollapser = new RequestCollapser<BatchReturnType, ResponseType, RequestArgumentType>(commandCollapser, properties, timer, concurrencyStrategy); RequestCollapser<?, ?, ?> existing = globalScopedCollapsers.putIfAbsent(collapserKey.name(), newCollapser); if (existing == null) { // we won return newCollapser; } else { // we lost ... another thread beat us // shutdown the one we created but didn't get stored newCollapser.shutdown(); // return the existing one return (RequestCollapser<BatchReturnType, ResponseType, RequestArgumentType>) existing; } }
@SuppressWarnings("unchecked") private RequestCollapser<BatchReturnType, ResponseType, RequestArgumentType> getCollapserForGlobalScope(HystrixCollapserBridge<BatchReturnType, ResponseType, RequestArgumentType> commandCollapser) { RequestCollapser<?, ?, ?> collapser = globalScopedCollapsers.get(collapserKey.name()); if (collapser != null) { return (RequestCollapser<BatchReturnType, ResponseType, RequestArgumentType>) collapser; } // create new collapser using 'this' first instance as the one that will get cached for future executions ('this' is stateless so we can do that) RequestCollapser<BatchReturnType, ResponseType, RequestArgumentType> newCollapser = new RequestCollapser<BatchReturnType, ResponseType, RequestArgumentType>(commandCollapser, properties, timer, concurrencyStrategy); RequestCollapser<?, ?, ?> existing = globalScopedCollapsers.putIfAbsent(collapserKey.name(), newCollapser); if (existing == null) { // we won return newCollapser; } else { // we lost ... another thread beat us // shutdown the one we created but didn't get stored newCollapser.shutdown(); // return the existing one return (RequestCollapser<BatchReturnType, ResponseType, RequestArgumentType>) existing; } }