diff options
author | unknown <sasha@mysql.sashanet.com> | 2002-01-19 22:46:25 -0700 |
---|---|---|
committer | unknown <sasha@mysql.sashanet.com> | 2002-01-19 22:46:25 -0700 |
commit | 1e0f2b7a4288b85d6b1d287056e2acfb3257f284 (patch) | |
tree | 254bb1b067e503a819145fff488d83709bf9c798 /include | |
parent | add1f37e4b503734c4a51bff6225cfb8739c74bf (diff) | |
parent | 5df61c3cdc4499197e420a76b25b942dce0f3ccc (diff) | |
download | mariadb-git-1e0f2b7a4288b85d6b1d287056e2acfb3257f284.tar.gz |
Ugly merge! But I am not done yet - there are a number of things I need to fix
before I can push
BitKeeper/etc/ignore:
auto-union
Makefile.am:
Auto merged
include/my_sys.h:
Auto merged
libmysqld/lib_sql.cc:
Auto merged
mysql-test/t/rpl_log.test:
Auto merged
mysys/mf_iocache.c:
Auto merged
mysys/mf_iocache2.c:
Auto merged
mysys/thr_mutex.c:
Auto merged
sql/item_func.cc:
Auto merged
sql/lex.h:
Auto merged
sql/mini_client.cc:
Auto merged
sql/mini_client.h:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/repl_failsafe.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_show.cc:
Auto merged
sql/stacktrace.c:
Auto merged
sql/structs.h:
Auto merged
mysql-test/r/rpl000014.result:
merge
mysql-test/r/rpl000015.result:
merge
mysql-test/r/rpl000016.result:
merge
mysql-test/r/rpl_log.result:
merge
sql/log.cc:
merge
sql/log_event.cc:
merge
sql/log_event.h:
merge
sql/mysqld.cc:
merge
sql/slave.cc:
merge
sql/slave.h:
merge
sql/sql_class.h:
merge
sql/sql_parse.cc:
merge
sql/sql_repl.cc:
merge
sql/sql_yacc.yy:
merge
Diffstat (limited to 'include')
-rw-r--r-- | include/my_sys.h | 80 |
1 files changed, 76 insertions, 4 deletions
diff --git a/include/my_sys.h b/include/my_sys.h index 5e2afcc78f6..f899e4f9324 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -293,35 +293,105 @@ typedef int (*IO_CACHE_CALLBACK)(struct st_io_cache*); typedef struct st_io_cache /* Used when cacheing files */ { + /* pos_in_file is offset in file corresponding to the first byte of + byte* buffer. end_of_file is the offset of end of file for READ_CACHE + and WRITE_CACHE. For SEQ_READ_APPEND it the maximum of the actual + end of file and the position represented by read_end. + */ my_off_t pos_in_file,end_of_file; + /* read_pos points to current read position in the buffer + read_end is the non-inclusive boundary in the buffer for the currently + valid read area + buffer is the read buffer + not sure about request_pos except that it is used in async_io + */ byte *read_pos,*read_end,*buffer,*request_pos; + /* write_buffer is used only in WRITE caches and in SEQ_READ_APPEND to + buffer writes + append_read_pos is only used in SEQ_READ_APPEND, and points to the + current read position in the write buffer. Note that reads in + SEQ_READ_APPEND caches can happen from both read buffer (byte* buffer), + and write buffer (byte* write_buffer). + write_pos points to current write position in the write buffer and + write_end is the non-inclusive boundary of the valid write area + */ byte *write_buffer, *append_read_pos, *write_pos, *write_end; + /* current_pos and current_end are convenience variables used by + my_b_tell() and other routines that need to know the current offset + current_pos points to &write_pos, and current_end to &write_end in a + WRITE_CACHE, and &read_pos and &read_end respectively otherwise + */ byte **current_pos, **current_end; -/* The lock is for append buffer used in READ_APPEND cache */ +/* The lock is for append buffer used in SEQ_READ_APPEND cache */ #ifdef THREAD pthread_mutex_t append_buffer_lock; /* need mutex copying from append buffer to read buffer */ -#endif +#endif + /* a caller will use my_b_read() macro to read from the cache + if the data is already in cache, it will be simply copied with + memcpy() and internal variables will be accordinging updated with + no functions invoked. However, if the data is not fully in the cache, + my_b_read() will call read_function to fetch the data. read_function + must never be invoked directly + */ int (*read_function)(struct st_io_cache *,byte *,uint); + /* same idea as in the case of read_function, except my_b_write() needs to + be replaced with my_b_append() for a SEQ_READ_APPEND cache + */ int (*write_function)(struct st_io_cache *,const byte *,uint); + /* specifies the type of the cache. Depending on the type of the cache + certain operations might not be available and yield unpredicatable + results. Details to be documented later + */ enum cache_type type; - /* callbacks when the actual read I/O happens */ + /* callbacks when the actual read I/O happens. These were added and + are currently used for binary logging of LOAD DATA INFILE - when a + block is read from the file, we create a block create/append event, and + when IO_CACHE is closed, we create an end event. These functions could, + of course be used for other things + */ IO_CACHE_CALLBACK pre_read; IO_CACHE_CALLBACK post_read; IO_CACHE_CALLBACK pre_close; void* arg; /* for use by pre/post_read */ char *file_name; /* if used with 'open_cached_file' */ char *dir,*prefix; - File file; + File file; /* file descriptor */ + /* seek_not_done is set by my_b_seek() to inform the upcoming read/write + operation that a seek needs to be preformed prior to the actual I/O + error is 0 if the cache operation was successful, -1 if there was a + "hard" error, and the actual number of I/O-ed bytes if the read/write was + partial + */ int seek_not_done,error; + /* buffer_length is the size of memory allocated for buffer or write_buffer + read_length is the same as buffer_length except when we use async io + not sure why we need it + */ uint buffer_length,read_length; myf myflags; /* Flags used to my_read/my_write */ /* + alloced_buffer is 1 if the buffer was allocated by init_io_cache() and + 0 if it was supplied by the user Currently READ_NET is the only one that will use a buffer allocated somewhere else */ my_bool alloced_buffer; + /* init_count is incremented every time we call init_io_cache() + It is not reset in end_io_cache(). This variable + was introduced for slave relay logs - RELAY_LOG_INFO stores a pointer + to IO_CACHE that could in some cases refer to the IO_CACHE of the + currently active relay log. The IO_CACHE then could be closed, + re-opened and start pointing to a different log file. In that case, + we could not know reliably if this happened without init_count + one must be careful with bzero() prior to the subsequent init_io_cache() + call + */ + int init_count; #ifdef HAVE_AIOWAIT + /* as inidicated by ifdef, this is for async I/O, we will have + Sinisa comment this some time + */ uint inited; my_off_t aio_read_pos; my_aio_result aio_result; @@ -366,6 +436,8 @@ typedef int (*qsort2_cmp)(const void *, const void *, const void *); #define my_b_tell(info) ((info)->pos_in_file + \ (uint) (*(info)->current_pos - (info)->request_pos)) +#define my_b_append_tell(info) ((info)->end_of_file + \ + (uint) ((info)->write_pos - (info)->write_buffer)) #define my_b_bytes_in_cache(info) (uint) (*(info)->current_end - \ *(info)->current_pos) |