glusterfs

Форк
0
/
glfs_vol_set_IO_ERR.c 
163 строки · 3.6 Кб
1
#include <glusterfs/api/glfs.h>
2
#include <glusterfs/api/glfs-handles.h>
3
#include <errno.h>
4
#include <stdio.h>
5
#include <stdlib.h>
6
#include <string.h>
7

8
#define WRITE_SIZE (128)
9

10
glfs_t *
11
setup_new_client(char *hostname, char *volname, char *log_fileile)
12
{
13
    int ret = 0;
14
    glfs_t *fs = NULL;
15

16
    fs = glfs_new(volname);
17
    if (!fs) {
18
        fprintf(stderr, "\nglfs_new: returned NULL (%s)\n", strerror(errno));
19
        goto error;
20
    }
21

22
    ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);
23
    if (ret < 0) {
24
        fprintf(stderr, "\nglfs_set_volfile_server failed ret:%d (%s)\n", ret,
25
                strerror(errno));
26
        goto error;
27
    }
28

29
    ret = glfs_set_logging(fs, log_fileile, 7);
30
    if (ret < 0) {
31
        fprintf(stderr, "\nglfs_set_logging failed with ret: %d (%s)\n", ret,
32
                strerror(errno));
33
        goto error;
34
    }
35

36
    ret = glfs_init(fs);
37
    if (ret < 0) {
38
        fprintf(stderr, "\nglfs_init failed with ret: %d (%s)\n", ret,
39
                strerror(errno));
40
        goto error;
41
    }
42
    return fs;
43
error:
44
    return NULL;
45
}
46

47
int
48
write_something(glfs_t *fs)
49
{
50
    glfs_fd_t *fd = NULL;
51
    char *buf = NULL;
52
    int ret = 0;
53
    int j = 0;
54

55
    fd = glfs_creat(fs, "filename", O_RDWR, 0644);
56
    if (!fd) {
57
        fprintf(stderr, "%s: (%p) %s\n", "filename", fd, strerror(errno));
58
        return -1;
59
    }
60

61
    buf = (char *)malloc(WRITE_SIZE);
62
    memset(buf, '-', WRITE_SIZE);
63

64
    for (j = 0; j < 4; j++) {
65
        ret = glfs_write(fd, buf, WRITE_SIZE, 0);
66
        if (ret < 0) {
67
            fprintf(stderr, "Write(%s): %d (%s)\n", "filename", ret,
68
                    strerror(errno));
69
            return ret;
70
        }
71
        glfs_lseek(fd, 0, SEEK_SET);
72
    }
73
    return 0;
74
}
75

76
static int
77
volfile_change(const char *volname)
78
{
79
    int ret = 0;
80
    char *cmd = NULL, *cmd1 = NULL;
81

82
    ret = asprintf(&cmd, "gluster volume set %s quick-read on", volname);
83
    if (ret < 0) {
84
        fprintf(stderr, "cannot construct cli command string (%s)",
85
                strerror(errno));
86
        return ret;
87
    }
88

89
    ret = asprintf(&cmd1, "gluster volume set %s quick-read off", volname);
90
    if (ret < 0) {
91
        fprintf(stderr, "cannot construct cli command string (%s)",
92
                strerror(errno));
93
        return ret;
94
    }
95

96
    ret = system(cmd);
97
    if (ret < 0) {
98
        fprintf(stderr, "quick-read off on (%s) failed", volname);
99
        return ret;
100
    }
101

102
    ret = system(cmd1);
103
    if (ret < 0) {
104
        fprintf(stderr, "quick-read on on (%s) failed", volname);
105
        return ret;
106
    }
107

108
    ret = system(cmd);
109
    if (ret < 0) {
110
        fprintf(stderr, "quick-read off on (%s) failed", volname);
111
        return ret;
112
    }
113

114
    free(cmd);
115
    free(cmd1);
116
    return ret;
117
}
118

119
int
120
main(int argc, char *argv[])
121
{
122
    int ret = 0;
123
    glfs_t *fs = NULL;
124
    char buf[100];
125
    glfs_fd_t *fd = NULL;
126

127
    if (argc != 4) {
128
        fprintf(
129
            stderr,
130
            "Expect following args %s <hostname> <Vol> <log file location>\n",
131
            argv[0]);
132
        return -1;
133
    }
134

135
    fs = setup_new_client(argv[1], argv[2], argv[3]);
136
    if (!fs)
137
        goto error;
138

139
    ret = volfile_change(argv[2]);
140
    if (ret < 0)
141
        goto error;
142

143
    /* This is required as volfile change takes a while to reach this
144
     * gfapi client and precess the graph change. Without this the issue
145
     * cannot be reproduced as in cannot be tested.
146
     */
147
    sleep(10);
148

149
    ret = write_something(fs);
150
    if (ret < 0)
151
        goto error;
152

153
    ret = glfs_fini(fs);
154
    if (ret < 0) {
155
        fprintf(stderr, "glfs_fini failed with ret: %d (%s)\n", ret,
156
                strerror(errno));
157
        goto error;
158
    }
159

160
    return 0;
161
error:
162
    return -1;
163
}
164

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.