Example #1
0
def echo_client():
    global dead
    id = str(uuid.uuid4())
    s = DieselNitroSocket(connect='tcp://127.0.0.1:4321')
    for i in xrange(50):
        s.send(NitroFrame('%s|m%d' % (id, i)))
        r = s.recv()
        assert r.data == 'm%d:%d' % (i, i + 1)
    dead += 1
    print 'done!', dead
def echo_client():
    global dead
    id = str(uuid.uuid4())
    s = DieselNitroSocket(connect='tcp://127.0.0.1:4321')
    for i in xrange(50):
        s.send(NitroFrame('%s|m%d' % (id, i)))
        r = s.recv()
        assert r.data == 'm%d:%d' % (i, i + 1)
    dead += 1
    print 'done!', dead
Example #3
0
def client():
    with DieselNitroSocket(connect=loc) as sock:
        for x in xrange(100000):
            sock.send(NitroFrame("Hello, dude!"))
            m = sock.recv()
            assert m.data == "you said: Hello, dude!"

        quickstop()
 def __init__(self, host, port, timeout=30, logger=default_logger, stats=None):
     self._sock = DieselNitroSocket(connect="tcp://%s:%d" % (host, port))
     self.timeout = timeout
     self.logger = logger
     self.stats = stats
     self.is_closed = False
class MontageClient(object):
    def __init__(self, host, port, timeout=30, logger=default_logger, stats=None):
        self._sock = DieselNitroSocket(connect="tcp://%s:%d" % (host, port))
        self.timeout = timeout
        self.logger = logger
        self.stats = stats
        self.is_closed = False

    def close(self):
        self.is_closed = True
        self._sock.destroy()
        self._sock = None

    @property
    def sock(self):
        assert self._sock is not None, 'The socket has already been closed'
        return self._sock

    def new_montage_object(self, bucket, key, data, vclock=None):
        obj = proto.MontageObject(bucket=bucket, key=key)
        obj.data = data
        if vclock:
            obj.vclock = vclock
        return obj

    def _monitor_get(self, start, result):
        duration = time.time() - start
        if duration > 1:
            self.logger('DB', 'SLOW_FETCH',
                        action='MONTAGE_GET',
                        bucket=result.bucket,
                        key=result.key,
                        duration=duration,
                        length=len(result.data) if result else 0)
        total_size = len(result.data) * result.get('fetch_resolutions', 1)
        if result and total_size > 1048576: # one megabytes
            self.logger('DB', 'BIG_FETCH',
                        action='MONTAGE_GET',
                        bucket=result.bucket,
                        key=result.key,
                        duration=duration,
                        total_size=total_size,
                        length=len(result.data))
        if result and result.fetch_resolutions__exists and result.fetch_resolutions > 10:
            self.logger('DB', 'MANY_SIBLINGS_FETCH',
                        action='MONTAGE_GET',
                        bucket=result.bucket,
                        key=result.key,
                        duration=duration,
                        length=len(result.data),
                        num_siblings=result.fetch_resolutions)

    def get(self, bucket, key):
        req = proto.MontageGet(bucket=bucket,key=key)

        start = time.time()
        resp = self._do_request(req, bucket, key)

        assert len(resp.status) == 1, \
               'There should only be one status response'
        assert len(resp.subs) == 0, \
               'There should not be any subqueries'

        status = resp.status[0]
        if status == proto.MISSING:
            return None
        if status == proto.EXISTS:
            self._monitor_get(start, resp.master)
            return resp.master
        else:
            raise RiakException('Error fetching from magicd (b=%s, k=%s)' % (bucket, key))

    def _get_subs(self, start, resp):
        out = []
        i = 0
        for status in resp.status:
            if status == proto.MISSING:
                out.append(None)
            if status == proto.EXISTS:
                sub = resp.subs[i]
                self._monitor_get(start, sub)
                out.append(sub)
                i += 1
        assert i == len(resp.subs), "incomplete status list"
        return out

    def get_many(self, buckets_keys):
        req = proto.MontageGetMany()
        for (b, k) in buckets_keys:
            req.gets.append(proto.MontageGet(bucket=b, key=k))

        start = time.time()
        resp = self._do_request(req, '(multiple buckets)', '(multiple keys)')

        assert len(resp.status) == len(buckets_keys), \
            'You should receive as many status responses as you requested'

        return self._get_subs(start, resp)

    def get_by(self, bucket, key, targets):
        req = proto.MontageGetReference(bucket=bucket, key=key)
        req.target_buckets.set(targets)

        start = time.time()
        resp = self._do_request(req, bucket, key)
        return (resp.master, self._get_subs(start, resp))

    def delete(self, bucket, key):
        req = proto.MontageDelete(bucket=bucket, key=key)
        resp = self._do_request(req, bucket, key)

        assert isinstance(resp, proto.MontageDeleteResponse), \
               'Delete should always get DeleteResponse back'

    def put(self, bucket, key, data, vclock=None):
        obj = self.new_montage_object(bucket, key, data, vclock)
        req = proto.MontagePut(object=obj)
        resp = self._do_request(req, bucket, key)

        if resp.modified:
            return resp.object
        else:
            return None

    def put_many(self, mos):
        req = proto.MontagePutMany()
        req.objects.set(mos)
        resp = self._do_request(req, '(multiple buckets)', '(multiple keys)')
        return [ r.object for r in resp.objects ]

    def command(self, command, argument):
        req = proto.MontageCommand(command=command,
                             argument=argument)
        resp = self._do_request(req)
        return resp

    def _do_request(self, req, bucket=None, key=None):
        if self.stats: self.stats()
        try:
            return self.recv(self.send(req))
        except MontageRequestTimeout, e:
            e.riak_bucket = bucket
            e.riak_key = key
            raise
Example #6
0
def server():
    with DieselNitroSocket(bind=loc) as sock:
        while True:
            m = sock.recv()
            sock.send(NitroFrame("you said: " + m.data))