File: ad_quobytefs.c

package info (click to toggle)
openmpi 5.0.8-4
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 201,684 kB
  • sloc: ansic: 613,078; makefile: 42,353; sh: 11,194; javascript: 9,244; f90: 7,052; java: 6,404; perl: 5,179; python: 1,859; lex: 740; fortran: 61; cpp: 20; tcl: 12
file content (103 lines) | stat: -rw-r--r-- 3,818 bytes parent folder | download | duplicates (8)
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
/*
 * Copyright (C) by Argonne National Laboratory
 *     See COPYRIGHT in top-level directory
 */


#include "ad_quobytefs.h"

#include "adioi.h"
#include <string.h>

struct ADIOI_Fns_struct ADIO_QUOBYTEFS_operations = {
    ADIOI_QUOBYTEFS_Open,       /* Open */
    ADIOI_GEN_OpenColl, /* OpenColl */
    ADIOI_QUOBYTEFS_ReadContig, /* ReadContig */
    ADIOI_QUOBYTEFS_WriteContig,        /* WriteContig */
    ADIOI_GEN_ReadStridedColl,  /* ReadStridedColl */
    ADIOI_GEN_WriteStridedColl, /* WriteStridedColl */
    ADIOI_GEN_SeekIndividual,   /* SeekIndividual */
    ADIOI_QUOBYTEFS_Fcntl,      /* Fcntl */
    ADIOI_GEN_SetInfo,  /* SetInfo */
    ADIOI_GEN_ReadStrided,      /* ReadStrided */
    ADIOI_GEN_WriteStrided,     /* WriteStrided */
    ADIOI_QUOBYTEFS_Close,      /* Close */
#ifdef ROMIO_HAVE_WORKING_AIO
    ADIOI_QUOBYTEFS_IreadContig,        /* IreadContig */
    ADIOI_QUOBYTEFS_IwriteContig,       /* IwriteContig */
#else
    ADIOI_FAKE_IreadContig,     /* IreadContig */
    ADIOI_FAKE_IwriteContig,    /* IwriteContig */
#endif
    ADIOI_GEN_IODone,   /* ReadDone */
    ADIOI_GEN_IODone,   /* WriteDone */
    ADIOI_GEN_IOComplete,       /* ReadComplete */
    ADIOI_GEN_IOComplete,       /* WriteComplete */
    ADIOI_GEN_IreadStrided,     /* IreadStrided */
    ADIOI_GEN_IwriteStrided,    /* IwriteStrided */
    ADIOI_QUOBYTEFS_Flush,      /* Flush */
    ADIOI_QUOBYTEFS_Resize,     /* Resize */
    ADIOI_QUOBYTEFS_Delete,     /* Delete */
    ADIOI_GEN_Feature,  /* Features */
    "QUOBYTEFS:ROMIO driver for quobyte file system",
    ADIOI_GEN_IreadStridedColl, /* IreadStridedColl */
    ADIOI_GEN_IwriteStridedColl,        /* IwriteStridedColl */
    ADIOI_QUOBYTEFS_SetLock     /* SetLock */
};

static char *extract_registry(const char *filename, int *error_code)
{
    /* input: //registry.address/[volume/]path
     * output: registry.address                */
    static char myname[] = "extract_registry";
    const char *prefix = "//";
    int prefix_size = strlen(prefix);
    if (!strncmp(filename, prefix, prefix_size)) {
        *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, myname,
                                           __LINE__, MPI_ERR_NAME, "Invalid uri", 0);
    }
    char *extract_filename = (char *) filename + prefix_size;
    char *tmp = strchr(extract_filename, '/');
    char *registry = NULL;

    if (tmp != NULL && tmp > extract_filename) {
        size_t length = tmp - extract_filename;
        registry = strndup(extract_filename, length);
        *error_code = MPI_SUCCESS;
        return registry;
    } else {
        *error_code = ADIOI_Err_create_code(myname, filename, EINVAL);
    }
    return NULL;
}

void ADIOI_QUOBYTEFS_CreateAdapter(const char *filename, int *error_code)
{
    static char myname[] = "ADIOI_QUOBYTEFS_CreateAdapter";

    char *registry = extract_registry(filename, error_code);
    if (registry == NULL || *error_code != MPI_SUCCESS) {
        return;
    }
    const char process_name[] = "adio_ffffffff";
    char name_buffer[strlen(process_name)];
    int rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    snprintf(name_buffer, strlen(process_name), "adio_%x", rank);
    quobyte_set_process_name(name_buffer);
    int create_status = quobyte_create_adapter(registry);
    MPL_external_free(registry);
    if (create_status != EISCONN && create_status != 0) {
        *error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_FATAL, myname,
                                           __LINE__, MPI_ERR_IO,
                                           "Could not create quobyte adapter", 0);
        return;
    }
    global_quobyte_io_context = -1;
}

void ADIOI_QUOBYTEFS_DestroyAdapter()
{
    /* TODO(alexey): place holder adapter destruction,
     * for when it works as expected */
}