Ejemplo n.º 1
0
 /*
  * Get matching ServiceElement count
  */
 private static int getCount(
     ServiceElement sElem, ServiceElement[] elems, AssociationType type, StringBuffer b) {
   int found = 0;
   for (ServiceElement elem : elems) {
     AssociationDescriptor[] ads = ServiceElementUtil.getAssociationDescriptors(elem, type);
     for (AssociationDescriptor ad : ads) {
       if (matches(ad, new ServiceElement[] {sElem})) {
         if (found > 0) b.append(", ");
         found++;
         b.append(elem.getName());
       }
     }
   }
   return (found);
 }
Ejemplo n.º 2
0
 /**
  * This method verifies whether the InstantiatorResource can support any declared service
  * colocation requirements
  *
  * @param sElem The ServiceElement
  * @param ir The InstantiatorResource
  * @return Return true if the provided InstantiatorResource meets service colocation requirements
  */
 static boolean meetsColocationRequirements(ServiceElement sElem, InstantiatorResource ir) {
   boolean provisionable = true;
   AssociationDescriptor[] aDescs = sElem.getAssociationDescriptors();
   for (AssociationDescriptor aDesc : aDescs) {
     boolean ok = false;
     if (aDesc.getAssociationType() == AssociationType.COLOCATED) {
       if (matches(aDesc, ir.getServiceElements())) {
         break;
       }
     } else {
       ok = true;
     }
     if (!ok) {
       provisionable = false;
       break;
     }
   }
   return (provisionable);
 }
Ejemplo n.º 3
0
  /**
   * This method verifies whether the InstantiatorResource can support any declared service
   * associated requirements
   *
   * @param sElem The ServiceElement
   * @param type The AssociationType type
   * @param ir The InstantiatorResource
   * @param known An array of InstantiatorResource instances that contain the ServiceElement, may be
   *     null
   * @return Return true if the provided InstantiatorResource meets service declared requirements
   */
  private static boolean meetsAssociatedRequirements(
      ServiceElement sElem,
      AssociationType type,
      InstantiatorResource ir,
      InstantiatorResource[] known) {
    boolean provisionable = true;
    StringBuilder errorLog = new StringBuilder();

    AssociationDescriptor[] aDescs = ServiceElementUtil.getAssociationDescriptors(sElem, type);

    /* Check in process elements, to see if they match any of the service's
     * opposed requirements */
    for (AssociationDescriptor aDesc : aDescs) {
      if (matches(aDesc, ir.getServiceElementsInprocess(sElem))) {
        provisionable = false;
        break;
      }
    }

    /* Check running elements, to see if they match any of the service's
     * opposed requirements */
    if (provisionable) {
      for (AssociationDescriptor aDesc : aDescs) {
        if (matches(aDesc, ir.getServiceElements())) {
          provisionable = false;
          break;
        }
      }
    }
    if (!provisionable) {
      String provType = sElem.getProvisionType().toString();
      errorLog
          .append("Do not allocate ")
          .append(provType)
          .append(" service " + "[")
          .append(sElem.getName())
          .append("] to ")
          .append(ir.getName())
          .append(" at [")
          .append(ir.getHostAddress())
          .append("], ");
      errorLog.append(type.toString()).append(", services detected: ");
      for (int i = 0; i < aDescs.length; i++) {
        if (i > 0) errorLog.append(", ");
        errorLog.append("[").append(i + 1).append("] ").append(aDescs[i].getName());
      }
    }

    /* Check if any in process or running elements have an opposed or
     * isolated requirement to the service that needs to be provisioned */
    if (provisionable) {
      StringBuffer b = new StringBuffer();
      int found = getCount(sElem, ir.getServiceElements(), type, b);
      if (found == 0) {
        found = getCount(sElem, ir.getServiceElementsInprocess(sElem), type, b);
      }
      if (found > 0) {
        String provType = sElem.getProvisionType().toString();
        provisionable = false;
        errorLog
            .append("Do not allocate ")
            .append(provType)
            .append(" service " + "[")
            .append(sElem.getName())
            .append("] to ")
            .append(ir.getName())
            .append(" at [")
            .append(ir.getHostAddress())
            .append("], ")
            .append("id ")
            .append("[")
            .append(ir.getInstantiatorUuid())
            .append("], ")
            .append(found);
        errorLog.append(" service(s) have ").append(type.toString()).append(" associations: ");
        errorLog.append("{").append(b.toString()).append("}");
      }
    }

    if (provisionable && known != null && aDescs.length > 0) {
      if (inKnownSet(ir, known)) provisionable = false;
    }

    if (!provisionable && logger.isLoggable(Level.FINER)) logger.finer(errorLog.toString());

    return (provisionable);
  }