PBC Data Type Fetch

The equivalent of RpbGetReq for Riak Data Types. This request results in a DtFetchResp message (explained in the Response section below).

Request

message DtFetchReq {
    required bytes bucket = 1;
    required bytes key    = 2;
    required bytes type  = 3;
    optional uint32 r             =  4;
    optional uint32 pr            =  5;
    optional bool   basic_quorum  =  6;
    optional bool   notfound_ok   =  7;
    optional uint32 timeout       =  8;
    optional bool   sloppy_quorum =  9;
    optional uint32 n_val         = 10;
    optional bool include_context = 11 [default=true];
}

Required Parameters

Parameter Description
bucket The name of the bucket in which the Data Type is stored
key The key where the Data Type is stored
type The Using Bucket Types of the bucket in which the Data Type is stored, not the type of Data Type (i.e. counter, set, or map)

Optional Parameters

Note on defaults and special values

All of the optional parameters below have default values determined on a per-bucket basis. Please refer to the documentation on setting bucket properties for more information.

Furthermore, you can assign an integer value to the r and pr, provided that that integer value is less than or equal to N, or a special value denoting one (4294967295-1), quorum (4294967295-2), all (4294967295-3), or default (4294967295-4).

Parameter Description
r Read quorum, i.e. how many replicas need to agree when retrieving the object
pr Primary read quorum, i.e. how many primary replicas need to be available when retrieving the object
basic_quorum Whether to return early in some failure cases, e.g. when r=1 and you get 2 errors and a success basic_quorum=true would return an error
notfound_ok Whether to treat not found responses as successful reads for the purposes of R
timeout The timeout duration, in milliseconds, after which Riak will return an error message
sloppy_quorum If this parameter is set to true, the next available node in the ring will accept requests if any primary node is unavailable
n_val The number of nodes to which the delete request will be sent
include_context If this parameter is set to true, the Data Type’s opaque “context” will be returned to the client

Response

The response to a fetch request (DtFetchReq) is a DtFetchResp message.

message DtFetchResp {
    enum DataType {
        COUNTER = 1;
        SET     = 2;
        MAP     = 3;
    }

    optional bytes    context = 1;
    required DataType type    = 2;
    optional DtValue  value   = 3;
}

If the include_context option is specified, an opaque “context” value will be returned along with the user-readable data. When sending an update request, the client should send this context as well, just as one would send a vclock for standard KV updates.

The type of the Data Type is specified in the type field, and must be one of the three possible values of the DataType enum (COUNTER, SET, or MAP).

The current value of the Data Type is contained in the value field, which itself contains a DtValue message. This message will have the following structure:

message DtValue {
    optional sint64   counter_value = 1;
    repeated bytes    set_value     = 2;
    repeated MapEntry map_value     = 3;
}

If the Data Type queried is a counter, it will return an integer value for the counter; it a set, it will return the sets current value, in bytes, if a map it will return a MapEntry message. MapEntry messages are structured as follows:

message MapEntry {
    required MapField field = 1;
    optional sint64   counter_value  = 2;
    repeated bytes    set_value      = 3;
    optional bytes    register_value = 4;
    optional bool     flag_value     = 5;
    repeated MapEntry map_value      = 6;
}