@Override
  public void resolve(
      ExtensionModule parentModule, Map<String, StackModule> allStacks, Map<String, ServiceModule> commonServices, Map<String, ExtensionModule> extensions)
      throws AmbariException {
    moduleState = ModuleState.VISITED;
    checkExtensionName(allStacks);

    String parentVersion = extensionInfo.getParentExtensionVersion();
    mergeServicesWithExplicitParent(allStacks, commonServices, extensions);
    // merge with parent version of same extension definition
    if (parentVersion != null) {
      mergeExtensionWithParent(parentVersion, allStacks, commonServices, extensions);
    }
    moduleState = ModuleState.RESOLVED;
  }
Fully resolve the extension. See extension resolution description in the class documentation.
If the extension has a parent, this extension will be merged against its fully resolved parent
if one is specified. Merging applies to all extension state including child service and
configuration modules.  Services may extend a service in another version in the
same extension hierarchy or may explicitly extend a service in a different
hierarchy.

@param parentModule   not used.  Each extension determines its own parent since extensions don't
                      have containing modules
@param allStacks      all stacks modules contained in the stack definition
@param commonServices all common services
@param extensions     all extensions

@throws AmbariException if an exception occurs during extension resolution
ambari-server/src/main/java/org/apache/ambari/server/stack/ExtensionModule.java