예제 #1
0
 def create_eru_proxy(request):
     container_info = None
     try:
         cluster = models.cluster.get_by_id(int(request.form['cluster_id']))
         if cluster is None or len(cluster.nodes) == 0:
             raise ValueError('no such cluster')
         port = int(request.form.get('port', 8889))
         if not 8000 <= port <= 9999:
             raise ValueError('invalid port')
         container_info = deploy_proxy(
             request.form['pod'], int(request.form['threads']),
             request.form.get('read_slave') == 'rs',
             request.form['netmode'], host=request.form.get('host'),
             port=port)
         models.proxy.create_eru_instance(
             container_info['address'], port, cluster.id,
             container_info['container_id'])
         _set_proxy_remote(container_info['address'], port,
                           cluster.nodes[0].host, cluster.nodes[0].port)
         return base.json_result(container_info)
     except IntegrityError:
         if container_info is not None:
             rm_containers([container_info['container_id']])
         raise ValueError('exists')
     except BaseException as exc:
         logging.exception(exc)
         raise
예제 #2
0
    def create_eru_proxy(request):
        def set_remotes(proxy_addr, proxy_port, redis_host, redis_port):
            time.sleep(1)
            t = Talker(proxy_addr, proxy_port)
            try:
                t.talk('setremotes', redis_host, redis_port)
            finally:
                t.close()

        container_info = None
        try:
            cluster = models.cluster.get_by_id(int(request.form['cluster_id']))
            if cluster is None or len(cluster.nodes) == 0:
                raise ValueError('no such cluster')
            port = int(request.form.get('port', 8889))
            if not 8000 <= port <= 9999:
                raise ValueError('invalid port')
            container_info = deploy_proxy(
                request.form['pod'], int(request.form['threads']),
                request.form.get('read_slave') == 'rs',
                request.form['netmode'], host=request.form.get('host'),
                port=port)
            models.proxy.create_eru_instance(
                container_info['address'], port, cluster.id,
                container_info['container_id'])
            threading.Thread(target=set_remotes, args=(
                container_info['address'], port, cluster.nodes[0].host,
                cluster.nodes[0].port)).start()
            return base.json_result(container_info)
        except IntegrityError:
            if container_info is not None:
                rm_containers([container_info['container_id']])
            raise ValueError('exists')
        except BaseException as exc:
            logging.exception(exc)
            raise