Opened 15 years ago
Closed 13 years ago
#8454 closed defect (wontfix)
Encountered an KeyError while running repo search using Trac .12 version RepoSearchPlugin
| Reported by: | Chris Galante | Owned by: | Ryan J Ollos |
|---|---|---|---|
| Priority: | high | Component: | RepoSearchPlugin |
| Severity: | major | Keywords: | KeyError |
| Cc: | Chris Galante, ejucovy | Trac Release: | 0.12 |
Description (last modified by )
Oops… Trac detected an internal error: KeyError: This is probably a local installation issue.
Found a bug in Trac? If you think this should work and you can reproduce the problem, you should consider creating a bug report.
Note that the tracreposearch plugin seems to be involved. Please report this issue to the plugin maintainer.
Before you do that, though, please first try searching for similar issues, as it is quite likely that this problem has been reported before. For questions about installation and configuration of Trac or its plugins, please try the mailing list instead of creating a ticket.
While doing a GET operation on /search, Trac issued an internal error.
(please provide additional details here)
Request parameters:
{'q': u'setup.py', 'repo': u'on', 'noquickjump': u'1'}
User agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; MS-RTC LM 8; SFIEAUTH1)
System Information
Trac 0.12.1
CustomFieldAdmin 0.2.2
Genshi 0.6
mod_wsgi 3.2 (WSGIProcessGroup WSGIApplicationGroup %{GLOBAL})
psycopg2 2.2.2
Pygments 1.4
Python 2.4.3 (#1, Jun 11 2009, 14:09:37)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)]
RPC 1.0.6
setuptools 0.6c5
Subversion 1.6.11 (r934486)
jQuery 1.4.2
Enabled Plugins
AnnouncerPlugin 0.2
BreadCrumbsNavPlugin 0.1
FlexibleAssignTo 0.6.20100524sf
GetValidOwnerProvider 0.1.20100523sf
GridModify 0.1.5
HudsonTrac 0.3
IniAdmin 0.2
RepositoryHookSystem 0.1.1
siteupload 0.11dev
SvnAuthzAdminPlugin 0.1.2p
TicketCreationStatus 0.1
TicketImport 0.8
ticketvalidator.admin N/A
ticketvalidator.core N/A
TracCustomFieldAdmin 0.2.2
TracDiscussion 0.7
TracProgressMeterMacro 0.2
tracreposearch 0.2
TracXMLRPC 1.0.6
TypedTicketWorkflow-plugin 0.1dev
Python Traceback
Traceback (most recent call last):
File "build/bdist.linux-x86_64/egg/trac/web/main.py", line 511, in _dispatch_request
File "build/bdist.linux-x86_64/egg/trac/web/main.py", line 237, in dispatch
File "build/bdist.linux-x86_64/egg/trac/search/web_ui.py", line 96, in process_request
File "build/bdist.linux-x86_64/egg/trac/search/web_ui.py", line 200, in _do_search
File "build/bdist.linux-x86_64/egg/tracreposearch/search.py", line 80, in get_search_results
File "build/bdist.linux-x86_64/egg/tracreposearch/indexer.py", line 97, in wrap
File "build/bdist.linux-x86_64/egg/tracreposearch/indexer.py", line 247, in reindex
File "build/bdist.linux-x86_64/egg/tracreposearch/indexer.py", line 229, in _invalidate_file
File "build/bdist.linux-x86_64/egg/tracreposearch/indexer.py", line 42, in __getitem__
File "/usr/lib64/python2.4/bsddb/__init__.py", line 219, in __getitem__
return self.db[key]
KeyError: ''
}}} a new bug report describing the problem and explain how to reproduce it.
Python Traceback
Most recent call last:
File "build/bdist.linux-x86_64/egg/trac/web/main.py", line 511, in _dispatch_request
Code fragment:
Line
506 try:
507 if not env and env_error:
508 raise HTTPInternalError(env_error)
509 try:
510 dispatcher = RequestDispatcher(env)
511 dispatcher.dispatch(req)
512 except RequestDone:
513 pass
514 resp = req._response or []
515
516 except HTTPException, e:
Local variables:
Name Value
dispatcher <trac.web.main.RequestDispatcher object at 0x2aafa853bd50>
e <exceptions.KeyError instance at 0x2aafa601f710>
env <trac.env.Environment object at 0x2aafa4d81910>
env_error None
req <Request "GET '/search'">
resp []
File "build/bdist.linux-x86_64/egg/trac/web/main.py", line 237, in dispatch
Code fragment:
Line
232 msg = _('Do you have cookies enabled?')
233 raise HTTPBadRequest(_('Missing or invalid form token.'
234 ' %(msg)s', msg=msg))
235
236 # Process the request and render the template
237 resp = chosen_handler.process_request(req)
238 if resp:
239 if len(resp) == 2: # Clearsilver
240 chrome.populate_hdf(req)
241 template, content_type = \
242 self._post_process_request(req, *resp)
Local variables:
Name Value
chosen_handler <trac.search.web_ui.SearchModule object at 0x2aafa853b950>
chrome <trac.web.chrome.Chrome object at 0x2aafa853b1d0>
err (<class exceptions.KeyError at 0x2aafa0cb0950>, <exceptions.KeyError ...
handler <trac.search.web_ui.SearchModule object at 0x2aafa853b950>
req <Request "GET '/search'">
self <trac.web.main.RequestDispatcher object at 0x2aafa853bd50>
File "build/bdist.linux-x86_64/egg/trac/search/web_ui.py", line 96, in process_request
Code fragment:
Line
91 if query.startswith('!'):
92 query = query[1:]
93
94 terms = self._parse_query(req, query)
95 if terms:
96 results = self._do_search(req, terms, filters)
97 if results:
98 data.update(self._prepare_results(req, filters, results))
99
100 add_stylesheet(req, 'common/css/search.css')
101 return 'search.html', data, None
Local variables:
Name Value
available_filters [('discussion', u'Discussion'), ('wiki', 'Wiki'), ('ticket', 'Tickets'), ...
data {'quickjump': None, 'query': u'setup.py', 'results': [], 'filters': ...
filters ['repo']
query u'setup.py'
req <Request "GET '/search'">
self <trac.search.web_ui.SearchModule object at 0x2aafa853b950>
source <tracreposearch.search.TracRepoSearchPlugin object at 0x2aafa41b4410>
terms [u'setup.py']
File "build/bdist.linux-x86_64/egg/trac/search/web_ui.py", line 200, in _do_search
Code fragment:
Line
195 num=self.min_query_length))
196
197 def _do_search(self, req, terms, filters):
198 results = []
199 for source in self.search_sources:
200 results.extend(source.get_search_results(req, terms, filters)
201 or [])
202 return sorted(results, key=lambda x: x[2], reverse=True)
203
204 def _prepare_results(self, req, filters, results):
205 page = int(req.args.get('page', '1'))
Local variables:
Name Value
filters ['repo']
req <Request "GET '/search'">
results []
self <trac.search.web_ui.SearchModule object at 0x2aafa853b950>
source <tracreposearch.search.TracRepoSearchPlugin object at 0x2aafa41b4410>
terms [u'setup.py']
File "build/bdist.linux-x86_64/egg/tracreposearch/search.py", line 80, in get_search_results
Code fragment:
Line
75
76 # Use indexer if possible, otherwise fall back on brute force search.
77 try:
78 from tracreposearch.indexer import Indexer
79 self.indexer = Indexer(self.env)
80 self.indexer.reindex()
81 walker = lambda repo, query: [repo.get_node(filename) for filename
82 in self.indexer.find_words(query)]
83 except TracError, e:
84 self.env.log.warning(e)
85 self.env.log.warning('Falling back on full repository walk')
Local variables:
Name Value
Indexer <class tracreposearch.indexer.Indexer at 0x2aafa7b05890>
db <trac.db.pool.PooledConnection object at 0x2aafa84cdd20>
excludes [u'*.pyc', u'*.png', u'*.jpg', u'*.gif']
filters ['repo']
include [u'*.py', u'*.txt']
q u'setup.py'
query [u'setup.py']
repo <trac.versioncontrol.svn_fs.SvnCachedRepository object at 0x2aafa84e7290>
req <Request "GET '/search'">
self <tracreposearch.search.TracRepoSearchPlugin object at 0x2aafa41b4410>
to_unicode <bound method Mimeview.to_unicode of <trac.mimeview.api.Mimeview object at ...
File "build/bdist.linux-x86_64/egg/tracreposearch/indexer.py", line 97, in wrap
Code fragment:
Line
92 def synchronized(f):
93 """ Synchronization decorator. """
94 def wrap(*args, **kw):
95 acquire_lock()
96 try:
97 return f(*args, **kw)
98 finally:
99 release_lock()
100 return wrap
101
102 class Indexer:
Local variables:
Name Value
args (<tracreposearch.indexer.Indexer instance at 0x2aafa7ae0128>,)
f <function reindex at 0x2aaaaabf85f0>
kw {}
File "build/bdist.linux-x86_64/egg/tracreposearch/indexer.py", line 247, in reindex
Code fragment:
Line
242 for node in TracRepoSearchPlugin(self.env).walk_repo(self.repo):
243 if node.kind != Node.DIRECTORY:
244 # Node has changed?
245 if int(self.revs.get(node.path.encode('utf-8'), -1)) != node.rev:
246 self.env.log.debug("Reindexing %s" % node.path)
247 self._invalidate_file(node.path)
248 self._reindex_node(node)
249 new_files.add(node.path)
250
251 # All files that don't match the new filter criteria must be purged
252 # from the index
Local variables:
Name Value
new_files set([u'TracFlexibleAssignToPlugin/tags/LTS-TracFlexibleAssignToPlugin-0.6.0 ...
node <trac.versioncontrol.svn_fs.SubversionNode object at 0x2aafa84d9890>
self <tracreposearch.indexer.Indexer instance at 0x2aafa7ae0128>
start 1296228220.4522619
File "build/bdist.linux-x86_64/egg/tracreposearch/indexer.py", line 229, in _invalidate_file
Code fragment:
Line
224 _reindex_node = _reindex_node
225
226 def _invalidate_file(self, file):
227 if file in self.files:
228 for word in self.files[file]:
229 word_files = self.words[word]
230 word_files.discard(file)
231 self.words[word] = word_files
232 self.env.log.debug("Invalidated stale index entry %s" % file)
233
234 def reindex(self):
Local variables:
Name Value
file u'TracProgressMeterMacro/branches/0.12.1/setup.py'
self <tracreposearch.indexer.Indexer instance at 0x2aafa7ae0128>
word u''
File "build/bdist.linux-x86_64/egg/tracreposearch/indexer.py", line 42, in __getitem__
Code fragment:
Line
37
38 def __getitem__(self, key):
39 key = key.encode('utf-8')
40 if key in self._cache:
41 return self._cache[key]
42 return self._cache.setdefault(key, set(self.dbm[key].decode('utf-8').split(pathsep)))
43
44 def __setitem__(self, key, value):
45 key = key.encode('utf-8')
46 self._cache[key] = self._flush[key] = value
47
Local variables:
Name Value
key ''
self <tracreposearch.indexer.psetdict object at 0x2aafa6058f90>
File "/usr/lib64/python2.4/bsddb/__init__.py", line 219, in __getitem__
Code fragment:
Line
214 self._checkOpen()
215 return len(self.db)
216
217 def __getitem__(self, key):
218 self._checkOpen()
219 return self.db[key]
220
221 def __setitem__(self, key, value):
222 self._checkOpen()
223 self._closeCursors()
224 self.db[key] = value
Local variables:
Name Value
key ''
self {'+189,13': ...
File "build/bdist.linux-x86_64/egg/trac/web/main.py", line 511, in _dispatch_request
dispatcher.dispatch(req)
File "build/bdist.linux-x86_64/egg/trac/web/main.py", line 237, in dispatch
resp = chosen_handler.process_request(req)
File "build/bdist.linux-x86_64/egg/trac/search/web_ui.py", line 96, in process_request
results = self._do_search(req, terms, filters)
File "build/bdist.linux-x86_64/egg/trac/search/web_ui.py", line 200, in _do_search
results.extend(source.get_search_results(req, terms, filters)
File "build/bdist.linux-x86_64/egg/tracreposearch/search.py", line 80, in get_search_results
self.indexer.reindex()
File "build/bdist.linux-x86_64/egg/tracreposearch/indexer.py", line 97, in wrap
return f(*args, **kw)
File "build/bdist.linux-x86_64/egg/tracreposearch/indexer.py", line 247, in reindex
self._invalidate_file(node.path)
File "build/bdist.linux-x86_64/egg/tracreposearch/indexer.py", line 229, in _invalidate_file
word_files = self.words[word]
File "build/bdist.linux-x86_64/egg/tracreposearch/indexer.py", line 42, in __getitem__
return self._cache.setdefault(key, set(self.dbm[key].decode('utf-8').split(pathsep)))
File "/usr/lib64/python2.4/bsddb/__init__.py", line 219, in __getitem__
return self.db[key]
System Information:
User Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.5.30729; MS-RTC LM 8; SFIEAUTH1)
Trac 0.12.1
CustomFieldAdmin 0.2.2
Genshi 0.6
mod_wsgi 3.2 (WSGIProcessGroup WSGIApplicationGroup %{GLOBAL})
psycopg2 2.2.2
Pygments 1.4
Python 2.4.3 (#1, Jun 11 2009, 14:09:37) [GCC 4.1.2 20080704 (Red Hat 4.1.2-44)]
RPC 1.0.6
setuptools 0.6c5
Subversion 1.6.11 (r934486)
jQuery 1.4.2
Enabled Plugins:
AnnouncerPlugin 0.2 /opt/ltsapps/python/site-packages/AnnouncerPlugin-0.2-py2.4.egg
BreadCrumbsNavPlugin 0.1 /opt/ltsapps/python/site-packages/BreadCrumbsNavPlugin-0.1-py2.4.egg
FlexibleAssignTo 0.6.20100524sf /opt/ltsapps/python/site-packages/FlexibleAssignTo-0.6.20100524sf-py2.4.egg
GetValidOwnerProvider 0.1.20100523sf /opt/ltsapps/python/site-packages/GetValidOwnerProvider.pyc
GridModify 0.1.5 /opt/ltsdata/trac/april/plugins/GridModify-0.1.5-py2.4.egg
HudsonTrac 0.3 /opt/ltsapps/python/site-packages/HudsonTrac-0.3-py2.4.egg
IniAdmin 0.2 /opt/ltsapps/python/site-packages/IniAdmin-0.2-py2.4.egg
RepositoryHookSystem 0.1.1 /opt/ltsapps/python/site-packages/RepositoryHookSystem-0.1.1-py2.4.egg
siteupload 0.11dev /opt/ltsapps/python/site-packages/siteupload-0.11dev-py2.4.egg
SvnAuthzAdminPlugin 0.1.2p /opt/ltsdata/trac/april/plugins/SvnAuthzAdminPlugin-0.1.2p-py2.4.egg
TicketCreationStatus 0.1 /opt/ltsapps/python/site-packages/TicketCreationStatus-0.1-py2.4.egg
TicketImport 0.8 /opt/ltsapps/python/site-packages/TicketImport-0.8-py2.4.egg
ticketvalidator.admin N/A /usr/lib/python2.4/site-packages/TicketValidator-0.1.20101010sf-py2.4.egg/ticketvalidator/admin.pyc
ticketvalidator.core N/A /usr/lib/python2.4/site-packages/TicketValidator-0.1.20101010sf-py2.4.egg/ticketvalidator/core.pyc
TracCustomFieldAdmin 0.2.2 /opt/ltsapps/python/site-packages/TracCustomFieldAdmin-0.2.2-py2.4.egg
TracDiscussion 0.7 /opt/ltsapps/python/site-packages/TracDiscussion-0.7-py2.4.egg
TracProgressMeterMacro 0.2 /opt/ltsdata/trac/april/plugins/TracProgressMeterMacro-0.2-py2.4.egg
tracreposearch 0.2 /opt/ltsdata/trac/april/plugins/tracreposearch-0.2-py2.4.egg
TracXMLRPC 1.0.6 /opt/ltsapps/python/site-packages/TracXMLRPC-1.0.6-py2.4.egg
TypedTicketWorkflow-plugin 0.1dev /opt/ltsapps/python/site-packages/TypedTicketWorkflow_plugin-0.1dev-py2.4.egg
TracGuide — The Trac User and Administration Guide
Attachments (0)
Change History (6)
comment:1 Changed 15 years ago by
| Description: | modified (diff) |
|---|
comment:2 follow-up: 3 Changed 15 years ago by
We have already consumed this change because we pulled the plugin source from the 0.12 folder.
comment:3 Changed 15 years ago by
Replying to cgalante:
We have already consumed this change because we pulled the plugin source from the 0.12 folder.
I should have been more verbose in comment:1, I only wanted to link to the related ticket which has been left open because I wasn't very confident the plugin was working on Trac 0.12. I haven't gotten much feedback in regard to this.
Unfortunately this plugin seems to need quite a bit of work, and I have other priorities at the moment. I would be very happy to apply a patch if you can figure out the issue!
comment:4 Changed 14 years ago by
Below a quick hack that doesn't solve the problem, but cures the symptom: you no longer get the KeyError. It probably makes the search results incomplete. I post here again, when I discover the reason for the KeyError.
$ diff -u indexer.py indexer.py.new
--- indexer.py 2011-07-08 15:22:20.076447519 +0200
+++ indexer.py.new 2011-07-08 15:18:59.399782677 +0200
@@ -39,7 +39,10 @@
key = key.encode('utf-8')
if key in self._cache:
return self._cache[key]
- return self._cache.setdefault(key, set(self.dbm[key].decode('utf-8').split(pathsep)))
+ if self.dbm.has_key(key):
+ return self._cache.setdefault(key, set(self.dbm[key].decode('utf-8').split(pathsep)))
+ return ''
+
def __setitem__(self, key, value):
key = key.encode('utf-8')
comment:5 Changed 14 years ago by
Hello,
I took over maintainership of this plugin from athomas some time ago. There is a significant amount of work to do on this plugin, and I don't foresee having the time to do it all.
helend has written the TracSuposePlugin, which seems like a much better solution. Rather than writing the repository search functionality from scratch, a Trac interface to an existing repository search tool has been created. Rather than throwing more effort at this plugin, I'd prefer to help helend with enhancements to the TracSuposePlugin, or spend my time on other Trac plugin projects altogether.
I'd like to get some feedback and hear if anyone knows of a compelling reason to continue this project rather than moving to the TracSuposePlugin. Is there functionality in this plugin that doesn't exist in the TracSuposePlugin? I'm open to hearing all opinions and suggestions.
I'll leave these tickets open for about a week, but in all likelihood will close all of them and deprecate the plugin.
Thanks for your time,
- Ryan
comment:6 Changed 13 years ago by
| Cc: | ejucovy added |
|---|---|
| Resolution: | → wontfix |
| Status: | new → closed |
Please try MultiRepoSearchPlugin.



See also #7046.