Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Add observable timestamp to TX_BEGIN operation

...

Ignite Type

Size

MsgPack TypeNotes
Bitmask(n)n/8 bytesbin8 / bin16 / bin32Extension 8
IntX, UintX1-8 bytesfixint / intX / uintXInteger types are interchangeable when possible. fixint (1 byte) can be passed as a value for uint64 column.
Float4 bytesfloat32
Double8 bytesfloat64
Number([n])Variableext16 (up to 2^8 - 1 bytes)Extension 1
DecimalVariableext16 (up to 2^8 - 1 bytes)Extension 2
UUID16 bytesfixext16Extension 3
StringVariablestr
Date3 bytesfixext4Extension 4
Time5 bytesext8Extension 5
Datetime7 bytesfixext8Extension 6
Timestamp10 bytesext8Extension 7
IgniteUuid24 bytesext8Extension 9
NoValue1 bytefixext1Extension 10
BinaryVariablebin32 (up to 2^32 - 1 bytes)

...

Key tuples are tuples with key columns only. Key columns always come first in the schema. So if there are 2 key columns, first two values of the tuple is the key.

Dynamic schema expansion (Live-schema)

IEP-54: Schema-first Approach includes "dynamic schema expansion" feature, which means that users can insert arbitrary tuples and Ignite will automatically update the schema with extra fields, if any.

To support this feature, we provide schemaless alternatives for all operations that can involve automatic schema updates (upsert, insert, etc).

Null vs NoValue

Ignite Table API handles "column set to null" (1) and "column not set" (2) differently.

  • Non-nullable column does not allow (1), but allows (2) as long as there is a default value.
  • Nullable column will be set to null in (1) and to default value in (2).

NoValue custom protocol type reflects this distinction.

Handshake


Request
4 bytesMagic number 49 47 4E 49, or "IGNI". Helps to identify misconfigured SSL or other apps probing the port.
intPayload length
intVersion major
intVersion minor
intVersion patch
intClient code (1 for JDBC, 2 for general-purpose client)
binFeatures (bitmask)
map (string → any)Extensions (auth, attributes, etc). Server can skip unknown extension data (when client is newer).

...

Response
4 bytesMagic number 49 47 4E 49, or "IGNI". Helps to identify misconfigured SSL or different server on the port.
intPayload length
intServer version major
intServer version minor
intServer version patch
intError code (0 for success)
stringError message (when error code is not 0)
intWhen error code is 0: Server idle timeout
stringWhen error code is 0: Server node id
string When error code is 0: Server node name (consistent id)
binWhen error code is 0: Server features (bitmask)
map (string → any)When error code is 0: Extensions (auth, attributes, etc). Client can skip unknown extension data (when server is newer).

...

Request
intOperation code
intRequest id, generated by client and returned as-is in response
...Operation-specific data


Error code (0 for successstring
Response
intType = 0
intRequest id
intFlags (1 = partition assignment changed)
longError message (when error code is not 0)
...Operation-specific data
Observable timestamp (causality token)
uuid or nullTrace id (null for success)
intError code (when trace id is not null)
stringError message (when trace id is not null)
string or nullError stack trace (when trace id is not null)
map or nullError details (when trace id is not null)
...Operation-specific data (when trace id is null)

Request or response without operation-Request or response without operation-specific data is called basic request or basic response below.

...

Operation codes and request ids are omitted everywhere below for brevity.

...

TABLES_

...

GET =

...

3

...

Basic request.

Response
map configuration (name, partitions, replicas, columns, indices, ...) - according to TableConfigurationSchema
Response
UUIDtable ID

TABLE_DROP = 2

...

Basic response.

TABLES_GET = 3

Basic request.

...

(UUID -> string)map of table ids and names

Note: tables can only be created/deleted with SQL, there are no TABLE_CREATE or TABLE_DROP operations.

...

TABLE_GET = 4

Request
stringtable name

...

TUPLE_UPSERT = 10

Request
UUIDtable ID
int or niltransaction ID
intschema ID
valuesvalues for all columns in given schema (nil when value is missing for a column)

...

  • If columns don't match, request the latest schema and try again.
  • If the latest schema still does not match, and live schema is enabled, use TUPLE_UPSERT_SCHEMALESS

TUPLE_UPSERT_SCHEMALESS = 11

...

Basic response.

TUPLE_GET = 12

...

  • , use TUPLE_UPSERT_SCHEMALESS

TUPLE_GET = 12

Clients should retrieve schemas with SCHEMAS_GET and cache them per table.

TUPLE_UPSERT_ALL = 13

...

Basic response.

TUPLE_UPSERT_ALL_SCHEMALESS = 14

...

Basic response.

...

Request
UUIDtable ID
int or nilschema ID, or nil when result set is emptytransaction ID
introw countschema ID
valuesarray of rows with values for key columns (in schema order)


Response
int or nilschema ID (for all tuples in response)introw countid for the current tuple, or nil when there is no matching record
valuesrows with values for value columns in schema order

...

, when schema id is not nil

Clients should retrieve schemas with SCHEMAS_GET and cache them per table.

TUPLE_UPSERT_ALL = 13

values for value columns in schema order
Request
UUIDtable ID
int or niltransaction ID
intschema ID
introw count
valuesrows with values for all columns in given schema (nil when value is missing for a column)
Response
int or nilschema id for the current tuple, or nil when there is no matching record
values

Basic response.

TUPLE_GET_

...

ALL = 15

Request
UUIDtable ID
maptuple as map
int or niltransaction ID
intschema ID
Response
int or nilschema id for the current tuple, or nil when there is no matching recordresult set is empty
introw count
valuestuple values array of rows with values for key columns (in schema order when schema id in not null

...

)


Response
intschema ID (for all tuples in response)
introw count
valuesrows with values in schema order

TUPLE_GET_AND_UPSERT = 16

Request
UUIDtable ID
int or niltransaction ID
intschema ID
valuesvalues for all columns in given schema (nil when value is missing for a column)


Response
boolInsert result

TUPLE_INSERT_SCHEMALESS = 19

Insert result
int or nilschema id for the current tuple, or nil when there is no matching record
valuesvalues for value columns in schema order
Request
UUIDtable ID
maptuple as map
Response
bool

TUPLE_INSERT

...

=

...

18

Request
UUIDtable ID
int or nilschema transaction ID
introw countschema ID
valuesrows with values for all columns in given schema (nil when value is missing for a column)


Response
intschema id, or nil when no rows were skippedintskipped row countvaluesskipped rows (values in schema order)
boolInsert result

TUPLE_INSERT_ALL

...

=

...

20

Request
UUIDtable ID
int or niltransaction ID
arr of maparray of tuples
intschema ID
introw count
valuesrows with values for all columns in given schema (nil when value is missing for a column)


Response
intschema id
Response
arr of mapskipped rows, or nil when none were skippedno rows were skipped
intskipped row count
valuesskipped rows (values in schema order)

TUPLE_REPLACE = 22

Request
UUIDtable ID
int or niltransaction ID
intschema ID
valuesvalues for all columns in given schema (nil when value is missing for a column)
Response
boolReplace result

TUPLE_REPLACE_SCHEMALESS = 23

Request
UUIDtable ID
maptuple as mapcolumn)


Response
boolReplace result

TUPLE_REPLACE_EXACT = 24

Request
UUIDtable ID
int or niltransaction ID
intschema ID
valuesoldRec: values for all columns in given schema (nil when value is missing for a column)
valuesnewRec: values for all columns in given schema (nil when value is missing for a column)

...

Response
boolReplace result

TUPLE_

...

GET_

...

AND_

...

REPLACE =

...

26

Request
UUIDtable ID
mapoldRec: tuple as map
mapnewRec: tuple as map
Response
boolReplace result

TUPLE_GET_AND_REPLACE = 26

int or niltransaction
Request
UUIDtable ID
intschema ID
valuesvalues for all columns in given schema (nil when value is missing for a column)

...

Response
int or nilschema id for the current tuple, or nil when there is no matching record
valuesvalues for value columns in schema order

TUPLE_

...

DELETE = 28

Request
UUIDtable ID
maptuple as map
int or niltransaction ID
intschema ID
valuesvalues for key columns in given schema


tuple values in schema order
Response
boolDelete result
Response
int or nilschema id for the current tuple, or nil when there is no matching record
values

TUPLE_DELETE_ALL =

...

29

Request
UUIDtable ID
int or niltransaction ID
intschema ID
introw count
valuesrows with values for key columns in a given schema


Response
intschema id, or nil when no rows were skipped
intskipped row count
valuesskipped rows (values for key columns in
given schemaResponseboolDelete result
schema order)


TUPLE_DELETE_

...

EXACT =

...

30

Request
UUIDtable ID
int or nilschema transaction ID
introw countschema ID
valuesrows with values for key all columns in a given schema (nil when value is missing for a column)


rows that were not deleted, or nil when all were deleted
Responsearr of int
boolDelete result

TUPLE_DELETE_ALL_EXACT =

...

31

Request
UUIDtable ID
int or niltransaction ID
intschema ID
introw count
valuesrows with values for all columns in given schema (nil when value is missing for a column)
Response
boolDelete result

...

for a column)


Response
intschema id, or nil when no rows were skipped
intskipped row count
valuesskipped rows (values for key columns in schema order)

TUPLE_GET_AND_DELETE = 32

Request
UUIDtable ID
int or nilschema transaction ID
introw countschema ID
valuesrows with values for all columns in given schema (nil when value is missing for a column)


Response
arr of introws that were not deleted, or nil when all were deleted

...

int or nilschema id for the current tuple, or nil when there is no matching record
valuesvalues for value columns in schema order, when schema id is not null

TUPLE_CONTAINS_KEY = 33

Request
UUIDtable ID
int or niltransaction ID
intschema ID
valuesvalues for all columns in given schema (nil when value is missing for a column)
Response
int or nilschema id for the current tuple, or nil when there is no matching record
valuesvalues for value columns in schema order, when schema id is not null

TUPLE_CONTAINS_KEY = 33

...

key columns


Response
boolwhether a tuple with the given key exists

TX_BEGIN = 43

Request
boolRead-only tx flag
longObservable timestamp (value from server - see standard response header)


Response
intTransaction ID

TX_COMMIT = 44

Request
intTransaction ID

Basic response

TX_ROLLBACK = 45

Request
intTransaction ID

Basic response

...

Risks and Assumptions

  • This IEP covers handshake and Tables API, which is the only public API available at the moment.
  • Invoke API is out of scope: code deployment and processor serialization should be designed separately.

...