java/code/src/com/redhat/rhn/common/db/datasource/xml/ErrataCache_queries.xml | 14 java/code/src/com/redhat/rhn/common/db/datasource/xml/Task_queries.xml | 159 -- java/code/src/com/redhat/rhn/frontend/action/systems/sdc/test/SystemOverviewActionTest.java | 2 java/code/src/com/redhat/rhn/frontend/action/systems/test/ErrataSetupActionTest.java | 2 java/code/src/com/redhat/rhn/frontend/xmlrpc/system/test/SystemHandlerTest.java | 2 java/code/src/com/redhat/rhn/manager/errata/cache/ErrataCacheManager.java | 18 java/code/src/com/redhat/rhn/manager/errata/cache/test/ErrataCacheManagerTest.java | 8 java/code/src/com/redhat/rhn/manager/system/test/SystemManagerTest.java | 4 java/code/src/com/redhat/rhn/testing/ServerTestUtils.java | 2 java/spacewalk-java.spec | 10 rel-eng/packages/spacewalk-java | 2 schema/spacewalk/common/tables/rhnServerNeededCache.sql | 9 schema/spacewalk/common/tables/tables.deps | 2 schema/spacewalk/oracle/packages/rhn_server.pkb | 4 schema/spacewalk/postgres/packages/rhn_server.pkb | 4 schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/016-update_needed_cache.sql.oracle | 766 --------- schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/016-update_needed_cache.sql.postgresql | 38 schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/034-rhnServerNeededCache-channel_id.sql.oracle | 9 schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/034-rhnServerNeededCache-channel_id.sql.postgresql | 12 schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/035-rhn_server.pkb.sql.oracle | 784 ++++++++++ schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/035-rhn_server.pkb.sql.postgresql | 40 21 files changed, 904 insertions(+), 987 deletions(-)
New commits: commit 10cf4382add92af6ee3b34def246be3827f638bf Author: Michael Mraka michael.mraka@redhat.com Date: Mon Nov 11 10:09:44 2013 +0100
Automatic commit of package [spacewalk-java] release [2.1.69-1].
diff --git a/java/spacewalk-java.spec b/java/spacewalk-java.spec index eafc9ca..3dae682 100644 --- a/java/spacewalk-java.spec +++ b/java/spacewalk-java.spec @@ -28,7 +28,7 @@ Name: spacewalk-java Summary: Spacewalk Java site packages Group: Applications/Internet License: GPLv2 -Version: 2.1.68 +Version: 2.1.69 Release: 1%{?dist} URL: https://fedorahosted.org/spacewalk Source0: https://fedorahosted.org/releases/s/p/spacewalk/%%7Bname%7D-%%7Bversion%7D.t... @@ -785,6 +785,14 @@ fi %{jardir}/postgresql-jdbc.jar
%changelog +* Mon Nov 11 2013 Michael Mraka michael.mraka@redhat.com 2.1.69-1 +- reuse rhnServerNeededCache for errataqueue_find_autoupdate_servers +- reuse rhnServerNeededCache content for ErrataMailer +- removed redundant insertNeededPackageCache() +- Prevent [available] deprecation message +- 1021552 - point to channel architecture listing API in + channel.software.create APIs + * Thu Nov 07 2013 Michael Mraka michael.mraka@redhat.com 2.1.68-1 - 1027050 - optimized system_config_files_with_diffs eleborator for PostgreSQL - 1027454 - fix ISE, when renaming channel to channel name already in use diff --git a/rel-eng/packages/spacewalk-java b/rel-eng/packages/spacewalk-java index 73e79e8..b842a3d 100644 --- a/rel-eng/packages/spacewalk-java +++ b/rel-eng/packages/spacewalk-java @@ -1 +1 @@ -2.1.68-1 java/ +2.1.69-1 java/
commit 5ccb0a0fee0a1b6d3e54b532d50035450eb8998c Author: Michael Mraka michael.mraka@redhat.com Date: Fri Nov 8 16:31:51 2013 +0100
reuse rhnServerNeededCache for errataqueue_find_autoupdate_servers
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Task_queries.xml b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Task_queries.xml index 310c20f..da191e2 100644 --- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Task_queries.xml +++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Task_queries.xml @@ -137,74 +137,16 @@ SELECT DISTINCT
<mode name="errataqueue_find_autoupdate_servers"> <query params="errata_id, channel_id"> -SELECT DISTINCT - S.id AS server_id, S.org_id org_id - FROM rhnServer S - JOIN ( --- -select rhnChannelErrata.errata_id, rhnChannelErrata.channel_id, rhnServerChannel.server_id, rhnErrataPackage.package_id -from rhnChannelErrata, rhnErrataPackage, rhnChannelNewestPackage, rhnPackageEVR, - rhnServerChannel, rhnServerPackage, rhnPackageUpgradeArchCompat -where rhnChannelErrata.errata_id = rhnErrataPackage.errata_id --- - and rhnChannelErrata.channel_id = rhnChannelNewestPackage.channel_id - and rhnErrataPackage.package_id = rhnChannelNewestPackage.package_id --- - and rhnChannelErrata.channel_id = rhnServerChannel.channel_id - and rhnChannelNewestPackage.name_id = rhnServerPackage.name_id - and rhnServerChannel.server_id = rhnServerPackage.server_id --- - and rhnChannelNewestPackage.evr_id = rhnPackageEVR.id --- - and rhnServerPackage.package_arch_id = rhnPackageUpgradeArchCompat.package_arch_id - and rhnPackageUpgradeArchCompat.package_upgrade_arch_id = rhnChannelNewestPackage.package_arch_id --- - and not exists ( - -- rule out records where channels with lower id exist == get min - select 1 from rhnChannelPackage cp, rhnServerChannel csc - where cp.channel_id = csc.channel_id - and rhnChannelNewestPackage.package_id = cp.package_id - and rhnServerChannel.server_id = csc.server_id - and cp.channel_id < rhnChannelNewestPackage.channel_id - and cp.channel_id = :channel_id --- ^ helping PostgreSQL 8.4 optimizer, see BZ#1022279 for details - ) - and not exists ( - -- rule out records where the server has the same package name with higher evr - select 1 from rhnServerPackage sp, rhnPackageEVR sevr, rhnPackageUpgradeArchCompat puac, - rhnErrataPackage jep, rhnPackage jp - where rhnServerPackage.server_id = sp.server_id - and rhnServerPackage.name_id = sp.name_id - and sp.evr_id = sevr.id - and rhnPackageEVR.evr <= sevr.evr - and rhnServerPackage.package_arch_id = puac.package_arch_id - and puac.package_upgrade_arch_id = sp.package_arch_id - and jep.errata_id = :errata_id and jep.package_id = jp.id and jp.name_id = sp.name_id --- ^ helping PostgreSQL 8.4 optimizer, see BZ#1022279 for details - ) - and not exists ( - -- rule out records where other channel provides the same package name with higher evr - select 1 from rhnServerChannel csc, rhnChannelNewestPackage ocnp, rhnPackageEVR oevr, rhnPackageUpgradeArchCompat puac - where rhnServerChannel.server_id = csc.server_id - and csc.channel_id = ocnp.channel_id - and rhnServerPackage.name_id = ocnp.name_id - and ocnp.evr_id = oevr.id - and rhnPackageEVR.evr < oevr.evr - and rhnServerPackage.package_arch_id = puac.package_arch_id - and puac.package_upgrade_arch_id = ocnp.package_arch_id - and csc.channel_id = :channel_id --- ^ helping PostgreSQL 8.4 optimizer, see BZ#1022279 for details - ) --- - ) SNV - on SNV.server_id = S.id - WHERE SNV.channel_id = :channel_id - AND SNV.errata_id = :errata_id - AND EXISTS - (SELECT 1 FROM rhnServerFeaturesView SFV WHERE - SFV.server_id = S.id AND SFV.label = 'ftr_auto_errata_updates') - AND UPPER(s.auto_update) = 'Y' -ORDER BY S.org_id +select distinct s.id as server_id , s.org_id + from rhnServerNeededCache snc + join rhnServer s + on s.id = snc.server_id + where snc.channel_id = :channel_id + and snc.errata_id = :errata_id + and upper(s.auto_update) = 'Y' + and exists (select 1 from rhnServerFeaturesView sfv + where sfv.server_id = S.id and sfv.label = 'ftr_auto_errata_updates') +order by s.org_id </query> </mode>
commit 6ee6d388e4562005333d2293086f02449782a7f1 Author: Michael Mraka michael.mraka@redhat.com Date: Fri Nov 8 16:26:07 2013 +0100
reuse rhnServerNeededCache content for ErrataMailer
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Task_queries.xml b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Task_queries.xml index 214608f..310c20f 100644 --- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Task_queries.xml +++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Task_queries.xml @@ -501,76 +501,17 @@ ORDER BY next_action DESC
<mode name="erratamailer_get_relevant_servers"> <query params="errata_id,org_id, channel_id"> - SELECT DISTINCT snv.server_id AS server_id, S.name, S.release, SA.name as arch, - urn.user_id - FROM ( --- -select rhnChannelErrata.errata_id, rhnChannelErrata.channel_id, rhnServerChannel.server_id, rhnErrataPackage.package_id -from rhnChannelErrata, rhnErrataPackage, rhnChannelNewestPackage, rhnPackageEVR, - rhnServerChannel, rhnServerPackage, rhnPackageUpgradeArchCompat -where rhnChannelErrata.errata_id = rhnErrataPackage.errata_id --- - and rhnChannelErrata.channel_id = rhnChannelNewestPackage.channel_id - and rhnErrataPackage.package_id = rhnChannelNewestPackage.package_id --- - and rhnChannelErrata.channel_id = rhnServerChannel.channel_id - and rhnChannelNewestPackage.name_id = rhnServerPackage.name_id - and rhnServerChannel.server_id = rhnServerPackage.server_id --- - and rhnChannelNewestPackage.evr_id = rhnPackageEVR.id --- - and rhnServerPackage.package_arch_id = rhnPackageUpgradeArchCompat.package_arch_id - and rhnPackageUpgradeArchCompat.package_upgrade_arch_id = rhnChannelNewestPackage.package_arch_id --- - and not exists ( - -- rule out records where channels with lower id exist == get min - select 1 from rhnChannelPackage cp, rhnServerChannel csc - where cp.channel_id = csc.channel_id - and rhnChannelNewestPackage.package_id = cp.package_id - and rhnServerChannel.server_id = csc.server_id - and cp.channel_id < rhnChannelNewestPackage.channel_id - and cp.channel_id = :channel_id --- ^ helping PostgreSQL 8.4 optimizer, see BZ#1024395 for details - ) - and not exists ( - -- rule out records where the server has the same package name with higher evr - select 1 from rhnServerPackage sp, rhnPackageEVR sevr, rhnPackageUpgradeArchCompat puac, - rhnErrataPackage jep, rhnPackage jp - where rhnServerPackage.server_id = sp.server_id - and rhnServerPackage.name_id = sp.name_id - and sp.evr_id = sevr.id - and rhnPackageEVR.evr <= sevr.evr - and rhnServerPackage.package_arch_id = puac.package_arch_id - and puac.package_upgrade_arch_id = sp.package_arch_id - and jep.errata_id = :errata_id and jep.package_id = jp.id and jp.name_id = sp.name_id --- ^ helping PostgreSQL 8.4 optimizer, see BZ#1024395 for details - ) - and not exists ( - -- rule out records where other channel provides the same package name with higher evr - select 1 from rhnServerChannel csc, rhnChannelNewestPackage ocnp, rhnPackageEVR oevr, rhnPackageUpgradeArchCompat puac - where rhnServerChannel.server_id = csc.server_id - and csc.channel_id = ocnp.channel_id - and rhnServerPackage.name_id = ocnp.name_id - and ocnp.evr_id = oevr.id - and rhnPackageEVR.evr < oevr.evr - and rhnServerPackage.package_arch_id = puac.package_arch_id - and puac.package_upgrade_arch_id = ocnp.package_arch_id - and csc.channel_id = :channel_id --- ^ helping PostgreSQL 8.4 optimizer, see BZ#1024395 for details - ) --- - ) snv - JOIN rhnUserReceiveNotifications urn - ON snv.server_id = urn.server_id - JOIN rhnServerChannel sc - ON sc.server_id = snv.server_id - JOIN rhnServer S - ON S.id = SC.server_id - JOIN rhnServerArch sa - ON s.server_arch_id = sa.id - WHERE sc.channel_id = :channel_id - AND snv.errata_id = :errata_id - AND S.org_id = :org_id +select distinct s.id as server_id, s.name, s.release, sa.name as arch, urn.user_id + from rhnServerNeededCache snc + join rhnServer s + on snc.server_id = s.id + join rhnServerArch sa + on s.server_arch_id = sa.id + join rhnUserReceiveNotifications urn + on urn.server_id = snc.server_id +where snc.errata_id = :errata_id + and snc.channel_id = :channel_id + and s.org_id = :org_id </query> </mode>
commit 83f3e48dba6f4e4acd7c7ea7087f07d0f436050b Author: Michael Mraka michael.mraka@redhat.com Date: Fri Nov 8 16:22:11 2013 +0100
schema upgrade for rhnServerNeededCache
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/016-update_needed_cache.sql.oracle b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/016-update_needed_cache.sql.oracle deleted file mode 100644 index 4b51dd2..0000000 --- a/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/016-update_needed_cache.sql.oracle +++ /dev/null @@ -1,766 +0,0 @@ -create or replace -package body rhn_server -is - function system_service_level( - server_id_in in number, - service_level_in in varchar2 - ) return number is - - cursor ents is - select label from rhnServerEntitlementView - where server_id = server_id_in; - - retval number := 0; - - begin - for ent in ents loop - retval := rhn_entitlements.entitlement_grants_service (ent.label, service_level_in); - if retval = 1 then - return retval; - end if; - end loop; - - return retval; - - end system_service_level; - - - function can_change_base_channel(server_id_in IN NUMBER) - return number - is - throwaway number; - begin - -- the idea: if we get past this query, the server is - -- neither sat nor proxy, so base channel is changeable - - select 1 into throwaway - from rhnServer S - where S.id = server_id_in - and not exists (select 1 from rhnSatelliteInfo SI where SI.server_id = S.id) - and not exists (select 1 from rhnProxyInfo PI where PI.server_id = S.id); - - return 1; - exception - when no_data_found - then - return 0; - end can_change_base_channel; - - procedure set_custom_value( - server_id_in in number, - user_id_in in number, - key_label_in in varchar2, - value_in in varchar2 - ) is - key_id_val number; - begin - select CDK.id into key_id_val - from rhnCustomDataKey CDK, - rhnServer S - where S.id = server_id_in - and S.org_id = CDK.org_id - and CDK.label = key_label_in; - - begin - insert into rhnServerCustomDataValue (server_id, key_id, value, created_by, last_modified_by) - values (server_id_in, key_id_val, value_in, user_id_in, user_id_in); - exception - when DUP_VAL_ON_INDEX - then - update rhnServerCustomDataValue - set value = value_in, - last_modified_by = user_id_in - where server_id = server_id_in - and key_id = key_id_val; - end; - - end set_custom_value; - - function bulk_set_custom_value( - key_label_in in varchar2, - value_in in varchar2, - set_label_in in varchar2, - set_uid_in in number - ) - return integer - is - i integer := 0; - begin - i := 0; - for server in ( - SELECT user_id, label, element, element_two - FROM rhnSet - WHERE label = set_label_in - AND user_id = set_uid_in - ) loop - if rhn_server.system_service_level(server.element, 'provisioning') = 1 then - rhn_server.set_custom_value(server.element, set_uid_in, key_label_in, value_in); - i := i + 1; - end if; - end loop server; - return i; - end bulk_set_custom_value; - - procedure bulk_snapshot_tag( - org_id_in in number, - tagname_in in varchar2, - set_label_in in varchar2, - set_uid_in in number - ) is - snapshot_id number; - begin - for server in ( - SELECT user_id, label, element, element_two - FROM rhnSet - WHERE label = set_label_in - AND user_id = set_uid_in - ) loop - if rhn_server.system_service_level(server.element, 'provisioning') = 1 then - begin - select max(id) into snapshot_id - from rhnSnapshot - where server_id = server.element; - exception - when NO_DATA_FOUND then - rhn_server.snapshot_server(server.element, 'tagging system: ' || tagname_in); - - select max(id) into snapshot_id - from rhnSnapshot - where server_id = server.element; - end; - - -- now have a snapshot_id to work with... - begin - rhn_server.tag_snapshot(snapshot_id, org_id_in, tagname_in); - exception - when DUP_VAL_ON_INDEX - then - -- do nothing, be forgiving... - null; - end; - end if; - end loop server; - end bulk_snapshot_tag; - - procedure tag_delete( - server_id_in in number, - tag_id_in in number - ) is - cursor snapshots is - select snapshot_id - from rhnSnapshotTag - where tag_id = tag_id_in; - tag_id_tmp number; - begin - select id into tag_id_tmp - from rhnTag - where id = tag_id_in - for update; - - delete - from rhnSnapshotTag - where server_id = server_id_in - and tag_id = tag_id_in; - for snapshot in snapshots loop - return; - end loop; - delete - from rhnTag - where id = tag_id_in; - end tag_delete; - - procedure tag_snapshot( - snapshot_id_in in number, - org_id_in in number, - tagname_in in varchar2 - ) is - begin - insert into rhnSnapshotTag (snapshot_id, server_id, tag_id) - select snapshot_id_in, server_id, lookup_tag(org_id_in, tagname_in) - from rhnSnapshot - where id = snapshot_id_in; - end tag_snapshot; - - procedure bulk_snapshot( - reason_in in varchar2, - set_label_in in varchar2, - set_uid_in in number - ) is - begin - for server in ( - SELECT user_id, label, element, element_two - FROM rhnSet - WHERE label = set_label_in - AND user_id = set_uid_in - ) loop - if rhn_server.system_service_level(server.element, 'provisioning') = 1 then - rhn_server.snapshot_server(server.element, reason_in); - end if; - end loop server; - end bulk_snapshot; - - procedure snapshot_server( - server_id_in in number, - reason_in in varchar2 - ) is - snapshot_id number; - cursor revisions is - select distinct - cr.id - from rhnConfigRevision cr, - rhnConfigFileName cfn, - rhnConfigFile cf, - rhnConfigChannel cc, - rhnServerConfigChannel scc - where 1=1 - and scc.server_id = server_id_in - and scc.config_channel_id = cc.id - and cc.id = cf.config_channel_id - and cf.id = cr.config_file_id - and cr.id = cf.latest_config_revision_id - and cf.config_file_name_id = cfn.id - and cf.id = lookup_first_matching_cf(scc.server_id, cfn.path); - locked integer; - begin - select rhn_snapshot_id_seq.nextval into snapshot_id from dual; - - insert into rhnSnapshot (id, org_id, server_id, reason) ( - select snapshot_id, - s.org_id, - server_id_in, - reason_in - from rhnServer s - where s.id = server_id_in - ); - insert into rhnSnapshotChannel (snapshot_id, channel_id) ( - select snapshot_id, sc.channel_id - from rhnServerChannel sc - where sc.server_id = server_id_in - ); - insert into rhnSnapshotServerGroup (snapshot_id, server_group_id) ( - select snapshot_id, sgm.server_group_id - from rhnServerGroupMembers sgm - where sgm.server_id = server_id_in - ); - locked := 0; - while true loop - begin - insert into rhnPackageNEVRA (id, name_id, evr_id, package_arch_id) - select rhn_pkgnevra_id_seq.nextval, sp.name_id, sp.evr_id, sp.package_arch_id - from rhnServerPackage sp - where sp.server_id = server_id_in - and not exists - (select 1 - from rhnPackageNEVRA nevra - where nevra.name_id = sp.name_id - and nevra.evr_id = sp.evr_id - and (nevra.package_arch_id = sp.package_arch_id - or (nevra.package_arch_id is null - and sp.package_arch_id is null))); - exit; - exception when dup_val_on_index then - if locked = 1 then - raise; - else - lock table rhnPackageNEVRA in exclusive mode; - locked := 1; - end if; - end; - end loop; - insert into rhnSnapshotPackage (snapshot_id, nevra_id) ( - select distinct snapshot_id, nevra.id - from rhnServerPackage sp, rhnPackageNEVRA nevra - where sp.server_id = server_id_in - and nevra.name_id = sp.name_id - and nevra.evr_id = sp.evr_id - and (nevra.package_arch_id = sp.package_arch_id - or (nevra.package_arch_id is null - and sp.package_arch_id is null)) - ); - - insert into rhnSnapshotConfigChannel ( snapshot_id, config_channel_id ) ( - select snapshot_id, scc.config_channel_id - from rhnServerConfigChannel scc - where server_id = server_id_in - ); - - for revision in revisions loop - insert into rhnSnapshotConfigRevision ( - snapshot_id, config_revision_id - ) values ( - snapshot_id, revision.id - ); - end loop; - end snapshot_server; - - procedure remove_action( - server_id_in in number, - action_id_in in number - ) is - -- this really wants "nulls last", but 8.1.7.3.0 sucks ass. - -- instead, we make a local table that holds our - -- list of ids with null prereqs. There's surely a better way - -- (an array instead of a table maybe? who knows...) - -- but I've got code to do this handy that I can look at ;) - cursor chained_actions is - select id, prerequisite - from rhnAction - start with id = action_id_in - connect by prior id = prerequisite - order by prerequisite desc; - cursor sessions is - select s.id - from rhnKickstartSession s - where server_id_in in (s.old_server_id, s.new_server_id) - and s.action_id = action_id_in - and not exists ( - select 1 - from rhnKickstartSessionState ss - where ss.id = s.state_id - and ss.label in ('failed','complete') - ); - type chain_end_type is table of number index by binary_integer; - chain_ends chain_end_type; - i number; - prereq number := 1; - begin - select prerequisite - into prereq - from rhnAction - where id = action_id_in; - - if prereq is not null then - rhn_exception.raise_exception('action_is_child'); - end if; - - i := 0; - for action in chained_actions loop - if action.prerequisite is null then - chain_ends(i) := action.id; - i := i + 1; - else - delete from rhnServerAction - where server_id = server_id_in - and action_id = action.id; - end if; - end loop; - i := chain_ends.first; - while i is not null loop - delete from rhnServerAction - where server_id = server_id_in - and action_id = chain_ends(i); - i := chain_ends.next(i); - end loop; - for s in sessions loop - update rhnKickstartSession - set state_id = ( - select id - from rhnKickstartSessionState - where label = 'failed' - ), - action_id = null - where id = s.id; - set_ks_session_history_message(s.id, 'failed', 'Kickstart cancelled due to action removal'); - end loop; - end remove_action; - - function check_user_access(server_id_in in number, user_id_in in number) - return number - is - has_access number; - begin - -- first check; if this returns no rows, then the server/user are in different orgs, and we bail - select 1 into has_access - from rhnServer S, - web_contact wc - where wc.org_id = s.org_id - and s.id = server_id_in - and wc.id = user_id_in; - - -- okay, so they're in the same org. if we have an org admin, they get a free pass - if rhn_user.check_role(user_id_in, 'org_admin') = 1 - then - return 1; - end if; - - select 1 into has_access - from rhnServerGroupMembers SGM, - rhnUserServerGroupPerms USG - where SGM.server_group_id = USG.server_group_id - and SGM.server_id = server_id_in - and USG.user_id = user_id_in - and rownum = 1; - - return 1; - exception - when no_data_found - then - return 0; - end check_user_access; - - -- ******************************************************************* - -- FUNCTION: can_server_consume_virt_slot - -- Returns 1 if the server id is eligible to consume a virtual slot, - -- else returns 0. - -- Called by: insert_into_servergroup, delete_from_servergroup - -- ******************************************************************* - function can_server_consume_virt_slot(server_id_in in number, - group_type_in in - rhnServerGroupType.label%TYPE) - return number - is - - cursor server_virt_slots is - select vi.VIRTUAL_SYSTEM_ID - from - rhnVirtualInstance vi - where - -- server id is a virtual instance - vi.VIRTUAL_SYSTEM_ID = server_id_in - -- server id's host is virt entitled - and exists ( select 1 - from rhnServerEntitlementView sev - where vi.HOST_SYSTEM_ID = sev.server_id - and sev.label in ('virtualization_host', - 'virtualization_host_platform') ) - -- server id's host also has the ent we want - and exists ( select 1 - from rhnServerEntitlementView sev2 - where vi.HOST_SYSTEM_ID = sev2.server_id - and sev2.label = group_type_in ); - - begin - for server_virt_slot in server_virt_slots loop - return 1; - end loop; - return 0; - end can_server_consume_virt_slot; - - - procedure insert_into_servergroup ( - server_id_in in number, - server_group_id_in in number - ) is - used_slots number; - max_slots number; - org_id number; - mgmt_available number; - mgmt_upgrade number; - mgmt_sgid number; - prov_available number; - prov_upgrade number; - prov_sgid number; - group_label rhnServerGroupType.label%TYPE; - group_type number; - begin - -- frist, group_type = null, because it's easy... - - -- this will rowlock the servergroup we're trying to change; - -- we probably need to lock the other one, but I think the chances - -- of it being a real issue are very small for now... - select sg.group_type, sg.org_id, sg.current_members, sg.max_members - into group_type, org_id, used_slots, max_slots - from rhnServerGroup sg - where sg.id = server_group_id_in - for update of sg.current_members; - - if group_type is null then - if used_slots >= max_slots then - rhn_exception.raise_exception('servergroup_max_members'); - end if; - - insert into rhnServerGroupMembers( - server_id, server_group_id - ) values ( - server_id_in, server_group_id_in - ); - update rhnServerGroup - set current_members = current_members + 1 - where id = server_group_id_in; - - rhn_cache.update_perms_for_server_group(server_group_id_in); - return; - end if; - - -- now for group_type != null - -- - select label - into group_label - from rhnServerGroupType sgt - where sgt.id = group_type; - - -- the naive easy path that gets hit most often and has to be quickest. - if group_label in ('sw_mgr_entitled', - 'enterprise_entitled', - 'monitoring_entitled', - 'provisioning_entitled', - 'virtualization_host', - 'virtualization_host_platform') then - if used_slots >= max_slots and - (can_server_consume_virt_slot(server_id_in, group_label) != 1) - then - rhn_exception.raise_exception('servergroup_max_members'); - end if; - - insert into rhnServerGroupMembers( - server_id, server_group_id - ) values ( - server_id_in, server_group_id_in - ); - - -- Only update current members if the system in consuming a - -- physical slot. - if can_server_consume_virt_slot(server_id_in, group_label) = 0 then - update rhnServerGroup - set current_members = current_members + 1 - where id = server_group_id_in; - end if; - - return; - end if; - end; - - function insert_into_servergroup_maybe ( - server_id_in in number, - server_group_id_in in number - ) return number is - retval number := 0; - cursor servergroups is - select s.id server_id, - sg.id server_group_id - from rhnServerGroup sg, - rhnServer s - where s.id = server_id_in - and sg.id = server_group_id_in - and s.org_id = sg.org_id - and not exists ( - select 1 - from rhnServerGroupMembers sgm - where sgm.server_id = s.id - and sgm.server_group_id = sg.id - ); - begin - for sgm in servergroups loop - rhn_server.insert_into_servergroup(sgm.server_id, sgm.server_group_id); - retval := retval + 1; - end loop; - return retval; - end insert_into_servergroup_maybe; - - procedure insert_set_into_servergroup ( - server_group_id_in in number, - user_id_in in number, - set_label_in in varchar2 - ) is - cursor servers is - select st.element id - from rhnSet st - where st.user_id = user_id_in - and st.label = set_label_in - and exists ( - select 1 - from rhnUserManagedServerGroups umsg - where umsg.server_group_id = server_group_id_in - and umsg.user_id = user_id_in - ) - and not exists ( - select 1 - from rhnServerGroupMembers sgm - where sgm.server_id = st.element - and sgm.server_group_id = server_group_id_in - ); - begin - for s in servers loop - rhn_server.insert_into_servergroup(s.id, server_group_id_in); - end loop; - end insert_set_into_servergroup; - - procedure delete_from_servergroup ( - server_id_in in number, - server_group_id_in in number - ) is - cursor server_virt_groups is - select 1 - from rhnServerEntitlementVirtual sev - where sev.server_id = server_id_in - and sev.server_group_id = server_group_id_in; - - oid number; - mgmt_sgid number; - label rhnServerGroupType.label%TYPE; - group_type number; - begin - begin - select sg.group_type, sg.org_id - into group_type, oid - from rhnServerGroupMembers sgm, - rhnServerGroup sg - where sg.id = server_group_id_in - and sg.id = sgm.server_group_id - and sgm.server_id = server_id_in - for update of sg.current_members; - exception - when no_data_found then - rhn_exception.raise_exception('server_not_in_group'); - end; - - -- do group_type is null first - if group_type is null then - delete from rhnServerGroupMembers - where server_group_id = server_group_id_in - and server_id = server_id_in; - update rhnServerGroup - set current_members = current_members - 1 - where id = server_group_id_in; - rhn_cache.update_perms_for_server_group(server_group_id_in); - return; - end if; - - select sgt.label - into label - from rhnServerGroupType sgt - where sgt.id = group_type; - - if label in ('sw_mgr_entitled', - 'enterprise_entitled', - 'provisioning_entitled', - 'monitoring_entitled', - 'virtualization_host', - 'virtualization_host_platform') then - - -- Only update current members if the system is consuming - -- a physical slot. - for server_virt_group in server_virt_groups loop - delete from rhnServerGroupMembers - where server_group_id = server_group_id_in - and server_id = server_id_in; - return; - end loop; - - delete from rhnServerGroupMembers - where server_group_id = server_group_id_in - and server_id = server_id_in; - - update rhnServerGroup - set current_members = current_members - 1 - where id = server_group_id_in; - - end if; - end; - - procedure delete_set_from_servergroup ( - server_group_id_in in number, - user_id_in in number, - set_label_in in varchar2 - ) is - cursor servergroups is - select sgm.server_id, sgm.server_group_id - from rhnSet st, - rhnServerGroupMembers sgm - where sgm.server_group_id = server_group_id_in - and st.user_id = user_id_in - and st.label = set_label_in - and sgm.server_id = st.element - and exists ( - select 1 - from rhnUserManagedServerGroups usgp - where usgp.server_group_id = server_group_id_in - and usgp.user_id = user_id_in - ); - begin - for sgm in servergroups loop - rhn_server.delete_from_servergroup(sgm.server_id, server_group_id_in); - end loop; - end delete_set_from_servergroup; - - procedure clear_servergroup ( - server_group_id_in in number - ) is - cursor servers is - select sgm.server_id id - from rhnServerGroupMembers sgm - where sgm.server_group_id = server_group_id_in; - begin - for s in servers loop - rhn_server.delete_from_servergroup(s.id, server_group_id_in); - end loop; - end clear_servergroup; - - procedure delete_from_org_servergroups ( - server_id_in in number - ) is - cursor servergroups is - select sgm.server_group_id id - from rhnServerGroup sg, - rhnServerGroupMembers sgm - where sgm.server_id = server_id_in - and sgm.server_group_id = sg.id - and sg.group_type is null; - begin - for sg in servergroups loop - rhn_server.delete_from_servergroup(server_id_in, sg.id); - end loop; - end delete_from_org_servergroups; - - function get_ip_address ( - server_id_in in number - ) return varchar2 is - cursor interfaces is - select ni.name as name, na4.address as address - from rhnServerNetInterface ni, - rhnServerNetAddress4 na4 - where ni.server_id = server_id_in - and ni.id = na4.interface_id - and na4.address != '127.0.0.1'; - cursor addresses is - select ipaddr ip_addr - from rhnServerNetwork - where server_id = server_id_in - and ipaddr != '127.0.0.1'; - begin - for addr in addresses loop - return addr.ip_addr; - end loop; - for iface in interfaces loop - return iface.address; - end loop; - return NULL; - end get_ip_address; - - procedure update_needed_cache(server_id_in in number) - is - begin - delete from rhnServerNeededCache - where server_id = server_id_in; - insert into rhnServerNeededCache - (server_id, errata_id, package_id) - (select distinct sp.server_id, x.errata_id, p.id - FROM (SELECT sp_sp.server_id, sp_sp.name_id, - sp_sp.package_arch_id, max(sp_pe.evr) AS max_evr - FROM rhnServerPackage sp_sp - join rhnPackageEvr sp_pe ON sp_pe.id = sp_sp.evr_id - GROUP BY sp_sp.server_id, sp_sp.name_id, sp_sp.package_arch_id) sp - join rhnPackage p ON p.name_id = sp.name_id - join rhnPackageEvr pe ON pe.id = p.evr_id - AND sp.max_evr < pe.evr - join rhnPackageUpgradeArchCompat puac - ON puac.package_arch_id = sp.package_arch_id - AND puac.package_upgrade_arch_id = p.package_arch_id - join rhnServerChannel sc ON sc.server_id = sp.server_id - join rhnChannelPackage cp ON cp.package_id = p.id - AND cp.channel_id = sc.channel_id - left join (SELECT ep.errata_id, ce.channel_id, ep.package_id - FROM rhnChannelErrata ce - join rhnErrataPackage ep - ON ep.errata_id = ce.errata_id - join rhnServerChannel sc_sc - ON sc_sc.channel_id = ce.channel_id - WHERE sc_sc.server_id = server_id_in) x - ON x.channel_id = sc.channel_id - AND x.package_id = cp.package_id - where sp.server_id = server_id_in); - end update_needed_cache; - -end rhn_server; -/ -SHOW ERRORS diff --git a/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/016-update_needed_cache.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/016-update_needed_cache.sql.postgresql deleted file mode 100644 index fe25877..0000000 --- a/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/016-update_needed_cache.sql.postgresql +++ /dev/null @@ -1,38 +0,0 @@ --- oracle equivalent source sha1 f25ddbc3be234dcb076a4f9e52949d955f5e7e15 - -update pg_settings set setting = 'rhn_server,' || setting where name = 'search_path'; - - create or replace function update_needed_cache( - server_id_in in numeric - ) returns void as $$ - begin - delete from rhnServerNeededCache - where server_id = server_id_in; - insert into rhnServerNeededCache - (server_id, errata_id, package_id) - (select distinct sp.server_id, x.errata_id, p.id - FROM (SELECT sp_sp.server_id, sp_sp.name_id, - sp_sp.package_arch_id, max(sp_pe.evr) AS max_evr - FROM rhnServerPackage sp_sp - join rhnPackageEvr sp_pe ON sp_pe.id = sp_sp.evr_id - GROUP BY sp_sp.server_id, sp_sp.name_id, sp_sp.package_arch_id) sp - join rhnPackage p ON p.name_id = sp.name_id - join rhnPackageEvr pe ON pe.id = p.evr_id AND sp.max_evr < pe.evr - join rhnPackageUpgradeArchCompat puac - ON puac.package_arch_id = sp.package_arch_id - AND puac.package_upgrade_arch_id = p.package_arch_id - join rhnServerChannel sc ON sc.server_id = sp.server_id - join rhnChannelPackage cp ON cp.package_id = p.id - AND cp.channel_id = sc.channel_id - left join (SELECT ep.errata_id, ce.channel_id, ep.package_id - FROM rhnChannelErrata ce - join rhnErrataPackage ep - ON ep.errata_id = ce.errata_id - join rhnServerChannel sc_sc - ON sc_sc.channel_id = ce.channel_id - WHERE sc_sc.server_id = server_id_in) x - ON x.channel_id = sc.channel_id AND x.package_id = cp.package_id - where sp.server_id = server_id_in); - end$$ language plpgsql; - -update pg_settings set setting = overlay( setting placing '' from 1 for (length('rhn_server')+1) ) where name = 'search_path'; diff --git a/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/034-rhnServerNeededCache-channel_id.sql.oracle b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/034-rhnServerNeededCache-channel_id.sql.oracle new file mode 100644 index 0000000..92555a5 --- /dev/null +++ b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/034-rhnServerNeededCache-channel_id.sql.oracle @@ -0,0 +1,9 @@ +ALTER TABLE rhnServerNeededCache ADD + channel_id NUMBER + CONSTRAINT rhn_sncp_cid_fk + REFERENCES rhnChannel (id) + ON DELETE CASCADE; + +CREATE INDEX rhn_snc_cid_idx + ON rhnServerNeededCache (channel_id) + NOLOGGING; diff --git a/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/034-rhnServerNeededCache-channel_id.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/034-rhnServerNeededCache-channel_id.sql.postgresql new file mode 100644 index 0000000..121a1b8 --- /dev/null +++ b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/034-rhnServerNeededCache-channel_id.sql.postgresql @@ -0,0 +1,12 @@ +-- oracle equivalent source sha1 be9ef654294e2f657114e022aadfea74737ba54e + + +ALTER TABLE rhnServerNeededCache ADD + channel_id NUMERIC + CONSTRAINT rhn_sncp_cid_fk + REFERENCES rhnChannel (id) + ON DELETE CASCADE; + +CREATE INDEX rhn_snc_cid_idx + ON rhnServerNeededCache (channel_id) + ; diff --git a/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/035-rhn_server.pkb.sql.oracle b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/035-rhn_server.pkb.sql.oracle new file mode 100644 index 0000000..f077bae --- /dev/null +++ b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/035-rhn_server.pkb.sql.oracle @@ -0,0 +1,784 @@ +-- +-- Copyright (c) 2008--2012 Red Hat, Inc. +-- +-- This software is licensed to you under the GNU General Public License, +-- version 2 (GPLv2). There is NO WARRANTY for this software, express or +-- implied, including the implied warranties of MERCHANTABILITY or FITNESS +-- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2 +-- along with this software; if not, see +-- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. +-- +-- Red Hat trademarks are not licensed under GPLv2. No permission is +-- granted to use or replicate Red Hat trademarks that are incorporated +-- in this software or its documentation. +-- +-- +-- +-- + +create or replace +package body rhn_server +is + function system_service_level( + server_id_in in number, + service_level_in in varchar2 + ) return number is + + cursor ents is + select label from rhnServerEntitlementView + where server_id = server_id_in; + + retval number := 0; + + begin + for ent in ents loop + retval := rhn_entitlements.entitlement_grants_service (ent.label, service_level_in); + if retval = 1 then + return retval; + end if; + end loop; + + return retval; + + end system_service_level; + + + function can_change_base_channel(server_id_in IN NUMBER) + return number + is + throwaway number; + begin + -- the idea: if we get past this query, the server is + -- neither sat nor proxy, so base channel is changeable + + select 1 into throwaway + from rhnServer S + where S.id = server_id_in + and not exists (select 1 from rhnSatelliteInfo SI where SI.server_id = S.id) + and not exists (select 1 from rhnProxyInfo PI where PI.server_id = S.id); + + return 1; + exception + when no_data_found + then + return 0; + end can_change_base_channel; + + procedure set_custom_value( + server_id_in in number, + user_id_in in number, + key_label_in in varchar2, + value_in in varchar2 + ) is + key_id_val number; + begin + select CDK.id into key_id_val + from rhnCustomDataKey CDK, + rhnServer S + where S.id = server_id_in + and S.org_id = CDK.org_id + and CDK.label = key_label_in; + + begin + insert into rhnServerCustomDataValue (server_id, key_id, value, created_by, last_modified_by) + values (server_id_in, key_id_val, value_in, user_id_in, user_id_in); + exception + when DUP_VAL_ON_INDEX + then + update rhnServerCustomDataValue + set value = value_in, + last_modified_by = user_id_in + where server_id = server_id_in + and key_id = key_id_val; + end; + + end set_custom_value; + + function bulk_set_custom_value( + key_label_in in varchar2, + value_in in varchar2, + set_label_in in varchar2, + set_uid_in in number + ) + return integer + is + i integer := 0; + begin + i := 0; + for server in ( + SELECT user_id, label, element, element_two + FROM rhnSet + WHERE label = set_label_in + AND user_id = set_uid_in + ) loop + if rhn_server.system_service_level(server.element, 'provisioning') = 1 then + rhn_server.set_custom_value(server.element, set_uid_in, key_label_in, value_in); + i := i + 1; + end if; + end loop server; + return i; + end bulk_set_custom_value; + + procedure bulk_snapshot_tag( + org_id_in in number, + tagname_in in varchar2, + set_label_in in varchar2, + set_uid_in in number + ) is + snapshot_id number; + begin + for server in ( + SELECT user_id, label, element, element_two + FROM rhnSet + WHERE label = set_label_in + AND user_id = set_uid_in + ) loop + if rhn_server.system_service_level(server.element, 'provisioning') = 1 then + begin + select max(id) into snapshot_id + from rhnSnapshot + where server_id = server.element; + exception + when NO_DATA_FOUND then + rhn_server.snapshot_server(server.element, 'tagging system: ' || tagname_in); + + select max(id) into snapshot_id + from rhnSnapshot + where server_id = server.element; + end; + + -- now have a snapshot_id to work with... + begin + rhn_server.tag_snapshot(snapshot_id, org_id_in, tagname_in); + exception + when DUP_VAL_ON_INDEX + then + -- do nothing, be forgiving... + null; + end; + end if; + end loop server; + end bulk_snapshot_tag; + + procedure tag_delete( + server_id_in in number, + tag_id_in in number + ) is + cursor snapshots is + select snapshot_id + from rhnSnapshotTag + where tag_id = tag_id_in; + tag_id_tmp number; + begin + select id into tag_id_tmp + from rhnTag + where id = tag_id_in + for update; + + delete + from rhnSnapshotTag + where server_id = server_id_in + and tag_id = tag_id_in; + for snapshot in snapshots loop + return; + end loop; + delete + from rhnTag + where id = tag_id_in; + end tag_delete; + + procedure tag_snapshot( + snapshot_id_in in number, + org_id_in in number, + tagname_in in varchar2 + ) is + begin + insert into rhnSnapshotTag (snapshot_id, server_id, tag_id) + select snapshot_id_in, server_id, lookup_tag(org_id_in, tagname_in) + from rhnSnapshot + where id = snapshot_id_in; + end tag_snapshot; + + procedure bulk_snapshot( + reason_in in varchar2, + set_label_in in varchar2, + set_uid_in in number + ) is + begin + for server in ( + SELECT user_id, label, element, element_two + FROM rhnSet + WHERE label = set_label_in + AND user_id = set_uid_in + ) loop + if rhn_server.system_service_level(server.element, 'provisioning') = 1 then + rhn_server.snapshot_server(server.element, reason_in); + end if; + end loop server; + end bulk_snapshot; + + procedure snapshot_server( + server_id_in in number, + reason_in in varchar2 + ) is + snapshot_id number; + cursor revisions is + select distinct + cr.id + from rhnConfigRevision cr, + rhnConfigFileName cfn, + rhnConfigFile cf, + rhnConfigChannel cc, + rhnServerConfigChannel scc + where 1=1 + and scc.server_id = server_id_in + and scc.config_channel_id = cc.id + and cc.id = cf.config_channel_id + and cf.id = cr.config_file_id + and cr.id = cf.latest_config_revision_id + and cf.config_file_name_id = cfn.id + and cf.id = lookup_first_matching_cf(scc.server_id, cfn.path); + locked integer; + begin + select rhn_snapshot_id_seq.nextval into snapshot_id from dual; + + insert into rhnSnapshot (id, org_id, server_id, reason) ( + select snapshot_id, + s.org_id, + server_id_in, + reason_in + from rhnServer s + where s.id = server_id_in + ); + insert into rhnSnapshotChannel (snapshot_id, channel_id) ( + select snapshot_id, sc.channel_id + from rhnServerChannel sc + where sc.server_id = server_id_in + ); + insert into rhnSnapshotServerGroup (snapshot_id, server_group_id) ( + select snapshot_id, sgm.server_group_id + from rhnServerGroupMembers sgm + where sgm.server_id = server_id_in + ); + locked := 0; + while true loop + begin + insert into rhnPackageNEVRA (id, name_id, evr_id, package_arch_id) + select rhn_pkgnevra_id_seq.nextval, sp.name_id, sp.evr_id, sp.package_arch_id + from rhnServerPackage sp + where sp.server_id = server_id_in + and not exists + (select 1 + from rhnPackageNEVRA nevra + where nevra.name_id = sp.name_id + and nevra.evr_id = sp.evr_id + and (nevra.package_arch_id = sp.package_arch_id + or (nevra.package_arch_id is null + and sp.package_arch_id is null))); + exit; + exception when dup_val_on_index then + if locked = 1 then + raise; + else + lock table rhnPackageNEVRA in exclusive mode; + locked := 1; + end if; + end; + end loop; + insert into rhnSnapshotPackage (snapshot_id, nevra_id) ( + select distinct snapshot_id, nevra.id + from rhnServerPackage sp, rhnPackageNEVRA nevra + where sp.server_id = server_id_in + and nevra.name_id = sp.name_id + and nevra.evr_id = sp.evr_id + and (nevra.package_arch_id = sp.package_arch_id + or (nevra.package_arch_id is null + and sp.package_arch_id is null)) + ); + + insert into rhnSnapshotConfigChannel ( snapshot_id, config_channel_id ) ( + select snapshot_id, scc.config_channel_id + from rhnServerConfigChannel scc + where server_id = server_id_in + ); + + for revision in revisions loop + insert into rhnSnapshotConfigRevision ( + snapshot_id, config_revision_id + ) values ( + snapshot_id, revision.id + ); + end loop; + end snapshot_server; + + procedure remove_action( + server_id_in in number, + action_id_in in number + ) is + -- this really wants "nulls last", but 8.1.7.3.0 sucks ass. + -- instead, we make a local table that holds our + -- list of ids with null prereqs. There's surely a better way + -- (an array instead of a table maybe? who knows...) + -- but I've got code to do this handy that I can look at ;) + cursor chained_actions is + select id, prerequisite + from rhnAction + start with id = action_id_in + connect by prior id = prerequisite + order by prerequisite desc; + cursor sessions is + select s.id + from rhnKickstartSession s + where server_id_in in (s.old_server_id, s.new_server_id) + and s.action_id = action_id_in + and not exists ( + select 1 + from rhnKickstartSessionState ss + where ss.id = s.state_id + and ss.label in ('failed','complete') + ); + type chain_end_type is table of number index by binary_integer; + chain_ends chain_end_type; + i number; + prereq number := 1; + begin + select prerequisite + into prereq + from rhnAction + where id = action_id_in; + + if prereq is not null then + rhn_exception.raise_exception('action_is_child'); + end if; + + i := 0; + for action in chained_actions loop + if action.prerequisite is null then + chain_ends(i) := action.id; + i := i + 1; + else + delete from rhnServerAction + where server_id = server_id_in + and action_id = action.id; + end if; + end loop; + i := chain_ends.first; + while i is not null loop + delete from rhnServerAction + where server_id = server_id_in + and action_id = chain_ends(i); + i := chain_ends.next(i); + end loop; + for s in sessions loop + update rhnKickstartSession + set state_id = ( + select id + from rhnKickstartSessionState + where label = 'failed' + ), + action_id = null + where id = s.id; + set_ks_session_history_message(s.id, 'failed', 'Kickstart cancelled due to action removal'); + end loop; + end remove_action; + + function check_user_access(server_id_in in number, user_id_in in number) + return number + is + has_access number; + begin + -- first check; if this returns no rows, then the server/user are in different orgs, and we bail + select 1 into has_access + from rhnServer S, + web_contact wc + where wc.org_id = s.org_id + and s.id = server_id_in + and wc.id = user_id_in; + + -- okay, so they're in the same org. if we have an org admin, they get a free pass + if rhn_user.check_role(user_id_in, 'org_admin') = 1 + then + return 1; + end if; + + select 1 into has_access + from rhnServerGroupMembers SGM, + rhnUserServerGroupPerms USG + where SGM.server_group_id = USG.server_group_id + and SGM.server_id = server_id_in + and USG.user_id = user_id_in + and rownum = 1; + + return 1; + exception + when no_data_found + then + return 0; + end check_user_access; + + -- ******************************************************************* + -- FUNCTION: can_server_consume_virt_slot + -- Returns 1 if the server id is eligible to consume a virtual slot, + -- else returns 0. + -- Called by: insert_into_servergroup, delete_from_servergroup + -- ******************************************************************* + function can_server_consume_virt_slot(server_id_in in number, + group_type_in in + rhnServerGroupType.label%TYPE) + return number + is + + cursor server_virt_slots is + select vi.VIRTUAL_SYSTEM_ID + from + rhnVirtualInstance vi + where + -- server id is a virtual instance + vi.VIRTUAL_SYSTEM_ID = server_id_in + -- server id's host is virt entitled + and exists ( select 1 + from rhnServerEntitlementView sev + where vi.HOST_SYSTEM_ID = sev.server_id + and sev.label in ('virtualization_host', + 'virtualization_host_platform') ) + -- server id's host also has the ent we want + and exists ( select 1 + from rhnServerEntitlementView sev2 + where vi.HOST_SYSTEM_ID = sev2.server_id + and sev2.label = group_type_in ); + + begin + for server_virt_slot in server_virt_slots loop + return 1; + end loop; + return 0; + end can_server_consume_virt_slot; + + + procedure insert_into_servergroup ( + server_id_in in number, + server_group_id_in in number + ) is + used_slots number; + max_slots number; + org_id number; + mgmt_available number; + mgmt_upgrade number; + mgmt_sgid number; + prov_available number; + prov_upgrade number; + prov_sgid number; + group_label rhnServerGroupType.label%TYPE; + group_type number; + begin + -- frist, group_type = null, because it's easy... + + -- this will rowlock the servergroup we're trying to change; + -- we probably need to lock the other one, but I think the chances + -- of it being a real issue are very small for now... + select sg.group_type, sg.org_id, sg.current_members, sg.max_members + into group_type, org_id, used_slots, max_slots + from rhnServerGroup sg + where sg.id = server_group_id_in + for update of sg.current_members; + + if group_type is null then + if used_slots >= max_slots then + rhn_exception.raise_exception('servergroup_max_members'); + end if; + + insert into rhnServerGroupMembers( + server_id, server_group_id + ) values ( + server_id_in, server_group_id_in + ); + update rhnServerGroup + set current_members = current_members + 1 + where id = server_group_id_in; + + rhn_cache.update_perms_for_server_group(server_group_id_in); + return; + end if; + + -- now for group_type != null + -- + select label + into group_label + from rhnServerGroupType sgt + where sgt.id = group_type; + + -- the naive easy path that gets hit most often and has to be quickest. + if group_label in ('sw_mgr_entitled', + 'enterprise_entitled', + 'monitoring_entitled', + 'provisioning_entitled', + 'virtualization_host', + 'virtualization_host_platform') then + if used_slots >= max_slots and + (can_server_consume_virt_slot(server_id_in, group_label) != 1) + then + rhn_exception.raise_exception('servergroup_max_members'); + end if; + + insert into rhnServerGroupMembers( + server_id, server_group_id + ) values ( + server_id_in, server_group_id_in + ); + + -- Only update current members if the system in consuming a + -- physical slot. + if can_server_consume_virt_slot(server_id_in, group_label) = 0 then + update rhnServerGroup + set current_members = current_members + 1 + where id = server_group_id_in; + end if; + + return; + end if; + end; + + function insert_into_servergroup_maybe ( + server_id_in in number, + server_group_id_in in number + ) return number is + retval number := 0; + cursor servergroups is + select s.id server_id, + sg.id server_group_id + from rhnServerGroup sg, + rhnServer s + where s.id = server_id_in + and sg.id = server_group_id_in + and s.org_id = sg.org_id + and not exists ( + select 1 + from rhnServerGroupMembers sgm + where sgm.server_id = s.id + and sgm.server_group_id = sg.id + ); + begin + for sgm in servergroups loop + rhn_server.insert_into_servergroup(sgm.server_id, sgm.server_group_id); + retval := retval + 1; + end loop; + return retval; + end insert_into_servergroup_maybe; + + procedure insert_set_into_servergroup ( + server_group_id_in in number, + user_id_in in number, + set_label_in in varchar2 + ) is + cursor servers is + select st.element id + from rhnSet st + where st.user_id = user_id_in + and st.label = set_label_in + and exists ( + select 1 + from rhnUserManagedServerGroups umsg + where umsg.server_group_id = server_group_id_in + and umsg.user_id = user_id_in + ) + and not exists ( + select 1 + from rhnServerGroupMembers sgm + where sgm.server_id = st.element + and sgm.server_group_id = server_group_id_in + ); + begin + for s in servers loop + rhn_server.insert_into_servergroup(s.id, server_group_id_in); + end loop; + end insert_set_into_servergroup; + + procedure delete_from_servergroup ( + server_id_in in number, + server_group_id_in in number + ) is + cursor server_virt_groups is + select 1 + from rhnServerEntitlementVirtual sev + where sev.server_id = server_id_in + and sev.server_group_id = server_group_id_in; + + oid number; + mgmt_sgid number; + label rhnServerGroupType.label%TYPE; + group_type number; + begin + begin + select sg.group_type, sg.org_id + into group_type, oid + from rhnServerGroupMembers sgm, + rhnServerGroup sg + where sg.id = server_group_id_in + and sg.id = sgm.server_group_id + and sgm.server_id = server_id_in + for update of sg.current_members; + exception + when no_data_found then + rhn_exception.raise_exception('server_not_in_group'); + end; + + -- do group_type is null first + if group_type is null then + delete from rhnServerGroupMembers + where server_group_id = server_group_id_in + and server_id = server_id_in; + update rhnServerGroup + set current_members = current_members - 1 + where id = server_group_id_in; + rhn_cache.update_perms_for_server_group(server_group_id_in); + return; + end if; + + select sgt.label + into label + from rhnServerGroupType sgt + where sgt.id = group_type; + + if label in ('sw_mgr_entitled', + 'enterprise_entitled', + 'provisioning_entitled', + 'monitoring_entitled', + 'virtualization_host', + 'virtualization_host_platform') then + + -- Only update current members if the system is consuming + -- a physical slot. + for server_virt_group in server_virt_groups loop + delete from rhnServerGroupMembers + where server_group_id = server_group_id_in + and server_id = server_id_in; + return; + end loop; + + delete from rhnServerGroupMembers + where server_group_id = server_group_id_in + and server_id = server_id_in; + + update rhnServerGroup + set current_members = current_members - 1 + where id = server_group_id_in; + + end if; + end; + + procedure delete_set_from_servergroup ( + server_group_id_in in number, + user_id_in in number, + set_label_in in varchar2 + ) is + cursor servergroups is + select sgm.server_id, sgm.server_group_id + from rhnSet st, + rhnServerGroupMembers sgm + where sgm.server_group_id = server_group_id_in + and st.user_id = user_id_in + and st.label = set_label_in + and sgm.server_id = st.element + and exists ( + select 1 + from rhnUserManagedServerGroups usgp + where usgp.server_group_id = server_group_id_in + and usgp.user_id = user_id_in + ); + begin + for sgm in servergroups loop + rhn_server.delete_from_servergroup(sgm.server_id, server_group_id_in); + end loop; + end delete_set_from_servergroup; + + procedure clear_servergroup ( + server_group_id_in in number + ) is + cursor servers is + select sgm.server_id id + from rhnServerGroupMembers sgm + where sgm.server_group_id = server_group_id_in; + begin + for s in servers loop + rhn_server.delete_from_servergroup(s.id, server_group_id_in); + end loop; + end clear_servergroup; + + procedure delete_from_org_servergroups ( + server_id_in in number + ) is + cursor servergroups is + select sgm.server_group_id id + from rhnServerGroup sg, + rhnServerGroupMembers sgm + where sgm.server_id = server_id_in + and sgm.server_group_id = sg.id + and sg.group_type is null; + begin + for sg in servergroups loop + rhn_server.delete_from_servergroup(server_id_in, sg.id); + end loop; + end delete_from_org_servergroups; + + function get_ip_address ( + server_id_in in number + ) return varchar2 is + cursor interfaces is + select ni.name as name, na4.address as address + from rhnServerNetInterface ni, + rhnServerNetAddress4 na4 + where ni.server_id = server_id_in + and ni.id = na4.interface_id + and na4.address != '127.0.0.1'; + cursor addresses is + select ipaddr ip_addr + from rhnServerNetwork + where server_id = server_id_in + and ipaddr != '127.0.0.1'; + begin + for addr in addresses loop + return addr.ip_addr; + end loop; + for iface in interfaces loop + return iface.address; + end loop; + return NULL; + end get_ip_address; + + procedure update_needed_cache(server_id_in in number) + is + begin + delete from rhnServerNeededCache + where server_id = server_id_in; + insert into rhnServerNeededCache + (server_id, errata_id, package_id, channel_id) + (select distinct sp.server_id, x.errata_id, p.id, x.channel_id + FROM (SELECT sp_sp.server_id, sp_sp.name_id, + sp_sp.package_arch_id, max(sp_pe.evr) AS max_evr + FROM rhnServerPackage sp_sp + join rhnPackageEvr sp_pe ON sp_pe.id = sp_sp.evr_id + GROUP BY sp_sp.server_id, sp_sp.name_id, sp_sp.package_arch_id) sp + join rhnPackage p ON p.name_id = sp.name_id + join rhnPackageEvr pe ON pe.id = p.evr_id + AND sp.max_evr < pe.evr + join rhnPackageUpgradeArchCompat puac + ON puac.package_arch_id = sp.package_arch_id + AND puac.package_upgrade_arch_id = p.package_arch_id + join rhnServerChannel sc ON sc.server_id = sp.server_id + join rhnChannelPackage cp ON cp.package_id = p.id + AND cp.channel_id = sc.channel_id + left join (SELECT ep.errata_id, ce.channel_id, ep.package_id + FROM rhnChannelErrata ce + join rhnErrataPackage ep + ON ep.errata_id = ce.errata_id + join rhnServerChannel sc_sc + ON sc_sc.channel_id = ce.channel_id + WHERE sc_sc.server_id = server_id_in) x + ON x.channel_id = sc.channel_id + AND x.package_id = cp.package_id + where sp.server_id = server_id_in); + end update_needed_cache; + +end rhn_server; +/ +SHOW ERRORS diff --git a/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/035-rhn_server.pkb.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/035-rhn_server.pkb.sql.postgresql new file mode 100644 index 0000000..c58526e --- /dev/null +++ b/schema/spacewalk/upgrade/spacewalk-schema-2.0-to-spacewalk-schema-2.1/035-rhn_server.pkb.sql.postgresql @@ -0,0 +1,40 @@ +-- oracle equivalent source sha1 b6947eea546edc7a66c7b53d0b62dc734ce3ca8a + + +update pg_settings set setting = 'rhn_server,' || setting where name = 'search_path'; + + create or replace function update_needed_cache( + server_id_in in numeric + ) returns void as $$ + begin + delete from rhnServerNeededCache + where server_id = server_id_in; + insert into rhnServerNeededCache + (server_id, errata_id, package_id, channel_id) + (select distinct sp.server_id, x.errata_id, p.id, x.channel_id + FROM (SELECT sp_sp.server_id, sp_sp.name_id, + sp_sp.package_arch_id, max(sp_pe.evr) AS max_evr + FROM rhnServerPackage sp_sp + join rhnPackageEvr sp_pe ON sp_pe.id = sp_sp.evr_id + GROUP BY sp_sp.server_id, sp_sp.name_id, sp_sp.package_arch_id) sp + join rhnPackage p ON p.name_id = sp.name_id + join rhnPackageEvr pe ON pe.id = p.evr_id AND sp.max_evr < pe.evr + join rhnPackageUpgradeArchCompat puac + ON puac.package_arch_id = sp.package_arch_id + AND puac.package_upgrade_arch_id = p.package_arch_id + join rhnServerChannel sc ON sc.server_id = sp.server_id + join rhnChannelPackage cp ON cp.package_id = p.id + AND cp.channel_id = sc.channel_id + left join (SELECT ep.errata_id, ce.channel_id, ep.package_id + FROM rhnChannelErrata ce + join rhnErrataPackage ep + ON ep.errata_id = ce.errata_id + join rhnServerChannel sc_sc + ON sc_sc.channel_id = ce.channel_id + WHERE sc_sc.server_id = server_id_in) x + ON x.channel_id = sc.channel_id AND x.package_id = cp.package_id + where sp.server_id = server_id_in); + end$$ language plpgsql; + +-- restore the original setting +update pg_settings set setting = overlay( setting placing '' from 1 for (length('rhn_server')+1) ) where name = 'search_path';
commit 6cc73932383fa38bf4fe05cd3b6c4dc9df62f2d0 Author: Michael Mraka michael.mraka@redhat.com Date: Fri Nov 8 15:31:59 2013 +0100
extended update_needed_cache() to insert channel_id
diff --git a/schema/spacewalk/oracle/packages/rhn_server.pkb b/schema/spacewalk/oracle/packages/rhn_server.pkb index 261a2ed..36b711c 100644 --- a/schema/spacewalk/oracle/packages/rhn_server.pkb +++ b/schema/spacewalk/oracle/packages/rhn_server.pkb @@ -751,8 +751,8 @@ is delete from rhnServerNeededCache where server_id = server_id_in; insert into rhnServerNeededCache - (server_id, errata_id, package_id) - (select distinct sp.server_id, x.errata_id, p.id + (server_id, errata_id, package_id, channel_id) + (select distinct sp.server_id, x.errata_id, p.id, x.channel_id FROM (SELECT sp_sp.server_id, sp_sp.name_id, sp_sp.package_arch_id, max(sp_pe.evr) AS max_evr FROM rhnServerPackage sp_sp diff --git a/schema/spacewalk/postgres/packages/rhn_server.pkb b/schema/spacewalk/postgres/packages/rhn_server.pkb index ed5c5be..d383604 100644 --- a/schema/spacewalk/postgres/packages/rhn_server.pkb +++ b/schema/spacewalk/postgres/packages/rhn_server.pkb @@ -793,8 +793,8 @@ update pg_settings set setting = 'rhn_server,' || setting where name = 'search_p delete from rhnServerNeededCache where server_id = server_id_in; insert into rhnServerNeededCache - (server_id, errata_id, package_id) - (select distinct sp.server_id, x.errata_id, p.id + (server_id, errata_id, package_id, channel_id) + (select distinct sp.server_id, x.errata_id, p.id, x.channel_id FROM (SELECT sp_sp.server_id, sp_sp.name_id, sp_sp.package_arch_id, max(sp_pe.evr) AS max_evr FROM rhnServerPackage sp_sp
commit 6e81b0c17c38508f0cd99b3a625f0ef19e8d2963 Author: Michael Mraka michael.mraka@redhat.com Date: Fri Nov 8 15:20:25 2013 +0100
extended queries according to new rhnServerNeededCache
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/ErrataCache_queries.xml b/java/code/src/com/redhat/rhn/common/db/datasource/xml/ErrataCache_queries.xml index d6084c4..6174660 100644 --- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/ErrataCache_queries.xml +++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/ErrataCache_queries.xml @@ -100,10 +100,11 @@ DELETE FROM rhnOrgErrataCacheQueue WHERE org_id = :org_id <write-mode name="insert_new_cache_entries_by_packages"> <!-- --> <query params="channel_id"> - INSERT INTO rhnServerNeededCache (server_id, package_id) + INSERT INTO rhnServerNeededCache (server_id, package_id, channel_id) ( SELECT DISTINCT S.id as server_id, P.id as package_id + :channel_id as channel_id FROM rhnPackage P, rhnServerPackageArchCompat SPAC, @@ -135,11 +136,12 @@ DELETE FROM rhnOrgErrataCacheQueue WHERE org_id = :org_id <write-mode name="insert_new_cache_entries_by_errata"> <!-- --> <query params="channel_id, errata_id"> - INSERT INTO rhnServerNeededCache (server_id, errata_id, package_id) + INSERT INTO rhnServerNeededCache (server_id, errata_id, package_id, channel_id) ( SELECT DISTINCT S.id as server_id, :errata_id as errata_id, P.id as package_id + :channel_id as channel_id FROM rhnPackage P, rhnServerPackageArchCompat SPAC,
commit 0c0185f3d638539fe8884a8b92c6897bf25c0e53 Author: Michael Mraka michael.mraka@redhat.com Date: Fri Nov 8 14:31:42 2013 +0100
removed redundant insertNeededPackageCache()
it does the same thing as insertNeededErrataCache()
diff --git a/java/code/src/com/redhat/rhn/frontend/action/systems/sdc/test/SystemOverviewActionTest.java b/java/code/src/com/redhat/rhn/frontend/action/systems/sdc/test/SystemOverviewActionTest.java index cb87b7d..5832239 100644 --- a/java/code/src/com/redhat/rhn/frontend/action/systems/sdc/test/SystemOverviewActionTest.java +++ b/java/code/src/com/redhat/rhn/frontend/action/systems/sdc/test/SystemOverviewActionTest.java @@ -69,7 +69,7 @@ public class SystemOverviewActionTest extends RhnMockStrutsTestCase { UserFactory.save(user); OrgFactory.save(org);
- int rows = ErrataCacheManager.insertNeededPackageCache( + int rows = ErrataCacheManager.insertNeededErrataCache( s.getId(), e.getId(), p.getId()); assertEquals(1, rows);
diff --git a/java/code/src/com/redhat/rhn/frontend/action/systems/test/ErrataSetupActionTest.java b/java/code/src/com/redhat/rhn/frontend/action/systems/test/ErrataSetupActionTest.java index 6b72270..0be22d9 100644 --- a/java/code/src/com/redhat/rhn/frontend/action/systems/test/ErrataSetupActionTest.java +++ b/java/code/src/com/redhat/rhn/frontend/action/systems/test/ErrataSetupActionTest.java @@ -49,7 +49,7 @@ public class ErrataSetupActionTest extends RhnMockStrutsTestCase {
for (Iterator itr = e.getPackages().iterator(); itr.hasNext();) { Package pkg = (Package) itr.next(); - ErrataCacheManager.insertNeededPackageCache(server.getId(), + ErrataCacheManager.insertNeededErrataCache(server.getId(), e.getId(), pkg.getId()); }
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/test/SystemHandlerTest.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/test/SystemHandlerTest.java index e885711..4c1bd80 100644 --- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/test/SystemHandlerTest.java +++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/test/SystemHandlerTest.java @@ -1951,7 +1951,7 @@ public class SystemHandlerTest extends BaseHandlerTestCase { Long sid = new Long(testServer.getId().longValue()); Package pack = PackageTest.createTestPackage(admin.getOrg());
- ErrataCacheManager.insertNeededPackageCache(sid, null, + ErrataCacheManager.insertNeededErrataCache(sid, null, pack.getId());
Object [] array = handler.listOutOfDateSystems(regularKey); diff --git a/java/code/src/com/redhat/rhn/manager/errata/cache/ErrataCacheManager.java b/java/code/src/com/redhat/rhn/manager/errata/cache/ErrataCacheManager.java index 89b0051..7fee0ca 100644 --- a/java/code/src/com/redhat/rhn/manager/errata/cache/ErrataCacheManager.java +++ b/java/code/src/com/redhat/rhn/manager/errata/cache/ErrataCacheManager.java @@ -113,24 +113,6 @@ public class ErrataCacheManager extends HibernateFactory { }
/** - * Inserts record into NeededPackage cache table - * @param sid Server Id - * @param errataId Errata Id - * @param packageId Package Id - * @return number of rows affected. - */ - public static int insertNeededPackageCache(Long sid, Long errataId, - Long packageId) { - WriteMode m = ModeFactory.getWriteMode("ErrataCache_queries", - "insert_needed_errata_cache"); - Map params = new HashMap(); - params.put("server_id", sid); - params.put("errata_id", errataId); - params.put("package_id", packageId); - return m.executeUpdate(params); - } - - /** * Deletes record from NeededPackage cache table. * @param sid Server Id * @param errataId Errata Id diff --git a/java/code/src/com/redhat/rhn/manager/errata/cache/test/ErrataCacheManagerTest.java b/java/code/src/com/redhat/rhn/manager/errata/cache/test/ErrataCacheManagerTest.java index c02f8d8..715f476 100644 --- a/java/code/src/com/redhat/rhn/manager/errata/cache/test/ErrataCacheManagerTest.java +++ b/java/code/src/com/redhat/rhn/manager/errata/cache/test/ErrataCacheManagerTest.java @@ -104,7 +104,7 @@ public class ErrataCacheManagerTest extends RhnBaseTestCase { Long pid = pkg.getId();
// insert record into table - int rows = ErrataCacheManager.insertNeededPackageCache( + int rows = ErrataCacheManager.insertNeededErrataCache( sid, eid, pid); assertEquals(1, rows);
@@ -157,7 +157,7 @@ public class ErrataCacheManagerTest extends RhnBaseTestCase { userIn.addRole(RoleFactory.ORG_ADMIN); UserFactory.save(userIn); TestUtils.flushAndEvict(userIn); - int rows = ErrataCacheManager.insertNeededPackageCache( + int rows = ErrataCacheManager.insertNeededErrataCache( s.getId(), e.getId(), p.getId()); assertEquals(1, rows); return retval; @@ -176,7 +176,7 @@ public class ErrataCacheManagerTest extends RhnBaseTestCase { Long pid = pkg.getId();
// insert record into table - int rows = ErrataCacheManager.insertNeededPackageCache( + int rows = ErrataCacheManager.insertNeededErrataCache( sid, eid, pid); assertEquals(1, rows);
@@ -307,7 +307,7 @@ public class ErrataCacheManagerTest extends RhnBaseTestCase { Long pid = pkg.getId();
// insert record into table - int rows = ErrataCacheManager.insertNeededPackageCache( + int rows = ErrataCacheManager.insertNeededErrataCache( sid, eid, pid); assertEquals(1, rows);
diff --git a/java/code/src/com/redhat/rhn/manager/system/test/SystemManagerTest.java b/java/code/src/com/redhat/rhn/manager/system/test/SystemManagerTest.java index ea745ec..ca7217f 100644 --- a/java/code/src/com/redhat/rhn/manager/system/test/SystemManagerTest.java +++ b/java/code/src/com/redhat/rhn/manager/system/test/SystemManagerTest.java @@ -382,7 +382,7 @@ public class SystemManagerTest extends RhnBaseTestCase { Errata e = ErrataFactoryTest.createTestErrata(user.getOrg().getId()); for (Iterator itr = e.getPackages().iterator(); itr.hasNext();) { Package pkg = (Package) itr.next(); - ErrataCacheManager.insertNeededPackageCache(server.getId(), + ErrataCacheManager.insertNeededErrataCache(server.getId(), e.getId(), pkg.getId()); }
@@ -1109,7 +1109,7 @@ public class SystemManagerTest extends RhnBaseTestCase { Errata e = ErrataFactoryTest.createTestErrata(user.getOrg().getId()); for (Iterator itr = e.getPackages().iterator(); itr.hasNext();) { Package pkg = (Package) itr.next(); - ErrataCacheManager.insertNeededPackageCache(server.getId(), + ErrataCacheManager.insertNeededErrataCache(server.getId(), e.getId(), pkg.getId()); List<SystemOverview> systems = SystemManager.listSystemsWithNeededPackage(user, pkg.getId()); diff --git a/java/code/src/com/redhat/rhn/testing/ServerTestUtils.java b/java/code/src/com/redhat/rhn/testing/ServerTestUtils.java index ceeb6c3..fdced01 100644 --- a/java/code/src/com/redhat/rhn/testing/ServerTestUtils.java +++ b/java/code/src/com/redhat/rhn/testing/ServerTestUtils.java @@ -271,7 +271,7 @@ public class ServerTestUtils { upgradedPackage.setPackageEvr(upgradedPackageEvr); TestUtils.saveAndFlush(upgradedPackage);
- ErrataCacheManager.insertNeededPackageCache( + ErrataCacheManager.insertNeededErrataCache( server.getId(), errata.getId(), installedPackage.getId());
return installedPackage;
commit e28e7a762bcc7c095ff623bbd58b60ed5360df43 Author: Michael Mraka michael.mraka@redhat.com Date: Fri Nov 8 14:25:43 2013 +0100
removed redundant insert_needed_package_cache
it's equal to already defined insert_needed_errata_cache
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/ErrataCache_queries.xml b/java/code/src/com/redhat/rhn/common/db/datasource/xml/ErrataCache_queries.xml index 4e66267..d6084c4 100644 --- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/ErrataCache_queries.xml +++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/ErrataCache_queries.xml @@ -90,14 +90,6 @@ DELETE FROM rhnOrgErrataCacheQueue WHERE org_id = :org_id </query> </write-mode>
-<write-mode name="insert_needed_package_cache"> - <query params="server_id, errata_id, package_id"> - INSERT INTO rhnServerNeededCache - (server_id, errata_id, package_id) - VALUES (:server_id, :errata_id, :package_id) - </query> -</write-mode> - <callable-mode name="update_needed_cache_for_channel"> <query params="channel_id"> {call rhn_channel.update_needed_cache(:channel_id)} diff --git a/java/code/src/com/redhat/rhn/manager/errata/cache/ErrataCacheManager.java b/java/code/src/com/redhat/rhn/manager/errata/cache/ErrataCacheManager.java index 67fbf68..89b0051 100644 --- a/java/code/src/com/redhat/rhn/manager/errata/cache/ErrataCacheManager.java +++ b/java/code/src/com/redhat/rhn/manager/errata/cache/ErrataCacheManager.java @@ -122,7 +122,7 @@ public class ErrataCacheManager extends HibernateFactory { public static int insertNeededPackageCache(Long sid, Long errataId, Long packageId) { WriteMode m = ModeFactory.getWriteMode("ErrataCache_queries", - "insert_needed_package_cache"); + "insert_needed_errata_cache"); Map params = new HashMap(); params.put("server_id", sid); params.put("errata_id", errataId);
commit 4e15bdabc254dc9c85d613cd5e04745850b2865b Author: Michael Mraka michael.mraka@redhat.com Date: Fri Nov 8 14:00:04 2013 +0100
extended rhnServerNeededCache with channel_id
diff --git a/schema/spacewalk/common/tables/rhnServerNeededCache.sql b/schema/spacewalk/common/tables/rhnServerNeededCache.sql index a9b3c68..ac4664a 100644 --- a/schema/spacewalk/common/tables/rhnServerNeededCache.sql +++ b/schema/spacewalk/common/tables/rhnServerNeededCache.sql @@ -27,6 +27,10 @@ CREATE TABLE rhnServerNeededCache package_id NUMBER NOT NULL CONSTRAINT rhn_sncp_pid_fk REFERENCES rhnPackage (id) + ON DELETE CASCADE, + channel_id NUMBER + CONSTRAINT rhn_sncp_cid_fk + REFERENCES rhnChannel (id) ON DELETE CASCADE ) ENABLE ROW MOVEMENT @@ -44,6 +48,11 @@ CREATE INDEX rhn_snc_eid_idx TABLESPACE [[128m_tbs]] NOLOGGING;
+CREATE INDEX rhn_snc_cid_idx + ON rhnServerNeededCache (channel_id) + TABLESPACE [[128m_tbs]] + NOLOGGING; + CREATE INDEX rhn_snc_speid_idx ON rhnServerNeededCache (server_id, package_id, errata_id) NOPARALLEL diff --git a/schema/spacewalk/common/tables/tables.deps b/schema/spacewalk/common/tables/tables.deps index 1a71319..4125c6e 100644 --- a/schema/spacewalk/common/tables/tables.deps +++ b/schema/spacewalk/common/tables/tables.deps @@ -163,7 +163,7 @@ rhnServerInfo :: rhnServer rhnServerUuid :: rhnServer rhnServerInstallInfo :: rhnServer rhnServerLocation :: rhnServer -rhnServerNeededCache :: web_customer rhnServer rhnErrata +rhnServerNeededCache :: web_customer rhnServer rhnErrata rhnChannel rhnServerNetwork :: rhnServer rhnServerNotes :: rhnServer web_contact rhnServerPackage :: rhnServer rhnPackageArch rhnPackageName rhnPackageEVR
spacewalk-commits@lists.fedorahosted.org