summaryrefslogtreecommitdiffstats
path: root/xlators/features/changelog/lib/examples/c/get-history.c
blob: 33eb8c32d4defd6927afb701084b21018a51d8b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/*
   Copyright (c) 2013 Red Hat, Inc. <http://www.redhat.com>
   This file is part of GlusterFS.

   This file is licensed to you under your choice of the GNU Lesser
   General Public License, version 3 or any later version (LGPLv3 or
   later), or the GNU General Public License, version 2 (GPLv2), in all
   cases as published by the Free Software Foundation.
*/

/**
 * get set of new changes every 10 seconds (just print the file names)
 *
 * Compile it using:
 *  gcc -o gethistory `pkg-config --cflags libgfchangelog` get-history.c \
 *  `pkg-config --libs libgfchangelog`
 */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/un.h>
#include <limits.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <errno.h>

#include "changelog.h"

#define handle_error(fn)                                \
        printf ("%s (reason: %s)\n", fn, strerror (errno))

int
main (int argc, char ** argv)
{
        int     i            = 0;
        int     ret          = 0;
        ssize_t nr_changes   = 0;
        ssize_t changes      = 0;
        char fbuf[PATH_MAX]  = {0,};
        unsigned long end_ts = 0;

        ret = gf_changelog_register ("/export1/v1/b1",
                                     "/tmp/scratch_v1", "/tmp/scratch_v1/changes.log",
                                     9, 5);
        if (ret) {
                handle_error ("register failed");
                goto out;
        }

        int a, b;
        printf ("give the two numbers start and end\t");
        scanf ("%d%d", &a, &b);
        ret = gf_history_changelog ("/export1/v1/b1/.glusterfs/changelogs",a, b, 3, &end_ts);
        if (ret == -1) {
                printf ("history failed");
                goto out;
        }

        printf ("end time till when changelog available : %d , ret(%d) \t", end_ts, ret);
        fflush(stdout);

        while (1) {
                nr_changes = gf_history_changelog_scan ();
                printf ("scanned, nr_changes : %d\n",nr_changes);
                if (nr_changes < 0) {
                        handle_error ("scan(): ");
                        break;
                }

                if (nr_changes == 0) {
                        printf ("done scanning \n");
                        goto out;
                }

                printf ("Got %ld changelog files\n", nr_changes);

                while ( (changes =
                         gf_history_changelog_next_change (fbuf, PATH_MAX)) > 0) {
                        printf ("changelog file [%d]: %s\n", ++i, fbuf);

                        /* process changelog */
                        /* ... */
                        /* ... */
                        /* ... */
                        /* done processing */

                        ret = gf_history_changelog_done (fbuf);
                        if (ret)
                                handle_error ("gf_changelog_done");
                }
                /*
                if (changes == -1)
                        handle_error ("gf_changelog_next_change");
                if (nr_changes ==1){
                        printf("continue scanning\n");
                }

                if(nr_changes == 0){
                        printf("done scanning \n");
                        goto out;
                }
                */
        }


out:
        return ret;
}