コード例 #1
0
ファイル: syndicated.py プロジェクト: etherparty/syndicate
 def unseal_and_process_data( cls, sealed_data ):
    """
    Unseal data, and then process it.
    Make sure no more than one instance of this request is being processed.
    """
    locked = cls.processing_lock.acquire( False )
    if not locked:
       # failed to aquire 
       return -errno.EAGAIN
 
    config = get_config()
    slice_secret = get_cached_slice_secret( config )
    
    if slice_secret is None:
       # no secret on file 
       cls.processing_lock.release()
       log.error("No slice secret")
       return -errno.EAGAIN
    
    # unseal the data 
    rc, data_text = unseal_observer_data( slice_secret, sealed_data )
    if rc != 0:
       # failed to read 
       cls.processing_lock.release()
       log.error("unseal_observer_data rc = %s" % rc)
       return -errno.EINVAL
    
    # parse the data 
    rc, data = observer_cred.parse_observer_data( data_text )
    if rc != 0:
       # failed to parse 
       cls.processing_lock.release()
       log.error("parse_observer_data rc = %s" % rc)
       return -errno.EINVAL
    
    if data is not None:
       
       # start all gateways for this volume
       rc = observer_startstop.start_stop_volume( config, data, slice_secret, hostname=config['hostname'], gateway_uid_name=GATEWAY_UID_NAME, gateway_gid_name=GATEWAY_GID_NAME, debug=config['debug'] )
    
       if rc != 0:
          log.error("ensure_running rc = %s" % rc)
    
    cls.processing_lock.release()
    return rc
コード例 #2
0
ファイル: syndicated.py プロジェクト: etherparty/syndicate
def poll_opencloud_volume_data( config, slice_name, volume_name ):
    """
    Download, verify, and parse Observer data.
    Return (0, data) on success
    Return (nonzero, None) on error 
    """
    url = config['observer_url']
    
    volume_url = os.path.join( url, slice_name, volume_name )
    
    data_str = download_validate_unseal_data( config, volume_url )
    if data_str is None:
       log.error("Failed to read data from %s" % url)
       return None
    
    rc, data = observer_cred.parse_observer_data( data_str )
    if rc != 0:
        log.error("Failed to read Observer data, rc = %s" % rc )
        return None
    
    return data