Exemplo n.º 1
0
 def bulk_load(self, oids):
     oid_str = join_bytes(oids)
     num_oids, remainder = divmod(len(oid_str), 8)
     assert remainder == 0, remainder
     write_all(self.s, 'B', int4_to_str(num_oids), oid_str)
     records = [self._get_load_response(oid) for oid in oids]
     for record in records:
         yield record
Exemplo n.º 2
0
 def bulk_load(self, oids):
     oid_str = join_bytes(oids)
     num_oids, remainder = divmod(len(oid_str), 8)
     assert remainder == 0, remainder
     write_all(self.s, 'B', int4_to_str(num_oids), oid_str)
     records = [self._get_load_response(oid) for oid in oids]
     for record in records:
         yield record
Exemplo n.º 3
0
 def handle_S(self, s):
     # sync
     client = self._find_client(s)
     self._report_load_record()
     self._sync_storage()
     log(8, 'Sync %s', len(client.invalid))
     write_all(s,
         int4_to_str(len(client.invalid)), join_bytes(client.invalid))
     client.invalid.clear()
Exemplo n.º 4
0
 def handle_S(self, s):
     # sync
     client = self._find_client(s)
     self._report_load_record()
     self._sync_storage()
     log(8, 'Sync %s', len(client.invalid))
     write_all(s, int4_to_str(len(client.invalid)),
               join_bytes(client.invalid))
     client.invalid.clear()
Exemplo n.º 5
0
 def __init__(self, host=DEFAULT_HOST, port=DEFAULT_PORT, address=None):
     self.address = SocketAddress.new(address or (host, port))
     self.s = self.address.get_connected_socket()
     assert self.s, "Could not connect to %s" % self.address
     self.oid_pool = []
     self.oid_pool_size = 32
     self.begin()
     protocol = StorageServer.protocol
     assert len(protocol) == 4
     write_all(self.s, 'V', protocol)
     server_protocol = read(self.s, 4)
     if server_protocol != protocol:
         raise ProtocolError("Protocol version mismatch.")
Exemplo n.º 6
0
 def __init__(self, host=DEFAULT_HOST, port=DEFAULT_PORT, address=None):
     self.address = SocketAddress.new(address or (host, port))
     self.s = self.address.get_connected_socket()
     assert self.s, "Could not connect to %s" % self.address
     self.oid_pool = []
     self.oid_pool_size = 32
     self.begin()
     protocol = StorageServer.protocol
     assert len(protocol) == 4
     write_all(self.s, 'V', protocol)
     server_protocol = read(self.s, 4)
     if server_protocol != protocol:
         raise ProtocolError("Protocol version mismatch.")
Exemplo n.º 7
0
 def handle_C(self, s):
     # commit
     self._sync_storage()
     client = self._find_client(s)
     write_all(s,
         int4_to_str(len(client.invalid)), join_bytes(client.invalid))
     client.invalid.clear()
     tdata = read_int4_str(s)
     if len(tdata) == 0:
         return # client decided not to commit (e.g. conflict)
     logging_debug = is_logging(10)
     logging_debug and log(10, 'Committing %s bytes', len(tdata))
     self.storage.begin()
     i = 0
     oids = []
     while i < len(tdata):
         rlen = str_to_int4(tdata[i:i+4])
         i += 4
         oid = tdata[i:i+8]
         record = tdata[i+8:i+rlen]
         i += rlen
         if logging_debug:
             class_name = extract_class_name(record)
             log(10, '  oid=%-6s rlen=%-6s %s',
                 str_to_int8(oid), rlen, class_name)
         self.storage.store(oid, record)
         oids.append(oid)
     assert i == len(tdata)
     oid_set = set(oids)
     for other_client in self.clients:
         if other_client is not client:
             if oid_set.intersection(other_client.unused_oids):
                 raise ClientError("invalid oid: %r" % oid)
     try:
         self.storage.end(handle_invalidations=self._handle_invalidations)
     except ConflictError:
         log(20, 'Conflict during commit')
         write(s, STATUS_INVALID)
     else:
         self._report_load_record()
         log(20, 'Committed %3s objects %s bytes at %s',
             len(oids), len(tdata), datetime.now())
         write(s, STATUS_OKAY)
         client.unused_oids -= oid_set
         for c in self.clients:
             if c is not client:
                 c.invalid.update(oids)
         self.bytes_since_pack += len(tdata) + 8
Exemplo n.º 8
0
 def handle_C(self, s):
     # commit
     self._sync_storage()
     client = self._find_client(s)
     write_all(s, int4_to_str(len(client.invalid)),
               join_bytes(client.invalid))
     client.invalid.clear()
     tdata = read_int4_str(s)
     if len(tdata) == 0:
         return  # client decided not to commit (e.g. conflict)
     logging_debug = is_logging(10)
     logging_debug and log(10, 'Committing %s bytes', len(tdata))
     self.storage.begin()
     i = 0
     oids = []
     while i < len(tdata):
         rlen = str_to_int4(tdata[i:i + 4])
         i += 4
         oid = tdata[i:i + 8]
         record = tdata[i + 8:i + rlen]
         i += rlen
         if logging_debug:
             class_name = extract_class_name(record)
             log(10, '  oid=%-6s rlen=%-6s %s', str_to_int8(oid), rlen,
                 class_name)
         self.storage.store(oid, record)
         oids.append(oid)
     assert i == len(tdata)
     oid_set = set(oids)
     for other_client in self.clients:
         if other_client is not client:
             if oid_set.intersection(other_client.unused_oids):
                 raise ClientError("invalid oid: %r" % oid)
     try:
         self.storage.end(handle_invalidations=self._handle_invalidations)
     except ConflictError:
         log(20, 'Conflict during commit')
         write(s, STATUS_INVALID)
     else:
         self._report_load_record()
         log(20, 'Committed %3s objects %s bytes at %s', len(oids),
             len(tdata), datetime.now())
         write(s, STATUS_OKAY)
         client.unused_oids -= oid_set
         for c in self.clients:
             if c is not client:
                 c.invalid.update(oids)
         self.bytes_since_pack += len(tdata) + 8
Exemplo n.º 9
0
 def load(self, oid):
     write_all(self.s, 'L', oid)
     return self._get_load_response(oid)
Exemplo n.º 10
0
 def load(self, oid):
     write_all(self.s, 'L', oid)
     return self._get_load_response(oid)
Exemplo n.º 11
0
 def _send_command(self, command):
     write_all(self.socket, command, self.db_name)