LTP GCOV extension - code coverage report
Current view: directory - storage/maria - ma_checkpoint.h
Test: maria-mtr.html
Date: 2009-03-04 Instrumented lines: 4
Code covered: 0.0 % Executed lines: 0

       1                 : /* Copyright (C) 2006,2007 MySQL AB
       2                 : 
       3                 :    This program is free software; you can redistribute it and/or modify
       4                 :    it under the terms of the GNU General Public License as published by
       5                 :    the Free Software Foundation; version 2 of the License.
       6                 : 
       7                 :    This program is distributed in the hope that it will be useful,
       8                 :    but WITHOUT ANY WARRANTY; without even the implied warranty of
       9                 :    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      10                 :    GNU General Public License for more details.
      11                 : 
      12                 :    You should have received a copy of the GNU General Public License
      13                 :    along with this program; if not, write to the Free Software
      14                 :    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
      15                 : 
      16                 : /*
      17                 :   WL#3071 Maria checkpoint
      18                 :   First version written by Guilhem Bichot on 2006-04-27.
      19                 :   Does not compile yet.
      20                 : */
      21                 : 
      22                 : /* This is the interface of this module. */
      23                 : 
      24                 : typedef enum enum_ma_checkpoint_level {
      25                 :   CHECKPOINT_NONE= 0,
      26                 :   /* just write dirty_pages, transactions table and sync files */
      27                 :   CHECKPOINT_INDIRECT,
      28                 :   /* also flush all dirty pages which were already dirty at prev checkpoint */
      29                 :   CHECKPOINT_MEDIUM,
      30                 :   /* also flush all dirty pages */
      31                 :   CHECKPOINT_FULL
      32                 : } CHECKPOINT_LEVEL;
      33                 : 
      34                 : C_MODE_START
      35                 : int ma_checkpoint_init(ulong interval);
      36                 : void ma_checkpoint_end(void);
      37                 : int ma_checkpoint_execute(CHECKPOINT_LEVEL level, my_bool no_wait);
      38                 : C_MODE_END
      39                 : 
      40                 : /**
      41                 :    @brief reads some LSNs with special trickery
      42                 : 
      43                 :    If a 64-bit variable transitions between both halves being zero to both
      44                 :    halves being non-zero, and back, this function can be used to do a read of
      45                 :    it (without mutex, without atomic load) which always produces a correct
      46                 :    (though maybe slightly old) value (even on 32-bit CPUs). The value is at
      47                 :    least as new as the latest mutex unlock done by the calling thread.
      48                 :    The assumption is that the system sets both 4-byte halves either at the
      49                 :    same time, or one after the other (in any order), but NOT some bytes of the
      50                 :    first half then some bytes of the second half then the rest of bytes of the
      51                 :    first half. With this assumption, the function can detect when it is
      52                 :    seeing an inconsistent value.
      53                 : 
      54                 :    @param LSN              pointer to the LSN variable to read
      55                 : 
      56                 :    @return LSN part (most significant byte always 0)
      57                 : */
      58                 : #if ( SIZEOF_CHARP >= 8 )
      59                 : /* 64-bit CPU, 64-bit reads are atomic */
      60                 : #define lsn_read_non_atomic LSN_WITH_FLAGS_TO_LSN
      61                 : #else
      62                 : static inline LSN lsn_read_non_atomic_32(const volatile LSN *x)
      63               0 : {
      64                 :   /*
      65                 :     32-bit CPU, 64-bit reads may give a mixed of old half and new half (old
      66                 :     low bits and new high bits, or the contrary).
      67                 :   */
      68                 :   for (;;) /* loop until no atomicity problems */
      69                 :   {
      70                 :     /*
      71                 :       Remove most significant byte in case this is a LSN_WITH_FLAGS object.
      72                 :       Those flags in TRN::first_undo_lsn break the condition on transitions so
      73                 :       they must be removed below.
      74                 :     */
      75               0 :     LSN y= LSN_WITH_FLAGS_TO_LSN(*x);
      76               0 :     if (likely((y == LSN_IMPOSSIBLE) || LSN_VALID(y)))
      77               0 :       return y;
      78                 :   }
      79                 : }
      80                 : #define lsn_read_non_atomic(x) lsn_read_non_atomic_32(&x)
      81                 : #endif
      82                 : 
      83                 : /**
      84                 :    prints a message from a task not connected to any user (checkpoint
      85                 :    and recovery for example).
      86                 : 
      87                 :    @param  level           0 if error, ME_JUST_WARNING if warning,
      88                 :                            ME_JUST_INFO if info
      89                 :    @param  sentence        text to write
      90                 : */
      91                 : #define ma_message_no_user(level, sentence)                               \
      92                 :   my_printf_error(HA_ERR_GENERIC, "Maria engine: %s", MYF(level), sentence)

Generated by: LTP GCOV extension version 1.4