glusterfs
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 NO_INIT 19
10glfs_t *11setup_new_client(char *hostname, char *volname, char *log_file, int flag)12{
13int ret = 0;14glfs_t *fs = NULL;15
16fs = glfs_new(volname);17if (!fs) {18fprintf(stderr, "\nglfs_new: returned NULL (%s)\n", strerror(errno));19goto error;20}21
22ret = glfs_set_volfile_server(fs, "tcp", hostname, 24007);23if (ret < 0) {24fprintf(stderr, "\nglfs_set_volfile_server failed ret:%d (%s)\n", ret,25strerror(errno));26goto error;27}28
29ret = glfs_set_logging(fs, log_file, 7);30if (ret < 0) {31fprintf(stderr, "\nglfs_set_logging failed with ret: %d (%s)\n", ret,32strerror(errno));33goto error;34}35
36if (flag == NO_INIT)37goto out;38
39ret = glfs_init(fs);40if (ret < 0) {41fprintf(stderr, "\nglfs_init failed with ret: %d (%s)\n", ret,42strerror(errno));43goto error;44}45
46out:47return fs;48error:49return NULL;50}
51
52int
53main(int argc, char *argv[])54{
55int ret = 0;56glfs_t *fs1 = NULL;57glfs_t *fs2 = NULL;58glfs_t *fs3 = NULL;59char *volname = NULL;60char *log_file = NULL;61char *hostname = NULL;62
63if (argc != 4) {64fprintf(65stderr,66"Expect following args %s <hostname> <Vol> <log file location>\n",67argv[0]);68return -1;69}70
71hostname = argv[1];72volname = argv[2];73log_file = argv[3];74
75fs1 = setup_new_client(hostname, volname, log_file, NO_INIT);76if (!fs1) {77fprintf(stderr, "\nsetup_new_client: returned NULL (%s)\n",78strerror(errno));79goto error;80}81
82fs2 = setup_new_client(hostname, volname, log_file, 0);83if (!fs2) {84fprintf(stderr, "\nsetup_new_client: returned NULL (%s)\n",85strerror(errno));86goto error;87}88
89fs3 = setup_new_client(hostname, volname, log_file, 0);90if (!fs3) {91fprintf(stderr, "\nsetup_new_client: returned NULL (%s)\n",92strerror(errno));93goto error;94}95
96ret = glfs_fini(fs3);97if (ret < 0) {98fprintf(stderr, "glfs_fini failed with ret: %d (%s)\n", ret,99strerror(errno));100goto error;101}102
103/* The crash is seen in gf_log_flush_timeout_cbk(), and this gets104* triggered when 30s timer expires, hence the sleep of 31s
105*/
106sleep(31);107ret = glfs_fini(fs2);108if (ret < 0) {109fprintf(stderr, "glfs_fini failed with ret: %d (%s)\n", ret,110strerror(errno));111goto error;112}113
114ret = glfs_init(fs1);115if (ret < 0) {116fprintf(stderr, "\nglfs_init failed with ret: %d (%s)\n", ret,117strerror(errno));118goto error;119}120
121ret = glfs_fini(fs1);122if (ret < 0) {123fprintf(stderr, "glfs_fini failed with ret: %d (%s)\n", ret,124strerror(errno));125goto error;126}127
128return 0;129error:130return -1;131}
132