package org.skywalking.apm.collector.actor;
import akka.actor.ActorSystem;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author pengys5
*/
public class ClusterWorkerContext extends WorkerContext {
private Logger logger = LogManager.getFormatterLogger(ClusterWorkerContext.class);
private final ActorSystem akkaSystem;
private Map<String, AbstractWorkerProvider> providers = new ConcurrentHashMap<>();
public ClusterWorkerContext(ActorSystem akkaSystem) {
this.akkaSystem = akkaSystem;
}
public ActorSystem getAkkaSystem() {
return akkaSystem;
}
@Override
public AbstractWorkerProvider findProvider(Role role) throws ProviderNotFoundException {
logger.debug("find role of %s provider from ClusterWorkerContext", role.roleName());
if (providers.containsKey(role.roleName())) {
return providers.get(role.roleName());
} else {
throw new ProviderNotFoundException("role=" + role.roleName() + ", no available provider.");
}
}
@Override
public void putProvider(AbstractWorkerProvider provider) throws UsedRoleNameException {
logger.debug("put role of %s provider into ClusterWorkerContext", provider.role().roleName());
if (providers.containsKey(provider.role().roleName())) {
throw new UsedRoleNameException("provider with role=" + provider.role().roleName() + " duplicate each other.");
} else {
providers.put(provider.role().roleName(), provider);
}
}
}