~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/transaction_log/transaction_log.cc

Merged with latest header-fixes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
117
117
 * each written Transaction message?
118
118
 */
119
119
static bool sysvar_transaction_log_checksum_enabled= false;
 
120
/**
 
121
 * Numeric option controlling the sync/flush behaviour of the transaction
 
122
 * log.  Options are:
 
123
 *
 
124
 * TransactionLog::SYNC_METHOD_OS == 0            ... let OS do sync'ing
 
125
 * TransactionLog::SYNC_METHOD_EVERY_WRITE == 1   ... sync on every write
 
126
 * TransactionLog::SYNC_METHOD_EVERY_SECOND == 2  ... sync at most once a second
 
127
 */
 
128
static uint32_t sysvar_transaction_log_sync_method= 0;
120
129
 
121
130
/** Views defined in info_schema.cc */
122
131
extern plugin::InfoSchemaTable *transaction_log_view;
190
199
                      message and trailing checksum to */
191
200
  uint8_t *orig_buffer;
192
201
 
193
 
  int error_code;
194
202
  size_t message_byte_length= to_apply.ByteSize();
195
203
  ssize_t written;
196
204
  off_t cur_offset;
289
297
  }
290
298
  free(orig_buffer);
291
299
 
292
 
  error_code= my_sync(log_file, 0);
 
300
  int error_code= syncLogFile();
293
301
 
294
302
  transaction_log_index->addEntry(TransactionLogEntry(ReplicationServices::TRANSACTION,
295
303
                                                     cur_offset,
305
313
  }
306
314
}
307
315
 
 
316
int TransactionLog::syncLogFile()
 
317
{
 
318
  switch (sysvar_transaction_log_sync_method)
 
319
  {
 
320
  case SYNC_METHOD_EVERY_WRITE:
 
321
    return my_sync(log_file, 0);
 
322
  case SYNC_METHOD_EVERY_SECOND:
 
323
    {
 
324
      time_t now_time= time(NULL);
 
325
      if (last_sync_time <= (now_time - 1))
 
326
      {
 
327
        last_sync_time= now_time;
 
328
        return my_sync(log_file, 0);
 
329
      }
 
330
      return 0;
 
331
    }
 
332
  case SYNC_METHOD_OS:
 
333
  default:
 
334
    return 0;
 
335
  }
 
336
}
 
337
 
308
338
const string &TransactionLog::getLogFilename()
309
339
{
310
340
  return log_file_name;
491
521
}
492
522
 
493
523
static DRIZZLE_SYSVAR_BOOL(enable,
494
 
                          sysvar_transaction_log_enabled,
495
 
                          PLUGIN_VAR_NOCMDARG,
496
 
                          N_("Enable transaction log"),
497
 
                          NULL, /* check func */
498
 
                          NULL, /* update func */
499
 
                          false /* default */);
 
524
                           sysvar_transaction_log_enabled,
 
525
                           PLUGIN_VAR_NOCMDARG,
 
526
                           N_("Enable transaction log"),
 
527
                           NULL, /* check func */
 
528
                           NULL, /* update func */
 
529
                           false /* default */);
500
530
 
501
531
static DRIZZLE_SYSVAR_BOOL(truncate_debug,
502
 
                          sysvar_transaction_log_truncate_debug,
503
 
                          PLUGIN_VAR_NOCMDARG,
504
 
                          N_("DEBUGGING - Truncate transaction log"),
505
 
                          NULL, /* check func */
506
 
                          set_truncate_debug, /* update func */
507
 
                          false /* default */);
 
532
                           sysvar_transaction_log_truncate_debug,
 
533
                           PLUGIN_VAR_NOCMDARG,
 
534
                           N_("DEBUGGING - Truncate transaction log"),
 
535
                           NULL, /* check func */
 
536
                           set_truncate_debug, /* update func */
 
537
                           false /* default */);
508
538
 
509
539
static DRIZZLE_SYSVAR_STR(log_file,
510
540
                          sysvar_transaction_log_file,
511
541
                          PLUGIN_VAR_READONLY,
512
 
                          N_("Path to the file to use for transaction log."),
 
542
                          N_("Path to the file to use for transaction log"),
513
543
                          NULL, /* check func */
514
544
                          NULL, /* update func*/
515
545
                          DEFAULT_LOG_FILE_PATH /* default */);
516
546
 
517
547
static DRIZZLE_SYSVAR_BOOL(enable_checksum,
518
 
                          sysvar_transaction_log_checksum_enabled,
519
 
                          PLUGIN_VAR_NOCMDARG,
520
 
                          N_("Enable CRC32 Checksumming"),
521
 
                          NULL, /* check func */
522
 
                          NULL, /* update func */
523
 
                          false /* default */);
 
548
                           sysvar_transaction_log_checksum_enabled,
 
549
                           PLUGIN_VAR_NOCMDARG,
 
550
                           N_("Enable CRC32 Checksumming of each written transaction log entry"),
 
551
                           NULL, /* check func */
 
552
                           NULL, /* update func */
 
553
                           false /* default */);
 
554
 
 
555
static DRIZZLE_SYSVAR_UINT(sync_method,
 
556
                           sysvar_transaction_log_sync_method,
 
557
                           PLUGIN_VAR_OPCMDARG,
 
558
                           N_("0 == rely on operating system to sync log file (default), "
 
559
                              "1 == sync file at each transaction write, "
 
560
                              "2 == sync log file once per second"),
 
561
                           NULL, /* check func */
 
562
                           NULL, /* update func */
 
563
                           0, /* default */
 
564
                           0,
 
565
                           2,
 
566
                           0);
524
567
 
525
568
static drizzle_sys_var* system_variables[]= {
526
569
  DRIZZLE_SYSVAR(enable),
527
570
  DRIZZLE_SYSVAR(truncate_debug),
528
571
  DRIZZLE_SYSVAR(log_file),
529
572
  DRIZZLE_SYSVAR(enable_checksum),
 
573
  DRIZZLE_SYSVAR(sync_method),
530
574
  NULL
531
575
};
532
576