modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageVersion.java | 8 + modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java | 41 ---------- 2 files changed, 8 insertions(+), 41 deletions(-)
New commits: commit 9db052a47faf5837892d3fed1e8cfa74ed28791b Author: Stefan Negrea snegrea@redhat.com Date: Mon Dec 12 10:03:40 2011 -0600
[BZ 758753] Use SHA as the identifier for package discovery. The version is unreliable and not correctly updated between server and agent.
Also, populate the installed package during discovery; the complete method is not the correct place because it does not necessarly mean that the package was fully deployed even if copied.
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageVersion.java b/modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageVersion.java index d64d8a5..7096645 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageVersion.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/content/PackageVersion.java @@ -57,7 +57,7 @@ import org.rhq.core.domain.util.OSGiVersionComparator; * @author Jason Dobies */ @Entity -@NamedQueries( { +@NamedQueries({ @NamedQuery(name = PackageVersion.QUERY_FIND_BY_PACKAGE_DETAILS, query = "" // + "SELECT pv FROM PackageVersion AS pv " // + " WHERE pv.generalPackage.name = :packageName " // @@ -66,6 +66,12 @@ import org.rhq.core.domain.util.OSGiVersionComparator; + " AND ( ( NOT pv.sha256 IS NULL AND pv.sha256 = :sha ) OR " + " ( pv.sha256 IS NULL AND pv.architecture.name = :architectureName AND pv.version = :version ) " + " ) "), + @NamedQuery(name = PackageVersion.QUERY_FIND_BY_PACKAGE_SHA, query = "" // + + "SELECT pv FROM PackageVersion AS pv " // + + " WHERE pv.generalPackage.name = :packageName " // + + " AND pv.generalPackage.packageType.name = :packageTypeName " // + + " AND pv.generalPackage.packageType.resourceType.id = :resourceTypeId " // + + " AND pv.sha256 = :sha "), @NamedQuery(name = PackageVersion.QUERY_FIND_BY_PACKAGE_VER_ARCH, query = "SELECT pv FROM PackageVersion AS pv " + " WHERE pv.generalPackage.name = :name " + " AND pv.generalPackage.packageType.id = :packageTypeId " + " AND pv.architecture.id = :architectureId " + " AND pv.version = :version "), diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java index 70f5c0c..29c3c85 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/content/ContentManagerBean.java @@ -203,13 +203,11 @@ public class ContentManagerBean implements ContentManagerLocal, ContentManagerRe // If the package exists see if package version already exists if (null != generalPackage) { Query packageVersionQuery = entityManager - .createNamedQuery(PackageVersion.QUERY_FIND_BY_PACKAGE_DETAILS); + .createNamedQuery(PackageVersion.QUERY_FIND_BY_PACKAGE_SHA); packageVersionQuery.setFlushMode(FlushModeType.COMMIT); packageVersionQuery.setParameter("packageName", discoveredPackage.getName()); packageVersionQuery.setParameter("packageTypeName", discoveredPackage.getPackageTypeName()); packageVersionQuery.setParameter("resourceTypeId", resource.getResourceType().getId()); - packageVersionQuery.setParameter("architectureName", discoveredPackage.getArchitectureName()); - packageVersionQuery.setParameter("version", discoveredPackage.getVersion()); packageVersionQuery.setParameter("sha", discoveredPackage.getSHA256()); List<PackageVersion> resultPackageVersions = packageVersionQuery.getResultList(); if (resultPackageVersions.size() > 0) { @@ -546,10 +544,6 @@ public class ContentManagerBean implements ContentManagerLocal, ContentManagerRe // We're closing out the package request for this package version, so remove it from the cache of entries // that need to be closed inProgressEntries.remove(packageVersion); - - if (singleResponse.getResult() == ContentResponseResult.SUCCESS) { - updateInstalledPackages(resource, packageVersion); - } }
// For any entries that were not closed, add closing entries @@ -2077,37 +2071,4 @@ public class ContentManagerBean implements ContentManagerLocal, ContentManagerRe ex.printStackTrace(); } } - - /** - * Update the set of installed packages for a content type resource. - * Existing installed packages are purged and a new set of installed - * packages is created. Currently, a content type resource has only - * and only one installed package. - * - * @param resource resource - * @param packageVersion package version - */ - @SuppressWarnings("unchecked") - private void updateInstalledPackages(Resource resource, PackageVersion packageVersion) { - if (resource.getResourceType().getCreationDataType() == ResourceCreationDataType.CONTENT) { - Query installedPackageQuery = entityManager.createNamedQuery(InstalledPackage.QUERY_FIND_BY_RESOURCE_ID); - installedPackageQuery.setParameter("resourceId", resource.getId()); - - List<InstalledPackage> installedPackages = installedPackageQuery.getResultList(); - if ((installedPackages != null) && (installedPackages.size() > 0)) { - for (InstalledPackage installedPackage : installedPackages) { - entityManager.refresh(installedPackage); - entityManager.remove(installedPackage); - } - } - - InstalledPackage installedPackage = new InstalledPackage(); - installedPackage.setInstallationDate(System.currentTimeMillis()); - installedPackage.setPackageVersion(packageVersion); - installedPackage.setResource(resource); - entityManager.persist(installedPackage); - - entityManager.flush(); - } - } } \ No newline at end of file