Ignore:
Timestamp:
Nov 30, 2011 4:45:15 PM (12 years ago)
Author:
Ted Faber <faber@…>
Branches:
compt_changes, info-ops, master
Children:
1ae1aa2
Parents:
22a1a77
Message:

Rebooting works

File:
1 edited

Legend:

Unmodified
Added
Removed
  • fedd/federation/experiment_control.py

    r22a1a77 rb709861  
    23912391                    results.append(operation_status(t,
    23922392                        operation_status.federant,
    2393                         'Unexpected error ion %s' % tb))
     2393                        'Unexpected error on %s' % tb))
    23942394        # Clean up the tmpdir no matter what
    23952395        finally:
     
    24122412            else: return { }
    24132413
     2414        def element_name(e):
     2415            if isinstance(e, topdl.Computer): return e.name
     2416            elif isinstance(e, topdl.Testbed):
     2417                if e.localname: return e.localname[0]
     2418                else: return None
     2419            else: return None
     2420
    24142421        req = req.get('OperationRequestBody', None)
    24152422        if not req:
     
    24182425        exp = req.get('experiment', None)
    24192426        op = req.get('operation', None)
    2420         target = set(req.get('target', []))
     2427        targets = set(req.get('target', []))
    24212428        params = req.get('parameter', None)
    24222429
     
    24332440            raise service_error(service_error.req, "No request?")
    24342441
    2435         if op is None or not target
     2442        if op is None or not targets:
    24362443            raise service_error(service_error.req, "No request?")
    24372444
     
    24402447        if key in self.state:
    24412448            d1, op_params, cert, d2 = \
    2442                     self.get_segment_info(self.state[key], need_lock=False)
     2449                    self.get_segment_info(self.state[key], need_lock=False,
     2450                            key='tb')
    24432451            top = self.state[key].top
    24442452            if top is not None:
     
    24532461        results = []
    24542462        for e in top.elements:
    2455             if e.name in targets:
     2463            ename = element_name(e)
     2464            if ename in targets:
    24562465                tb = element_to_tb(e)
     2466                targets.remove(ename)
    24572467                if tb is not None:
    2458                     if tb in testbeds: testbeds[tb].append(e.name)
    2459                     else: testbeds[tb] = [ e.name ]
     2468                    if tb in testbeds: testbeds[tb].append(ename)
     2469                    else: testbeds[tb] = [ ename ]
    24602470                else:
    24612471                    results.append(operation_status(e.name,
     
    24632473                        description='Cannot map target to testbed'))
    24642474
     2475        for t in targets:
     2476            results.append(operation_status(t, operation_status.no_target))
     2477
    24652478        self.operate_on_segments(op_params, cert, op, testbeds, params,
    24662479                results)
     
    24682481        return {
    24692482                'experiment': exp,
    2470                 'status': [make_dict(r) for r in results]
     2483                'status': [make_dict(r) for r in results],
    24712484                'proof': proof.to_dict()
    24722485                }
     
    25242537                    "Experiment has no status!?")
    25252538
    2526     def get_segment_info(self, fed_exp, need_lock=True):
     2539    def get_segment_info(self, fed_exp, need_lock=True, key='aid'):
    25272540        ids = []
    25282541        term_params = { }
     
    25372550            uri = fed.uri
    25382551            aid = fed.allocID
    2539             term_params[aid] = (uri, aid)
     2552            if key == 'aid': term_params[aid] = (uri, aid)
     2553            elif key == 'tb': term_params[fed.tb] = (uri, aid)
     2554
    25402555        if need_lock: self.state_lock.release()
    25412556        return ids, term_params, expcert, repo
Note: See TracChangeset for help on using the changeset viewer.