diff --git a/.gitignore b/.gitignore index 4149120..11741b6 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /wallaby-0.12.4.tar.gz +/wallaby-0.15.1.tar.gz diff --git a/0001-Fixes-to-skeleton-group-support.patch b/0001-Fixes-to-skeleton-group-support.patch new file mode 100644 index 0000000..6f281f0 --- /dev/null +++ b/0001-Fixes-to-skeleton-group-support.patch @@ -0,0 +1,74 @@ +From 2c584644a5fc8e0dd0b1bc0e3919c27a112fd9ff Mon Sep 17 00:00:00 2001 +From: Will Benton +Date: Thu, 21 Jun 2012 16:18:07 -0500 +Subject: [PATCH 01/11] Fixes to skeleton group support. + +In older versions of Wallaby, the default group configuration +could take precedence over the skeleton group configuration +for walk-in nodes. This commit fixes that behavior and adds +regression tests to identify it in the future. +--- + lib/mrg/grid/config/Configuration.rb | 4 ++-- + spec/skeleton_group_spec.rb | 17 ++++++++++++++++- + 2 files changed, 18 insertions(+), 3 deletions(-) + +diff --git a/lib/mrg/grid/config/Configuration.rb b/lib/mrg/grid/config/Configuration.rb +index 4adc725..36629e7 100644 +--- a/lib/mrg/grid/config/Configuration.rb ++++ b/lib/mrg/grid/config/Configuration.rb +@@ -425,7 +425,7 @@ module Mrg + + return 0 if version == 0 + +- groups = Store::ENABLE_SKELETON_GROUP ? [skel, default] : [default] ++ groups = Store::ENABLE_SKELETON_GROUP ? [default, skel] : [default] + toc, = VersionedNodeConfig.find_freshest(:select_by=>{:node=>VersionedNode[to]}, :group_by=>[:node], :version=>ver) + + unless toc +@@ -448,7 +448,7 @@ module Mrg + + def internal_set_node_config(node, config) + node_obj = VersionedNode[node] +- vnc = VersionedNodeConfig.create(:version=>self, :node=>node_obj, :config=>config) ++ vnc = VersionedNodeConfig.create(:version=>self, :node=>node_obj, :config=>config) + # vnc.send(:update, :created, self.version) + end + end +diff --git a/spec/skeleton_group_spec.rb b/spec/skeleton_group_spec.rb +index b423bcd..838b9a5 100644 +--- a/spec/skeleton_group_spec.rb ++++ b/spec/skeleton_group_spec.rb +@@ -27,7 +27,7 @@ module Mrg + end + + ["when another node exists at activation", "when no other nodes exist at activation"].each do |dowhen| +- it "should give new #{kind} nodes the last-activated configuration for the skeleton group #{dowhen}" do ++ it "should give new #{kind} nodes the last-activated configuration for the skeleton group #{dowhen} and there is no default group" do + @store.addParam("FOO") + n_expected = @store.addNode("blah") if dowhen == "when another node exists at activation" + g = @store.getGroupByName(Group::SKELETON_GROUP_NAME) +@@ -38,6 +38,21 @@ module Mrg + n = @store.send(msg, "fake") + n.getConfig("version"=>::Rhubarb::Util::timestamp)["FOO"].should == "BAR" + end ++ ++ it "should give new #{kind} nodes the last-activated configuration for the skeleton group #{dowhen} and there is a default group" do ++ @store.addParam("FOO") ++ @store.getDefaultGroup.modifyParams("REPLACE", {"FOO"=>"ARGH"}, {}) ++ @store.activateConfiguration ++ n_expected = @store.addNode("blah") if dowhen == "when another node exists at activation" ++ g = @store.getGroupByName(Group::SKELETON_GROUP_NAME) ++ g.modifyParams("REPLACE", {"FOO"=>"BAR"}) ++ @store.activateConfiguration ++ g.modifyParams("REPLACE", {"FOO"=>"BLAH"}) ++ ++ n = @store.send(msg, "fake") ++ ++ n.getConfig("version"=>::Rhubarb::Util::timestamp)["FOO"].should == "BAR" ++ end + end + end + +-- +1.7.7.6 + diff --git a/0001-updated-spec-for-0.12.4.patch b/0001-updated-spec-for-0.12.4.patch deleted file mode 100644 index 5e0f667..0000000 --- a/0001-updated-spec-for-0.12.4.patch +++ /dev/null @@ -1,26 +0,0 @@ -From fcc1044e270f4580eef1828ab3d09d209999fd60 Mon Sep 17 00:00:00 2001 -From: Will Benton -Date: Fri, 9 Dec 2011 15:18:27 -0600 -Subject: [PATCH] updated spec for 0.12.4 - ---- - wallaby.spec.in | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - -diff --git a/wallaby.spec.in b/wallaby.spec.in -index c22e8ba..8f861c4 100644 ---- a/wallaby.spec.in -+++ b/wallaby.spec.in -@@ -274,6 +274,9 @@ fi - - %changelog - -+* Fri Dec 9 2011 willb - 0.12.4-1 -+- fixes for minor tool problems that came up in 0.12 development -+ - * Wed Nov 23 2011 willb - 0.12.3-1 - - fix for bz 756402 - --- -1.7.4.4 - diff --git a/0002-updated-spec-for-0.15.1-2.patch b/0002-updated-spec-for-0.15.1-2.patch new file mode 100644 index 0000000..538f602 --- /dev/null +++ b/0002-updated-spec-for-0.15.1-2.patch @@ -0,0 +1,26 @@ +From a263c2f088be209adfca853d856667aa7c637ab7 Mon Sep 17 00:00:00 2001 +From: Will Benton +Date: Thu, 21 Jun 2012 16:20:08 -0500 +Subject: [PATCH 02/11] updated spec for 0.15.1-2 + +--- + wallaby.spec.in | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/wallaby.spec.in b/wallaby.spec.in +index 8358ead..5683094 100644 +--- a/wallaby.spec.in ++++ b/wallaby.spec.in +@@ -292,6 +292,9 @@ fi + + %changelog + ++* Thu Jun 21 2012 willb - 0.15.1-2 ++- fixes to skeleton group support for walk-in nodes ++ + * Wed Jun 20 2012 willb - 0.15.1-1 + - fixes bz 834141 + - packaging improvements +-- +1.7.7.6 + diff --git a/0003-More-resilient-activation-on-F17.patch b/0003-More-resilient-activation-on-F17.patch new file mode 100644 index 0000000..50de843 --- /dev/null +++ b/0003-More-resilient-activation-on-F17.patch @@ -0,0 +1,42 @@ +From 4eb89e810d9b174c1d995f070cbf947fac04bdce Mon Sep 17 00:00:00 2001 +From: Will Benton +Date: Thu, 21 Jun 2012 22:51:23 -0500 +Subject: [PATCH 03/11] More resilient activation on F17. + +This is both a workaround for a problem with QMF on F17 (viz., +we can't send events) and a general improvement to configuration +activation. Specifically, configuration events are a performance +optimization but are not required for correctness. Before this +commit, failure to send a configuration event would result in failure +of the Store#activateConfiguration API method. (It would also leave +node metadata in an inconsistent state.) Now, failure to send a +configuration event merely results in a warning. +--- + lib/mrg/grid/config/Store.rb | 8 ++++++-- + 1 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/lib/mrg/grid/config/Store.rb b/lib/mrg/grid/config/Store.rb +index 279c44a..efe0296 100644 +--- a/lib/mrg/grid/config/Store.rb ++++ b/lib/mrg/grid/config/Store.rb +@@ -718,11 +718,15 @@ module Mrg + unless explicit_nodelist + validate_and_activate(false, [Group.DEFAULT_GROUP], this_version) unless ConfigVersion.hasVersionedNodeConfig(Group::DEFAULT_GROUP_NAME, this_version) + end +- DirtyElement.delete_all + + log.debug "in validate_and_activate; just deleted dirty elements; count is #{DirtyElement.count}" ++ DirtyElement.delete_all + +- config_events_to(dirty_nodes, this_version, all_nodes) unless explicit_nodelist ++ begin ++ config_events_to(dirty_nodes, this_version, all_nodes) unless explicit_nodelist ++ rescue Exception=>ex ++ warnings << "Couldn't send configuration events: #{ex.inspect}" ++ end + + dirty_nodes.each {|dn| dn.last_updated_version = this_version if dn.respond_to? :last_updated_version } + +-- +1.7.7.6 + diff --git a/0004-Spurious-configuration-removal-off-by-default.patch b/0004-Spurious-configuration-removal-off-by-default.patch new file mode 100644 index 0000000..f96450b --- /dev/null +++ b/0004-Spurious-configuration-removal-off-by-default.patch @@ -0,0 +1,32 @@ +From 82e6ef71c2fad1d448a34e9458f5d79c6b6e69c8 Mon Sep 17 00:00:00 2001 +From: Will Benton +Date: Thu, 21 Jun 2012 22:55:16 -0500 +Subject: [PATCH 04/11] Spurious configuration removal off by default. + +The Wallaby agent no longer removes possibly-spurious versioned +configurations on startup. (This is a cleanup measure from a bug +in a very old version of Wallaby; it is unlikely necessary any more.) +To enable this behavior, set WALLABY_REMOVE_SPURIOUS_CONFIGS to yes +or true in the environment in which wallaby-agent runs. +--- + bin/wallaby-agent | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/bin/wallaby-agent b/bin/wallaby-agent +index 5bef195..f596f8b 100755 +--- a/bin/wallaby-agent ++++ b/bin/wallaby-agent +@@ -165,7 +165,9 @@ begin + $wallaby_log = Mrg::Grid::Config::Store.log + + begin +- Mrg::Grid::Config::Store.find_by_id(0).storeinit("remove-spurious"=>"yes") ++ options = {} ++ options["remove-spurious"] = "yes" if (ENV["WALLABY_REMOVE_SPURIOUS_CONFIGS"] && ENV["WALLABY_REMOVE_SPURIOUS_CONFIGS"] =~ /^(true|yes)/i) ++ Mrg::Grid::Config::Store.find_by_id(0).storeinit(options) + [:default, :snapshot].each do |which| + Rhubarb::Persistence::dbs[which].execute("vacuum") + end +-- +1.7.7.6 + diff --git a/0005-updated-spec-again-in-advance-of-0.15.1-2-build.patch b/0005-updated-spec-again-in-advance-of-0.15.1-2-build.patch new file mode 100644 index 0000000..3cdb16e --- /dev/null +++ b/0005-updated-spec-again-in-advance-of-0.15.1-2-build.patch @@ -0,0 +1,25 @@ +From 109a79b246858b79344c04ee80950b4d6004d0a4 Mon Sep 17 00:00:00 2001 +From: Will Benton +Date: Thu, 21 Jun 2012 23:05:01 -0500 +Subject: [PATCH 05/11] updated spec again in advance of 0.15.1-2 build + +--- + wallaby.spec.in | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/wallaby.spec.in b/wallaby.spec.in +index 5683094..61cefc8 100644 +--- a/wallaby.spec.in ++++ b/wallaby.spec.in +@@ -294,6 +294,8 @@ fi + + * Thu Jun 21 2012 willb - 0.15.1-2 + - fixes to skeleton group support for walk-in nodes ++- more resilient Store#activateConfiguration in the face of event failure/workaround for QMF event problems on F17 ++- wallaby-agent no longer deletes potentially-spurious configurations by default + + * Wed Jun 20 2012 willb - 0.15.1-1 + - fixes bz 834141 +-- +1.7.7.6 + diff --git a/0006-Added-test-case-duplicating-Matt-s-failure-case.patch b/0006-Added-test-case-duplicating-Matt-s-failure-case.patch new file mode 100644 index 0000000..d7e0098 --- /dev/null +++ b/0006-Added-test-case-duplicating-Matt-s-failure-case.patch @@ -0,0 +1,66 @@ +From 6b275fe08d44cd86131cfe0bcdc2c91b607c8b03 Mon Sep 17 00:00:00 2001 +From: Will Benton +Date: Fri, 22 Jun 2012 19:00:58 -0500 +Subject: [PATCH 06/11] Added test case duplicating Matt's failure case. + +--- + spec/skeleton_group_spec.rb | 43 ++++++++++++++++++++++++++++++++++++++++++- + 1 files changed, 42 insertions(+), 1 deletions(-) + +diff --git a/spec/skeleton_group_spec.rb b/spec/skeleton_group_spec.rb +index 838b9a5..839eda6 100644 +--- a/spec/skeleton_group_spec.rb ++++ b/spec/skeleton_group_spec.rb +@@ -63,7 +63,48 @@ module Mrg + n.memberships.should_not include(Group::SKELETON_GROUP_NAME) + end + +- ++ it "should not exhibit Matt's failure case with walkin nodes not getting the skeleton group config" do ++ default = @store.getDefaultGroup ++ skel = @store.getSkeletonGroup ++ ++ # wallaby add-features-to-group +++DEFAULT Master NodeAccess SharedPort ++ default.modifyFeatures("ADD", %w{Master NodeAccess SharedPort}, {}) ++ ++ # wallaby add-params-to-group +++DEFAULT 'SHARED_PORT_ARGS=-p 9620' 'CONDOR_HOST=$(QMF_BROKER_HOST)' 'ALLOW_WRITE=*' 'ALLOW_READ=*' 'ALLOW_NEGOTIATOR=$(ALLOW_WRITE)' 'ALLOW_NEGOTIATOR_SCHEDD=$(ALLOW_WRITE)' UID_DOMAIN=central-manager ++ default.modifyParams("ADD", {'SHARED_PORT_ARGS'=>'-p 9620', 'CONDOR_HOST'=>'$(QMF_BROKER_HOST)', 'ALLOW_WRITE'=>'*', 'ALLOW_READ'=>'*', 'ALLOW_NEGOTIATOR'=>'$(ALLOW_WRITE)', 'ALLOW_NEGOTIATOR_SCHEDD'=>'$(ALLOW_WRITE)', 'UID_DOMAIN'=>'central-manager'}, {}) ++ ++ # wallaby add-features-to-group +++SKEL ExecuteNode ++ skel.modifyFeatures("ADD", %w{ExecuteNode}, {}) ++ ++ # wallaby add-params-to-group +++SKEL START=TRUE SUSPEND=FALSE ++ skel.modifyParams("ADD", {'START'=>'TRUE', 'SUSPEND'=>'FALSE'}, {}) ++ ++ # wallaby add-node central-manager ++ cm = @store.addNode('central-manager') ++ ++ # wallaby add-param COLLECTOR_UPDATE_INTERVAL (needs to go to base DB) ++ @store.addParam('COLLECTOR_UPDATE_INTERVAL') ++ ++ # wallaby remove-nodes-from-group +++SKEL central-manager ++ cm.modifyMemberships("REPLACE", cm.memberships - %w{+++SKEL}, {}) ++ ++ # wallaby add-features-to-node central-manager CentralManager Scheduler (maybe: JobServer) ++ cm.identity_group.modifyFeatures("ADD", %w{CentralManager Scheduler JobServer}, {}) ++ ++ # wallaby add-params-to-node central-manager COLLECTOR_UPDATE_INTERVAL=15 ++ cm.identity_group.modifyParams("ADD", {"COLLECTOR_UPDATE_INTERVAL"=>15}) ++ ++ # wallaby activate ++ @store.activateConfiguration.should == [{}, []] ++ ++ # newly checked-in nodes should get skeleton group configuration ++ wi = @store.getNode("walk-in") ++ wi_config = wi.getConfig("version"=>::Rhubarb::Util::timestamp) ++ daemons = wi_config["DAEMON_LIST"].split(",").map {|s| s.strip} ++ daemons.should include("STARTD") ++ wi_config["START"].should == "TRUE" ++ wi_config["SUSPEND"].should == "FALSE" ++ end + + it "should publish the skeleton group over the API" do + @store.getSkeletonGroup.name.should == Group::SKELETON_GROUP_NAME +-- +1.7.7.6 + diff --git a/0007-Added-more-assertions-to-prior-test-case.patch b/0007-Added-more-assertions-to-prior-test-case.patch new file mode 100644 index 0000000..19bcd47 --- /dev/null +++ b/0007-Added-more-assertions-to-prior-test-case.patch @@ -0,0 +1,74 @@ +From 031f6d977a1b73e40bb6b583de0fa13705b40e7f Mon Sep 17 00:00:00 2001 +From: Will Benton +Date: Fri, 22 Jun 2012 20:34:22 -0500 +Subject: [PATCH 07/11] Added more assertions to prior test case. + +--- + spec/skeleton_group_spec.rb | 37 +++++++++++++++++++++++++++++-------- + 1 files changed, 29 insertions(+), 8 deletions(-) + +diff --git a/spec/skeleton_group_spec.rb b/spec/skeleton_group_spec.rb +index 839eda6..d6816fc 100644 +--- a/spec/skeleton_group_spec.rb ++++ b/spec/skeleton_group_spec.rb +@@ -66,6 +66,13 @@ module Mrg + it "should not exhibit Matt's failure case with walkin nodes not getting the skeleton group config" do + default = @store.getDefaultGroup + skel = @store.getSkeletonGroup ++ ++ # nodes checked in before the activate should get the updated skeleton group ++ # configuration after activate ++ old_wi = @store.getNode("old-walk-in") ++ ++ # wallaby load /var/lib/condor-wallaby-base-db/condor-base-db.snapshot ++ # (handled by the "before" clause above) + + # wallaby add-features-to-group +++DEFAULT Master NodeAccess SharedPort + default.modifyFeatures("ADD", %w{Master NodeAccess SharedPort}, {}) +@@ -89,21 +96,35 @@ module Mrg + cm.modifyMemberships("REPLACE", cm.memberships - %w{+++SKEL}, {}) + + # wallaby add-features-to-node central-manager CentralManager Scheduler (maybe: JobServer) +- cm.identity_group.modifyFeatures("ADD", %w{CentralManager Scheduler JobServer}, {}) ++ cm.identity_group.modifyFeatures("ADD", %w{CentralManager Scheduler}, {}) + + # wallaby add-params-to-node central-manager COLLECTOR_UPDATE_INTERVAL=15 + cm.identity_group.modifyParams("ADD", {"COLLECTOR_UPDATE_INTERVAL"=>15}) +- ++ + # wallaby activate + @store.activateConfiguration.should == [{}, []] + +- # newly checked-in nodes should get skeleton group configuration ++ # newly checked-in nodes should get the most recently activated skeleton group configuration + wi = @store.getNode("walk-in") +- wi_config = wi.getConfig("version"=>::Rhubarb::Util::timestamp) +- daemons = wi_config["DAEMON_LIST"].split(",").map {|s| s.strip} +- daemons.should include("STARTD") +- wi_config["START"].should == "TRUE" +- wi_config["SUSPEND"].should == "FALSE" ++ ++ # check nodes created before and after activation ++ [old_wi, wi].each do |wi_node| ++ ++ # check activated and current configs for each ++ [wi_node.getConfig("version"=>::Rhubarb::Util::timestamp), wi_node.getConfig].each do |wi_config| ++ ++ daemons = wi_config["DAEMON_LIST"].split(",").map {|s| s.strip} ++ ++ # checks for ExecuteNode ++ daemons.should include("STARTD") ++ ++ # checks for +++SKEL param settings ++ wi_config["START"].should == "TRUE" ++ wi_config["SUSPEND"].should == "FALSE" ++ end ++ ++ wi_node.memberships.should include("+++SKEL") ++ end + end + + it "should publish the skeleton group over the API" do +-- +1.7.7.6 + diff --git a/0008-Workaround-for-artifacts-of-type-sniffing-errors-in-.patch b/0008-Workaround-for-artifacts-of-type-sniffing-errors-in-.patch new file mode 100644 index 0000000..69cce42 --- /dev/null +++ b/0008-Workaround-for-artifacts-of-type-sniffing-errors-in-.patch @@ -0,0 +1,44 @@ +From f3d8b317a29e0c76690e75aca9e5fadaf5ce0766 Mon Sep 17 00:00:00 2001 +From: Will Benton +Date: Mon, 25 Jun 2012 17:43:00 -0500 +Subject: [PATCH 08/11] Workaround for artifacts of type-sniffing errors in + serialized objects. + +--- + lib/mrg/grid/config/ConfigValidating.rb | 5 ++++- + lib/mrg/grid/config/Configuration.rb | 3 ++- + 2 files changed, 6 insertions(+), 2 deletions(-) + +diff --git a/lib/mrg/grid/config/ConfigValidating.rb b/lib/mrg/grid/config/ConfigValidating.rb +index a01e097..da7f8c4 100644 +--- a/lib/mrg/grid/config/ConfigValidating.rb ++++ b/lib/mrg/grid/config/ConfigValidating.rb +@@ -133,7 +133,10 @@ module Mrg + end + + def getConfig +- @__my_config ||= original_object.getConfig ++ @__my_config ||= begin ++ cnf = original_object.getConfig ++ cnf.inject({}) {|acc,(k,v)| acc[k]=v.to_s ; acc} ++ end + end + + def config=(cfg) +diff --git a/lib/mrg/grid/config/Configuration.rb b/lib/mrg/grid/config/Configuration.rb +index 36629e7..fd82cf1 100644 +--- a/lib/mrg/grid/config/Configuration.rb ++++ b/lib/mrg/grid/config/Configuration.rb +@@ -98,7 +98,8 @@ module Mrg + end + + # applies the value supplied to the config, appending if necessary +- def self.apply!(config, param, value, use_ssp=false) ++ def self.apply!(config, param, supplied_value, use_ssp=false) ++ value = supplied_value.to_s + if (value && match = append_match(value)) + supplied_value = value + value = value_string(match) +-- +1.7.7.6 + diff --git a/0009-Removed-unused-versioned-config-implementation.patch b/0009-Removed-unused-versioned-config-implementation.patch new file mode 100644 index 0000000..ab3eb33 --- /dev/null +++ b/0009-Removed-unused-versioned-config-implementation.patch @@ -0,0 +1,73 @@ +From d5abc85784581603ac18239b50ee4c48ed73ea64 Mon Sep 17 00:00:00 2001 +From: Will Benton +Date: Mon, 25 Jun 2012 21:31:25 -0500 +Subject: [PATCH 09/11] Removed unused versioned-config implementation. + +This commit removes the 'normalized' versioned-configuration +implementation. It was never very fast, never fully tested, and +only ever available as an experimental alternative to the +oldstyle serialized versioned-configuration implementation. +--- + lib/mrg/grid/config/Configuration.rb | 32 -------------------------------- + lib/mrg/grid/config/dbmeta.rb | 2 +- + 2 files changed, 1 insertions(+), 33 deletions(-) + +diff --git a/lib/mrg/grid/config/Configuration.rb b/lib/mrg/grid/config/Configuration.rb +index fd82cf1..61f1de3 100644 +--- a/lib/mrg/grid/config/Configuration.rb ++++ b/lib/mrg/grid/config/Configuration.rb +@@ -527,38 +527,6 @@ module Mrg + end + end + +- class VersionedParam +- include ::Rhubarb::Persisting +- +- declare_column :name, :text +- +- def self.[](nm) +- find_first_by_name(nm) || create(:name=>nm) +- end +- end +- +- # (mostly-)normalized model of versioned config +- class VersionedNodeParamMapping +- include ::Rhubarb::Persisting +- +- declare_column :version, :integer, references(ConfigVersion, :on_delete=>:cascade) +- declare_column :node, :integer, references(VersionedNode, :on_delete=>:cascade) +- declare_column :param, :integer, references(VersionedParam, :on_delete=>:cascade) +- declare_column :val, :text +- +- declare_index_on :node +- declare_index_on :version +- +- alias :rhubarb_initialize :initialize +- +- def initialize(tup) +- rhubarb_initialize(tup) +- update(:created, self.version.version) +- self +- end +- +- end +- + # "serialized object" model of versioned config + class VersionedNodeConfig + include ::Rhubarb::Persisting +diff --git a/lib/mrg/grid/config/dbmeta.rb b/lib/mrg/grid/config/dbmeta.rb +index 6e5b7eb..44cba83 100644 +--- a/lib/mrg/grid/config/dbmeta.rb ++++ b/lib/mrg/grid/config/dbmeta.rb +@@ -18,7 +18,7 @@ module Mrg + module Grid + module Config + MAIN_DB_TABLES=[Mrg::Grid::Config::Feature, Mrg::Grid::Config::Group, Mrg::Grid::Config::Parameter, Mrg::Grid::Config::Subsystem, Mrg::Grid::Config::Node, Mrg::Grid::Config::ArcLabel, Mrg::Grid::Config::ParameterArc, Mrg::Grid::Config::FeatureArc, Mrg::Grid::Config::FeatureParams, Mrg::Grid::Config::NodeMembership, Mrg::Grid::Config::GroupParams, Mrg::Grid::Config::GroupFeatures, Mrg::Grid::Config::SubsystemParams, Mrg::Grid::Config::DirtyElement] +- SNAP_DB_TABLES=[Mrg::Grid::Config::Snapshot, Mrg::Grid::Config::ConfigVersion, Mrg::Grid::Config::VersionedNode, Mrg::Grid::Config::VersionedParam, Mrg::Grid::Config::VersionedNodeConfig, Mrg::Grid::Config::VersionedNodeParamMapping] ++ SNAP_DB_TABLES=[Mrg::Grid::Config::Snapshot, Mrg::Grid::Config::ConfigVersion, Mrg::Grid::Config::VersionedNode, Mrg::Grid::Config::VersionedNodeConfig] + DBVERSION = 6 + DBMIGRATIONS = [] + +-- +1.7.7.6 + diff --git a/0010-Removed-oldstyle-versioned-configurations.patch b/0010-Removed-oldstyle-versioned-configurations.patch new file mode 100644 index 0000000..7b9f3e8 --- /dev/null +++ b/0010-Removed-oldstyle-versioned-configurations.patch @@ -0,0 +1,111 @@ +From 99cc17647e3dea7b4475e53bdfbfe89afc8e7c9c Mon Sep 17 00:00:00 2001 +From: Will Benton +Date: Mon, 25 Jun 2012 21:34:19 -0500 +Subject: [PATCH 10/11] Removed oldstyle versioned configurations. + +This commit removes the oldstyle versioned-configuration implementation. +This implementation was vastly slower (~10x on our torture tests) +than the new lightweight versioned-configuration implementation, +as well as being much less space-efficient in a number of +interesting use cases. Note that Wallaby can still read oldstyle +versioned configurations, but will not generate them any more. +--- + bin/wallaby-agent | 4 ++ + lib/mrg/grid/config/Configuration.rb | 54 +-------------------------------- + 2 files changed, 6 insertions(+), 52 deletions(-) + +diff --git a/bin/wallaby-agent b/bin/wallaby-agent +index f596f8b..3b92679 100755 +--- a/bin/wallaby-agent ++++ b/bin/wallaby-agent +@@ -164,6 +164,10 @@ begin + app.register Mrg::Grid::Config::Store,Mrg::Grid::Config::Node,Mrg::Grid::Config::ConfigVersion,Mrg::Grid::Config::Feature,Mrg::Grid::Config::Group,Mrg::Grid::Config::Parameter,Mrg::Grid::Config::Subsystem,Mrg::Grid::Config::Snapshot,Mrg::Grid::Config::NodeUpdatedNotice,Mrg::Grid::Config::ConfigVersion + $wallaby_log = Mrg::Grid::Config::Store.log + ++ if ENV['WALLABY_OLDSTYLE_VERSIONED_CONFIGS'] ++ Syslog.open {|s| s.warning "You have set WALLABY_OLDSTYLE_VERSIONED_CONFIGS in your environment, but this option is no longer supported. Old versioned configurations will continue to work, but new versioned configurations will be stored in the 'lightweight' style."} ++ end ++ + begin + options = {} + options["remove-spurious"] = "yes" if (ENV["WALLABY_REMOVE_SPURIOUS_CONFIGS"] && ENV["WALLABY_REMOVE_SPURIOUS_CONFIGS"] =~ /^(true|yes)/i) +diff --git a/lib/mrg/grid/config/Configuration.rb b/lib/mrg/grid/config/Configuration.rb +index 61f1de3..c152c63 100644 +--- a/lib/mrg/grid/config/Configuration.rb ++++ b/lib/mrg/grid/config/Configuration.rb +@@ -297,59 +297,12 @@ module Mrg + include ::Rhubarb::Persisting + include ::SPQR::Manageable + +- STORAGE_PLAN = ENV['WALLABY_OLDSTYLE_VERSIONED_CONFIGS'] ? :serialized : :lw_serialized ++ STORAGE_PLAN = :lw_serialized + + def self.whatchanged(node, old_version, new_version) + ConfigUtils.what_params_changed(getVersionedNodeConfig(node, old_version), getVersionedNodeConfig(node, new_version)) + end + +- module SerializedVersionedConfigLookup +- module ClassMethods +- def getVersionedNodeConfig(node, ver=nil) +- ver ||= ::Rhubarb::Util::timestamp +- vnc = VersionedNodeConfig.find_freshest(:select_by=>{:node=>VersionedNode[node]}, :group_by=>[:node], :version=>ver) +- vnc.size == 0 ? {"WALLABY_CONFIG_VERSION"=>"0"} : vnc[0].config +- end +- +- def hasVersionedNodeConfig(node, ver=nil) +- ver ||= ::Rhubarb::Util::timestamp +- vnc, = VersionedNodeConfig.find_freshest(:select_by=>{:node=>VersionedNode[node]}, :group_by=>[:node], :version=>ver) +- vnc && vnc.version.version +- end +- +- # NB: this will refuse to copy over an existing versioned config +- def dupVersionedNodeConfig(from, to, ver=nil) +- ver ||= ::Rhubarb::Util::timestamp +- vnc, = VersionedNodeConfig.find_freshest(:select_by=>{:node=>VersionedNode[from]}, :group_by=>[:node], :version=>ver) +- return 0 unless vnc +- toc, = VersionedNodeConfig.find_freshest(:select_by=>{:node=>VersionedNode[to]}, :group_by=>[:node], :version=>ver) +- toc = VersionedNodeConfig.create(:version=>vnc.version, :node=>VersionedNode[to], :config=>vnc.config.dup) unless toc +- toc.version.version +- end +- end +- +- module InstanceMethods +- def internal_get_node_config(node) +- node_obj = VersionedNode[node] +- cnfo = VersionedNodeConfig.find_by(:version=>self, :node=>node_obj) +- result = (cnfo && cnfo.size == 1 && cnfo[0].config) || {} +- fixed_result = ConfigUtils.fix_config_values(result) +- fixed_result +- end +- +- def internal_set_node_config(node, config) +- node_obj = VersionedNode[node] +- vnc = VersionedNodeConfig.create(:version=>self, :node=>node_obj, :config=>config) +- # vnc.send(:update, :created, self.version) +- end +- end +- +- def self.included(receiver) +- receiver.extend ClassMethods +- receiver.send :include, InstanceMethods +- end +- end +- + module LWSerializedVersionedConfigLookup + module ClassMethods + def getVersionedNodeConfig(node, ver=nil) +@@ -493,10 +446,7 @@ module Mrg + + private + +- case STORAGE_PLAN +- when :serialized then include SerializedVersionedConfigLookup +- when :lw_serialized then include LWSerializedVersionedConfigLookup +- end ++ include LWSerializedVersionedConfigLookup + end + + class VersionedNode +-- +1.7.7.6 + diff --git a/0011-spec-file-for-v0.15.1-3.patch b/0011-spec-file-for-v0.15.1-3.patch new file mode 100644 index 0000000..1320408 --- /dev/null +++ b/0011-spec-file-for-v0.15.1-3.patch @@ -0,0 +1,26 @@ +From 989533bc4e1bb4167dc1d663da57a73b6ae151b3 Mon Sep 17 00:00:00 2001 +From: Will Benton +Date: Tue, 26 Jun 2012 23:08:25 -0500 +Subject: [PATCH 11/11] spec file for v0.15.1-3 + +--- + wallaby.spec.in | 3 +++ + 1 files changed, 3 insertions(+), 0 deletions(-) + +diff --git a/wallaby.spec.in b/wallaby.spec.in +index 61cefc8..9d4f4b4 100644 +--- a/wallaby.spec.in ++++ b/wallaby.spec.in +@@ -292,6 +292,9 @@ fi + + %changelog + ++* Tue Jun 26 2012 willb - 0.15.1-3 ++- fixes for some stealthier serialized-configuration type-sniffing bugs and attendant nasty crashes (BZ 835713) ++ + * Thu Jun 21 2012 willb - 0.15.1-2 + - fixes to skeleton group support for walk-in nodes + - more resilient Store#activateConfiguration in the face of event failure/workaround for QMF event problems on F17 +-- +1.7.7.6 + diff --git a/sources b/sources index b7e4c28..311ce39 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -185b2513e552960f84c0eebaea0f3e72 wallaby-0.12.4.tar.gz +db77431fccc3ddc201c5186f6fd1487e wallaby-0.15.1.tar.gz diff --git a/wallaby.spec b/wallaby.spec index b9ddb7c..dcb4109 100644 --- a/wallaby.spec +++ b/wallaby.spec @@ -1,5 +1,3 @@ -%{!?ruby_sitelib: %global ruby_sitelib %(ruby -rrbconfig -e 'puts Config::CONFIG["sitelibdir"] ')} - %if 0%{?fedora} >= 15 %global want_systemd 1 %global wallaby_agent_environment sysconfig/wallaby-agent-env @@ -14,35 +12,63 @@ %global building_for_el5 0 %endif +%if (0%{?fedora} >= 17 && 0%{?rhel} >= 6) +%global +%global wallaby_uid -u 181 +%endif + %if (0%{?fedora} != 0) %global has_sinatra 1 %else %global has_sinatra 0 %endif +%if (0%{?fedora} >= 17) +%global ruby_abi 1.9.1 +%global ruby_appropriate_install_dir %{ruby_vendorlibdir} +%global requires_ruby_devel 1 +%else +%global requires_ruby_devel 0 +%global ruby_abi 1.8 +%{!?ruby_sitelib: %global ruby_sitelib %(ruby -rrbconfig -e 'puts Config::CONFIG["sitelibdir"] ')} +%global ruby_appropriate_install_dir %{ruby_sitelib} +%endif + %if %{building_for_el5} == 1 %{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")} %{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")} %endif + + Summary: Condor pool configuration service with QMF interface Name: wallaby -Version: 0.12.4 -Release: 1%{?dist} +Version: 0.15.1 +Release: 3%{?dist} Group: Applications/System License: ASL 2.0 URL: http://git.fedorahosted.org/git/grid/wallaby.git Source0: https://fedorahosted.org/releases/g/r/grid/%{name}-%{version}.tar.gz -Patch0: 0001-updated-spec-for-0.12.4.patch +Patch0: 0001-Fixes-to-skeleton-group-support.patch +Patch1: 0002-updated-spec-for-0.15.1-2.patch +Patch2: 0003-More-resilient-activation-on-F17.patch +Patch3: 0004-Spurious-configuration-removal-off-by-default.patch +Patch4: 0005-updated-spec-again-in-advance-of-0.15.1-2-build.patch +Patch5: 0006-Added-test-case-duplicating-Matt-s-failure-case.patch +Patch6: 0007-Added-more-assertions-to-prior-test-case.patch +Patch7: 0008-Workaround-for-artifacts-of-type-sniffing-errors-in-.patch +Patch8: 0009-Removed-unused-versioned-config-implementation.patch +Patch9: 0010-Removed-oldstyle-versioned-configurations.patch +Patch10: 0011-spec-file-for-v0.15.1-3.patch %if %{building_for_el5} BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) %endif BuildRequires: python2-devel -Requires: ruby(abi) = 1.8 +Requires: ruby(abi) = %{?ruby_abi} BuildRequires: ruby Requires: ruby-qmf >= 0.7.929717 -Requires: ruby-spqr >= 0.3.5 -Requires: ruby-rhubarb >= 0.2.6 +Requires: ruby-spqr >= 0.3.6 +Requires: ruby-rhubarb >= 0.4.3 Requires: ruby-wallaby = %{version}-%{release} Requires: logrotate >= 0.3 %if %{want_systemd} @@ -70,7 +96,7 @@ and manages multiple versions of configurations. %package utils Summary: Utilities to interact with the Wallaby service Group: Applications/System -Requires: ruby(abi) = 1.8 +Requires: ruby(abi) = %{?ruby_abi} Requires: ruby-qmf >= 0.7.929717 Requires: ruby-wallaby = %{version} @@ -81,11 +107,14 @@ and node configurations and interacting with the Wallaby service. %package -n ruby-wallaby Summary: Wallaby implementation libraries, API, and client library Group: Applications/System -Requires: ruby(abi) = 1.8 +Requires: ruby(abi) = %{?ruby_abi} Requires: ruby-irb Requires: ruby-qmf >= 0.7.929717 Requires: ruby-spqr >= 0.3.5 Requires: ruby-rhubarb >= 0.2.6 +%if %{requires_ruby_devel} +BuildRequires: ruby-devel +%endif Provides: ruby(mrg/grid/config) = %{version} %package -n python-wallaby @@ -103,7 +132,7 @@ that interact with the Wallaby configuration service over QMF. %package -n wallaby-http-server Summary: Wallaby web service interface Group: Applications/System -Requires: ruby(abi) = 1.8 +Requires: ruby(abi) = %{?ruby_abi} Requires: ruby-irb Requires: ruby-qmf >= 0.7.929717 Requires: ruby-wallaby = %{version}-%{release} @@ -126,6 +155,16 @@ Wallaby. %setup -q %patch0 -p1 +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 +%patch10 -p1 %build sed 's/^export //' < etc/sysconfig/wallaby-agent > etc/sysconfig/wallaby-agent-env @@ -135,9 +174,9 @@ sed 's/^export //' < etc/sysconfig/wallaby-agent > etc/sysconfig/wallaby-agent-e rm -rf %{buildroot} %endif mkdir -p %{buildroot}/%{_unitdir} -mkdir -p %{buildroot}/%{ruby_sitelib}/mrg/grid/config/dbmigrate -mkdir -p %{buildroot}/%{ruby_sitelib}/mrg/grid/config/shell -mkdir -p %{buildroot}/%{ruby_sitelib}/mrg/grid/util +mkdir -p %{buildroot}/%{ruby_appropriate_install_dir}/mrg/grid/config/dbmigrate +mkdir -p %{buildroot}/%{ruby_appropriate_install_dir}/mrg/grid/config/shell +mkdir -p %{buildroot}/%{ruby_appropriate_install_dir}/mrg/grid/util mkdir -p %{buildroot}/%{_bindir} mkdir -p %{buildroot}/%{_localstatedir}/lib/wallaby mkdir -p %{buildroot}/%{_localstatedir}/lib/wallaby/patches @@ -149,18 +188,18 @@ mkdir -p %{buildroot}/%{_localstatedir}/log/wallaby mkdir -p %{buildroot}/%{python_sitelib}/wallaby cp -p -f bin/wallaby %{buildroot}/%{_bindir} cp -p -f bin/wallaby-agent %{buildroot}/%{_bindir} -cp -p -f lib/mrg/grid/*.rb %{buildroot}/%{ruby_sitelib}/mrg/grid -cp -p -f lib/mrg/grid/util/*.rb %{buildroot}/%{ruby_sitelib}/mrg/grid/util -cp -p -f lib/mrg/grid/config/*.rb %{buildroot}/%{ruby_sitelib}/mrg/grid/config -cp -p -f lib/mrg/grid/config/shell/*.rb %{buildroot}/%{ruby_sitelib}/mrg/grid/config/shell +cp -p -f lib/mrg/grid/*.rb %{buildroot}/%{ruby_appropriate_install_dir}/mrg/grid +cp -p -f lib/mrg/grid/util/*.rb %{buildroot}/%{ruby_appropriate_install_dir}/mrg/grid/util +cp -p -f lib/mrg/grid/config/*.rb %{buildroot}/%{ruby_appropriate_install_dir}/mrg/grid/config +cp -p -f lib/mrg/grid/config/shell/*.rb %{buildroot}/%{ruby_appropriate_install_dir}/mrg/grid/config/shell # These aren't packaged -rm -f %{buildroot}/%{ruby_sitelib}/mrg/grid/config/shell/cmd_force_pull.rb -rm -f %{buildroot}/%{ruby_sitelib}/mrg/grid/config/shell/cmd_force_restart.rb +rm -f %{buildroot}/%{ruby_appropriate_install_dir}/mrg/grid/config/shell/cmd_force_pull.rb +rm -f %{buildroot}/%{ruby_appropriate_install_dir}/mrg/grid/config/shell/cmd_force_restart.rb # We only want the http server if we have sinatra available %if %{has_sinatra} == 0 -rm -f %{buildroot}/%{ruby_sitelib}/mrg/grid/config/shell/cmd_http_server.rb +rm -f %{buildroot}/%{ruby_appropriate_install_dir}/mrg/grid/config/shell/cmd_http_server.rb %endif -cp -p -f lib/mrg/grid/config/dbmigrate/*.rb %{buildroot}/%{ruby_sitelib}/mrg/grid/config/dbmigrate +cp -p -f lib/mrg/grid/config/dbmigrate/*.rb %{buildroot}/%{ruby_appropriate_install_dir}/mrg/grid/config/dbmigrate %if %{want_systemd} == 0 cp -p -f etc/wallaby %{buildroot}/%{_initrddir}/wallaby @@ -196,15 +235,14 @@ rm -rf %{buildroot} %{_initrddir}/wallaby %endif -%pre +%pre -n ruby-wallaby getent group wallaby >/dev/null || groupadd -r wallaby getent group condor >/dev/null || groupadd -r condor getent passwd wallaby >/dev/null || \ - useradd -r -g condor -d %{_localstatedir}/lib/wallaby -s /sbin/nologin \ + useradd -r %{?wallaby_uid} -g condor -d %{_localstatedir}/lib/wallaby -s /sbin/nologin \ -c "Owner of Wallaby service" wallaby exit 0 - %if %{want_systemd} %post if [ $1 -eq 1 ] ; then @@ -264,16 +302,80 @@ fi %if %{building_for_el5} %defattr(-, root, root, -) %endif -%{ruby_sitelib}/mrg/grid/ +%{ruby_appropriate_install_dir}/mrg/grid/ %if %{has_sinatra} -%exclude %{ruby_sitelib}/mrg/grid/config/shell/cmd_http_server.rb +%exclude %{ruby_appropriate_install_dir}/mrg/grid/config/shell/cmd_http_server.rb %files -n wallaby-http-server -%{ruby_sitelib}/mrg/grid/config/shell/cmd_http_server.rb +%{ruby_appropriate_install_dir}/mrg/grid/config/shell/cmd_http_server.rb %endif %changelog +* Tue Jun 26 2012 willb - 0.15.1-3 +- fixes for some stealthier serialized-configuration type-sniffing bugs and attendant nasty crashes (BZ 835713) + +* Thu Jun 21 2012 willb - 0.15.1-2 +- fixes to skeleton group support for walk-in nodes +- more resilient Store#activateConfiguration in the face of event failure/workaround for QMF event problems on F17 +- wallaby-agent no longer deletes potentially-spurious configurations by default + +* Wed Jun 20 2012 willb - 0.15.1-1 +- fixes bz 834141 +- packaging improvements +- base-db documenter improvements from upstream (internal only; not packaged) + +* Wed Jun 13 2012 willb - 0.15.0-1 +- sensible/unified treatment of skeleton group and default group + +* Thu May 31 2012 willb - 0.14.3-1 +- fixes bz 748507 + +* Thu May 10 2012 willb - 0.14.2-2 +- fixes a trivial crashing bug that sneaked in to the prior package + +* Thu May 10 2012 willb - 0.14.2-1 +- packaging improvements: ruby-wallaby now creates the wallaby user, and it does so with a proper UID on F17+ and EL6+ +- base db documentation generator (non-end-user visible) +- shell support for inspecting node configs (non-end-user visible for now, but used by ruby implementations of ccs/ccp; BZ820419) + +* Thu Apr 19 2012 willb - 0.14.1-1 +- preliminary tool support for annotations +- affectedEntities and affectedNodes methods on Store objects +- API minor version bump; API is now 20101031.5 + +* Mon Apr 16 2012 willb - 0.14.0-1 +- "annotation" property and "setAnnotation" method on snapshots and all configuration entities +- API minor version bump + +* Mon Mar 26 2012 willb - 0.13.1-2 +- F17 fixes + +* Fri Mar 9 2012 willb - 0.13.1-1 +- Fixes BZs 786801 and 796406 +- specfile updates from Fedora work + +* Fri Feb 10 2012 willb - 0.13.0-2 +- specfile fixes + +* Fri Feb 10 2012 willb - 0.13.0-1 +- conditional assignment of parameter values ("?=" operator) +- fix for bz 748507 +- compatibility with Ruby 1.9 + +* Fri Feb 10 2012 Vít Ondruch - 0.12.4-3 +- Rebuilt for Ruby 1.9.3. + +* Wed Jan 18 2012 willb - 0.12.5-2 +- minor usability fixes to "wallaby inventory -c" +- fix for bz 782816 + +* Sat Jan 14 2012 Fedora Release Engineering - 0.12.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Jan 10 2012 willb - 0.12.5-1 +- the Wallaby shell no longer a priori rejects certain valid SASL authentication mechanisms + * Fri Dec 9 2011 willb - 0.12.4-1 - fixes for minor tool problems that came up in 0.12 development