Search in sources :

Example 1 with LocalRegistry

use of com.tencent.polaris.api.plugin.registry.LocalRegistry in project polaris-java by polarismesh.

the class GetResourcesInvoker method complete.

@Override
public void complete(ServiceEventKey svcEventKey) {
    LocalRegistry localRegistry = extensions.getLocalRegistry();
    ResourceFilter filter = new ResourceFilter(svcEventKey, internalRequest, useCache);
    if (svcEventKey.getEventType() == ServiceEventKey.EventType.INSTANCE) {
        ServiceInstances instances = localRegistry.getInstances(filter);
        resourcesResponse.addServiceInstances(svcEventKey, instances);
    } else if (svcEventKey.getEventType() == EventType.SERVICE) {
        Services services = localRegistry.getServices(filter);
        resourcesResponse.addServices(svcEventKey, services);
    } else {
        ServiceRule serviceRule = localRegistry.getServiceRule(filter);
        resourcesResponse.addServiceRule(svcEventKey, serviceRule);
    }
    synchronized (notifier) {
        int curTotal = responseIncrement.addAndGet(1);
        if (totalCallback == curTotal) {
            notifier.notifyAll();
        }
    }
}
Also used : Services(com.tencent.polaris.api.pojo.Services) ResourceFilter(com.tencent.polaris.api.plugin.registry.ResourceFilter) ServiceInstances(com.tencent.polaris.api.pojo.ServiceInstances) ServiceRule(com.tencent.polaris.api.pojo.ServiceRule) LocalRegistry(com.tencent.polaris.api.plugin.registry.LocalRegistry)

Example 2 with LocalRegistry

use of com.tencent.polaris.api.plugin.registry.LocalRegistry in project polaris-java by polarismesh.

the class ErrRateCircuitBreaker method stat.

@Override
public boolean stat(InstanceGauge gauge) {
    InstanceByProto instance = ChangeStateUtils.getInstance(gauge, localRegistry);
    if (null == instance) {
        return false;
    }
    InstanceLocalValue instanceLocalValue = instance.getInstanceLocalValue();
    if (null == instanceLocalValue) {
        return false;
    }
    ConfigSet<Config> configSet = CircuitBreakUtils.getConfigSet(gauge, this);
    StatusDimension statusDimension = ChangeStateUtils.buildStatusDimension(gauge, configSet.getLevel());
    if (CircuitBreakUtils.instanceClose(instance, statusDimension)) {
        Object pluginValue = instanceLocalValue.getPluginValue(id, create);
        ErrRateCounter errRateCounter = (ErrRateCounter) pluginValue;
        SliceWindow metricWindow = errRateCounter.getSliceWindow(statusDimension);
        metricWindow.addGauge((bucket -> {
            bucket.addMetric(Dimension.keyRequestCount.ordinal(), 1);
            if (gauge.getRetStatus() == RetStatus.RetFail) {
                return bucket.addMetric(Dimension.keyFailCount.ordinal(), 1);
            }
            return bucket.getMetric(Dimension.keyFailCount.ordinal());
        }));
    } else if (CircuitBreakUtils.instanceHalfOpen(instance, statusDimension)) {
        // 半开计数器
        Object pluginValue = instanceLocalValue.getPluginValue(id, create);
        HalfOpenCounter consecutiveCounter = (HalfOpenCounter) pluginValue;
        RetStatus retStatus = gauge.getRetStatus();
        return consecutiveCounter.triggerHalfOpenConversion(statusDimension, retStatus, configSet.getHalfOpenConfig());
    }
    return false;
}
Also used : CircuitBreakResult(com.tencent.polaris.api.plugin.circuitbreaker.CircuitBreakResult) DefaultPlugins(com.tencent.polaris.api.config.plugin.DefaultPlugins) SliceWindow(com.tencent.polaris.plugins.circuitbreaker.common.stat.SliceWindow) InstanceLocalValue(com.tencent.polaris.api.pojo.InstanceLocalValue) DefaultFlowControlParam(com.tencent.polaris.client.flow.DefaultFlowControlParam) InitContext(com.tencent.polaris.api.plugin.common.InitContext) Destroyable(com.tencent.polaris.api.control.Destroyable) OutlierDetectionConfig(com.tencent.polaris.api.config.consumer.OutlierDetectionConfig) RuleIdentifier(com.tencent.polaris.plugins.circuitbreaker.common.RuleIdentifier) PluginTypes(com.tencent.polaris.api.plugin.common.PluginTypes) InstanceByProto(com.tencent.polaris.client.pojo.InstanceByProto) Function(java.util.function.Function) FlowControlParam(com.tencent.polaris.client.flow.FlowControlParam) CbPolicy(com.tencent.polaris.client.pb.CircuitBreakerProto.CbPolicy) RetStatus(com.tencent.polaris.api.pojo.RetStatus) HalfOpenCounter(com.tencent.polaris.plugins.circuitbreaker.common.HalfOpenCounter) ConfigSetLocator(com.tencent.polaris.plugins.circuitbreaker.common.ConfigSetLocator) ConfigSet(com.tencent.polaris.plugins.circuitbreaker.common.ConfigSet) DestinationSet(com.tencent.polaris.client.pb.CircuitBreakerProto.DestinationSet) RecoverConfig(com.tencent.polaris.client.pb.CircuitBreakerProto.RecoverConfig) CircuitBreakUtils(com.tencent.polaris.plugins.circuitbreaker.common.CircuitBreakUtils) LocalRegistry(com.tencent.polaris.api.plugin.registry.LocalRegistry) ErrorCode(com.tencent.polaris.api.exception.ErrorCode) InstanceGauge(com.tencent.polaris.api.pojo.InstanceGauge) CollectionUtils(com.tencent.polaris.api.utils.CollectionUtils) PluginConfigProvider(com.tencent.polaris.api.config.plugin.PluginConfigProvider) CircuitBreaker(com.tencent.polaris.api.plugin.circuitbreaker.CircuitBreaker) CircuitBreakerConfig(com.tencent.polaris.api.config.consumer.CircuitBreakerConfig) Verifier(com.tencent.polaris.api.config.verify.Verifier) Collection(java.util.Collection) Extensions(com.tencent.polaris.api.plugin.compose.Extensions) StatusDimension(com.tencent.polaris.api.pojo.StatusDimension) ChangeStateUtils(com.tencent.polaris.plugins.circuitbreaker.common.ChangeStateUtils) ErrRateConfig(com.tencent.polaris.client.pb.CircuitBreakerProto.CbPolicy.ErrRateConfig) HalfOpenConfig(com.tencent.polaris.plugins.circuitbreaker.common.HalfOpenConfig) PluginType(com.tencent.polaris.api.plugin.PluginType) StateMachine(com.tencent.polaris.plugins.circuitbreaker.common.StateMachine) ConfigGroup(com.tencent.polaris.plugins.circuitbreaker.common.ConfigGroup) RuleDestinationResult(com.tencent.polaris.plugins.circuitbreaker.common.CircuitBreakUtils.RuleDestinationResult) PolarisException(com.tencent.polaris.api.exception.PolarisException) Instance(com.tencent.polaris.api.pojo.Instance) Subset(com.tencent.polaris.api.pojo.Subset) InstanceByProto(com.tencent.polaris.client.pojo.InstanceByProto) RetStatus(com.tencent.polaris.api.pojo.RetStatus) OutlierDetectionConfig(com.tencent.polaris.api.config.consumer.OutlierDetectionConfig) RecoverConfig(com.tencent.polaris.client.pb.CircuitBreakerProto.RecoverConfig) CircuitBreakerConfig(com.tencent.polaris.api.config.consumer.CircuitBreakerConfig) ErrRateConfig(com.tencent.polaris.client.pb.CircuitBreakerProto.CbPolicy.ErrRateConfig) HalfOpenConfig(com.tencent.polaris.plugins.circuitbreaker.common.HalfOpenConfig) InstanceLocalValue(com.tencent.polaris.api.pojo.InstanceLocalValue) StatusDimension(com.tencent.polaris.api.pojo.StatusDimension) HalfOpenCounter(com.tencent.polaris.plugins.circuitbreaker.common.HalfOpenCounter) SliceWindow(com.tencent.polaris.plugins.circuitbreaker.common.stat.SliceWindow)

Example 3 with LocalRegistry

use of com.tencent.polaris.api.plugin.registry.LocalRegistry in project polaris-java by polarismesh.

the class GetResourcesInvoker method init.

/**
 * 初始化invoker
 *
 * @param paramProvider
 * @return 等待的数量
 * @throws PolarisException
 */
private int init(ServiceEventKeysProvider paramProvider) throws PolarisException {
    LocalRegistry localRegistry = extensions.getLocalRegistry();
    int callbacks = 0;
    if (!CollectionUtils.isEmpty(paramProvider.getSvcEventKeys())) {
        for (ServiceEventKey svcEventKey : paramProvider.getSvcEventKeys()) {
            listeningServices.add(svcEventKey);
            callbacks = processSvcEventKey(localRegistry, callbacks, svcEventKey);
        }
    }
    if (null != paramProvider.getSvcEventKey()) {
        listeningServices.add(paramProvider.getSvcEventKey());
        callbacks = processSvcEventKey(localRegistry, callbacks, paramProvider.getSvcEventKey());
    }
    return callbacks;
}
Also used : ServiceEventKey(com.tencent.polaris.api.pojo.ServiceEventKey) LocalRegistry(com.tencent.polaris.api.plugin.registry.LocalRegistry)

Aggregations

LocalRegistry (com.tencent.polaris.api.plugin.registry.LocalRegistry)3 CircuitBreakerConfig (com.tencent.polaris.api.config.consumer.CircuitBreakerConfig)1 OutlierDetectionConfig (com.tencent.polaris.api.config.consumer.OutlierDetectionConfig)1 DefaultPlugins (com.tencent.polaris.api.config.plugin.DefaultPlugins)1 PluginConfigProvider (com.tencent.polaris.api.config.plugin.PluginConfigProvider)1 Verifier (com.tencent.polaris.api.config.verify.Verifier)1 Destroyable (com.tencent.polaris.api.control.Destroyable)1 ErrorCode (com.tencent.polaris.api.exception.ErrorCode)1 PolarisException (com.tencent.polaris.api.exception.PolarisException)1 PluginType (com.tencent.polaris.api.plugin.PluginType)1 CircuitBreakResult (com.tencent.polaris.api.plugin.circuitbreaker.CircuitBreakResult)1 CircuitBreaker (com.tencent.polaris.api.plugin.circuitbreaker.CircuitBreaker)1 InitContext (com.tencent.polaris.api.plugin.common.InitContext)1 PluginTypes (com.tencent.polaris.api.plugin.common.PluginTypes)1 Extensions (com.tencent.polaris.api.plugin.compose.Extensions)1 ResourceFilter (com.tencent.polaris.api.plugin.registry.ResourceFilter)1 Instance (com.tencent.polaris.api.pojo.Instance)1 InstanceGauge (com.tencent.polaris.api.pojo.InstanceGauge)1 InstanceLocalValue (com.tencent.polaris.api.pojo.InstanceLocalValue)1 RetStatus (com.tencent.polaris.api.pojo.RetStatus)1