示例#1
0
def run():
    cm = vps_util.my_cm()
    region = vps_util.my_region()
    print "Starting retire server at cloudmaster %s, region %s." % (cm, region)
    qname = cm + ":retireq"
    destroy_qname = cm + ":destroyq"
    q = redisq.Queue(qname, redis_shell, TIMEOUT)
    while True:
        task, remover = q.next_job()
        if task:
            name, ip = task.split('|')
            is_baked_in = redis_shell.sismember(region + ":bakedin-names", name)
            txn = redis_shell.pipeline()
            if is_baked_in:
                print "Not retiring baked-in server %s (%s)" % (name, ip)
            else:
                print "Retiring", name, ip
                vps_util.actually_retire_proxy(name, ip, txn)
            remover(txn)
            if not is_baked_in:
                # Introduce the job with the timestamp already filled in, so it will
                # only be pulled when it 'expires'. This effectively adds a delay to
                # give clients some time to move over to their new server before we
                # actually destroy the old one.
                txn.lpush(destroy_qname, "%s*%s" % (name, int(time.time())))
            txn.execute()
        else:
            time.sleep(10)
示例#2
0
def run():
    cm = vps_util.my_cm()
    region = vps_util.my_region()
    print "Starting retire server at cloudmaster %s, region %s." % (cm, region)
    qname = cm + ":retireq"
    destroy_qname = cm + ":destroyq"
    q = redisq.Queue(qname, redis_shell, TIMEOUT)
    while True:
        task, remover = q.next_job()
        if task:
            name, ip = task.split('|')
            is_baked_in = redis_shell.sismember(region + ":bakedin-names",
                                                name)
            txn = redis_shell.pipeline()
            if is_baked_in:
                print "Not retiring baked-in server %s (%s)" % (name, ip)
            else:
                print "Retiring", name, ip
                vps_util.actually_retire_proxy(name, ip, txn)
            remover(txn)
            if not is_baked_in:
                # Introduce the job with the timestamp already filled in, so it will
                # only be pulled when it 'expires'. This effectively adds a delay to
                # give clients some time to move over to their new server before we
                # actually destroy the old one.
                txn.lpush(destroy_qname, "%s*%s" % (name, int(time.time())))
            txn.execute()
        else:
            time.sleep(10)
示例#3
0
def run():
    qname = vps_util.my_cm() + ":destroyq"
    region = vps_util.my_region()
    q = redisq.Queue(qname, redis_shell, TIMEOUT)
    print "Starting destroy service in cloudmaster %s, region %s." % (vps_util.my_cm(), region)
    while True:
        name, remover = q.next_job()
        if name:
            if redis_shell.sismember(region + ":bakedin-names", name):
                print "Not retiring baked-in server", name
            else:
                print "Destroying", name
                vps_util.destroy_vps(name)
            remover()
        else:
            time.sleep(10)
示例#4
0
def run():
    qname = vps_util.my_cm() + ":destroyq"
    region = vps_util.my_region()
    q = redisq.Queue(qname, redis_shell, TIMEOUT)
    print "Starting destroy service in cloudmaster %s, region %s." % (
        vps_util.my_cm(), region)
    while True:
        name, remover = q.next_job()
        if name:
            if redis_shell.sismember(region + ":bakedin-names", name):
                print "Not retiring baked-in server", name
            else:
                print "Destroying", name
                vps_util.destroy_vps(name)
            remover()
        else:
            time.sleep(10)
示例#5
0
def run():
    region = vps_util.my_region()
    print "Starting offload server for region %s." % region
    qname = region + ":offloadq"
    q = redisq.Queue(qname, redis_shell, TIMEOUT)
    while True:
        task, remover = q.next_job()
        if task:
            name, ip = task.split('|')
            print "Offloading users from %s (%s)" % (name, ip)
            txn = redis_shell.pipeline()
            vps_util.actually_offload_proxy(name, ip, pipeline=txn)
            remover(txn)
            cm = vps_util.cm_by_name(name)
            txn.lpush(cm + ':retireq', task)
            txn.execute()
        else:
            time.sleep(10)
示例#6
0
def run():
    region = vps_util.my_region()
    print "Starting offload server for region %s." % region
    qname = region + ":offloadq"
    q = redisq.Queue(qname, redis_shell, TIMEOUT)
    while True:
        task, remover = q.next_job()
        if task:
            name, ip = task.split('|')
            print "Offloading users from %s (%s)" % (name, ip)
            txn = redis_shell.pipeline()
            vps_util.actually_offload_proxy(name, ip, pipeline=txn)
            remover(txn)
            cm = vps_util.cm_by_name(name)
            txn.lpush(cm + ':retireq', task)
            txn.execute()
        else:
            time.sleep(10)
示例#7
0
def run():
    region = vps_util.my_region()
    print "Starting offload server for region %s." % region
    qname = region + ":offloadq"
    q = redisq.Queue(qname, redis_shell, TIMEOUT)
    while True:
        task, remover = q.next_job()
        if task:
            name, ip = task.split('|')
            print "Offloading users from %s (%s)" % (name, ip)
            txn = redis_shell.pipeline()
            try:
                vps_util.actually_offload_proxy(name, ip, pipeline=txn)
            except vps_util.ProxyGone:
                print >> sys.stderr, "Tried to offload no longer existing proxy %s (%s)" % (
                    name, ip)
                remover(redis_shell)
                continue
            remover(txn)
            cm = vps_util.cm_by_name(name)
            txn.lpush(cm + ':retireq', task)
            txn.execute()
        else:
            time.sleep(10)
示例#8
0
from Queue import Empty
import os
import time
import traceback

import yaml
import json

from alert import send_to_slack
from redis_util import redis_shell
import redisq
import vps_util


CM = vps_util.my_cm()
REGION = vps_util.my_region()
scope = os.environ['QSCOPE']
if scope == 'REGION':
    QPREFIX = REGION
elif scope == 'CM':
    QPREFIX = CM
else:
    assert False
MAXPROCS = int(os.getenv('MAXPROCS'))
LAUNCH_TIMEOUT = 30 * 60

vps_shell = vps_util.vps_shell(CM)


def run():
    qname = QPREFIX + ":srvreqq"