This section provides information about the Ndb
class, which models the NDB kernel; it is the
primary class of the NDB API.
- Parent class
None
- Child classes
None
- Description
Any nontrivial NDB API program makes use of at least one instance of
Ndb. By using severalNdbobjects, it is possible to implement a multithreaded application. You should remember that oneNdbobject cannot be shared between threads; however, it is possible for a single thread to use multipleNdbobjects. A single application process can support a maximum of 4711Ndbobjects.- Methods
-
The following table lists the public methods of this class and the purpose or use of each method:
Table 2.26 Ndb class methods and descriptions
Name Description Ndb()Class constructor; represents a connection to an NDB Cluster. ~Ndb()Class destructor; terminates a Cluster connection when it is no longer to be used closeTransaction()Closes a transaction. computeHash()Computes a distribution hash value. createEventOperation()Creates a subscription to a database event. (See Section 2.3.16, “The NdbEventOperation Class”.) dropEventOperation()Drops a subscription to a database event. getDictionary()Gets a dictionary, which is used for working with database schema information. getDatabaseName()Gets the name of the current database. getDatabaseSchemaName()Gets the name of the current database schema. get_eventbuf_max_alloc()Gets the current allocated maximum size of the event buffer. get_eventbuffer_free_percent()Gets the percentage of event buffer memory that should be available before buffering resumes, once the limit has been reached. Added in NDB 7.4. get_event_buffer_memory_usage()Provides event buffer memory usage information. Added in NDB 7.4. getGCIEventOperations()Gets the next event operation from a GCI. Deprecated in NDB 7.4. getHighestQueuedEpoch()Gets the latest epoch in the event queue. Added in NDB 7.4. getLatestGCI()Gets the most recent GCI. Deprecated in NDB 7.4. getNdbError()Retrieves an error. (See Section 2.3.15, “The NdbError Structure”.) getNdbErrorDetail()Retrieves extra error details. getNdbObjectName()Retrieves the Ndbobject name if one was set.getNextEventOpInEpoch2()Gets the next event operation in this global checkpoint. getNextEventOpInEpoch3()Gets the next event operation in this global checkpoint, showing any received anyvalues. Added in NDB 7.4.18 and 7.5.9. getReference()Retrieves a reference or identifier for the Ndbobject instance.init()Initializes an Ndbobject and makes it ready for use.isConsistent()Whether all received events are consistent. Deprecated in NDB 7.4. isConsistentGCI()Whether all received events for a given global checkpoint are consistent. Deprecated in NDB 7.4. isExpectingHigherQueuedEpochs()Check whether there are new queued epochs, or there was a cluster failure event. Added in NDB 7.4.7. nextEvent()Gets the next event from the queue. Deprecated in NDB 7.4. nextEvent2()Gets the next event from the queue. Added in NDB 7.4. pollEvents()Waits for an event to occur. Deprecated in NDB 7.4. pollEvents2()Waits for an event to occur. Added in NDB 7.4. setDatabaseName()Sets the name of the current database. setDatabaseSchemaName()Sets the name of the current database schema. setEventBufferQueueEmptyEpoch()Enables queuing of empty events. Added in NDB 7.4.11. set_eventbuf_max_alloc()Sets the current allocated maximum size of the event buffer. set_eventbuffer_free_percent()Sets the percentage of event buffer memory that should be available before buffering resumes, once the limit has been reached. Added in NDB 7.4. setNdbObjectName()For debugging purposes: sets an arbitrary name for this Ndbobject.startTransaction()Begins a transaction. (See Section 2.3.25, “The NdbTransaction Class”.)
- Types
-
The
Ndbclass does not define any public typesbut does define three data structures, which are listed here:
Resource consumption by Ndb objects.
An Ndb object consumes memory in proportion
to the size of the largest operation performed over the lifetime
of the object. This is particularly noticeable in cases of large
transactions, use of blob columns, or both. This memory is held
for the lifetime of the object, and once used in this way by the
Ndb object, the only way to free this memory
is to destroy the object (and then to create a new instance if
desired).
The Ndb object is multithread safe in that
each Ndb object can be handled by one thread
at a time. If an Ndb object is handed over to
another thread, then the application must ensure that a memory
barrier is used to ensure that the new thread sees all updates
performed by the previous thread.
Semaphores and mutexes are examples of easy ways to provide memory barriers without having to bother about the memory barrier concept.
It is also possible to use multiple Ndb objects
to perform operations on different clusters in a single
application. See
Section 1.5, “Application-level partitioning”, for
conditions and restrictions applying to such usage.
- Description
This creates an instance of
Ndb, which represents a connection to the NDB Cluster. All NDB API applications should begin with the creation of at least oneNdbobject. This requires the creation of at least one instance ofNdb_cluster_connection, which serves as a container for a cluster connection string.- Signature
Ndb ( Ndb_cluster_connection* ndb_cluster_connection, const char* catalogName = "", const char* schemaName = "def" )- Parameters
-
The
Ndbclass constructor can take up to 3 parameters, of which only the first is required:ndb_cluster_connectionis an instance ofNdb_cluster_connection, which represents a cluster connection string. (See Section 2.3.12, “The Ndb_cluster_connection Class”.)-
catalogNameis an optional parameter providing a namespace for the tables and indexes created in any connection from theNdbobject.This is equivalent to what mysqld considers “the database”.
The default value for this parameter is an empty string.
-
The optional
schemaNameprovides an additional namespace for the tables and indexes created in a given catalog.The default value for this parameter is the string “def”.
- Return value
An
Ndbobject.- Destructor
The destructor for the
Ndbclass should be called in order to terminate an instance ofNdb. It requires no arguments, nor any special handling.
- Description
-
This is one of two NDB API methods provided for closing a transaction (the other being
NdbTransaction::close()). You must call one of these two methods to close the transaction once it has been completed, whether or not the transaction succeeded.If the transaction has not yet been committed, it is aborted when this method is called. See Ndb::startTransaction().
- Signature
void closeTransaction ( NdbTransaction *transaction )- Parameters
This method takes a single argument, a pointer to the
NdbTransactionto be closed.- Return value
None (
void).
- Description
-
This method can be used to compute a distribution hash value, given a table and its keys.
computeHash()can be used only for tables that use nativeNDBpartitioning. - Signature
static int computeHash ( Uint32* hashvalueptr, const NdbDictionary::Table* table, const struct Key_part_ptr* keyData, void* xfrmbuf = 0, Uint32 xfrmbuflen = 0 )- Parameters
-
This method takes the following parameters:
If the method call is successful,
hashvalueptris set to the computed hash value.A pointer to a
table(see Section 2.3.27, “The Table Class”).keyDatais a null-terminated array of pointers to the key parts that are part of the table's distribution key. The length of each key part is read from metadata and checked against the passed value (see Ndb::Key_part_ptr).xfrmbufis a pointer to temporary buffer used to calculate the hash value.-
xfrmbuflenis the length of this buffer.If
xfrmbufisNULL(the default), then a call tomalloc()orfree()is made automatically, as appropriate.Prior to NDB 7.5.30, 7.6.26, 8.0.33:
computeHash()fails ifxfrmbufis notNULLandxfrmbuflenis too small.NDB 7.5.30 and later, 7.6.26 and later, 8.0.33 and later: If the buffer passed is not of sufficient size, a temporary buffer is allocated automatically. (Bug #103814, Bug #32959894)
NoteWhen
malloc()provides a buffer to this method, the buffer is explicitly aligned after it is allocated, and before it is actually used. (Bug #16484617)
- Return value
0 on success, an error code on failure. If the method call succeeds, the computed hash value is made available through
hashvalueptr.
- Description
-
This method creates a subscription to a database event.
NDB API event subscriptions do not persist after an NDB Cluster has been restored using ndb_restore; in such cases, all of the subscriptions must be recreated explicitly.
- Signature
NdbEventOperation* createEventOperation ( const char *eventName )- Parameters
This method takes a single argument, the unique
eventNameidentifying the event to which you wish to subscribe.- Return value
A pointer to an
NdbEventOperationobject (orNULL, in the event of failure). See Section 2.3.16, “The NdbEventOperation Class”.
- Description
-
This method drops a subscription to a database event represented by an
NdbEventOperationobject.Memory used by an event operation which has been dropped is not freed until the event buffer has been completely read. This means you must continue to call
pollEvents()andnextEvent()in such cases until these methods return0andNULL, respectively in order for this memory to be freed. - Signature
int dropEventOperation ( NdbEventOperation *eventOp )- Parameters
This method requires a single input parameter, a pointer to an instance of
NdbEventOperation.- Return value
0 on success; any other result indicates failure.
This section describes the
EventBufferMemoryUsage structure.
- Parent class
- Description
This structure was added in NDB 7.4 for working with event buffer memory usage statistics. It is used as an argument to
Ndb::get_event_buffer_memory_usage().- Attributes
-
EventBufferMemoryUsagehas the attributes shown in the following table:Table 2.27 EventBufferMemoryUsage structure attributes, with types, initial values, and descriptions
Name Type Initial Value Description allocated_bytesunsignednone The total event buffer memory allocated, in bytes used_bytesunsignednone The total memory used, in bytes usage_percentunsignednone Event buffer memory usage, as a percent ( 100 * used_bytes / allocated_bytes)
- Description
-
This method is used to obtain an object for retrieving or manipulating database schema information. This
Dictionaryobject contains meta-information about all tables in the cluster.The dictionary returned by this method operates independently of any transaction. See Section 2.3.3, “The Dictionary Class”, for more information.
- Signature
NdbDictionary::Dictionary* getDictionary ( void ) const- Parameters
None.
- Return value
An instance of the
Dictionaryclass.
- Description
This method can be used to obtain the name of the current database.
- Signature
const char* getDatabaseName ( void )- Parameters
None.
- Return value
The name of the current database.
- Description
This method can be used to obtain the current database schema name.
- Signature
const char* getDatabaseSchemaName ( void )- Parameters
None.
- Return value
The name of the current database schema.
- Description
-
Iterates over distinct event operations which are part of the current GCI, becoming valid after calling
nextEvent(). You can use this method to obtain summary information for the epoch (such as a list of all tables) before processing the event data.This method is deprecated, and subject to removal in a future release. Where possible, use
getNextEventOpInEpoch2()instead. - Signature
const NdbEventOperation* getGCIEventOperations ( Uint32* iter, Uint32* event_types )- Parameters
An iterator and a mask of event types. Set
*to start.iter=0- Return value
The next event operation; returns
NULLwhen there are no more event operations. Ifevent_typesis notNULL, then after calling the method it contains a bitmask of the event types received. .
- Description
Gets the maximum memory, in bytes, that can be used for the event buffer. This is the same as reading the value of the
ndb_eventbuffer_max_allocsystem variable in the MySQL Server.- Signature
unsigned get_eventbuf_max_alloc ( void )- Parameters
None.
- Return value
The mamximum memory available for the event buffer, in bytes.
- Description
-
Gets
ndb_eventbuffer_free_percent—that is, the percentage of event buffer memory that should be available before buffering resumes, oncendb_eventbuffer_max_allochas been reached. This value is calculated asused* 100 /ndb_eventbuffer_max_alloc, whereusedis the amount of event buffer memory actually used, in bytes.This method was added in NDB 7.4.
- Signature
unsigned get_eventbuffer_free_percent ( void )- Parameters
The percentage (
pct) of event buffer memory that must be present. Valid range is 1 to 99 inclusive.- Return value
None.
- Description
-
Gets event buffer usage as a percentage of
ndb_eventbuffer_max_alloc. Unlikeget_eventbuffer_free_percent(), this method makes complete usage information available in the form of anEventBufferMemoryUsagedata structure.This method was added in NDB 7.4.
- Signature
void get_event_buffer_memory_usage ( EventBufferMemoryUsage& )- Parameters
A reference to an
EventBufferMemoryUsagestructure, which receives the usage data.- Return value
None.
- Description
-
Added in NDB 7.4, this method supersedes
getLatestGCI(), which is now deprecated and subject to removal in a future NDB Cluster release.Prior to NDB 7.4.7, this method returned the highest epoch number in the event queue. In NDB 7.4.7 and later, it returns the highest epoch number found after calling
pollEvents2()(Bug #20700220). - Signature
Uint64 getHighestQueuedEpoch ( void )- Parameters
None.
- Return value
The most recent epoch number, an integer.
- Description
-
Gets the index for the most recent global checkpoint.
This method is deprecated in NDB 7.4, and is subject to removal in a future release. In NDB 7.4 and later, you should use
getHighestQueuedEpoch()instead. - Signature
Uint64 getLatestGCI ( void )- Parameters
None.
- Return value
The most recent GCI, an integer.
- Description
This method provides you with two different ways to obtain an
NdbErrorobject representing an error condition. For more detailed information about error handling in the NDB API, see NDB Cluster API Errors.- Signature
-
The
getNdbError()method actually has two variants.The first of these simply gets the most recent error to have occurred:
const NdbError& getNdbError ( void )The second variant returns the error corresponding to a given error code:
const NdbError& getNdbError ( int errorCode )Regardless of which version of the method is used, the
NdbErrorobject returned persists until the next NDB API method is invoked. - Parameters
To obtain the most recent error, simply call
getNdbError()without any parameters. To obtain the error matching a specificerrorCode, invoke the method passing the code (anint) to it as a parameter. For a listing of NDB API error codes and corresponding error messages, see Section 2.4, “NDB API Errors and Error Handling”.- Return value
An
NdbErrorobject containing information about the error, including its type and, where applicable, contextual information as to how the error arose. See Section 2.3.15, “The NdbError Structure”, for details.
- Description
-
This method provides an easy and safe way to access any extra information about an error. Rather than reading these extra details from the
NdbErrorobject'sdetailsproperty (now now deprecated in favor ofgetNdbErrorDetail()‐see Bug #48851). This method enables storage of such details in a user-supplied buffer, returning a pointer to the beginning of this buffer. In the event that the string containing the details exceeds the length of the buffer, it is truncated to fit.getErrorDetail()provides the source of an error in the form of a string. In the case of a unique constraint violation (error 893), this string supplies the fully qualified name of the index where the problem originated, in the formatdatabase-name/schema-name/table-name/index-name, (NdbError.details, on the other hand, supplies only an index ID, and it is often not readily apparent to which table this index belongs.) Regardless of the type of error and details concerning this error, the string retrieved bygetErrorDetail()is always null-terminated. - Signature
-
The
getNdbErrorDetail()method has the following signature:const char* getNdbErrorDetail ( const NdbError& error, char* buffer, Uint32 bufferLength ) const - Parameters
To obtain detailed information about an error, call
getNdbErrorDetail()with a reference to the correspondingNdbErrorobject, abuffer, and the length of this buffer (expressed as an unsigned 32-bit integer).- Return value
When extra details about the
errorare available, this method returns a pointer to the beginning of thebuffersupplied. As stated previously, if the string containing the details is longer thanbufferLength, the string is truncated to fit. In the event that no addition details are available,getNdbErrorDetail()returnsNULL.
- Description
If a name was set for the
Ndbobject prior to its initialization, you can retrieve it using this method. Used for debugging.- Signature
const char* getNdbObjectName ( void ) const- Parameters
None.
- Return value
The
Ndbobject name, if one has been set usingsetNdbObjectName(). Otherwise, this method returns 0.
- Description
-
Iterates over individual event operations making up the current global checkpoint. Use following
nextEvent2()to obtain summary information for the epoch, such as a listing of all tables, before processing event data.Exceptional epochs do not have any event operations associated with them.
- Signature
const NdbEventOperation* getNextEventOpInEpoch2 ( Uint32* iter, Uint32* event_types )- Parameters
Set
iterto 0 initially; this isNULLwhen there are no more events within this epoch. Ifevent_typesis notNULL, it holds a bitmask of the event types received.- Return value
A pointer to the next
NdbEventOperation, if there is one.
- Description
-
Iterates over individual event operations making up the current global checkpoint. Use following
nextEvent2()to obtain summary information for the epoch, such as a listing of all tables, before processing event data. Is the same asgetNextEventOpInEpoch3()but with the addition of a third argument which holds the merger of all AnyValues received, showing which bits are set for all operations on a given table.Exceptional epochs do not have any event operations associated with them.
This method was added in NDB 7.4.18 and 7.5.9. (Bug #26333981)
- Signature
const NdbEventOperation* getNextEventOpInEpoch2 ( Uint32* iter, Uint32* event_types Uint32* cumulative_any_value )- Parameters
Set
iterto 0 initially; this isNULLwhen there are no more events within this epoch. Ifevent_typesis notNULL, it holds a bitmask of the event types received. Ifcumulative_any_valueis notNULL, it holds the merger of all AnyValues received.- Return value
A pointer to the next
NdbEventOperation, if there is one.
- Description
This method is used to initialize an
Ndbobject.- Signature
int init ( int maxNoOfTransactions = 4 )- Parameters
-
The
init()method takes a single parametermaxNoOfTransactionsof type integer. This parameter specifies the maximum number of parallelNdbTransactionobjects that can be handled by this instance ofNdb. The maximum permitted value formaxNoOfTransactionsis 1024; if not specified, it defaults to 4.Each scan or index operation uses an extra
NdbTransactionobject. - Return value
-
This method returns an
int, which can be either of the following two values:0: indicates that the
Ndbobject was initialized successfully.-1: indicates failure.
- Description
-
Check if all events are consistent. If a node failure occurs when resources are exhausted, events may be lost and the delivered event data might thus be incomplete. This method makes it possible to determine if this is the case.
This method is deprecated in NDB 7.4, and is subject to removal in a future release. In NDB 7.4 and later, you should instead use
NdbEventOperation::getEventType2()to determine the type of event—in this instance, whether the event is of typeTE_INCONSISTENT. See Event::TableEvent. - Signature
bool isConsistent ( Uint64& gci )- Parameters
A reference to a global checkpoint index. This is the first inconsistent GCI found, if any.
- Return value
trueif all events are consistent.
- Description
-
If a node failure occurs when resources are exhausted, events may be lost and the delivered event data might thus be incomplete. This method makes it possible to determine if this is the case by checking whether all events in a given GCI are consistent.
This method is deprecated in NDB 7.4, and is subject to removal in a future release. In NDB 7.4 and later, you should instead use
NdbEventOperation::getEventType2()to determine the type of event—in this instance, whether the event is of typeTE_INCONSISTENT. See Event::TableEvent. - Signature
bool isConsistentGCI ( Uint64 gci )- Parameters
A global checkpoint index.
- Return value
trueif this GCI is consistent;falseindicates that the GCI may be possibly inconsistent.
- Description
-
Check whether higher queued epochs have been seen by the last invocation of
Ndb::pollEvents2(), or whether a TE_CLUSTER_FAILURE event was found.It is possible, after a cluster failure has been detected, for the highest queued epoch returned by
pollEvents2()not to be increasing any longer. In this case, rather than poll for more events, you should instead consume events withnextEvent()until it detects a TE_CLUSTER_FAILURE is detected, then reconnect to the cluster when it becomes available again. - Signature
bool isExpectingHigherQueuedEpochs ( void )- Parameters
None.
- Return value
True if queued epochs were seen by the last
pollEvents2()call or, in the event of cluster failure.
This section describes the Key_part_ptr
structure.
- Parent class
- Description
Key_part_ptrprovides a convenient way to define key-part data when starting transactions and computing hash values, by passing in pointers to distribution key values. When the distribution key has multiple parts, they should be passed as an array, with the last part's pointer set equal toNULL. See Ndb::startTransaction(), and Ndb::computeHash(), for more information about how this structure is used.- Attributes
-
A
Key_part_ptrhas the attributes shown in the following table:Table 2.28 Key_part_ptr structure attributes, with types, initial values, and descriptions
Attribute Type Initial Value Description ptrconst void*none Pointer to one or more distribution key values lenunsignednone The length of the pointer
- Description
-
Returns the next event operation having data from a subscription queue.
This method clears inconsistent data events from the event queue when processing them. In order to able to clear all such events, applications must call this method even in cases when
pollEvents()has already returned 0.This method is deprecated in NDB 7.4, and is subject to removal in a future release. In NDB 7.4 and later, you should use
nextEvent2()instead. - Signature
NdbEventOperation* nextEvent ( void )- Parameters
None.
- Return value
This method returns an
NdbEventOperationobject representing the next event in a subscription queue, if there is such an event. If there is no event in the queue, it returnsNULLinstead.
- Description
-
Returns the event operation associated with the data dequeued from the event queue. This should be called repeatedly after
pollEvents2()populates the queue, until the event queue is empty.Added in NDB 7.4, this method supersedes
nextEvent(), which is now deprecated and subject to removal in a future NDB Cluster release.After calling this method, use
NdbEventOperation::getEpoch()to determine the epoch, then check the type of the returned event data usingNdbEventOperation::getEventType2(). Handling must be provided for all exceptionalTableEventtypes, includingTE_EMPTY,TE_INCONSISTENT, andTE_OUT_OF_MEMORY(also introduced in NDB 7.4). No otherNdbEventOperationmethods than the two named here should be called for an exceptional epoch. Returning empty epochs (TE_EMPTY) may flood applications when data nodes are idle. If this is not desirable, applications should filter out any empty epochs. - Signature
NdbEventOperation* nextEvent2 ( void )- Parameters
None.
- Return value
This method returns an
NdbEventOperationobject representing the next event in an event queue, if there is such an event. If there is no event in the queue, it returnsNULLinstead.
This section provides information about the
PartitionSpec structure.
- Parent class
- Description
-
A
PartitionSpecis used for describing a table partition using any one of the following criteria:A specific partition ID for a table with user-defined partitioning.
An array made up of a table's distribution key values for a table with native partitioning.
A row in
NdbRecordformat containing a natively partitioned table's distribution key values.
- Attributes
-
A
PartitionSpechas two attributes, aSpecTypeand aSpecwhich is a data structure corresponding to thatSpecType, as shown in the following table:Table 2.29 PartitionSpec attributes with the SpecType values, data structures, and descriptions for each attribute.
SpecTypeEnumerationSpecTypeValue (Uint32)Data Structure Description PS_NONE0none No partitioning information is provided. PS_USER_DEFINED1Ndb::PartitionSpec::UserDefinedFor a table having user-defined partitioning, a specific partition is identified by its partition ID. PS_DISTR_KEY_PART_PTR2Ndb::PartitionSpec::KeyPartPtrFor a table having native partitioning, an array containing the table's distribution key values is used to identify the partition. PS_DISTR_KEY_RECORD3Ndb::PartitionSpec::KeyRecordThe partition is identified using a natively partitioned table's distribution key values, as contained in a row given in NdbRecordformat.
UserDefined structure.
This structure is used when the SpecType is
PS_USER_DEFINED.
Table 2.30 Attribute types of the partitionId attribute of the PS_USER_DEFINED SpecType
| Attribute | Type | Description |
|---|---|---|
partitionId |
Uint32 |
The partition ID for the desired table. |
KeyPartPtr structure.
This structure is used when the SpecType is
PS_DISTR_KEY_PART_PTR.
Table 2.31 Attributes of the PS_DISTR_KEY_PART_PTR SpecType, with attribute types and descriptions
| Attribute | Type | Description |
|---|---|---|
tableKeyParts |
Key_part_ptr |
Pointer to the distribution key values for a table having native partitioning. |
xfrmbuf |
void* |
Pointer to a temporary buffer used for performing calculations. |
xfrmbuflen |
Uint32 |
Length of the temporary buffer. |
KeyRecord structure.
This structure is used when the SpecType is
PS_DISTR_KEY_RECORD.
Definition from Ndb.hpp.
Because this is a fairly complex structure, we here provide the
original source-code definition of
PartitionSpec, as given in
storage/ndb/include/ndbapi/Ndb.hpp:
struct PartitionSpec
{
/*
Size of the PartitionSpec structure.
*/
static inline Uint32 size()
{
return sizeof(PartitionSpec);
}
enum SpecType
{
PS_NONE = 0,
PS_USER_DEFINED = 1,
PS_DISTR_KEY_PART_PTR = 2,
PS_DISTR_KEY_RECORD = 3
};
Uint32 type;
union
{
struct {
Uint32 partitionId;
} UserDefined;
struct {
const Key_part_ptr* tableKeyParts;
void* xfrmbuf;
Uint32 xfrmbuflen;
} KeyPartPtr;
struct {
const NdbRecord* keyRecord;
const char* keyRow;
void* xfrmbuf;
Uint32 xfrmbuflen;
} KeyRecord;
};
};
- Description
-
This method waits for a GCP to complete. It is used to determine whether any events are available in the subscription queue.
This method waits for the next epoch, rather than the next GCP. See Section 2.3.16, “The NdbEventOperation Class”, for more information.
This method is deprecated and subject to removal in a future NDB Cluster release; use
pollEvents2()instead. - Signature
int pollEvents ( int maxTimeToWait, Uint64* latestGCI = 0 )- Parameters
-
This method takes the two parameters listed here:
-
The maximum time to wait, in milliseconds, before “giving up” and reporting that no events were available (that is, before the method automatically returns
0).A negative value causes the wait to be indefinite and never time out. This is not recommended (and is not supported by the successor method
pollEvents2()). The index of the most recent global checkpoint. Normally, this may safely be permitted to assume its default value, which is
0.
-
- Return value
-
pollEvents()returns a value of typeint, which may be interpreted as follows:> 0: There are events available in the queue.0: There are no events available.In NDB 7.6.28, 8.0.35, 8.2.0, and later releases, a negative value indicates failure and NDB_FAILURE_GCI (
~(Uint64)0) indicates cluster failure (Bug #35671818); 1 is returned when encountering an exceptional event, except when onlyTE_EMPTYevents are found, as described later in this section.
When
pollEvents()finds an exceptional event at the head of the event queue, the method returns 1 and otherwise behaves as follows:Empty events (
TE_EMPTY) are removed from the event queue head until an event containing data is found. When this results in the entire queue being processed without encountering any data, the method returns 0 (no events available) rather than 1. This behavior makes this event type transparent to an application usingpollEvents().-
After encountering an event containing inconsistent data (
TE_INCONSISTENT) due to data node buffer overflow, the next call tonextEvent()call removes the inconsistent data event data from the event queue, and returnsNULL. You should check the inconsistency by callingisConsistent()immediately thereafter.Important: Although the inconsistent event data is removed from the event queue by calling
nextEvent(), information about the inconsistency is removed only by anothernextEvent()call following this, that actually finds an event containing data. When
pollEvents()finds a data buffer overflow event (TE_OUT_OF_MEMORY), the event data is added to the event queue whenever event buffer usage exceedsndb_eventbuffer_max_alloc. In this case, the next call tonextEvent()exits the process.
- Description
-
Waits for an event to occur. Returns as soon as any event data is available. This method also moves an epoch's complete event data to the event queue.
This method supersedes
pollEvents(), which is now deprecated and subject to removal in a future NDB Cluster release. - Signature
int pollEvents2 ( int aMillisecondNumber, Uint64* highestQueuedEpoch = 0 )- Parameters
-
This method takes the two parameters listed here:
-
The maximum time to wait, in milliseconds, before giving up and reporting that no events were available (that is, before the method automatically returns
0).Specifying a negative value for this argument causes
pollEvents2()to return -1, indicating an error. The index of the highest queued epoch. Normally, this may safely be permitted to assume its default value, which is
0. If this value is notNULLand new event data is available in the event queue, it is set to the highest epoch found in the available event data.
-
- Return value
-
pollEvents2()returns an integer whose value can be interpreted as follows:> 0: There are events available in the queue.0: There are no events available.< 0: Indicates failure (possible error).
- Description
This method is used to set the name of the current database.
- Signature
void setDatabaseName ( const char *databaseName )- Parameters
setDatabaseName()takes a single, required parameter, the name of the new database to be set as the current database.- Return value
None.
- Description
This method sets the name of the current database schema.
- Signature
void setDatabaseSchemaName ( const char *databaseSchemaName )- Parameters
The name of the database schema.
- Return value
None.
- Description
-
Queuing of empty epochs is disabled by default. This method can be used to enable such queuing, in which case any new, empty epochs entering the event buffer following the method call are queued.
When queuing of empty epochs is enabled,
nextEvent()associates an empty epoch to one and only one of the subscriptions (event operations) connected to the subscribingNdbobject. This means that there can be no more than one empty epoch per subscription, even though the user may have many subscriptions associated with the sameNdbobject.setEventBufferQueueEmptyEpoch()has no associated getter method. This is intentional, and is due to the fact this setter applies to queuing new epochs, whereas the queue itself may still reflect the state of affairs that existed prior to invoking the setter. Thus, during a transition period, an empty epoch might be found in the queue even if queuing is turned off.setEventBufferQueueEmptyEpoch()was added in NDB 7.4.11. - Signature
void setEventBufferQueueEmptyEpoch ( bool queue_empty_epoch )- Parameters
This method takes a single input parameter, a boolean. Invoking the method with
trueenables queuing of empty events; passingfalseto the method disables such queuing.- Return value
None.
- Description
Sets the maximum memory, in bytes, that can be used for the event buffer. This has the same effect as setting the value of the
ndb_eventbuffer_max_allocsystem variable in the MySQL Server.- Signature
void set_eventbuf_max_alloc ( unsigned size )- Parameters
The desired maximum
sizefor the event buffer, in bytes.- Return value
None.
- Description
-
Sets
ndb_eventbuffer_free_percent—that is, the percentage of event buffer memory that should be available before buffering resumes, oncendb_eventbuffer_max_allochas been reached.This method was added in NDB 7.4.
- Signature
int set_eventbuffer_free_percent ( unsigned pct )- Parameters
The percentage (
pct) of event buffer memory that must be present. Valid range is 1 to 99 inclusive.- Return value
The value that was set.
- Description
-
You can also set an arbitrary, human-readable name to identify an
Ndbobject for debugging purposes. This name can then be retrieved usinggetNdbObjectName(). This must be done prior to callinginit()for this object; trying to set a name after initialization fails with an error.You can set a name only once for a given
Ndbobject; subsequent attempts after the name has already been set fail with an error. - Signature
int setNdbObjectName ( const char* name )- Parameters
A
namethat is intended to be human-readable.- Return value
0 on success.
- Description
-
This method is used to begin a new transaction. There are three variants, the simplest of these using a table and a partition key or partition ID to specify the transaction coordinator (TC). The third variant makes it possible for you to specify the TC by means of a pointer to the data of the key.
When the transaction is completed it must be closed using
NdbTransaction::close()orNdb::closeTransaction(). Failure to do so aborts the transaction. This must be done regardless of the transaction's final outcome, even if it fails due to an error.See Ndb::closeTransaction(), and NdbTransaction::close(), for more information.
- Signature
NdbTransaction* startTransaction ( const NdbDictionary::Table* table = 0, const char* keyData = 0, Uint32* keyLen = 0 )- Parameters
-
This method takes the following three parameters:
table: A pointer to aTableobject. This is used to determine on which node the transaction coordinator should run.keyData: A pointer to a partition key corresponding totable.keyLen: The length of the partition key, expressed in bytes.
Distribution-aware forms of startTransaction(). It is also possible to employ distribution awareness with this method; that is, to suggest which node should act as the transaction coordinator.
- Signature
NdbTransaction* startTransaction ( const NdbDictionary::Table* table, const struct Key_part_ptr* keyData, void* xfrmbuf = 0, Uint32 xfrmbuflen = 0 )- Parameters
-
When specifying the transaction coordinator, this method takes the four parameters listed here:
A pointer to a
table(Tableobject) used for deciding which node should act as the transaction coordinator.-
A null-terminated array of pointers to the values of the distribution key columns. The length of the key part is read from metadata and checked against the passed value.
An
Ndb::Key_part_ptris defined as shown in Ndb::Key_part_ptr. -
A pointer to a temporary buffer, used to calculate the hash value.
If
xfrmbufisNULL(the default), then a call tomalloc()orfree()is made automatically, as appropriate.Prior to NDB 7.5.30, 7.6.26, 8.0.33:
startTransaction()fails ifxfrmbufis notNULLandxfrmbuflenis too small.NDB 7.5.30 and later, 7.6.26 and later, 8.0.33 and later: If the buffer passed is not of sufficient size, a temporary buffer is allocated automatically. (Bug #103814, Bug #32959894, Bug #34917498)
The length of the buffer.
- Return value
On success, an
NdbTransactionobject. In the event of failure,NULLis returned.- Example
-
Suppose that the table's partition key is a single
BIGINTcolumn. Then you would declare the distribution key array as shown here:Key_part_ptr distkey[2];The value of the distribution key would be defined as shown here:
unsigned long long distkeyValue= 23;The pointer to the distribution key array would be set as follows:
distkey[0].ptr= (const void*) &distkeyValue;The length of this pointer would be set accordingly:
distkey[0].len= sizeof(distkeyValue);The distribution key array must terminate with a
NULLelement. This is necessary to avoid to having an additional parameter providing the number of columns in the distribution key:distkey[1].ptr= NULL; distkey[1].len= NULL;Setting the buffer to
NULLpermitsstartTransaction()to allocate and free memory automatically:xfrmbuf= NULL; xfrmbuflen= 0;Now, when you start the transaction, you can access the node that contains the desired information directly.
Another distribution-aware version of this method makes it possible for you to specify a table and partition (using the partition ID) as a hint for selecting the transaction coordinator, and is defined as shown here:
NdbTransaction* startTransaction ( const NdbDictionary::Table* table, Uint32 partitionId )In the event that the cluster has the same number of data nodes as it has fragment replicas, specifying the transaction coordinator gains no improvement in performance, since each data node contains the entire database. However, where the number of data nodes is greater than the number of fragment replicas (for example, where
NoOfReplicasis set equal to 2 in a cluster with four data nodes), you should see a marked improvement in performance by using the distribution-aware version of this method.It is still possible to use this method as before, without specifying the transaction coordinator. In either case, you must still explicitly close the transaction, whether or not the call to
startTransaction()was successful.