~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/transaction_log/transaction_log.cc

  • Committer: Brian Aker
  • Date: 2009-12-18 18:51:03 UTC
  • mfrom: (1143.4.23 transaction_log)
  • Revision ID: brian@gaz-20091218185103-pc5fo3n9xmd0b503
Merge Jay

Show diffs side-by-side

added added

removed removed

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