Package com.opengamma.engine

Examples of com.opengamma.engine.ComputationTarget


    if (producer == worker) {
      producer.release(context);
      // Populate the worker and position this task in the chain for pumping alternative resolutions to dependents
      s_logger.debug("Registered worker {} for {} production", worker, getResolvedOutput());
      final CompiledFunctionDefinition functionDefinition = getFunction().getFunction();
      final ComputationTarget target = getComputationTarget(context);
      Set<ValueRequirement> inputRequirements = null;
      try {
        //DebugUtils.getRequirements_enter();
        inputRequirements = functionDefinition.getRequirements(context.getCompilationContext(), target, getIterationBase().getDesiredValue());
        //DebugUtils.getRequirements_leave();
      } catch (Throwable t) {
        //DebugUtils.getRequirements_leave();
        s_logger.warn("Exception thrown by getRequirements", t);
        context.exception(t);
      }
      if (inputRequirements == null) {
        s_logger.info("Function {} returned NULL for getRequirements on {}", functionDefinition, getValueRequirement());
        final ResolutionFailure failure = context.functionApplication(getValueRequirement(), getFunction(), getResolvedOutput()).getRequirementsFailed();
        context.discardTaskProducing(getResolvedOutput(), getTask());
        worker.storeFailure(failure);
        worker.finished(context);
        storeFailure(failure);
        worker.release(context);
        setRunnableTaskState(getIterationBase(), context);
        return true;
      }
      final Collection<ValueSpecification> resolvedOutputValues;
      if (getOriginalOutput().equals(getResolvedOutput())) {
        resolvedOutputValues = getOriginalOutputs();
      } else {
        final Collection<ValueSpecification> originalOutputValues = getOriginalOutputs();
        resolvedOutputValues = new ArrayList<ValueSpecification>(originalOutputValues.size());
        for (ValueSpecification outputValue : originalOutputValues) {
          if (getOriginalOutput().equals(outputValue)) {
            s_logger.debug("Substituting {} with {}", outputValue, getResolvedOutput());
            resolvedOutputValues.add(getResolvedOutput());
          } else {
            resolvedOutputValues.add(outputValue);
          }
        }
      }
      final PumpingState state = new PumpingState(getTask(), getIterationBase(), getResolvedOutput(), resolvedOutputValues, getFunction(), worker);
      if (setTaskState(state)) {
        if (inputRequirements.isEmpty()) {
          s_logger.debug("Function {} requires no inputs", functionDefinition);
          worker.setPumpingState(state, 0);
          if (!state.inputsAvailable(context, Collections.<ValueSpecification, ValueRequirement>emptyMap(), true)) {
            context.discardTaskProducing(getResolvedOutput(), getTask());
            state.setRunnableTaskState(getIterationBase(), context);
            worker.finished(context);
          }
        } else {
          s_logger.debug("Function {} requires {}", functionDefinition, inputRequirements);
          worker.setPumpingState(state, inputRequirements.size());

          String functionExclusionValueName = getValueRequirement().getValueName();
          Collection<FunctionExclusionGroup> functionExclusion = null;
          for (ValueRequirement inputRequirement : inputRequirements) {
            final ResolvedValueProducer inputProducer;
            if ((inputRequirement.getValueName() == functionExclusionValueName) && inputRequirement.getTargetReference().equals(target.toSpecification())) {
              if (functionExclusion == null) {
                functionExclusion = getFunctionExclusion(context, functionDefinition);
                if (functionExclusion == null) {
                  functionExclusionValueName = null;
                }
View Full Code Here


    }

    private boolean getAdditionalRequirementsAndPushResults(final GraphBuildingContext context, final FunctionApplicationWorker substituteWorker,
        final Map<ValueSpecification, ValueRequirement> inputs, final ValueSpecification resolvedOutput, final Set<ValueSpecification> resolvedOutputs, final boolean lastWorkerResult) {
      // the substituteWorker is not ref-counted from here
      final ComputationTarget target = getComputationTarget(context);
      Set<ValueRequirement> additionalRequirements = null;
      try {
        //DebugUtils.getAdditionalRequirements_enter();
        additionalRequirements = getFunction().getFunction().getAdditionalRequirements(context.getCompilationContext(), target, inputs.keySet(), resolvedOutputs);
        //DebugUtils.getAdditionalRequirements_leave();
      } catch (Throwable t) {
        //DebugUtils.getAdditionalRequirements_leave();
        s_logger.warn("Exception thrown by getAdditionalRequirements", t);
        context.exception(t);
      }
      if (additionalRequirements == null) {
        s_logger.info("Function {} returned NULL for getAdditionalRequirements on {}", getFunction(), inputs);
        final ResolutionFailure failure = functionApplication(context).requirements(inputs).getAdditionalRequirementsFailed();
        if (substituteWorker != null) {
          substituteWorker.storeFailure(failure);
          substituteWorker.finished(context);
          context.discardTaskProducing(resolvedOutput, getTask());
        }
        getWorker().storeFailure(failure);
        return false;
      }
      if (additionalRequirements.isEmpty()) {
        return pushResult(context, substituteWorker, inputs, resolvedOutput, resolvedOutputs, lastWorkerResult);
      }
      s_logger.debug("Resolving additional requirements for {} on {}", getFunction(), inputs);
      final AtomicInteger lock = new AtomicInteger(1);
      final ResolvedValueCallback callback = new ResolvedValueCallbackChain() {

        private final AtomicBoolean _pumped = new AtomicBoolean(false);

        @Override
        public void failed(final GraphBuildingContext context, final ValueRequirement value, final ResolutionFailure failure) {
          s_logger.info("Couldn't resolve additional requirement {} for {}", value, getFunction());
          final ResolutionFailure additionalRequirement = functionApplication(context).requirements(inputs).additionalRequirement(value, failure);
          getWorker().storeFailure(additionalRequirement);
          if (substituteWorker != null) {
            substituteWorker.storeFailure(additionalRequirement);
            substituteWorker.finished(context);
            context.discardTaskProducing(resolvedOutput, getTask());
          }
          if (!_pumped.getAndSet(true)) {
            pump(context);
          }
        }

        @Override
        public void resolved(final GraphBuildingContext context, final ValueRequirement valueRequirement, final ResolvedValue resolvedValue, final ResolutionPump pump) {
          s_logger.debug("Resolved additional requirement {} to {}", valueRequirement, resolvedValue);
          inputs.put(resolvedValue.getValueSpecification(), valueRequirement);
          if (pump != null) {
            context.close(pump);
          }
          if (lock.decrementAndGet() == 0) {
            s_logger.debug("Additional requirements complete");
            if (!pushResult(context, substituteWorker, inputs, resolvedOutput, resolvedOutputs, lastWorkerResult)) {
              pump(context);
            }
          }
        }

        @Override
        public void recursionDetected() {
          // No-op
        }

        @Override
        public int cancelLoopMembers(final GraphBuildingContext context, final Map<Chain, Chain.LoopState> visited) {
          int result = PumpingState.this.cancelLoopMembers(context, visited);
          if (substituteWorker != null) {
            result += substituteWorker.cancelLoopMembers(context, visited);
          }
          return result;
        }

        @Override
        public String toString() {
          return "AdditionalRequirements" + getObjectId() + "[" + getFunction() + ", " + inputs + "]";
        }

      };
      String functionExclusionValueName = getValueRequirement().getValueName();
      Collection<FunctionExclusionGroup> functionExclusion = null;
      for (ValueRequirement inputRequirement : additionalRequirements) {
        final ResolvedValueProducer inputProducer;
        if ((inputRequirement.getValueName() == functionExclusionValueName) && inputRequirement.getTargetReference().equals(target.toSpecification())) {
          if (functionExclusion == null) {
            functionExclusion = getFunctionExclusion(context, getFunction().getFunction());
            if (functionExclusion == null) {
              functionExclusionValueName = null;
            }
View Full Code Here

        if (targetResolver != null) {
          final ComputationTargetSpecificationResolver.AtVersionCorrection specificationResolver = targetResolver.getSpecificationResolver();
          for (Map.Entry<ValueRequirement, Object> valueByRequirement : _valuesByRequirement.entrySet()) {
            final ComputationTargetSpecification targetSpec = specificationResolver.getTargetSpecification(valueByRequirement.getKey().getTargetReference());
            if (targetSpec != null) {
              final ComputationTarget target = targetResolver.resolve(targetSpec);
              final Object targetValue = (target != null) ? target.getValue() : null;
              final ValueSpecification resolved = _availability.getAvailability(targetSpec, targetValue, valueByRequirement.getKey());
              if (resolved != null) {
                s_logger.info("Injecting {} as {}", valueByRequirement, resolved);
                _valuesBySpecification.put(resolved, valueByRequirement.getValue());
              } else {
View Full Code Here

  private void invoke(final CalculationJobItem jobItem, final DeferredInvocationStatistics statistics, final CalculationJobResultItemBuilder resultItemBuilder) throws AsynchronousExecution {
    final ValueSpecification[] outputs = jobItem.getOutputs();
    final String functionUniqueId = jobItem.getFunctionUniqueIdentifier();
    Future<ComputationTarget> targetFuture = null;
    ComputationTarget target = null;
    if (isUseAsynchronousTargetResolve()) {
      targetFuture = getExecutorService().submit(new Callable<ComputationTarget>() {
        @Override
        public ComputationTarget call() {
          return getTargetResolver().resolve(jobItem.getComputationTargetSpecification());
View Full Code Here

                  // compilation under this circumstance can be flawed if the functions have made notable use of the overall portfolio structure such that
                  // a full re-compilation will yield a different dependency graph to just rewriting the previous one.
                  final ComputationTargetResolver resolver = getProcessContext().getFunctionCompilationService().getFunctionCompilationContext().getRawComputationTargetResolver();
                  final ComputationTargetSpecification portfolioSpec = resolver.getSpecificationResolver().getTargetSpecification(
                      new ComputationTargetSpecification(ComputationTargetType.PORTFOLIO, getViewDefinition().getPortfolioId()), versionCorrection);
                  final ComputationTarget newPortfolio = resolver.resolve(portfolioSpec, versionCorrection);
                  unchangedNodes = rewritePortfolioNodes(previousGraphs, compiledViewDefinition, (Portfolio) newPortfolio.getValue());
                }
                // Invalidate any dependency graph nodes on the invalid targets
                filterPreviousGraphs(previousGraphs, new InvalidTargetDependencyNodeFilter(invalidIdentifiers.keySet()), unchangedNodes);
                previousResolutions = new ConcurrentHashMap<>(resolvedIdentifiers.size());
                for (final Map.Entry<ComputationTargetReference, UniqueId> resolvedIdentifier : resolvedIdentifiers.entrySet()) {
View Full Code Here

  public ComputationTarget buildObject(FudgeDeserializer deserializer, FudgeMsg message) {
    final ComputationTargetSpecification specification = ComputationTargetReferenceFudgeBuilder.buildObjectImpl(deserializer, message).getSpecification();
    final Class<? extends UniqueIdentifiable> valueType = specification.getType().accept(s_getLeafType, null);
    if (valueType != null) {
      final UniqueIdentifiable value = deserializer.fieldValueToObject(valueType, message.getByName(VALUE_FIELD));
      return new ComputationTarget(specification, value);
    } else {
      return ComputationTarget.NULL;
    }
  }
View Full Code Here

      return;
    }
    boolean usedRaw = node.hasTerminalOutputValues();
    for (DependencyNode dependent : node.getDependentNodes()) {
      if (dependent.getFunction().getFunction() instanceof MarketDataAliasingFunction) {
        final ComputationTarget target = _targetResolver.resolve(dependent.getComputationTarget());
        if (target == null) {
          // This shouldn't normally happen (a default target specification will always be created that gives a stub Primitive instance) unless
          // the target specification cannot be resolved by the target resolver any more.
          s_logger.warn("Couldn't resolve {}", dependent.getComputationTarget());
          _valid.put(marketData, Boolean.FALSE);
          _invalidNodes++;
          return;
        }
        final Object targetValue = target.getValue();
        for (ValueSpecification desiredOutput : dependent.getOutputValues()) {
          final ValueRequirement desiredValue = inferValueRequirement(desiredOutput);
          final ValueSpecification requiredMarketData = _marketData.getAvailability(dependent.getComputationTarget(), targetValue, desiredValue);
          if (marketData.equals(requiredMarketData)) {
            s_logger.debug("Market data entry {} still available for {}", marketData, desiredValue);
          } else {
            s_logger.debug("New market data {} required for {}", requiredMarketData, desiredValue);
            _valid.put(marketData, Boolean.FALSE);
            _invalidNodes++;
            return;
          }
        }
      } else {
        usedRaw = true;
      }
    }
    if (usedRaw) {
      final ComputationTarget target = _targetResolver.resolve(node.getComputationTarget());
      if (target == null) {
        // This shouldn't normally happen (a default target specification will always be created that gives a stub Primitive instance) unless
        // the target specification cannot be resolved by the target resolver any more.
        s_logger.warn("Couldn't resolve {}", node.getComputationTarget());
        _valid.put(marketData, Boolean.FALSE);
        _invalidNodes++;
        return;
      }
      final Object targetValue = target.getValue();
      final ValueRequirement desiredValue = inferValueRequirement(marketData);
      final ValueSpecification requiredMarketData = _marketData.getAvailability(node.getComputationTarget(), targetValue, desiredValue);
      if (marketData.equals(requiredMarketData)) {
        s_logger.debug("Market data entry {} still available", marketData);
      } else {
View Full Code Here

    protected ComputationTarget getComputationTarget(final GraphBuildingContext context) {
      final ComputationTargetSpecification specification = getTargetSpecification(context);
      if (specification == null) {
        return null;
      }
      final ComputationTarget target = LazyComputationTargetResolver.resolve(context.getCompilationContext().getComputationTargetResolver(), specification);
      if (target == null) {
        s_logger.warn("Computation target {} not found", specification);
      }
      return target;
    }
View Full Code Here

      if (typeRules != null) {
        final Map<ComputationTargetType, ComputationTarget> adjusted = new HashMap<ComputationTargetType, ComputationTarget>();
        for (Collection<ResolutionRule> rules : typeRules) {
          int rulesFound = 0;
          for (ResolutionRule rule : rules) {
            final ComputationTarget adjustedTarget = rule.adjustTarget(adjusted, target);
            if (adjustedTarget != null) {
              final Set<ValueSpecification> results = rule.getResults(adjustedTarget, getFunctionCompilationContext());
              if ((results != null) && !results.isEmpty()) {
                resolutionRules.add(rule);
                resolutionResults.add(reduceMemory(results, resolver));
View Full Code Here

      final Collection<ValueSpecification>[] resultSets = _values.getSecond();
      final FunctionBlacklistQuery blacklist = _context.getGraphBuildingBlacklist();
      while (_itr < rules.length) {
        final ResolutionRule rule = rules[_itr];
        if (!blacklist.isBlacklisted(rule.getParameterizedFunction(), _target)) {
          final ComputationTarget adjustedTarget = rule.adjustTarget(target);
          if (adjustedTarget != null) {
            final Collection<ValueSpecification> resultSet = resultSets[_itr];
            final ValueSpecification result = rule.getResult(_valueName, adjustedTarget, _constraints, resultSet);
            if (result != null) {
              _next = Triple.of(rule.getParameterizedFunction(), result, resultSet);
View Full Code Here

TOP

Related Classes of com.opengamma.engine.ComputationTarget

Copyright © 2018 www.massapicom. 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.