src/dbfs.c
author Tero Marttila <terom@fixme.fi>
Sat, 13 Dec 2008 19:55:50 +0200
branchnew-evsql
changeset 53 0d6e07f4c9a1
parent 31 7804cd7b5cd5
permissions -rw-r--r--
separate evsql documentation
24
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
/*
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
 * A simple PostgreSQL-based filesystem.
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
 */
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
26
61668c57f4bb preliminary *dir implementation
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
     6
#include <stdlib.h>
24
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
#include <string.h>
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
#include <errno.h>
26
61668c57f4bb preliminary *dir implementation
Tero Marttila <terom@fixme.fi>
parents: 25
diff changeset
     9
#include <assert.h>
24
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
#include <event2/event.h>
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
28
e944453ca924 split off dbfs components into a separate dir, improve dirop docs, error handling, etc
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    13
#include "dbfs.h"
24
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
#include "evfuse.h"
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
#include "evsql.h"
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
#include "lib/log.h"
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
#include "lib/signals.h"
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
#include "lib/misc.h"
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
31
7804cd7b5cd5 write+setattr
Tero Marttila <terom@fixme.fi>
parents: 30
diff changeset
    20
#define CONNINFO_DEFAULT "dbname=dbfs port=5433"
24
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
int main (int argc, char **argv) {
28
e944453ca924 split off dbfs components into a separate dir, improve dirop docs, error handling, etc
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    23
    struct event_base *ev_base = NULL;
e944453ca924 split off dbfs components into a separate dir, improve dirop docs, error handling, etc
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    24
    struct signals *signals = NULL;
e944453ca924 split off dbfs components into a separate dir, improve dirop docs, error handling, etc
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    25
    struct dbfs *ctx = NULL;
e944453ca924 split off dbfs components into a separate dir, improve dirop docs, error handling, etc
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    26
    const char *db_conninfo;
24
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    struct fuse_args fuse_args = FUSE_ARGS_INIT(argc, argv);
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
    
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
    // parse args, XXX: fuse_args
28
e944453ca924 split off dbfs components into a separate dir, improve dirop docs, error handling, etc
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    30
    db_conninfo = CONNINFO_DEFAULT;
24
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
    
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    // init libevent
28
e944453ca924 split off dbfs components into a separate dir, improve dirop docs, error handling, etc
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    33
    if ((ev_base = event_base_new()) == NULL)
24
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
        ERROR("event_base_new");
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
    
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
    // setup signals
28
e944453ca924 split off dbfs components into a separate dir, improve dirop docs, error handling, etc
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    37
    if ((signals = signals_default(ev_base)) == NULL)
24
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
        ERROR("signals_default");
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
28
e944453ca924 split off dbfs components into a separate dir, improve dirop docs, error handling, etc
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    40
    // setup dbfs
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents: 28
diff changeset
    41
    if ((ctx = dbfs_new(ev_base, &fuse_args, db_conninfo)) == NULL)
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents: 28
diff changeset
    42
        ERROR("dbfs_new");
24
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
    // run libevent
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
    INFO("running libevent loop");
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
28
e944453ca924 split off dbfs components into a separate dir, improve dirop docs, error handling, etc
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    47
    if (event_base_dispatch(ev_base))
24
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
        PERROR("event_base_dispatch");
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
    
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
    // clean shutdown
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
error :
28
e944453ca924 split off dbfs components into a separate dir, improve dirop docs, error handling, etc
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    53
    if (ctx)
30
d8fabd347a8e working open+read+flush+release
Tero Marttila <terom@fixme.fi>
parents: 28
diff changeset
    54
        dbfs_free(ctx);
28
e944453ca924 split off dbfs components into a separate dir, improve dirop docs, error handling, etc
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    55
    
e944453ca924 split off dbfs components into a separate dir, improve dirop docs, error handling, etc
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    56
    if (signals)
e944453ca924 split off dbfs components into a separate dir, improve dirop docs, error handling, etc
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    57
        signals_free(signals);
24
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
28
e944453ca924 split off dbfs components into a separate dir, improve dirop docs, error handling, etc
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    59
    if (ev_base)
e944453ca924 split off dbfs components into a separate dir, improve dirop docs, error handling, etc
Tero Marttila <terom@fixme.fi>
parents: 27
diff changeset
    60
        event_base_free(ev_base);
24
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
    
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
    fuse_opt_free_args(&fuse_args);
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
}
82cfdb6680d1 working dbfs.lookup
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64