~jcsackett/charmworld/bac-tag-constraints

« back to all changes in this revision

Viewing changes to charmworld/jobs/worker.py

  • Committer: Tarmac
  • Author(s): Brad Crittenden
  • Date: 2014-04-14 20:07:28 UTC
  • mfrom: (500.1.9 es-missing-data)
  • Revision ID: tarmac-20140414200728-ew38mtkdrsuprcff
Do not index charm annotations in bundles.

Charms in bundles have "annotations" which include information relating to the
widget layout when placed in the GUI ('gui-x' and 'gui-y').  This information
is ancilliary to the actual bundle and should not be searchable.

The presence of such data has also caused operational problems.  In
production, some bundles are not being indexed due to parsing errors of the x
and y coordinates.

An example failure is shown here:
2014-04-11 19:12:30,096 DEBUG [pyelasticsearch][MainThread] got response {u'items': [{u'index': {u'_type': u'bundle', u'_id': u'~charmers/muletrain/wiki', u'error': u'MapperParsingException[failed to parse [data.data.services.mediawiki.annotations.gui-y]]; nested: NumberFormatException[For input string: "-117.5"]; ', u'_index': u'charms-78512'}}], u'took': 4}

Unfortunately, this ingestion failure cannot be reproduced on staging or
locally.  Further, it appears pyelasticsearch is not returning an error in
this situation but is instead silently failing to index the bundle.

To QA the branch, in one window run 'make run'.  In another, ingest some
bundles:

% bin/ingest-queued --prefix="~charmers/charms/bundles"

Afterwards, go to 'localhost:2464' in your browser.  Search for 'bundles' and
see the ones that got ingested.  Next search for 'gui-x' and see no results.

https://codereview.appspot.com/87710043/

R=jcsackett.

Approved by Juju Gui Bot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
67
67
                    item = queue.next()
68
68
                    if item is None:
69
69
                        break
70
 
                    charm_data = item.payload
71
70
                    try:
72
71
                        for job in jobs:
73
72
                            try:
74
73
                                if not run_job(
75
 
                                        job, charm_data, needs_setup=False):
 
74
                                        job, item.payload, needs_setup=False):
76
75
                                    break
77
76
                            except SearchServiceNotAvailable as e:
78
77
                                self.log.exception(str(e))
116
115
    args = parser.parse_args(argv[1:])
117
116
    queue_jobs = (lp.run, )
118
117
    ingest_jobs = (
119
 
        (get_queue(db, CHARM_QUEUE), [UpdateCharmJob()]),
120
 
        (get_queue(db, BASKET_QUEUE), [UpdateBundleJob()]),
 
118
        (get_queue(db, CHARM_QUEUE), [UpdateCharmJob(args.debug)]),
 
119
        (get_queue(db, BASKET_QUEUE), [UpdateBundleJob(args.debug)]),
121
120
    )
122
121
    worker = QueueWorker(db, queue_jobs, ingest_jobs)
123
122
    sys.exit(worker.run(args))