Skip to content
This repository has been archived by the owner on Jul 11, 2022. It is now read-only.

Commit

Permalink
[1118394] deployment of new war from repo content fails
Browse files Browse the repository at this point in the history
This is not a fix for the reported issue, which actually seems to not be a
bug.  This is a fix to ensure failed package installs persist the error
messageto the history record in the DB. And to provide a more useful
log message in the agent log.

Cherry-pick master ec19fd70d8db8e100b3c83c75f8d29d6c5c797ff
  • Loading branch information
jshaughn committed Jul 24, 2014
1 parent 9d94427 commit 562cd90
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -155,13 +155,13 @@ public class ContentManagerBean implements ContentManagerLocal, ContentManagerRe

@EJB
private ResourceManagerLocal resourceManager;

@EJB
private ResourceTypeManagerLocal resourceTypeManager;

@EJB
private RepoManagerLocal repoManager;


// ContentManagerLocal Implementation --------------------------------------------

Expand Down Expand Up @@ -582,6 +582,7 @@ public void completeDeployPackageRequest(DeployPackagesResponse response) {
history.setStatus(InstalledPackageHistoryStatus.INSTALLED);
} else {
history.setStatus(InstalledPackageHistoryStatus.FAILED);
history.setErrorMessage(response.getOverallRequestErrorMessage());
}

entityManager.persist(history);
Expand Down Expand Up @@ -1152,10 +1153,10 @@ public PackageType findPackageType(Subject subject, Integer resourceTypeId, Stri
q.setParameter("typeId", resourceTypeId);
}
q.setParameter("name", packageTypeName);

@SuppressWarnings("unchecked")
List<PackageType> results = (List<PackageType>) q.getResultList();
List<PackageType> results = q.getResultList();

if (results.size() == 0) {
return null;
} else if (results.size() == 1) {
Expand All @@ -1166,14 +1167,14 @@ public PackageType findPackageType(Subject subject, Integer resourceTypeId, Stri
throw new IllegalStateException(message);
}
}

public PackageTypeAndVersionFormatComposite findPackageTypeWithVersionFormat(Subject subject,
Integer resourceTypeId, String packageTypeName) {

PackageType type = findPackageType(subject, resourceTypeId, packageTypeName);

PackageVersionFormatDescription format = null;

try {
PackageTypeBehavior behavior = ContentManagerHelper.getPackageTypeBehavior(packageTypeName);
if (behavior != null) {
Expand All @@ -1183,10 +1184,10 @@ public PackageTypeAndVersionFormatComposite findPackageTypeWithVersionFormat(Sub
//well, this shouldn't happen but is not crucial in this case
LOG.info("Failed to obtain the behavior of package type '" + packageTypeName + "'.", e);
}

return new PackageTypeAndVersionFormatComposite(type, format);
}

@SuppressWarnings("unchecked")
public void checkForTimedOutRequests(Subject subject) {
if (!authorizationManager.isOverlord(subject)) {
Expand Down Expand Up @@ -1309,7 +1310,7 @@ public PackageVersion createPackageVersionWithDisplayVersion(Subject subject, St
PackageTypeBehavior behavior = ContentManagerHelper.getPackageTypeBehavior(packageTypeId);
ValidatablePackageDetailsKey key = new ValidatablePackageDetailsKey(packageName, version, packageType.getName(), architecture.getName());
behavior.validateDetails(key, subject);

packageName = key.getName();
version = key.getVersion();
if (!architecture.getName().equals(key.getArchitectureName())) {
Expand All @@ -1323,7 +1324,7 @@ public PackageVersion createPackageVersionWithDisplayVersion(Subject subject, St
LOG.error("Failed to get the package type plugin container. This is a bug.", e);
throw new IllegalStateException("Failed to get the package type plugin container.", e);
}

// If the package doesn't exist, create that here
Query packageQuery = entityManager.createNamedQuery(Package.QUERY_FIND_BY_NAME_PKG_TYPE_ID);
packageQuery.setParameter("name", packageName);
Expand All @@ -1343,7 +1344,7 @@ public PackageVersion createPackageVersionWithDisplayVersion(Subject subject, St
// Create a package version and add it to the package
PackageVersion newPackageVersion = new PackageVersion(existingPackage, version, architecture);
newPackageVersion.setDisplayName(existingPackage.getName());

newPackageVersion = persistOrMergePackageVersionSafely(newPackageVersion);

Map<String, String> contentDetails = new HashMap<String, String>();
Expand All @@ -1354,7 +1355,7 @@ public PackageVersion createPackageVersionWithDisplayVersion(Subject subject, St
newPackageVersion.setFileSize(Long.valueOf(contentDetails.get(UPLOAD_FILE_SIZE)).longValue());
newPackageVersion.setSHA256(contentDetails.get(UPLOAD_SHA256));
newPackageVersion.setDisplayVersion(displayVersion);

existingPackage.addVersion(newPackageVersion);

return newPackageVersion;
Expand Down Expand Up @@ -1404,7 +1405,7 @@ public PackageVersion persistOrMergePackageVersionSafely(PackageVersion pv) {
q.setParameter("packageTypeName", pv.getGeneralPackage().getPackageType().getName());
q.setParameter("architectureName", pv.getArchitecture().getName());
q.setParameter("version", pv.getVersion());

ResourceType rt = pv.getGeneralPackage().getPackageType().getResourceType();
q.setParameter("resourceType", rt);

Expand All @@ -1427,7 +1428,7 @@ public PackageVersion persistOrMergePackageVersionSafely(PackageVersion pv) {
}
} else {
// the persisted object is unattached right now,
// we want it attached so the caller always has an attached entity returned to it
// we want it attached so the caller always has an attached entity returned to it
persisted = entityManager.find(PackageVersion.class, persisted.getId());
persisted.getGeneralPackage().getId();
persisted.getArchitecture().getId();
Expand Down Expand Up @@ -1486,7 +1487,7 @@ public Package persistOrMergePackageSafely(Package pkg) {
}
} else {
// the persisted object is unattached right now,
// we want it attached so the caller always has an attached entity returned to it
// we want it attached so the caller always has an attached entity returned to it
persisted = entityManager.find(Package.class, persisted.getId());
persisted.getPackageType().getId();
}
Expand Down Expand Up @@ -1594,42 +1595,42 @@ public PageList<PackageVersion> findPackageVersionsByCriteria(Subject subject, P
}

public PageList<Package> findPackagesByCriteria(Subject subject, PackageCriteria criteria) {

if (criteria.getFilterRepoId() != null) {
if (!authorizationManager.canViewRepo(subject, criteria.getFilterRepoId())) {
throw new PermissionException("Subject [" + subject.getName() + "] cannot view the repo with id " + criteria.getFilterRepoId());
}
} else if (!authorizationManager.hasGlobalPermission(subject, Permission.MANAGE_REPOSITORIES)) {
throw new PermissionException("Only repository managers can search for packages across all repos.");
}

CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria);

CriteriaQueryRunner<Package> runner = new CriteriaQueryRunner<Package>(criteria, generator, entityManager);

return runner.execute();
}

public PageList<PackageAndLatestVersionComposite> findPackagesWithLatestVersion(Subject subject,
PackageCriteria criteria) {
if (criteria.getFilterRepoId() == null) {
throw new IllegalArgumentException("The criteria query has to have a filter for a specific repo.");
}

criteria.fetchVersions(true);
PageList<Package> packages = findPackagesByCriteria(subject, criteria);

PageList<PackageAndLatestVersionComposite> ret = new PageList<PackageAndLatestVersionComposite>(
packages.getTotalSize(), packages.getPageControl());

for(Package p : packages) {
PackageVersion latest = repoManager.getLatestPackageVersion(subject, p.getId(), criteria.getFilterRepoId());
ret.add(new PackageAndLatestVersionComposite(p, latest));
}

return ret;
}

public InstalledPackage getBackingPackageForResource(Subject subject, int resourceId) {
InstalledPackage result = null;

Expand All @@ -1639,7 +1640,7 @@ public InstalledPackage getBackingPackageForResource(Subject subject, int resour
if (!ResourceCreationDataType.CONTENT.equals(type.getCreationDataType())) {
return null;
}

InstalledPackageCriteria criteria = new InstalledPackageCriteria();
criteria.addFilterResourceId(resourceId);
PageList<InstalledPackage> ips = findInstalledPackagesByCriteria(subject, criteria);
Expand Down Expand Up @@ -1677,7 +1678,7 @@ public PackageVersion getUploadedPackageVersion(Subject subject, String packageN
Map<String, String> packageUploadDetails, Integer repoId) {

PackageVersion packageVersion = null;

//default version to 1.0 if is null, not provided for any reason.
if ((version == null) || (version.trim().length() == 0)) {
version = "1.0";
Expand All @@ -1686,21 +1687,21 @@ public PackageVersion getUploadedPackageVersion(Subject subject, String packageN
Architecture architecture = entityManager.find(Architecture.class, architectureId);
PackageType packageType = entityManager.find(PackageType.class, packageTypeId);

// See if package version already exists for the resource package
// See if package version already exists for the resource package
Query packageVersionQuery = null;

if (packageType.getResourceType() != null) {
packageVersionQuery = entityManager.createNamedQuery(PackageVersion.QUERY_FIND_BY_PACKAGE_DETAILS_KEY_WITH_NON_NULL_RESOURCE_TYPE);
packageVersionQuery.setParameter("resourceTypeId", packageType.getResourceType().getId());

} else {
packageVersionQuery = entityManager.createNamedQuery(PackageVersion.QUERY_FIND_BY_PACKAGE_DETAILS_KEY);
packageVersionQuery.setParameter("resourceType", null);
}

packageVersionQuery.setFlushMode(FlushModeType.COMMIT);
packageVersionQuery.setParameter("packageName", packageName);

packageVersionQuery.setParameter("packageTypeName", packageType.getName());

packageVersionQuery.setParameter("architectureName", architecture.getName());
Expand All @@ -1715,17 +1716,17 @@ public PackageVersion getUploadedPackageVersion(Subject subject, String packageN

try {
PackageTypeBehavior behavior = ContentManagerHelper.getPackageTypeBehavior(packageTypeId);

if (behavior != null) {
String packageTypeName = packageType.getName();
String archName = architecture.getName();
ValidatablePackageDetailsKey key = new ValidatablePackageDetailsKey(packageName, version, packageTypeName, archName);
behavior.validateDetails(key, subject);

//update the details from the validation results
packageName = key.getName();
version = key.getVersion();

if (!architecture.getName().equals(key.getArchitectureName())) {
Query q = entityManager.createNamedQuery(Architecture.QUERY_FIND_BY_NAME);
q.setParameter("name", key.getArchitectureName());
Expand All @@ -1738,7 +1739,7 @@ public PackageVersion getUploadedPackageVersion(Subject subject, String packageN
LOG.error("Failed to get the package type plugin container. This is a bug.", e);
throw new IllegalStateException("Failed to get the package type plugin container.", e);
}


Package existingPackage = null;

Expand Down Expand Up @@ -1781,12 +1782,12 @@ public PackageVersion getUploadedPackageVersion(Subject subject, String packageN
}

entityManager.merge(packageVersion);

if (repoId != null) {
int[] packageVersionIds = new int[] { packageVersion.getId() };
repoManager.addPackageVersionsToRepo(subject, repoId, packageVersionIds);
}

entityManager.flush();

return packageVersion;
Expand All @@ -1797,17 +1798,17 @@ public PackageType persistServersidePackageType(PackageType packageType) {
if (packageType.getResourceType() != null) {
throw new IllegalArgumentException("Server-side package types can't be associated with a resource type.");
}

entityManager.persist(packageType);

return packageType;
}

/** Pulls in package bits from the stream. Currently inefficient.
*
* @param packageBitStream
* @param packageVersionId
* @param contentDetails
* @param contentDetails
* @return PackageBits ref populated.
*/
private PackageBits loadPackageBits(InputStream packageBitStream, int packageVersionId, String packageName,
Expand Down Expand Up @@ -1843,7 +1844,7 @@ private PackageBits loadPackageBitsH2(InputStream packageBitStream, int packageV
PackageBits bits = null;
PackageBitsBlob blob = null;

// The blob cannot be updated, so we'll need to create a whole new row.
// The blob cannot be updated, so we'll need to create a whole new row.
if (null != existingBits) {
blob = entityManager.find(PackageBitsBlob.class, existingBits.getId());
entityManager.remove(blob);
Expand Down Expand Up @@ -1896,7 +1897,7 @@ private PackageBits loadPackageBitsH2(InputStream packageBitStream, int packageV
* on a Lob unless the entity class is instrumented. We can't usethat approach because it introduces
* hibernate imports into the domain class, and that violates our restriction of exposing hibernate
* classes to the Agent and Remote clients.
*
*
* @return
*/
private PackageBits initializePackageBits(PackageBits bits) {
Expand Down Expand Up @@ -2029,9 +2030,9 @@ public void updateBlobStream(InputStream stream, PackageBits bits, Map<String, S
entityManager.flush();
}

/** Functions same as StreamUtil.copy(), but calculates SHA hash and file size and write it to
* the Map<String,String> passed in.
*
/** Functions same as StreamUtil.copy(), but calculates SHA hash and file size and write it to
* the Map<String,String> passed in.
*
* @param input
* @param output
* @param closeStreams
Expand Down Expand Up @@ -2088,7 +2089,7 @@ private long copyAndDigest(InputStream input, OutputStream output, boolean close
}

/** For Testing only<br><br>
*
*
* Writes the contents of a the Blob out to the stream passed in.
*
* @param stream non null stream where contents to be written to.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ public DeployPackagesResponse deployPackages(Set<ResourcePackageDetails> package
Result result = redeployer.redeployOnServer();
if (result.isRolledBack()) {
response.setOverallRequestResult(ContentResponseResult.FAILURE);
response.setOverallRequestErrorMessage(result.getFailureDescription());
response.setOverallRequestErrorMessage("Rolled Back: " + result.getFailureDescription());
} else {
response.setOverallRequestResult(ContentResponseResult.SUCCESS);
//we just deployed a different file on the AS7 server, so let's refresh ourselves
Expand All @@ -222,11 +222,18 @@ public DeployPackagesResponse deployPackages(Set<ResourcePackageDetails> package

} catch (Exception e) {
response.setOverallRequestResult(ContentResponseResult.FAILURE);
response.setOverallRequestErrorMessage(e.getMessage());
}

ContentResponseResult result = response.getOverallRequestResult();
getLog().info(
"Result of deployment of " + resourceType.getName() + " Resource with key [" + detail.getKey() + "]: "
+ response);
"Result of deployment of "
+ resourceType.getName()
+ " Resource with key ["
+ detail.getKey()
+ "]: "
+ ((ContentResponseResult.SUCCESS == result) ? result.name() : (result.name() + ": " + response
.getOverallRequestErrorMessage())));

return response;
}
Expand Down

0 comments on commit 562cd90

Please sign in to comment.