Search in sources :

Example 1 with UnknownConfigDefinitionException

use of com.yahoo.vespa.config.server.UnknownConfigDefinitionException in project vespa by vespa-engine.

the class Application method resolveConfig.

/**
 * Gets a config from ZK. Returns null if not found.
 */
public ConfigResponse resolveConfig(GetConfigRequest req, ConfigResponseFactory responseFactory) {
    long start = System.currentTimeMillis();
    metricUpdater.incrementRequests();
    ConfigKey<?> configKey = req.getConfigKey();
    String defMd5 = configKey.getMd5();
    if (defMd5 == null || defMd5.isEmpty()) {
        defMd5 = ConfigUtils.getDefMd5(req.getDefContent().asList());
    }
    ConfigCacheKey cacheKey = new ConfigCacheKey(configKey, defMd5);
    if (logDebug()) {
        debug("Resolving config " + cacheKey);
    }
    if (!req.noCache()) {
        ConfigResponse config = cache.get(cacheKey);
        if (config != null) {
            if (logDebug()) {
                debug("Found config " + cacheKey + " in cache");
            }
            metricUpdater.incrementProcTime(System.currentTimeMillis() - start);
            return config;
        }
    }
    ConfigDefinition def = getTargetDef(req);
    if (def == null) {
        metricUpdater.incrementFailedRequests();
        throw new UnknownConfigDefinitionException("Unable to find config definition for '" + configKey.getNamespace() + "." + configKey.getName());
    }
    if (logDebug()) {
        debug("Resolving " + configKey + " with config definition " + def);
    }
    ConfigPayload payload = model.getConfig(configKey, def);
    if (payload == null) {
        metricUpdater.incrementFailedRequests();
        throw new ConfigurationRuntimeException("Unable to resolve config " + configKey);
    }
    ConfigResponse configResponse = responseFactory.createResponse(payload, def.getCNode(), appGeneration);
    metricUpdater.incrementProcTime(System.currentTimeMillis() - start);
    if (!req.noCache()) {
        cache.put(cacheKey, configResponse, configResponse.getConfigMd5());
        metricUpdater.setCacheConfigElems(cache.configElems());
        metricUpdater.setCacheChecksumElems(cache.checkSumElems());
    }
    return configResponse;
}
Also used : ConfigurationRuntimeException(com.yahoo.config.ConfigurationRuntimeException) ConfigCacheKey(com.yahoo.vespa.config.ConfigCacheKey) ConfigPayload(com.yahoo.vespa.config.ConfigPayload) ConfigDefinition(com.yahoo.vespa.config.buildergen.ConfigDefinition) UnknownConfigDefinitionException(com.yahoo.vespa.config.server.UnknownConfigDefinitionException) ConfigResponse(com.yahoo.vespa.config.protocol.ConfigResponse)

Example 2 with UnknownConfigDefinitionException

use of com.yahoo.vespa.config.server.UnknownConfigDefinitionException in project vespa by vespa-engine.

the class GetConfigProcessor method run.

// TODO: Increment statistics (Metrics) failed counters when requests fail
public void run() {
    // Request has already been detached
    if (!request.validateParameters()) {
        // Error code is set in verifyParameters if parameters are not OK.
        log.log(LogLevel.WARNING, "Parameters for request " + request + " did not validate: " + request.errorCode() + " : " + request.errorMessage());
        respond(request);
        return;
    }
    Trace trace = request.getRequestTrace();
    if (logDebug(trace)) {
        debugLog(trace, "GetConfigProcessor.run() on " + localHostName);
    }
    Optional<TenantName> tenant = rpcServer.resolveTenant(request, trace);
    // fabricate an empty request to cause the sentinel to stop all running services
    if (rpcServer.isHostedVespa() && rpcServer.allTenantsLoaded() && !tenant.isPresent() && isSentinelConfigRequest(request)) {
        returnEmpty(request);
        return;
    }
    GetConfigContext context = rpcServer.createGetConfigContext(tenant, request, trace);
    if (context == null || !context.requestHandler().hasApplication(context.applicationId(), Optional.<Version>empty())) {
        handleError(request, ErrorCode.APPLICATION_NOT_LOADED, "No application exists");
        return;
    }
    Optional<Version> vespaVersion = rpcServer.useRequestVersion() ? request.getVespaVersion().map(VespaVersion::toString).map(Version::fromString) : Optional.empty();
    if (logDebug(trace)) {
        debugLog(trace, "Using version " + getPrintableVespaVersion(vespaVersion));
    }
    if (!context.requestHandler().hasApplication(context.applicationId(), vespaVersion)) {
        handleError(request, ErrorCode.UNKNOWN_VESPA_VERSION, "Unknown Vespa version in request: " + getPrintableVespaVersion(vespaVersion));
        return;
    }
    this.logPre = Tenants.logPre(context.applicationId());
    ConfigResponse config;
    try {
        config = rpcServer.resolveConfig(request, context, vespaVersion);
    } catch (UnknownConfigDefinitionException e) {
        handleError(request, ErrorCode.UNKNOWN_DEFINITION, "Unknown config definition " + request.getConfigKey());
        return;
    } catch (UnknownConfigIdException e) {
        handleError(request, ErrorCode.ILLEGAL_CONFIGID, "Illegal config id " + request.getConfigKey().getConfigId());
        return;
    } catch (Throwable e) {
        log.log(Level.SEVERE, "Unexpected error handling config request", e);
        handleError(request, ErrorCode.INTERNAL_ERROR, "Internal error " + e.getMessage());
        return;
    }
    // config == null is not an error, but indicates that the config will be returned later.
    if ((config != null) && (!config.hasEqualConfig(request) || config.hasNewerGeneration(request) || forceResponse)) {
        // debugLog(trace, "config response before encoding:" + config.toString());
        request.addOkResponse(request.payloadFromResponse(config), config.getGeneration(), config.getConfigMd5());
        if (logDebug(trace)) {
            debugLog(trace, "return response: " + request.getShortDescription());
        }
        respond(request);
    } else {
        if (logDebug(trace)) {
            debugLog(trace, "delaying response " + request.getShortDescription());
        }
        rpcServer.delayResponse(request, context);
    }
}
Also used : UnknownConfigIdException(com.yahoo.vespa.config.UnknownConfigIdException) Version(com.yahoo.config.provision.Version) TenantName(com.yahoo.config.provision.TenantName) UnknownConfigDefinitionException(com.yahoo.vespa.config.server.UnknownConfigDefinitionException) GetConfigContext(com.yahoo.vespa.config.server.GetConfigContext)

Aggregations

UnknownConfigDefinitionException (com.yahoo.vespa.config.server.UnknownConfigDefinitionException)2 ConfigurationRuntimeException (com.yahoo.config.ConfigurationRuntimeException)1 TenantName (com.yahoo.config.provision.TenantName)1 Version (com.yahoo.config.provision.Version)1 ConfigCacheKey (com.yahoo.vespa.config.ConfigCacheKey)1 ConfigPayload (com.yahoo.vespa.config.ConfigPayload)1 UnknownConfigIdException (com.yahoo.vespa.config.UnknownConfigIdException)1 ConfigDefinition (com.yahoo.vespa.config.buildergen.ConfigDefinition)1 ConfigResponse (com.yahoo.vespa.config.protocol.ConfigResponse)1 GetConfigContext (com.yahoo.vespa.config.server.GetConfigContext)1