Given a pool, handle item management (like stale items in the pool) while passing other errors to the calling method. """ i = pool.get() try: yield i except StaleConnectionError, err: print err else: print i(), 'returned to pool' pool.put(i) if __name__ == '__main__': pool_size = 5 p = Pool(min_size=1, max_size=pool_size, create=new_connection) attempts = 1 max_attempts = 5 stale = True while attempts < max_attempts: with PoolManager(p) as i: try: attempts += 1 print 'starting attempt %s' % attempts print i() print i(stale=stale) #print i(err=True) except ProcessingError, err: print err, 'as expected' else: break
def generate_report(conf, policy_name=None): global json_output json_output = config_true_value(conf.get('dump_json', 'no')) if policy_name is None: policy = POLICIES.default else: policy = POLICIES.get_by_name(policy_name) if policy is None: exit('Unable to find policy: %s' % policy_name) if not json_output: print('Using storage policy: %s ' % policy.name) swift_dir = conf.get('swift_dir', '/etc/swift') retries = int(conf.get('retries', 5)) concurrency = int(conf.get('concurrency', 25)) endpoint_type = str(conf.get('endpoint_type', 'publicURL')) region_name = str(conf.get('region_name', '')) container_report = config_true_value(conf.get('container_report', 'yes')) object_report = config_true_value(conf.get('object_report', 'yes')) if not (object_report or container_report): exit("Neither container or object report is set to run") user_domain_name = str(conf.get('user_domain_name', '')) project_domain_name = str(conf.get('project_domain_name', '')) project_name = str(conf.get('project_name', '')) insecure = config_true_value(conf.get('keystone_api_insecure', 'no')) coropool = GreenPool(size=concurrency) os_options = {'endpoint_type': endpoint_type} if user_domain_name: os_options['user_domain_name'] = user_domain_name if project_domain_name: os_options['project_domain_name'] = project_domain_name if project_name: os_options['project_name'] = project_name if region_name: os_options['region_name'] = region_name url, token = get_auth(conf['auth_url'], conf['auth_user'], conf['auth_key'], auth_version=conf.get('auth_version', '1.0'), os_options=os_options, insecure=insecure) account = url.rsplit('/', 1)[1] connpool = Pool(max_size=concurrency) connpool.create = lambda: SimpleClient( url=url, token=token, retries=retries) container_ring = Ring(swift_dir, ring_name='container') object_ring = Ring(swift_dir, ring_name=policy.ring_name) output = {} if container_report: output['container'] = container_dispersion_report( coropool, connpool, account, container_ring, retries, conf.get('partitions'), policy) if object_report: output['object'] = object_dispersion_report(coropool, connpool, account, object_ring, retries, conf.get('partitions'), policy) return output
def __init__(self): alarm_rpc_connection = lambda: RpcConnection(True) self.metric_pool = Pool(create=RpcConnection, max_size=500) self.alarm_pool = Pool(create=alarm_rpc_connection, max_size=20)