A client only needs to know the address of one node within the cluster. However, in order to access entries within the cluster, the node must be fully joined. Usually a node is fully joined within a few minutes of startup. For more information, see Distribution.
When a request is made, an ID is computed from the alias (with the SHA-3 algorithm) and the ring is explored to find the proper node. If the ring cannot be explored because it’s too unstable, the client will return an “unstable” error code (see Fault tolerance).
Once the proper node has been found, the request is sent.
If the topology has changed between the time the node has been found and the request has been made, the target node will return a “wrong node” error to the client, and the client will search again for the valid node. After three unsuccessful attempts to locate the node, the client reports an error to the user.
In the case of transmission errors, the protocol is failure resistant and will when it can reliably determine that the command hasn’t been executed on the node. When in doubt, it carefully avoid replays issues and returns an error. The client can then decide to try again or give up.
Data is sent and stored “as is”, bit for bit. The user may add any kind of content to the quasardb cluster, provided that the nodes have sufficient storage space. quasardb uses a low-level binary protocol that adds only few bytes of overhead per request.
The persistence layer may compress data for efficiency purposes. This is transparent to the client.
Most high levels API support the language native serialization mechanism to transparently add and retrieve objects to/from a quasardb cluster (see API).
Metadata is associated with each entry. The quasardb cluster ensures the metadata and the actual data are consistent at all time.
Note
It is currently not possible to obtain the metadata via the API.
If the server does not reply to the client in the specified delay, the client will drop the request and return a “timeout” error code. This timeout is configurable and defaults to one minute.