search-server/spacewalk-search
by Tomas Lestach
search-server/spacewalk-search/src/java/com/redhat/satellite/search/rpc/handlers/IndexHandler.java | 78 ++++++----
1 file changed, 51 insertions(+), 27 deletions(-)
New commits:
commit 07154f914f67b86f8a72b50578d1004e7ab88c0d
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Mon Jan 30 12:58:25 2012 +0100
increase max clause count when getting BooleanQuery exception
adressing:
com.redhat.rhn.frontend.action.channel.PackageSearchHelper - Performing pkg search: a*, search_name_and_summary
redstone.xmlrpc.XmlRpcFault: org.apache.lucene.search.BooleanQuery: maxClauseCount is set to 1024
more info:
http://wiki.apache.org/jakarta-lucene/LuceneFAQ#Why_am_I_getting_a_TooMan...
diff --git a/search-server/spacewalk-search/src/java/com/redhat/satellite/search/rpc/handlers/IndexHandler.java b/search-server/spacewalk-search/src/java/com/redhat/satellite/search/rpc/handlers/IndexHandler.java
index 76a010f..8a331c3 100644
--- a/search-server/spacewalk-search/src/java/com/redhat/satellite/search/rpc/handlers/IndexHandler.java
+++ b/search-server/spacewalk-search/src/java/com/redhat/satellite/search/rpc/handlers/IndexHandler.java
@@ -24,6 +24,7 @@ import com.redhat.satellite.search.index.QueryParseException;
import com.redhat.satellite.search.scheduler.ScheduleManager;
import org.apache.log4j.Logger;
+import org.apache.lucene.search.BooleanQuery;
import java.sql.SQLException;
import java.util.ArrayList;
@@ -37,7 +38,7 @@ import redstone.xmlrpc.XmlRpcFault;
/**
* XML-RPC handler which handles calls for indexing
- *
+ *
* @version $Rev$
*/
public class IndexHandler {
@@ -49,10 +50,10 @@ public class IndexHandler {
public static final int INDEX_ERROR = 200;
public static final int DB_ERROR = 300;
public static final String DEFAULT_LANG = new Locale("EN", "US").toString();
-
+
/**
* Constructor
- *
+ *
* @param idxManager
* Search engine interface
*/
@@ -65,7 +66,7 @@ public class IndexHandler {
/**
* Search index -
* assumes English language as default language
- *
+ *
* @param sessionId
* user's application session id
* @param indexName
@@ -73,7 +74,7 @@ public class IndexHandler {
* @param query
* search query
* @return list of document ids as results
- * @throws XmlRpcFault something bad happened
+ * @throws XmlRpcFault something bad happened
*/
public List<Result> search(long sessionId, String indexName, String query)
throws XmlRpcFault {
@@ -143,28 +144,51 @@ public class IndexHandler {
log.debug("IndexHandler:: searching for: " + query + ", indexName = " +
indexName + ", lang = " + lang);
}
- try {
- List<Result> hits = indexManager.search(indexName, query, lang,
- isFineGrained);
- if (indexName.compareTo("package") == 0) {
- return screenHits(sessionId, indexName, hits);
+ boolean retry = true;
+ while (retry) {
+ try {
+ retry = false;
+ List<Result> hits = indexManager.search(indexName, query, lang,
+ isFineGrained);
+ if (indexName.compareTo("package") == 0) {
+ return screenHits(sessionId, indexName, hits);
+ }
+ return hits;
+ }
+ catch (IndexingException e) {
+ log.error("Caught exception: ", e);
+ throw new XmlRpcFault(INDEX_ERROR, e.getMessage());
+ }
+ catch (QueryParseException e) {
+ log.error("Caught exception: ", e);
+ throw new XmlRpcFault(QUERY_ERROR, e.getMessage());
+ }
+ catch (SQLException e) {
+ log.error("Caught exception: ", e);
+ throw new XmlRpcFault(DB_ERROR, e.getMessage());
+ }
+ catch (BooleanQuery.TooManyClauses e) {
+ int oldQueries = BooleanQuery.getMaxClauseCount();
+ if (Integer.MAX_VALUE / 2 > oldQueries) {
+ // increase number of max clause count
+ // if there's no overflow danger
+ int newQueries = oldQueries * 2;
+ log.error("Too many hits for query: " + oldQueries +
+ ". Increasing max clause count to " + newQueries +
+ "\nexception message: " + e.getMessage());
+ BooleanQuery.setMaxClauseCount(newQueries);
+ retry = true;
+ }
+ else {
+ // there's no more help
+ throw e;
+ }
}
- return hits;
- }
- catch (IndexingException e) {
- log.error("Caught exception: ", e);
- throw new XmlRpcFault(INDEX_ERROR, e.getMessage());
- }
- catch (QueryParseException e) {
- log.error("Caught exception: ", e);
- throw new XmlRpcFault(QUERY_ERROR, e.getMessage());
- }
- catch (SQLException e) {
- log.error("Caught exception: ", e);
- throw new XmlRpcFault(DB_ERROR, e.getMessage());
}
+ // return just because of compiler
+ return null;
}
-
+
private List<Result> screenHits(long sessionId, String indexName,
List<Result> hits) throws SQLException {
@@ -178,7 +202,7 @@ public class IndexHandler {
for (Result pr : hits) {
ids.add(new Long(pr.getId()));
}
-
+
Query<String> query = null;
if ("package".equals(indexName)) {
query = databaseManager.getQuery("verifyPackageVisibility");
@@ -202,9 +226,9 @@ public class IndexHandler {
try {
List<String> visible = query.loadList(params);
if (log.isDebugEnabled()) {
- log.debug("results: " + visible);
+ log.debug("results: " + visible);
}
-
+
// add the PackageResults that match the visible list
List<Result> realResults = new ArrayList<Result>();
for (Result pr : hits) {
12 years, 3 months
web/modules
by Jan Pazdziora
web/modules/rhn/RHN/DB/Scheduler.pm | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
New commits:
commit 600d07af19f2deacac54619b1dc953731aaa3e07
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Mon Jan 30 12:21:30 2012 +0100
The $rhn_class is always empty, removing.
diff --git a/web/modules/rhn/RHN/DB/Scheduler.pm b/web/modules/rhn/RHN/DB/Scheduler.pm
index ccb478b..b0e9066 100644
--- a/web/modules/rhn/RHN/DB/Scheduler.pm
+++ b/web/modules/rhn/RHN/DB/Scheduler.pm
@@ -634,8 +634,6 @@ sub schedule_package_install {
my $query;
my $sth;
- my $rhn_class = '';
-
if ($package_id and $server_set) {
$query = <<EOQ;
INSERT INTO rhnServerAction (server_id, action_id, status)
@@ -660,7 +658,7 @@ SELECT S.id
FROM rhnServerPackage SP, rhnPackageEvr PE
WHERE SP.name_id = P.name_id
AND SP.server_id = S.id
- AND SP.evr_id = PE.id), ${rhn_class}EVR_T(NULL, 0, 0))
+ AND SP.evr_id = PE.id), EVR_T(NULL, 0, 0))
<
(SELECT EVR FROM rhnPackageEVR PE WHERE PE.id = P.evr_id)
)
12 years, 3 months
Changes to 'refs/tags/NPalert-1.126.30-1'
by Jan Pazdziora
Tag 'NPalert-1.126.30-1' created by Jan Pazdziora <jpazdziora(a)redhat.com> at 2012-01-30 10:08 +0000
Tagging package [NPalert] version [1.126.30-1] in directory [monitoring/NPalert/].
Changes since spacewalk-web-1.7.10-1:
Jan Pazdziora (2):
Avoid having the messages on different lines than their timestamps.
Automatic commit of package [NPalert] release [1.126.30-1].
---
monitoring/NPalert/NPalert.spec | 7 ++++++-
monitoring/NPalert/scripts/ack-processor | 2 +-
monitoring/NPalert/scripts/notif-escalator | 6 +++---
monitoring/NPalert/scripts/notif-launcher | 4 ++--
monitoring/NPalert/scripts/notifier | 4 ++--
rel-eng/packages/NPalert | 2 +-
6 files changed, 15 insertions(+), 10 deletions(-)
---
12 years, 3 months
2 commits - monitoring/NPalert rel-eng/packages
by Jan Pazdziora
monitoring/NPalert/NPalert.spec | 7 ++++++-
monitoring/NPalert/scripts/ack-processor | 2 +-
monitoring/NPalert/scripts/notif-escalator | 6 +++---
monitoring/NPalert/scripts/notif-launcher | 4 ++--
monitoring/NPalert/scripts/notifier | 4 ++--
rel-eng/packages/NPalert | 2 +-
6 files changed, 15 insertions(+), 10 deletions(-)
New commits:
commit 7b994ab08b5940f68e9ecad3313e974d9a71582e
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Mon Jan 30 11:08:37 2012 +0100
Automatic commit of package [NPalert] release [1.126.30-1].
diff --git a/monitoring/NPalert/NPalert.spec b/monitoring/NPalert/NPalert.spec
index 9d81544..a7d8a90 100644
--- a/monitoring/NPalert/NPalert.spec
+++ b/monitoring/NPalert/NPalert.spec
@@ -9,7 +9,7 @@ Name: NPalert
Summary: NOCpulse notification system
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
-Version: 1.126.29
+Version: 1.126.30
Release: 1%{?dist}
BuildArch: noarch
Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
@@ -137,6 +137,11 @@ fi
rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Jan 30 2012 Jan Pazdziora 1.126.30-1
+- Avoid having the messages on different lines than their timestamps.
+- Avoid having the output both in generate_config.log and GenerateNotifConfig-
+ error.log.
+
* Fri Jan 27 2012 Jan Pazdziora 1.126.29-1
- 730305 - Upon start, wait for generate-config to generate the config.
diff --git a/rel-eng/packages/NPalert b/rel-eng/packages/NPalert
index e8a0818..ba3d19a 100644
--- a/rel-eng/packages/NPalert
+++ b/rel-eng/packages/NPalert
@@ -1 +1 @@
-1.126.29-1 monitoring/NPalert/
+1.126.30-1 monitoring/NPalert/
commit de88e57e08988ff9ef965d2466f677011d2d7ead
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Mon Jan 30 11:06:33 2012 +0100
Avoid having the messages on different lines than their timestamps.
diff --git a/monitoring/NPalert/scripts/ack-processor b/monitoring/NPalert/scripts/ack-processor
index 903dc85..8eed893 100755
--- a/monitoring/NPalert/scripts/ack-processor
+++ b/monitoring/NPalert/scripts/ack-processor
@@ -70,7 +70,7 @@ while (1) {
# If a shutdown was requested, exit gracefully
if ($bailout) {
- $Log->log(1, "\n\nSystem shutdown requested\n\n");
+ $Log->log(1, "System shutdown requested\n");
$smtp->quit() if $smtp;
exit(0);
}
diff --git a/monitoring/NPalert/scripts/notif-escalator b/monitoring/NPalert/scripts/notif-escalator
index 20282c6..18fabe0 100755
--- a/monitoring/NPalert/scripts/notif-escalator
+++ b/monitoring/NPalert/scripts/notif-escalator
@@ -86,7 +86,7 @@ $SIG{'PIPE'} = sub { $Log->log(1,"SIGPIPE caught\n") };
my $STATE_FILE = "$tmp_dir/escalator.state";
my $Escalator;
- $Log->log(1,"\n\nSystem startup requested pid $$\n\n");
+ $Log->log(1,"System startup requested pid $$\n");
if (-r $STATE_FILE) {
$Log->log(3,"Opening escalator state file $STATE_FILE for system initialization...\n");
$Escalator = NOCpulse::Notif::Escalator->from_file($STATE_FILE);
@@ -114,9 +114,9 @@ while (1) {
$Log->log(3,"Removed stale locks\n");
$Log->log(9,"@files\n");
}
- $Log->log(1,"\n\nSystem shutdown requested\n\n");
+ $Log->log(1,"System shutdown requested\n");
$Escalator->shut_down();
- $Log->log(1,"\n\nSystem shutdown completed\n\n");
+ $Log->log(1,"System shutdown completed\n");
exit(0);
}
diff --git a/monitoring/NPalert/scripts/notif-launcher b/monitoring/NPalert/scripts/notif-launcher
index b08f31a..7bd0048 100755
--- a/monitoring/NPalert/scripts/notif-launcher
+++ b/monitoring/NPalert/scripts/notif-launcher
@@ -107,13 +107,13 @@ while (1) {
# If a shutdown was requested, exit gracefully
if ($bailout) {
- $Log->log(1,"\n\nSystem shutdown requested\n\n");
+ $Log->log(1,"System shutdown requested\n");
my @files=NOCpulse::Notif::AlertFile->remove_locks($TMPDIR,$program,$$);
if (scalar(@files)) {
$Log->log(3,"Removed stale locks\n");
$Log->log(9,"@files\n");
}
- $Log->log(1,"\n\nSystem shutdown completed\n\n");
+ $Log->log(1,"System shutdown completed\n");
exit(0);
}
diff --git a/monitoring/NPalert/scripts/notifier b/monitoring/NPalert/scripts/notifier
index 515d390..0313c13 100755
--- a/monitoring/NPalert/scripts/notifier
+++ b/monitoring/NPalert/scripts/notifier
@@ -87,7 +87,7 @@ while (1) {
# If a shutdown was requested, exit gracefully
if ($bailout) {
- $Log->log(1, "\n\nSystem shutdown requested\n\n");
+ $Log->log(1, "System shutdown requested\n");
my @files = NOCpulse::Notif::AlertFile->remove_locks($TMPDIR, $program, $$);
if (scalar(@files)) {
$Log->log(3, "Removed stale locks\n");
@@ -95,7 +95,7 @@ while (1) {
}
$smtp->quit() if $smtp;
$db->disconnect() if $db;
- $Log->log(1, "\n\nSystem shutdown completed\n\n");
+ $Log->log(1, "System shutdown completed\n");
exit(0);
} ## end if ($bailout)
12 years, 3 months
Changes to 'refs/tags/spacewalk-web-1.7.10-1'
by Miroslav Suchý
Tag 'spacewalk-web-1.7.10-1' created by Miroslav Suchý <msuchy(a)redhat.com> at 2012-01-30 10:05 +0000
Tagging package [spacewalk-web] version [1.7.10-1] in directory [web/].
Changes since rhnlib-2.5.51-1:
Jan Pazdziora (2):
The target_systems.pxt was migrated to Java years ago.
Avoid having the output both in generate_config.log and GenerateNotifConfig-error.log.
Miroslav Suchý (2):
In Spacewalk do not test presence of rhn-proxy family, if we want to display list of Proxies
Automatic commit of package [spacewalk-web] release [1.7.10-1].
---
monitoring/NPalert/scripts/generate-config | 2 +-
rel-eng/packages/spacewalk-web | 2 +-
web/html/nav/channel_detail.xml | 4 ++--
web/modules/sniglets/Sniglets/Servers.pm | 3 ++-
web/spacewalk-web.spec | 7 ++++++-
5 files changed, 12 insertions(+), 6 deletions(-)
---
12 years, 3 months
2 commits - rel-eng/packages web/modules web/spacewalk-web.spec
by Miroslav Suchý
rel-eng/packages/spacewalk-web | 2 +-
web/modules/sniglets/Sniglets/Servers.pm | 3 ++-
web/spacewalk-web.spec | 7 ++++++-
3 files changed, 9 insertions(+), 3 deletions(-)
New commits:
commit 84a6a7c97e0ec49996a75264a75389ee14863135
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Mon Jan 30 11:05:11 2012 +0100
Automatic commit of package [spacewalk-web] release [1.7.10-1].
diff --git a/rel-eng/packages/spacewalk-web b/rel-eng/packages/spacewalk-web
index 56ee0bb..05d211b 100644
--- a/rel-eng/packages/spacewalk-web
+++ b/rel-eng/packages/spacewalk-web
@@ -1 +1 @@
-1.7.9-1 web/
+1.7.10-1 web/
diff --git a/web/spacewalk-web.spec b/web/spacewalk-web.spec
index a4dc392..3787851 100644
--- a/web/spacewalk-web.spec
+++ b/web/spacewalk-web.spec
@@ -2,7 +2,7 @@ Name: spacewalk-web
Summary: Spacewalk Web site - Perl modules
Group: Applications/Internet
License: GPLv2
-Version: 1.7.9
+Version: 1.7.10
Release: 1%{?dist}
URL: https://fedorahosted.org/spacewalk/
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
@@ -253,6 +253,11 @@ rm -rf $RPM_BUILD_ROOT
# $Id$
%changelog
+* Mon Jan 30 2012 Miroslav Suchý 1.7.10-1
+- In Spacewalk do not test presence of rhn-proxy family, if we want to display
+ list of Proxies
+- The target_systems.pxt was migrated to Java years ago.
+
* Thu Jan 26 2012 Michael Mraka <michael.mraka(a)redhat.com> 1.7.9-1
- delete server sets at once
commit 407a6f16b6c43e0c4f48e00abdef83ec07742e3e
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Mon Jan 30 11:04:02 2012 +0100
In Spacewalk do not test presence of rhn-proxy family, if we want to display list of Proxies
diff --git a/web/modules/sniglets/Sniglets/Servers.pm b/web/modules/sniglets/Sniglets/Servers.pm
index 3c9f7c7..548d3e2 100644
--- a/web/modules/sniglets/Sniglets/Servers.pm
+++ b/web/modules/sniglets/Sniglets/Servers.pm
@@ -23,6 +23,7 @@ use File::Spec;
use Data::Dumper;
use Date::Parse;
+use PXT::Config ();
use PXT::Utils;
use PXT::HTML;
@@ -148,7 +149,7 @@ sub proxy_entitlement_form {
my $block = $params{__block__};
throw "User '" . $pxt->user->id . "' attempted to access proxy interface without permission."
- unless $pxt->user->org->has_channel_family_entitlement('rhn-proxy');
+ unless ($pxt->user->org->has_channel_family_entitlement('rhn-proxy') or not PXT::Config->get('subscribe_proxy_channel'));
my $sid = $pxt->param('sid');
throw "no server id!" unless $sid;
12 years, 3 months
monitoring/NPalert
by Jan Pazdziora
monitoring/NPalert/scripts/generate-config | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
New commits:
commit 268404085685137f844a5b6786833761b14a38e8
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Mon Jan 30 10:59:18 2012 +0100
Avoid having the output both in generate_config.log and GenerateNotifConfig-error.log.
diff --git a/monitoring/NPalert/scripts/generate-config b/monitoring/NPalert/scripts/generate-config
index ab1e063..d65f1c1 100755
--- a/monitoring/NPalert/scripts/generate-config
+++ b/monitoring/NPalert/scripts/generate-config
@@ -78,7 +78,7 @@ my %FILES; # List of files being generated
my $log_level = 3;
my $Log = NOCpulse::Log::Logger->new(__PACKAGE__, $log_level, 0);
-my $stream = NOCpulse::Log::LogManager->instance->add_stream(
+my $stream = NOCpulse::Log::LogManager->instance->stream(
FILE => "$LOGDIR/generate_config.log",
LEVEL => 4,
APPEND => 1,
12 years, 3 months
web/html
by Jan Pazdziora
web/html/nav/channel_detail.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
New commits:
commit 3a9fdd35ad9efbdb0f7ba365ba809e189930648e
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Mon Jan 30 08:49:09 2012 +0100
The target_systems.pxt was migrated to Java years ago.
Addressing
404 when clicking on /network/software/channels/managers.pxt?cid=104 -> /network/software/channels/target_systems.pxt?channel_detail_navi_node=target_systems_for_channel&cid=104
diff --git a/web/html/nav/channel_detail.xml b/web/html/nav/channel_detail.xml
index 2e78a80..ae6ce2e 100644
--- a/web/html/nav/channel_detail.xml
+++ b/web/html/nav/channel_detail.xml
@@ -25,8 +25,8 @@
<rhn-tab name="Subscribed Systems" on-click="Sniglets::Lists->navi_empty_set" node-id="systems_subscribed_to_channel">
<rhn-tab-url>/rhn/channels/ChannelSubscribers.do</rhn-tab-url>
</rhn-tab>
- <rhn-tab name="Target Systems" on-click="Sniglets::Lists->navi_empty_set" node-id="target_systems_for_channel" acl="channel_subscribable()">
- <rhn-tab-url>/network/software/channels/target_systems.pxt</rhn-tab-url>
+ <rhn-tab name="Target Systems" acl="channel_subscribable()">
+ <rhn-tab-url>/rhn/channels/TargetSystems.do</rhn-tab-url>
</rhn-tab>
<rhn-tab name="Downloads" acl="channel_has_downloads()" url="/rhn/software/channel/downloads/Download.do" />
</rhn-navi-tree>
12 years, 3 months
Branch 'errata-date' - 2 commits - utils/cloneByDate.py
by Justin Sherrill
utils/cloneByDate.py | 248 ++++++++++++++++++++++++++++++++++++---------------
1 file changed, 177 insertions(+), 71 deletions(-)
New commits:
commit c0caebe95a29451ecccf92f0ca45d849da347e08
Author: Justin Sherrill <jsherril(a)redhat.com>
Date: Fri Jan 27 16:31:14 2012 -0500
moving dep solver to channel tree from individual channel
diff --git a/utils/cloneByDate.py b/utils/cloneByDate.py
index 16bf870..d39438d 100644
--- a/utils/cloneByDate.py
+++ b/utils/cloneByDate.py
@@ -17,7 +17,7 @@
# in this software or its documentation.
#
-import pdb
+
import sys
import time
import copy
@@ -94,9 +94,8 @@ def main(options):
##
# Usage:
-# a = ChannelTreeCloner(channel_hash, xmlrpc, db, to_date)
-# if len(a.needing_channels()) > 0:
-# a.create_channels()
+# a = ChannelTreeCloner(channel_hash, xmlrpc, db, to_date)
+# a.create_channels()
# a.prepare()
# a.clone()
#
@@ -128,25 +127,23 @@ class ChannelTreeCloner:
total += cloner.pending()
return total
- def find_cloner(self, label):
- for cloner in self.cloners:
- if cloner.dest_label() == label:
- return cloner
-
def create_channels(self):
to_create = self.needing_create()
if len(to_create) == 0:
return
dest_parent = self.channel_map[self.src_parent]
+ nvreas = []
if to_create.count(dest_parent) > 0:
self.remote_api.clone_channel(self.src_parent, dest_parent, None)
to_create.remove(dest_parent)
- self.find_cloner(dest_parent).after_create()
- for from_label, to_label in self.channel_map.items():
- if to_create.count(to_label) > 0:
- self.remote_api.clone_channel(from_label, to_label, dest_parent)
- self.find_cloner(to_label).after_create()
-
+ cloner = self.cloners[0]
+ nvreas += [ pkg['nvrea'] for pkg in cloner.reset_new_pkgs().values()]
+
+ for cloner in self.cloners:
+ if cloner.dest_label() in to_create:
+ self.remote_api.clone_channel(cloner.src_label(), cloner.dest_label(), dest_parent)
+ nvreas += [ pkg['nvrea'] for pkg in cloner.reset_new_pkgs().values() ]
+ self.dep_solve(nvreas, labels=to_create)
def validate_source_channels(self):
@@ -194,10 +191,60 @@ class ChannelTreeCloner:
cloner.pre_summary();
def clone(self):
+ added_pkgs = []
for cloner in self.cloners:
cloner.process()
+ added_pkgs += cloner.pkg_diff()
+ self.dep_solve(added_pkgs)
+
+
+ def dep_solve(self, nvrea_list, labels=None):
+ if not labels:
+ labels = self.channel_map.keys()
+ repos = [{"id":label, "relative_path":self.repodata(label)} for label in labels]
+
+ print "Solving deps"
+
+ solver = DepSolver(repos, nvrea_list)
+ dep_results = solver.processResults(solver.getDependencylist())
+
+ print "Processing"
+ self.process_deps(dep_results)
+
+
+ def process_deps(self, deps):
+ needed_list = dict((label, []) for label in self.channel_map.values())
+ unsolved_deps = []
+ #loop through all the deps and find any that don't exist in the
+ # destination channels
+ for pkg in deps:
+ for dep, solved_list in pkg.items():
+ found = False
+ for cloner in self.cloners:
+ if cloner.src_pkg_exist(solved_list) and not cloner.dest_pkg_exist(solved_list):
+ needed_list[cloner.dest_label()].append(solved_list[0]) #grab oldest package
+ found = True
+ if not found:
+ unsolved_deps.append((pkg))
+
+ print "Unsolved deps: %i" % len(unsolved_deps)
+ print "Needed deps: "
+ for label in needed_list.keys():
+ print "%s: %i" % (label, len(needed_list[label]))
+
+ #import pdb; pdb.set_trace()
+ for cloner in self.cloners:
+ needed = needed_list[cloner.dest_label()]
+ if len(needed) > 0:
+ cloner.process_deps(needed)
+
+ def repodata(self, label):
+ repo_dir = "/var/cache/rhn/repodata/%s" % label
+ tmp_dir = tempfile.mkdtemp(suffix="clone-by-date")
+ shutil.copytree(repo_dir, tmp_dir + "/repodata/")
+ return tmp_dir
@@ -209,15 +256,39 @@ class ChannelCloner:
self.from_label = from_label
self.to_label = to_label
self.to_date = to_date
- self.original_packages = None
+
+
+ self.from_pkg_hash = None
+
+ self.new_pkg_hash = {}
+ self.old_pkg_hash = {}
def dest_label(self):
return self.to_label
+
+ def src_label(self):
+ return self.from_label
+
+ def pkg_diff(self):
+ return self.diff_packages(self.old_pkg_hash.values(), self.new_pkg_hash.values())
+
- def prepare(self):
- self.original_packages = self.remote_api.list_packages(self.to_label)
- self.errata_to_clone, self.available_errata = self.get_errata()
+ def reset_original_pkgs(self):
+ self.old_pkg_hash = self.list_to_hash(self.remote_api.list_packages(self.to_label), 'nvrea')
+ return self.old_pkg_hash
+
+ def reset_new_pkgs(self):
+ self.new_pkg_hash = self.list_to_hash(self.remote_api.list_packages(self.to_label), 'nvrea')
+ return self.new_pkg_hash
+
+ def reset_from_pkgs(self):
+ self.from_pkg_hash = self.list_to_hash(self.remote_api.list_packages(self.from_label), 'nvrea')
+
+ def prepare(self):
+ self.reset_original_pkgs()
+ self.errata_to_clone, self.available_errata = self.get_errata()
+
def pending(self):
return len(self.errata_to_clone)
@@ -227,51 +298,14 @@ class ChannelCloner:
def process(self):
self.clone();
- new_packages = self.remote_api.list_packages(self.to_label)
- pkg_diff = self.diff_packages(self.original_packages, new_packages)
- print "New packages added: %i" % len(pkg_diff)
- self.dep_solve(pkg_diff, new_packages)
-
- def after_create(self):
- new_packages = self.remote_api.list_packages(self.to_label)
- self.dep_solve(new_packages, new_packages)
-
- # pkg_list - list of packages to solve deps for
- # trim_list - list of packages that already exist
- def dep_solve(self, pkg_list, trim_list):
- repo_dir = self.repodata(self.from_label)
- print "Solving deps"
- nvreas = [pkg['nvrea'] for pkg in pkg_list]
- solver = DepSolver([{"id":self.from_label, "relative_path":repo_dir}], nvreas)
- dep_results = solver.processResults(solver.getDependencylist())
-
- print "Processing"
- self.process_deps(trim_list, dep_results)
-
-
- def process_deps(self, new_packages, deps):
- to_pkg_hash = self.list_to_hash(new_packages, 'nvrea')
-
- needed_list = []
-
- for pkg in deps:
- for dep, solved_list in pkg.items():
-# if dep == "qffmpeg-libs = 0.4.9-0.16.20080908.el5_5":
-# import pdb; pdb.set_trace();
- if not self.pkg_exists(solved_list, to_pkg_hash):
- if len(solved_list) > 0:
- needed_list.append(solved_list[0]) #grab oldest package
- else:
- print "No packages %s" % dep
-
- print "Unsolved deps: %i" % len(needed_list)
-
- from_pkg_hash = self.list_to_hash(self.remote_api.list_packages(self.from_label), 'nvrea')
-
+ self.reset_new_pkgs()
+ print "New packages added: %i" % len(len(self.new_pkg_hash) - len(self.old_pkg_hash))
+
+ def process_deps(self, needed_pkgs):
needed_ids = []
unsolved_deps = []
- for pkg in needed_list:
- found = self.pkg_exists([pkg], from_pkg_hash)
+ for pkg in needed_pkgs:
+ found = self.src_pkg_exist([pkg])
if found:
needed_ids.append(found['id'])
else:
@@ -291,14 +325,21 @@ class ChannelCloner:
pkg_hash[pkg[key]] = pkg
return pkg_hash
+ def src_pkg_exist(self, needed_list):
+ if not self.from_pkg_hash:
+ self.reset_from_pkgs()
+ return self.pkg_exists(needed_list, self.from_pkg_hash)
+
+ def dest_pkg_exist(self, needed_list):
+ return self.pkg_exists(needed_list, self.new_pkg_hash)
- def pkg_exists(self, needed_list, pkg_hash):
+ def pkg_exists(self, needed_list, pkg_list):
"""Given a list of packages in [N, V, E, R, A] format, do any of them exist
in the pkg_hash with key of N-V-R.A format"""
for i in needed_list:
key = "%s-%s-%s.%s" % (i[0], i[1], i[3], i[4])
- if pkg_hash.has_key(key):
- return pkg_hash[key]
+ if pkg_list.has_key(key):
+ return pkg_list[key]
return False
def diff_packages(self, old, new):
@@ -347,6 +388,7 @@ class ChannelCloner:
""" Returns tuple of all available for cloning, and what falls in the date range"""
available_errata = self.db_api.applicable_errata(self.from_label, self.to_label)
to_clone = []
+
for err in available_errata:
if err['issue_date'] <= self.to_date:
to_clone.append(err)
@@ -402,11 +444,11 @@ class RemoteApi:
except xmlrpclib.Fault, e:
raise UserError(e.faultString + ": " + label)
- def add_packages(self, label, package_ids):
+ def add_packages(self, label, package_ids):
while(len(package_ids) > 0):
set = package_ids[:20]
del package_ids[:20]
- self.client.channel.software.addPackages(self.auth_token, label, package_ids)
+ self.client.channel.software.addPackages(self.auth_token, label, set)
def clone_channel(self, original_label, new_label, parent):
details = {'name': new_label, 'label':new_label, 'summary': new_label}
@@ -451,7 +493,8 @@ class DBApi:
where c2.label = :to_label)
""")
h.execute(from_label=from_label, to_label=to_label)
- return h.fetchall_dict()
+ to_ret = h.fetchall_dict() or []
+ return to_ret
class UserError(Exception):
def __init__(self, msg):
commit 7127884dbed67250a8ef0f214169a4617e1367f7
Author: Justin Sherrill <jsherril(a)redhat.com>
Date: Wed Jan 25 09:47:14 2012 -0500
errata date clone - locating and adding deps from dep solver
diff --git a/utils/cloneByDate.py b/utils/cloneByDate.py
index e97fe38..16bf870 100644
--- a/utils/cloneByDate.py
+++ b/utils/cloneByDate.py
@@ -61,8 +61,8 @@ def main(options):
cloners = []
needed_channels = []
- for list in options.channels:
- tree_cloner = ChannelTreeCloner(list, xmlrpc, db, options.to_date)
+ for channel_list in options.channels:
+ tree_cloner = ChannelTreeCloner(channel_list, xmlrpc, db, options.to_date)
cloners.append(tree_cloner)
needed_channels += tree_cloner.needing_create()
@@ -73,23 +73,33 @@ def main(options):
for cloner in cloners:
cloner.create_channels()
-
-
for tree_cloner in cloners:
tree_cloner.prepare();
print "\nBy continuing the following will be cloned:"
+ total = 0
for cloner in cloners:
cloner.pre_summary()
- print "\n"
- confirm("Continue with clone (y/n)?", options)
+ total += cloner.pending()
+ if total == 0:
+ print ("\nNothing to do.")
+ sys.exit(0)
+
+ confirm("\nContinue with clone (y/n)?", options)
for cloner in cloners:
cloner.clone()
-
+##
+# Usage:
+# a = ChannelTreeCloner(channel_hash, xmlrpc, db, to_date)
+# if len(a.needing_channels()) > 0:
+# a.create_channels()
+# a.prepare()
+# a.clone()
+#
class ChannelTreeCloner:
def __init__(self, channels, remote_api, db_api, to_date):
self.remote_api = remote_api
@@ -98,6 +108,11 @@ class ChannelTreeCloner:
self.to_date = to_date
self.cloners = []
self.validate_source_channels()
+
+ for from_label in self.ordered_labels():
+ to_label = self.channel_map[from_label]
+ cloner = ChannelCloner(from_label, to_label, self.to_date, self.remote_api, self.db_api)
+ self.cloners.append(cloner)
def needing_create(self):
to_ret = []
@@ -107,6 +122,16 @@ class ChannelTreeCloner:
to_ret.append(label)
return to_ret
+ def pending(self):
+ total = 0
+ for cloner in self.cloners:
+ total += cloner.pending()
+ return total
+
+ def find_cloner(self, label):
+ for cloner in self.cloners:
+ if cloner.dest_label() == label:
+ return cloner
def create_channels(self):
to_create = self.needing_create()
@@ -116,10 +141,13 @@ class ChannelTreeCloner:
if to_create.count(dest_parent) > 0:
self.remote_api.clone_channel(self.src_parent, dest_parent, None)
to_create.remove(dest_parent)
+ self.find_cloner(dest_parent).after_create()
for from_label, to_label in self.channel_map.items():
if to_create.count(to_label) > 0:
self.remote_api.clone_channel(from_label, to_label, dest_parent)
-
+ self.find_cloner(to_label).after_create()
+
+
def validate_source_channels(self):
self.channel_details = self.remote_api.channel_details(self.channel_map, values=False)
@@ -151,17 +179,14 @@ class ChannelTreeCloner:
def ordered_labels(self):
"""Return list of labels with parent first"""
- list = self.channel_map.keys()
- list.remove(self.src_parent)
- list.insert(0,self.src_parent)
- return list
+ labels = self.channel_map.keys()
+ labels.remove(self.src_parent)
+ labels.insert(0,self.src_parent)
+ return labels
- def prepare(self):
- for from_label in self.ordered_labels():
- to_label = self.channel_map[from_label]
- self.validate_dest_channels()
- cloner = ChannelCloner(from_label, to_label, self.to_date, self.remote_api, self.db_api)
- self.cloners.append(cloner)
+ def prepare(self):
+ self.validate_dest_channels()
+ for cloner in self.cloners:
cloner.prepare()
def pre_summary(self):
@@ -169,7 +194,7 @@ class ChannelTreeCloner:
cloner.pre_summary();
def clone(self):
- for cloner in self.cloners:
+ for cloner in self.cloners:
cloner.process()
@@ -186,58 +211,95 @@ class ChannelCloner:
self.to_date = to_date
self.original_packages = None
+
+ def dest_label(self):
+ return self.to_label
+
def prepare(self):
self.original_packages = self.remote_api.list_packages(self.to_label)
self.errata_to_clone, self.available_errata = self.get_errata()
+ def pending(self):
+ return len(self.errata_to_clone)
+
def pre_summary(self):
print "%s -> %s (%i/%i Errata)" %(self.from_label, self.to_label, len(self.errata_to_clone), len(self.available_errata))
def process(self):
self.clone();
new_packages = self.remote_api.list_packages(self.to_label)
- pkg_diff = self.diff_packages(self.original_packages, new_packages)
-
+ pkg_diff = self.diff_packages(self.original_packages, new_packages)
print "New packages added: %i" % len(pkg_diff)
+ self.dep_solve(pkg_diff, new_packages)
+ def after_create(self):
+ new_packages = self.remote_api.list_packages(self.to_label)
+ self.dep_solve(new_packages, new_packages)
+
+ # pkg_list - list of packages to solve deps for
+ # trim_list - list of packages that already exist
+ def dep_solve(self, pkg_list, trim_list):
repo_dir = self.repodata(self.from_label)
-
print "Solving deps"
- nvreas = [pkg['nvrea'] for pkg in pkg_diff]
+ nvreas = [pkg['nvrea'] for pkg in pkg_list]
solver = DepSolver([{"id":self.from_label, "relative_path":repo_dir}], nvreas)
dep_results = solver.processResults(solver.getDependencylist())
- #import pdb; pdb.set_trace()
print "Processing"
- self.process_deps(new_packages, dep_results)
-
- #self.remote_api.add_packages()
+ self.process_deps(trim_list, dep_results)
+
+
+ def process_deps(self, new_packages, deps):
+ to_pkg_hash = self.list_to_hash(new_packages, 'nvrea')
- def process_deps(self, pkg_list, deps):
- pkg_hash = {}
- for pkg in pkg_list:
- pkg_hash[pkg['nvrea']] = pkg
-
needed_list = []
- for pkg in deps:
-
+
+ for pkg in deps:
for dep, solved_list in pkg.items():
- if not self.pkg_exists(solved_list, pkg_hash):
- needed_list.append(solved_list)
- print len(needed_list)
-
+# if dep == "qffmpeg-libs = 0.4.9-0.16.20080908.el5_5":
+# import pdb; pdb.set_trace();
+ if not self.pkg_exists(solved_list, to_pkg_hash):
+ if len(solved_list) > 0:
+ needed_list.append(solved_list[0]) #grab oldest package
+ else:
+ print "No packages %s" % dep
+
+ print "Unsolved deps: %i" % len(needed_list)
+
+ from_pkg_hash = self.list_to_hash(self.remote_api.list_packages(self.from_label), 'nvrea')
+
+ needed_ids = []
+ unsolved_deps = []
+ for pkg in needed_list:
+ found = self.pkg_exists([pkg], from_pkg_hash)
+ if found:
+ needed_ids.append(found['id'])
+ else:
+ unsolved_deps.append(pkg)
+
+ if len(needed_ids) > 0:
+ print "Adding dependencies: %i" % len(needed_ids)
+ self.remote_api.add_packages(self.to_label, needed_ids)
+ if len(unsolved_deps) > 0:
+ print "Unresolved dependencies: %i" % len(unsolved_deps)
+
+
+
+ def list_to_hash(self, pkg_list, key):
+ pkg_hash = {}
+ for pkg in pkg_list:
+ pkg_hash[pkg[key]] = pkg
+ return pkg_hash
+
- def pkg_exists(self, list, pkg_hash):
+ def pkg_exists(self, needed_list, pkg_hash):
"""Given a list of packages in [N, V, E, R, A] format, do any of them exist
- in the pkg_hash with key of N-V-R.A format"""
- for i in list:
+ in the pkg_hash with key of N-V-R.A format"""
+ for i in needed_list:
key = "%s-%s-%s.%s" % (i[0], i[1], i[3], i[4])
if pkg_hash.has_key(key):
- return True
+ return pkg_hash[key]
return False
-
-
-
def diff_packages(self, old, new):
old_hash = {}
@@ -250,7 +312,7 @@ class ChannelCloner:
new_hash[pkg["id"]] = pkg
id_diff = set(new_hash.keys()) - set(old_hash.keys())
for id in id_diff:
- to_ret.append(new_hash[id])
+ to_ret.append(new_hash[id])
return to_ret
@@ -266,6 +328,7 @@ class ChannelCloner:
del errata_ids[:bunch_size]
self.remote_api.clone_errata(self.to_label, errata_set)
pb.addTo(bunch_size)
+ pb.printIncrement()
pb.printComplete()
def collect(self, items, attribute):
@@ -281,7 +344,7 @@ class ChannelCloner:
return tmp_dir
def get_errata(self):
- """ Returns tuple of all available for cloning, and what falls in teh date range"""
+ """ Returns tuple of all available for cloning, and what falls in the date range"""
available_errata = self.db_api.applicable_errata(self.from_label, self.to_label)
to_clone = []
for err in available_errata:
@@ -301,16 +364,15 @@ class RemoteApi:
self.auth_token = self.client.auth.login(username, password)
except xmlrpclib.Fault, e:
raise UserError(e.faultString)
-
-
+
def list_channel_labels(self):
key = "chan_labels"
if self.cache.has_key(key):
return self.cache[key]
- list = self.client.channel.listAllChannels(self.auth_token)
+ chan_list = self.client.channel.listAllChannels(self.auth_token)
to_ret = []
- for item in list:
+ for item in chan_list:
to_ret.append(item["label"])
self.cache[key] = to_ret
return to_ret
@@ -367,7 +429,8 @@ class DBApi:
def applicable_errata(self, from_label, to_label):
- """list of errata that is applicable to be cloned, used db because we need to exclude cloned errata too"""
+ """list of errata that is applicable to be cloned, used db because we
+ need to exclude cloned errata too"""
h = rhnSQL.prepare("""
select e.id, e.advisory_name, e.advisory_type, e.issue_date
from rhnErrata e inner join
12 years, 3 months
Changes to 'refs/tags/rhnlib-2.5.51-1'
by Jan Pazdziora
Tag 'rhnlib-2.5.51-1' created by Jan Pazdziora <jpazdziora(a)redhat.com> at 2012-01-27 16:08 +0000
Tagging package [rhnlib] version [2.5.51-1] in directory [client/rhel/rhnlib/].
Changes since spacewalk-java-1.7.11-1:
Jan Pazdziora (1):
Automatic commit of package [rhnlib] release [2.5.51-1].
---
client/rhel/rhnlib/rhnlib.spec | 5 ++++-
rel-eng/packages/rhnlib | 2 +-
2 files changed, 5 insertions(+), 2 deletions(-)
---
12 years, 3 months