3178
3174
const char *query;
3181
#ifdef HAVE_NDB_BINLOG
3183
Wait for ndb binlog to be up-to-date with all changes
3184
done on the local mysql server
3187
ulong have_ndbcluster;
3188
if (mysql_query(mysql, query= "show variables like 'have_ndbcluster'"))
3189
die("'%s' failed: %d %s", query,
3190
mysql_errno(mysql), mysql_error(mysql));
3191
if (!(res= mysql_store_result(mysql)))
3192
die("mysql_store_result() returned NULL for '%s'", query);
3193
if (!(row= mysql_fetch_row(res)))
3194
die("Query '%s' returned empty result", query);
3196
have_ndbcluster= strcmp("YES", row[1]) == 0;
3197
mysql_free_result(res);
3199
if (have_ndbcluster)
3201
uint64_t start_epoch= 0, handled_epoch= 0,
3202
latest_epoch=0, latest_trans_epoch=0,
3203
latest_handled_binlog_epoch= 0, latest_received_binlog_epoch= 0,
3204
latest_applied_binlog_epoch= 0;
3209
const char binlog[]= "binlog";
3210
const char latest_epoch_str[]=
3212
const char latest_trans_epoch_str[]=
3213
"latest_trans_epoch=";
3214
const char latest_received_binlog_epoch_str[]=
3215
"latest_received_binlog_epoch";
3216
const char latest_handled_binlog_epoch_str[]=
3217
"latest_handled_binlog_epoch=";
3218
const char latest_applied_binlog_epoch_str[]=
3219
"latest_applied_binlog_epoch=";
3222
if (mysql_query(mysql, query= "show engine ndb status"))
3223
die("failed in '%s': %d %s", query,
3224
mysql_errno(mysql), mysql_error(mysql));
3225
if (!(res= mysql_store_result(mysql)))
3226
die("mysql_store_result() returned NULL for '%s'", query);
3227
while ((row= mysql_fetch_row(res)))
3229
if (strcmp(row[1], binlog) == 0)
3231
const char *status= row[2];
3234
while (*status && strncmp(status, latest_epoch_str,
3235
sizeof(latest_epoch_str)-1))
3239
status+= sizeof(latest_epoch_str)-1;
3240
latest_epoch= strtoull(status, (char**) 0, 10);
3243
die("result does not contain '%s' in '%s'",
3244
latest_epoch_str, query);
3245
/* latest_trans_epoch */
3246
while (*status && strncmp(status, latest_trans_epoch_str,
3247
sizeof(latest_trans_epoch_str)-1))
3251
status+= sizeof(latest_trans_epoch_str)-1;
3252
latest_trans_epoch= strtoull(status, (char**) 0, 10);
3255
die("result does not contain '%s' in '%s'",
3256
latest_trans_epoch_str, query);
3257
/* latest_received_binlog_epoch */
3259
strncmp(status, latest_received_binlog_epoch_str,
3260
sizeof(latest_received_binlog_epoch_str)-1))
3264
status+= sizeof(latest_received_binlog_epoch_str)-1;
3265
latest_received_binlog_epoch= strtoull(status, (char**) 0, 10);
3268
die("result does not contain '%s' in '%s'",
3269
latest_received_binlog_epoch_str, query);
3270
/* latest_handled_binlog */
3272
strncmp(status, latest_handled_binlog_epoch_str,
3273
sizeof(latest_handled_binlog_epoch_str)-1))
3277
status+= sizeof(latest_handled_binlog_epoch_str)-1;
3278
latest_handled_binlog_epoch= strtoull(status, (char**) 0, 10);
3281
die("result does not contain '%s' in '%s'",
3282
latest_handled_binlog_epoch_str, query);
3283
/* latest_applied_binlog_epoch */
3285
strncmp(status, latest_applied_binlog_epoch_str,
3286
sizeof(latest_applied_binlog_epoch_str)-1))
3290
status+= sizeof(latest_applied_binlog_epoch_str)-1;
3291
latest_applied_binlog_epoch= strtoull(status, (char**) 0, 10);
3294
die("result does not contain '%s' in '%s'",
3295
latest_applied_binlog_epoch_str, query);
3297
start_epoch= latest_trans_epoch;
3302
die("result does not contain '%s' in '%s'",
3304
if (latest_handled_binlog_epoch > handled_epoch)
3306
handled_epoch= latest_handled_binlog_epoch;
3308
if (latest_handled_binlog_epoch >= start_epoch)
3310
else if (count > 30)
3314
mysql_free_result(res);
3319
3177
if (mysql_query(mysql, query= "show master status"))
3320
3178
die("failed in 'show master status': %d %s",
3321
3179
mysql_errno(mysql), mysql_error(mysql));