Examples of ConcurrentAccessController


Examples of org.wso2.throttle.ConcurrentAccessController

                clusteringAgent.getStateManager() != null) {
            isClusteringEnable = true;
        }

        // Get the concurrent access controller
        ConcurrentAccessController cac;
        String key = null;
        if (isClusteringEnable) {
            // for clustered  env.,gets it from axis configuration context
            key = ThrottleConstants.THROTTLE_PROPERTY_PREFIX + throttleId
                    + ThrottleConstants.CAC_SUFFIX;
            cac = (ConcurrentAccessController) cc.getProperty(key);
        } else {
            // for non-clustered  env.,gets it from axis configuration context
            cac = throttle.getConcurrentAccessController();
        }

        // check for concurrent access
        boolean canAccess = doConcurrentThrottling(cac, messageContext);

        if (canAccess) {
            // if the concurrent access is success then
            // do the access rate based throttling

            if (messageContext.getFLOW() == MessageContext.IN_FLOW) {
                //gets the remote caller domain name
                String domain = null;
                HttpServletRequest request =
                        (HttpServletRequest) messageContext.getPropertyNonReplicable(
                                HTTPConstants.MC_HTTP_SERVLETREQUEST);
                if (request != null) {
                    domain = request.getRemoteHost();
                }

                // Domain name based throttling
                //check whether a configuration has been defined for this domain name or not
                String callerId = null;
                if (domain != null) {
                    //loads the ThrottleContext
                    ThrottleContext context =
                            throttle.getThrottleContext(ThrottleConstants.DOMAIN_BASED_THROTTLE_KEY);
                    if (context != null) {
                        //Loads the ThrottleConfiguration
                        ThrottleConfiguration config = context.getThrottleConfiguration();
                        if (config != null) {
                            //check for configuration for this caller
                            callerId = config.getConfigurationKeyOfCaller(domain);
                            if (callerId != null) {
                                // If this is a clustered env.
                                if (isClusteringEnable) {
                                    context.setConfigurationContext(cc);
                                    context.setThrottleId(throttleId);
                                }
                                AccessInformation infor =
                                        accessRateController.canAccess(context, callerId,
                                                ThrottleConstants.DOMAIN_BASE);

                                //check for the permission for access
                                if (!infor.isAccessAllowed()) {

                                    //In the case of both of concurrency throttling and
                                    //rate based throttling have enabled ,
                                    //if the access rate less than maximum concurrent access ,
                                    //then it is possible to occur death situation.To avoid that reset,
                                    //if the access has denied by rate based throttling
                                    if (cac != null) {
                                        cac.incrementAndGet();
                                        // set back if this is a clustered env
                                        if (isClusteringEnable) {
                                            cc.setProperty(key, cac);
                                            //replicate the current state of ConcurrentAccessController
                                            try {
                                                if (debugOn) {
                                                    log.debug("Going to replicates the " +
                                                            "states of the ConcurrentAccessController" +
                                                            " with key : " + key);
                                                }
                                                Replicator.replicate(cc, new String[]{key});
                                            } catch (ClusteringFault clusteringFault) {
                                                log.error("Error during replicating states ",
                                                        clusteringFault);
                                            }
                                        }
                                    }
                                    throw new AxisFault(" Access deny for a " +
                                            "caller with Domain " + domain + " " +
                                            " : Reason : " + infor.getFaultReason());
                                }
                            } else {
                                if (debugOn) {
                                    log.debug("Could not find the Throttle Context for domain-Based " +
                                            "Throttling for domain name " + domain + " Throttling for this " +
                                            "domain name may not be configured from policy");
                                }
                            }
                        }
                    }
                } else {
                    if (debugOn) {
                        log.debug("Could not find the domain of the caller - IP-based throttling may occur");
                    }
                }

                //IP based throttling - Only if there is no configuration for caller domain name

                if (callerId == null) {
                    String ip = (String) messageContext.getProperty(MessageContext.REMOTE_ADDR);
                    if (ip != null) {
                        // loads IP based throttle context
                        ThrottleContext context =
                                throttle.getThrottleContext(ThrottleConstants.IP_BASED_THROTTLE_KEY);
                        if (context != null) {
                            //Loads the ThrottleConfiguration
                            ThrottleConfiguration config = context.getThrottleConfiguration();
                            if (config != null) {
                                // check for configuration for this ip
                                callerId = config.getConfigurationKeyOfCaller(ip);
                                if (callerId != null) {
                                    // for clustered env.
                                    if (isClusteringEnable) {
                                        context.setConfigurationContext(cc);
                                        context.setThrottleId(throttleId);
                                    }
                                    AccessInformation infor =
                                            accessRateController.canAccess(context, callerId,
                                                    ThrottleConstants.DOMAIN_BASE);
                                    // check for the permission for access
                                    if (!infor.isAccessAllowed()) {

                                        //In the case of both of concurrency throttling and
                                        //rate based throttling have enabled ,
                                        //if the access rate less than maximum concurrent access ,
                                        //then it is possible to occur death situation.To avoid that reset,
                                        //if the access has denied by rate based throttling
                                        if (cac != null) {
                                            cac.incrementAndGet();
                                            // set back if this is a clustered env
                                            if (isClusteringEnable) {
                                                cc.setProperty(key, cac);
                                                //replicate the current state of ConcurrentAccessController
                                                try {
View Full Code Here

Examples of org.wso2.throttle.ConcurrentAccessController

                                ThrottleConstants.THROTTLES_MAP, throttles);
                    }
                    String serviceName = currentService.getName();
                    throttle.setId(serviceName);
                    throttles.put(serviceName, throttle);
                    ConcurrentAccessController cac = throttle.getConcurrentAccessController();
                    if (cac != null) {
                        String cacKey = ThrottleConstants.THROTTLE_PROPERTY_PREFIX
                                        + serviceName + ThrottleConstants.CAC_SUFFIX;
                        configctx.setProperty(cacKey, cac);
                    }
                }
            }
        } else if (axisDescription instanceof AxisOperation) {

            Throttle throttle = null;
            AxisOperation currentOperation = ((AxisOperation) axisDescription);
            AxisService axisService = (AxisService) currentOperation.getParent();
            if (axisService != null) {
                currentServiceName = axisService.getName();
                PolicySubject policySubject = currentOperation.getPolicySubject();
                if (policySubject != null) {
                    try {
                        List policies = new ArrayList(policySubject.getAttachedPolicyComponents());
                        Policy currentPolicy = PolicyUtil.getMergedPolicy(policies,
                                                                          currentOperation);
                        if (currentPolicy != null) {
                            throttle = ThrottleFactory.createOperationThrottle(currentPolicy);
                        }
                    } catch (ThrottleException e) {
                        log.error("Error was occurred when engaging throttle module " +
                                  "for operation : " +
                                  currentOperation.getName() + " in the service :" +
                                  currentServiceName + e.getMessage());
                        log.info("Throttling will occur using default module policy");
                    }

                    // if current throttle is null, use the default throttle
                    if (throttle == null) {
                        throttle = defaultThrottle;
                    }

                    Map throttles = (Map) configctx
                            .getPropertyNonReplicable(ThrottleConstants.THROTTLES_MAP);
                    if (throttles == null) {
                        throttles = new HashMap();
                        configctx.setNonReplicableProperty(ThrottleConstants.THROTTLES_MAP
                                , throttles);
                    }
                    QName opQName = currentOperation.getName();
                    if (opQName != null) {
                        String opName = opQName.getLocalPart();
                        String key = currentServiceName + opName;
                        throttle.setId(key);
                        throttles.put(key, throttle);
                        ConcurrentAccessController cac =
                                throttle.getConcurrentAccessController();
                        if (cac != null) {
                            String cacKey = ThrottleConstants.THROTTLE_PROPERTY_PREFIX
                                    + key + ThrottleConstants.CAC_SUFFIX;
                            configctx.setProperty(cacKey, cac);
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.