October 20th, Q&A session: Get you issues solved and questions answered!

GitHub logo
Edit

Cache Configuration

Operation Codes

Upon successful handshake with an Ignite server node, a client can start performing various cahe configuration operations by sending a request (see request/response structure below) with a specific operation code:

Operation OP_CODE

OP_CACHE_GET_NAMES

1050

OP_CACHE_CREATE_WITH_NAME

1051

OP_CACHE_GET_OR_CREATE_WITH_NAME

1052

OP_CACHE_CREATE_WITH_CONFIGURATION

1053

OP_CACHE_GET_OR_CREATE_WITH_CONFIGURATION

1054

OP_CACHE_GET_CONFIGURATION

1055

OP_CACHE_DESTROY

1056

OP_QUERY_SCAN

2000

OP_QUERY_SCAN_CURSOR_GET_PAGE

2001

OP_QUERY_SQL

2002

OP_QUERY_SQL_CURSOR_GET_PAGE

2003

OP_QUERY_SQL_FIELDS

2004

OP_QUERY_SQL_FIELDS_CURSOR_GET_PAGE

2005

OP_BINARY_TYPE_NAME_GET

3000

OP_BINARY_TYPE_NAME_PUT

3001

OP_BINARY_TYPE_GET

3002

OP_BINARY_TYPE_PUT

3003

Note that the above mentioned op_codes are part of the request header, as explained here.

Note

Customs Methods Used in Sample Code Snippets Implementation

Some of the code snippets below use readDataObject(…​) introduced in this section and little-endian versions of methods for reading and writing multiple-byte values that are covered in this example.

OP_CACHE_CREATE_WITH_NAME

Creates a cache with a given name. Cache template can be applied if there is '*' in the cache name. Throws exception if a cache with specified name already exists.

Request Type Description

Header

Request header.

String

Cache name.

Response Type Description

Header

Response header.

DataOutputStream out = new DataOutputStream(socket.getOutputStream());

String cacheName = "myNewCache";

int nameLength = cacheName.getBytes("UTF-8").length;

DataOutputStream out = new DataOutputStream(socket.getOutputStream());

// Request header
writeRequestHeader(5 + nameLength, OP_CACHE_CREATE_WITH_NAME, 1, out);

// Cache name
writeString(cacheName, out);

// Send request
out.flush();
// Read result
DataInputStream in = new DataInputStream(socket.getInputStream());

readResponseHeader(in);

OP_CACHE_GET_OR_CREATE_WITH_NAME

Creates a cache with a given name. Cache template can be applied if there is '*' in the cache name. Does nothing if the cache exists.

Request Type Description

Header

Request header.

String

Cache name.

Response Type Description

Header

Response header.

DataOutputStream out = new DataOutputStream(socket.getOutputStream());

String cacheName = "myNewCache";

int nameLength = cacheName.getBytes("UTF-8").length;

DataOutputStream out = new DataOutputStream(socket.getOutputStream());

// Request header
writeRequestHeader(5 + nameLength, OP_CACHE_GET_OR_CREATE_WITH_NAME, 1, out);

// Cache name
writeString(cacheName, out);

// Send request
out.flush();
// Read result
DataInputStream in = new DataInputStream(socket.getInputStream());

readResponseHeader(in);

OP_CACHE_GET_NAMES

Gets existing cache names.

Request Type Description

Header

Request header.

Response Type Description

Header

Response header.

int

Cache count.

String

Cache name.

Repeat for as many times as the cache count that is obtained in the previous parameter.

DataOutputStream out = new DataOutputStream(socket.getOutputStream());

// Request header
writeRequestHeader(5, OP_CACHE_GET_NAMES, 1, out);
// Read result
DataInputStream in = new DataInputStream(socket.getInputStream());

readResponseHeader(in);

// Cache count
int cacheCount = readIntLittleEndian(in);

// Cache names
for (int i = 0; i < cacheCount; i++) {
  int type = readByteLittleEndian(in); // type code

  int strLen = readIntLittleEndian(in); // length

  byte[] buf = new byte[strLen];

  readFully(in, buf, 0, strLen);

  String s = new String(buf); // cache name

  System.out.println(s);
}

OP_CACHE_GET_CONFIGURATION

Gets configuration for the given cache.

Request Type Description

Header

Request header.

int

Cache ID: Java-style hash code of the cache name.

byte

Flag.

Response Type Description

Header

Response header.

int

Length of the configuration in bytes (all the configuration parameters).

CacheConfiguration

Structure of Cache configuration (See below).

Cache Configuration

Type Description

int

Number of backups.

int

CacheMode:

LOCAL = 0

REPLICATED = 1

PARTITIONED = 2

bool

CopyOnRead

String

DataRegionName

bool

EagerTTL

bool

StatisticsEnabled

String

GroupName

bool

Invalidate

long

DefaultLockTimeout (milliseconds)

int

MaxQueryIterators

String

Name

bool

IsOnheapCacheEnabled

int

PartitionLossPolicy:

READ_ONLY_SAFE = 0

READ_ONLY_ALL = 1

READ_WRITE_SAFE = 2

READ_WRITE_ALL = 3

IGNORE = 4

int

QueryDetailMetricsSize

int

QueryParellelism

bool

ReadFromBackup

int

RebalanceBatchSize

long

RebalanceBatchesPrefetchCount

long

RebalanceDelay (milliseconds)

int

RebalanceMode:

SYNC = 0

ASYNC = 1

NONE = 2

int

RebalanceOrder

long

RebalanceThrottle (milliseconds)

long

RebalanceTimeout (milliseconds)

bool

SqlEscapeAll

int

SqlIndexInlineMaxSize

String

SqlSchema

int

WriteSynchronizationMode:

FULL_SYNC = 0

FULL_ASYNC = 1

PRIMARY_SYNC = 2

int

CacheKeyConfiguration count.

CacheKeyConfiguration

Structure of CacheKeyConfiguration:

String Type name

String Affinity key field name

Repeat for as many times as the CacheKeyConfiguration count that is obtained in the previous parameter. int QueryEntity count.

QueryEntity * count

Structure of QueryEntity (see below).

QueryEntity

Type Description

String

Key type name.

String

Value type name.

String

Table name.

String

Key field name.

String

Value field name.

int

QueryField count

QueryField * count

Structure of QueryField:

String Name

String Type name

bool Is key field

bool Is notNull constraint field

Repeat for as many times as the QueryField count that is obtained in the previous parameter.

int

Alias count

(String + String) * count

Field name aliases.

int

QueryIndex count

QueryIndex * count

Structure of QueryIndex:

String Index name

byte Index type:

SORTED = 0

FULLTEXT = 1

GEOSPATIAL = 2

int Inline size

int Field count

(string + bool) * count Fields (name + IsDescensing)

String cacheName = "myCache";

DataOutputStream out = new DataOutputStream(socket.getOutputStream());

// Request header
writeRequestHeader(5, OP_CACHE_GET_CONFIGURATION, 1, out);

// Cache id
writeIntLittleEndian(cacheName.hashCode(), out);

// Flags = none
writeByteLittleEndian(0, out);
// Read result
DataInputStream in = new DataInputStream(socket.getInputStream());

readResponseHeader(in);

// Config length
int configLen = readIntLittleEndian(in);

// CacheAtomicityMode
int cacheAtomicityMode = readIntLittleEndian(in);

// Backups
int backups = readIntLittleEndian(in);

// CacheMode
int cacheMode = readIntLittleEndian(in);

// CopyOnRead
boolean copyOnRead = readBooleanLittleEndian(in);

// Other configurations

OP_CACHE_CREATE_WITH_CONFIGURATION

Creates cache with provided configuration. An exception is thrown if the name is already in use.

Request Type Description

Header

Request header.

int

Length of the configuration in bytes (all the used configuration parameters).

short

Number of configuration parameters.

short + property type

Configuration Property data.

Repeat for as many times as the number of configuration parameters.

Any number of configuration parameters can be provided. Note that Name is required.

Cache configuration data is specified in key-value form, where key is the short property id and value is property-specific data. Table below describes all available parameters.

Property Code Property Type Description

2

int

CacheAtomicityMode:

TRANSACTIONAL = 0,

ATOMIC = 1

3

int

Backups

1

int

CacheMode: LOCAL = 0, REPLICATED = 1, PARTITIONED = 2

5

boolean

CopyOnRead

100

String

DataRegionName

405

boolean

EagerTtl

406

boolean

StatisticsEnabled

400

String

GroupName

402

long

DefaultLockTimeout (milliseconds)

403

int

MaxConcurrentAsyncOperations

206

int

MaxQueryIterators

0

String

Name

101

bool

IsOnheapcacheEnabled

404

int

PartitionLossPolicy:

READ_ONLY_SAFE = 0,

READ_ONLY_ALL = 1,

READ_WRITE_SAFE = 2,

READ_WRITE_ALL = 3,

IGNORE = 4

202

int

QueryDetailMetricsSize

201

int

QueryParallelism

6

bool

ReadFromBackup

303

int

RebalanceBatchSize

304

long

RebalanceBatchesPrefetchCount

301

long

RebalanceDelay (milliseconds)

300

int

RebalanceMode: SYNC = 0, ASYNC = 1, NONE = 2

305

int

RebalanceOrder

306

long

RebalanceThrottle (milliseconds)

302

long

RebalanceTimeout (milliseconds)

205

bool

SqlEscapeAll

204

int

SqlIndexInlineMaxSize

203

String

SqlSchema

4

int

WriteSynchronizationMode:

FULL_SYNC = 0,

FULL_ASYNC = 1,

PRIMARY_SYNC = 2

401

int + CacheKeyConfiguration * count

CacheKeyConfiguration count + CacheKeyConfiguration

Structure of CacheKeyConfiguration:

String Type name

String Affinity key field name

200

int + QueryEntity * count

QueryEntity count + QueryEntity

Structure of QueryEntity: (see below)

QueryEntity

Type Description

String

Key type name.

String

Value type name.

String

Table name.

String

Key field name.

String

Value field name.

int

QueryField count

QueryField

Structure of QueryField:

String Name

String Type name

bool Is key field

bool Is notNull constraint field

Repeat for as many times as the QueryField count.

int

Alias count

String + String

Field name alias.

Repeat for as many times as the alias count.

int

QueryIndex count

QueryIndex

Structure of QueryIndex:

String Index name

byte Index type:

SORTED = 0

FULLTEXT = 1

GEOSPATIAL = 2

int Inline size

int Field count

string + bool Fields (name + IsDescensing)

Repeat for as many times as the field count that is passed in the previous parameter.

Repeat for as many times as the QueryIndex count.

Response Type Description

Header

Response header.

DataOutputStream out = new DataOutputStream(socket.getOutputStream());

// Request header
writeRequestHeader(30, OP_CACHE_CREATE_WITH_CONFIGURATION, 1, out);

// Config length in bytes
writeIntLittleEndian(16, out);

// Number of properties
writeShortLittleEndian(2, out);

// Backups opcode
writeShortLittleEndian(3, out);
// Backups: 2
writeIntLittleEndian(2, out);

// Name opcode
writeShortLittleEndian(0, out);
// Name
writeString("myNewCache", out);
// Read result
DataInputStream in = new DataInputStream(socket.getInputStream());

// Response header
readResponseHeader(in);

OP_CACHE_GET_OR_CREATE_WITH_CONFIGURATION

Creates cache with provided configuration. Does nothing if the name is already in use.

Request Type Description

Header

Request header.

CacheConfiguration

Cache configuration (see format above).

Response Type Description

Header

Response header.

DataOutputStream out = new DataOutputStream(socket.getOutputStream());

writeRequestHeader(30, OP_CACHE_GET_OR_CREATE_WITH_CONFIGURATION, 1, out);

// Config length in bytes
writeIntLittleEndian(16, out);

// Number of properties
writeShortLittleEndian(2, out);

// Backups opcode
writeShortLittleEndian(3, out);

// Backups: 2
writeIntLittleEndian(2, out);

// Name opcode
writeShortLittleEndian(0, out);

// Name
writeString("myNewCache", out);
// Read result
DataInputStream in = new DataInputStream(socket.getInputStream());

// Response header
readResponseHeader(in);

OP_CACHE_DESTROY

Destroys the cache with a given name.

Request Type Description

Header

Request header.

int

Cache ID: Java-style hash code of the cache name.

Response Type Description

Header

Response header.

String cacheName = "myCache";

DataOutputStream out = new DataOutputStream(socket.getOutputStream());

// Request header
writeRequestHeader(4, OP_CACHE_DESTROY, 1, out);

// Cache id
writeIntLittleEndian(cacheName.hashCode(), out);

// Send request
out.flush();
// Read result
DataInputStream in = new DataInputStream(socket.getInputStream());

readResponseHeader(in);