~ihanick/percona-server/5.1-innodb-log_archiving

« back to all changes in this revision

Viewing changes to Percona-Server/storage/innodb_plugin/srv/srv0srv.c

  • Committer: Nickolay
  • Date: 2012-02-29 04:33:54 UTC
  • Revision ID: ihanick@lomonosov.msu.ru-20120229043354-2n9w5te0y9xudoba
clean up the code

Show diffs side-by-side

added added

removed removed

Lines of Context:
2761
2761
        return(DB_SUCCESS);
2762
2762
}
2763
2763
 
2764
 
void purge_archived_logs(ulint expire_sec, unsigned long long before_lsn) {
 
2764
#define IB_ARCHIVED_LOGS_PREFIX "ib_log_archive_"
 
2765
 
 
2766
void purge_archived_logs(time_t before_date, unsigned long long before_lsn) {
2765
2767
        os_file_dir_t dir;
2766
2768
        os_file_stat_t fileinfo;
2767
 
        char            archived_log_filename[10000];
 
2769
        char            archived_log_filename[OS_FILE_MAX_PATH];
2768
2770
        ulint           dirnamelen;
2769
2771
 
2770
2772
        if (log_xtra_log_archive_dir) {
2789
2791
 
2790
2792
        memset(&fileinfo, 0, sizeof(fileinfo));
2791
2793
        while(!os_file_readdir_next_file(log_xtra_log_archive_dir, dir, &fileinfo) ) {
2792
 
 
2793
 
                if (fileinfo.name == strstr(fileinfo.name,"ib_log_archive_")) {
 
2794
                if (fileinfo.name == strstr(fileinfo.name, IB_ARCHIVED_LOGS_PREFIX)) {
2794
2795
                        sprintf(archived_log_filename + dirnamelen, "%s", fileinfo.name);
2795
2796
 
2796
2797
                        if (before_lsn) {
2797
 
                                unsigned long long log_file_lsn = strtoll(fileinfo.name+ strlen("ib_log_archive_"), NULL, 10);
 
2798
                                unsigned long long log_file_lsn = strtoll(fileinfo.name+ strlen(IB_ARCHIVED_LOGS_PREFIX), NULL, 10);
2798
2799
                                if (before_lsn <= log_file_lsn) {
2799
2800
                                        continue;
2800
2801
                                }
2801
2802
                        } else {
2802
2803
                                fileinfo.mtime = 0;
2803
 
                                if (FALSE == os_file_get_status(archived_log_filename, &fileinfo) || fileinfo.mtime == 0) {
 
2804
                                if (os_file_get_status(archived_log_filename, &fileinfo) == FALSE || fileinfo.mtime == 0) {
2804
2805
                                        fprintf(stderr,
2805
2806
                                                        "InnoDB: Note: read archived log last modification date for: %s.\n",
2806
2807
                                                        archived_log_filename);
2807
2808
                                        continue;
2808
2809
                                }
2809
2810
 
2810
 
                                if (expire_sec == 0
2811
 
                                    || ut_time() <= (ib_time_t) (fileinfo.mtime + expire_sec) ) {
 
2811
                                if (before_date == 0 || fileinfo.mtime > before_date) {
2812
2812
                                        continue;
2813
2813
                                }
2814
2814
                        }
2815
2815
 
2816
 
                        if (FALSE == os_file_delete(archived_log_filename)) {
 
2816
                        if (os_file_delete(archived_log_filename) == FALSE) {
2817
2817
                                fprintf(stderr,
2818
2818
                                        "InnoDB: Note: can't delete archived log file %s.\n",
2819
2819
                                        archived_log_filename);
2835
2835
        log_group_t*    group = UT_LIST_GET_FIRST(log_sys->log_groups);
2836
2836
        ibool           next_is_prepared;
2837
2837
        ulint           err;
2838
 
        char            new_file_name[10000];
2839
 
        char            archive_file_name[10000];
2840
 
        char            final_file_name[10000];
 
2838
        char            new_file_name[OS_FILE_MAX_PATH];
 
2839
        char            archive_file_name[OS_FILE_MAX_PATH];
 
2840
        char            final_file_name[OS_FILE_MAX_PATH];
2841
2841
        ulint           dirnamelen;
2842
2842
        ulint           final_dirnamelen;
2843
2843
 
2884
2884
 
2885
2885
        sprintf(new_file_name + dirnamelen, "%s", "ib_next_logfile");
2886
2886
 
 
2887
/*
2887
2888
        err = open_or_create_new_log_file(new_file_name);
2888
2889
        if (err == DB_SUCCESS) {
2889
2890
                next_is_prepared = TRUE;
2890
2891
        } else {
2891
2892
                next_is_prepared = FALSE;
2892
2893
        }
 
2894
*/
 
2895
 
 
2896
        next_is_prepared = FALSE;
2893
2897
 
2894
2898
loop:
2895
2899
        os_event_reset(log_sys->archive_thread);
2927
2931
                trx_sys_print_mysql_binlog_offset();
2928
2932
 
2929
2933
                sprintf(archive_file_name + dirnamelen, "%s%016lld",
2930
 
                        "ib_log_archive_", log_sys->archived_lsn);
 
2934
                        IB_ARCHIVED_LOGS_PREFIX, log_sys->archived_lsn);
2931
2935
 
2932
2936
                if (final_dirnamelen) {
2933
2937
                        sprintf(final_file_name + final_dirnamelen, "%s%016lld",
2934
 
                                        "ib_log_archive_", log_sys->archived_lsn);
 
2938
                                        IB_ARCHIVED_LOGS_PREFIX, log_sys->archived_lsn);
2935
2939
                }
2936
2940
 
2937
2941
                hdr_offset = (log_group_calc_lsn_offset(log_sys->archived_lsn, group)
2948
2952
                        mutex_exit(&(log_sys->archived_mutex));
2949
2953
                        next_is_prepared = FALSE;
2950
2954
 
2951
 
                        // move innobase_xtra_log_archive_directory
2952
2955
                        if (log_xtra_log_archive_dir && !(final_dirnamelen  == dirnamelen &&
2953
2956
                                        0 == strcmp(log_xtra_log_archive_dir, srv_log_group_home_dirs[0]))
2954
2957
                          ) {
2960
2963
                        }
2961
2964
 
2962
2965
                        if (log_xtra_log_expire_sec) {
2963
 
                                purge_archived_logs(log_xtra_log_expire_sec, 0);
 
2966
                                purge_archived_logs(ut_time() - log_xtra_log_expire_sec, 0);
2964
2967
                        }
2965
2968
 
2966
2969