Bug 568962
Summary: | RHN API: channel.software.mergeErrata() call always clones the same errata even though they've already been cloned/merged | ||
---|---|---|---|
Product: | Red Hat Satellite 5 | Reporter: | Xixi <xdmoon> |
Component: | API | Assignee: | Tomas Lestach <tlestach> |
Status: | CLOSED CURRENTRELEASE | QA Contact: | Miroslav Suchý <msuchy> |
Severity: | medium | Docs Contact: | |
Priority: | medium | ||
Version: | 530 | CC: | clasohm, cperry, jhutar, msuchy, schlegel, stanislav.polasek, stephan.duehr, tao, xdmoon |
Target Milestone: | --- | ||
Target Release: | --- | ||
Hardware: | All | ||
OS: | Linux | ||
Whiteboard: | |||
Fixed In Version: | Doc Type: | Bug Fix | |
Doc Text: | Story Points: | --- | |
Clone Of: | Environment: | ||
Last Closed: | 2010-10-28 14:55:58 UTC | Type: | --- |
Regression: | --- | Mount Type: | --- |
Documentation: | --- | CRM: | |
Verified Versions: | Category: | --- | |
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
Cloudforms Team: | --- | Target Upstream Version: | |
Embargoed: | |||
Bug Depends On: | |||
Bug Blocks: | 608754 |
Description
Xixi
2010-02-27 07:19:58 UTC
Looking at the code, it looks like mergeErrata and mergePackages are almost identical except one is Channel.getErrata the other is Channel.getPackages, not sure why the former would return the same set of errata to merge every time (even though they've already been merged) whereas the latter - correctly - does not find anything to merge when packages had already been merged. spacewalk-java-0.5.44/code/src/com/redhat/rhn/frontend/xmlrpc/channel/software/ChannelSoftwareHandler.java ... public Object[] mergeErrata(String sessionKey, String mergeFromLabel, String mergeToLabel) { User loggedInUser = getLoggedInUser(sessionKey); channelAdminPermCheck(loggedInUser); Channel mergeFrom = lookupChannelByLabel(loggedInUser, mergeFromLabel); Channel mergeTo = lookupChannelByLabel(loggedInUser, mergeToLabel); try { ChannelManager.verifyChannelAdmin(loggedInUser, mergeTo.getId()); } catch (InvalidChannelRoleException e) { LocalizationService ls = LocalizationService.getInstance(); throw new PermissionException(ls.getMessage( "frontend.xmlrpc.channels.software.merge.permsfailure", mergeTo.getLabel())); } List<Errata> differentErrata = new ArrayList<Errata>(); Set<Errata> toErrata = mergeTo.getErratas(); Set<Errata> fromErrata = mergeFrom.getErratas(); for (Errata errata : fromErrata) { if (!toErrata.contains(errata)) { differentErrata.add(errata); } } mergeTo.getErratas().addAll(differentErrata); ChannelFactory.save(mergeTo); return differentErrata.toArray(); } ... public Object[] mergePackages(String sessionKey, String mergeFromLabel, String mergeToLabel) { User loggedInUser = getLoggedInUser(sessionKey); channelAdminPermCheck(loggedInUser); Channel mergeFrom = lookupChannelByLabel(loggedInUser, mergeFromLabel); Channel mergeTo = lookupChannelByLabel(loggedInUser, mergeToLabel); try { ChannelManager.verifyChannelAdmin(loggedInUser, mergeTo.getId()); } catch (InvalidChannelRoleException e) { LocalizationService ls = LocalizationService.getInstance(); throw new PermissionException(ls.getMessage( "frontend.xmlrpc.channels.software.merge.permsfailure", mergeTo.getLabel())); } List<Package> differentPackages = new ArrayList<Package>(); Set<Package> toPacks = mergeTo.getPackages(); Set<Package> fromPacks = mergeFrom.getPackages(); for (Package pack : fromPacks) { if (!toPacks.contains(pack)) { differentPackages.add(pack); } } mergeTo.getPackages().addAll(differentPackages); ChannelFactory.save(mergeTo); ChannelManager.refreshWithNewestPackages(mergeTo, "api"); // Mark the affected channel to have it's metadata evaluated, where necessary // (RHEL5+, mostly) ChannelManager.queueChannelChange(mergeTo.getLabel(), "java::mergePackages", loggedInUser.getLogin()); return differentPackages.toArray(); } ... spacewalk-java-0.5.44/code/src/com/redhat/rhn/domain/channel/Channel.hbm.xml ... <set name="erratas" lazy="true" table="rhnChannelErrata" cascade="save-update"> <key column="channel_id"/> <many-to-many class="com.redhat.rhn.domain.errata.impl.PublishedErrata" column="errata_id"/> </set> ... Fixed errata set comparison. spacewalk.git: 78d901926272372b63c24e38636b690aba131c35 Verified in stage with Satellite-5.4.0-RHEL5-re20101025.0. The 5.4.0 RHN Satellite and RHN Proxy release has occurred. This issue has been resolved with this release. RHEA-2010:0801 - RHN Satellite Server 5.4.0 Upgrade https://rhn.redhat.com/rhn/errata/details/Details.do?eid=10332 RHEA-2010:0803 - RHN Tools enhancement update https://rhn.redhat.com/rhn/errata/details/Details.do?eid=10333 RHEA-2010:0802 - RHN Proxy Server 5.4.0 bug fix update https://rhn.redhat.com/rhn/errata/details/Details.do?eid=10334 RHEA-2010:0800 - RHN Satellite Server 5.4.0 https://rhn.redhat.com/rhn/errata/details/Details.do?eid=10335 Docs are available: http://docs.redhat.com/docs/en-US/Red_Hat_Network_Satellite/index.html Regards, Clifford |