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 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
def server(): with DieselNitroSocket(bind=loc) as sock: while True: m = sock.recv() sock.send(NitroFrame("you said: " + m.data))