Changeset 4

Show
Ignore:
Timestamp:
12/01/04 14:56:41 (4 years ago)
Author:
azrael
Message:

Initial code for using bdb in a environment

Location:
trunk/src
Files:
8 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/opensync_anchor.c

    r1 r4  
    22#include "opensync_internals.h" 
    33 
    4 DB *osync_anchor_load_file(char *file) 
     4DB *osync_anchor_load_file(char *file, OSyncGroup *group) 
    55{ 
    6         DB *dbhandle = osync_db_open(file, "Anchor", DB_BTREE); 
     6        DB *dbhandle = osync_db_open(file, "Anchor", DB_BTREE, group->dbenv); 
    77        return dbhandle; 
    88} 
     
    1212        g_assert(member); 
    1313        char *filename = g_strdup_printf ("%s/anchor.db", member->configdir); 
    14         DB *dbhandle = osync_anchor_load_file(filename); 
     14        DB *dbhandle = osync_anchor_load_file(filename, member->group); 
    1515        g_free(filename); 
    1616        return dbhandle; 
  • trunk/src/opensync_db.c

    r1 r4  
    22#include "opensync_internals.h" 
    33 
    4 DB *osync_db_open(char *filename, char *dbname, int type) 
     4DB_ENV *osync_db_setup(char *configdir, FILE *errfp) 
     5{ 
     6        DB_ENV *dbenv; 
     7        int ret; 
     8 
     9    if ((ret = db_env_create(&dbenv, 0)) != 0) { 
     10        fprintf(errfp, "opensync: %s\n", db_strerror(ret)); 
     11        return (NULL); 
     12    } 
     13    dbenv->set_errfile(dbenv, errfp); 
     14    dbenv->set_errpfx(dbenv, "opensync"); 
     15 
     16    if ((ret = dbenv->set_cachesize(dbenv, 0, 5 * 1024 * 1024, 0)) != 0) { 
     17        dbenv->err(dbenv, ret, "set_cachesize"); 
     18        goto err; 
     19    } 
     20     
     21    if ((ret = dbenv->set_data_dir(dbenv, "db")) != 0) { 
     22        dbenv->err(dbenv, ret, "set_data_dir: db"); 
     23        goto err; 
     24    } 
     25 
     26    if ((ret = dbenv->open(dbenv, configdir, DB_CREATE | DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN | DB_RECOVER | DB_PRIVATE | DB_THREAD, 0)) != 0) { 
     27        dbenv->err(dbenv, ret, "environment open: %s", configdir); 
     28        goto err; 
     29    } 
     30 
     31    return (dbenv); 
     32 
     33    err: 
     34        (void)dbenv->close(dbenv, 0); 
     35        return (NULL); 
     36} 
     37 
     38DB *osync_db_open(char *filename, char *dbname, int type, DB_ENV *dbenv) 
    539{ 
    640        int ret; 
    741        DB *dbp; 
    8         if ((ret = db_create(&dbp, NULL, 0)) != 0) { 
     42        if ((ret = db_create(&dbp, dbenv, 0)) != 0) { 
    943                printf("db_create: %s\n", db_strerror(ret)); 
    1044                return NULL; 
     
    6397} 
    6498 
    65 DB *osync_db_open_secondary(DB *firstdb, char *filename, char *dbname, int (*callback)(DB *, const DBT *, const DBT *, DBT *)) 
     99DB *osync_db_open_secondary(DB *firstdb, char *filename, char *dbname, int (*callback)(DB *, const DBT *, const DBT *, DBT *), DB_ENV *dbenv) 
    66100{ 
    67101        DB *sdbp = NULL; 
     
    69103        int (*secfunc)(DB *, const DBT *, const DBT *, DBT *); 
    70104         
    71         if ((ret = db_create(&sdbp, NULL, 0)) != 0) { 
     105        if ((ret = db_create(&sdbp, dbenv, 0)) != 0) { 
    72106                printf("sec_db_create: %s\n", db_strerror(ret)); 
    73107                return NULL; 
  • trunk/src/opensync_db.h

    r1 r4  
    1 DB *osync_db_open(char *filename, char *dbname, int type); 
     1DB *osync_db_open(char *filename, char *dbname, int type, DB_ENV *dbenv); 
    22osync_bool osync_db_put(DB *dbp, void *key, int keysize, void *data, int datasize); 
    33osync_bool osync_db_del(DB *dbp, void *key, int keysize); 
     
    88void osync_db_cursor_close(DBC *dbcp); 
    99osync_bool osync_db_cursor_next_sec(DBC *dbcp, void **pkey, void **skey, void **data); 
    10 DB *osync_db_open_secondary(DB *firstdb, char *filename, char *dbname, int (*callback)(DB *, const DBT *, const DBT *, DBT *)); 
     10DB *osync_db_open_secondary(DB *firstdb, char *filename, char *dbname, int (*callback)(DB *, const DBT *, const DBT *, DBT *), DB_ENV *dbenv); 
    1111u_long osync_db_create_unique_id(DB *dbp); 
    1212void osync_db_sync(DB *dbp); 
    1313osync_bool osync_db_put_dbt(DB *dbp, DBT *key, DBT *data); 
     14DB_ENV *osync_db_setup(char *configdir, FILE *errfp); 
  • trunk/src/opensync_env.c

    r2 r4  
    2121        os_env->groups = g_list_append(os_env->groups, group); 
    2222} 
    23  
    24 /*int osync_add_group(OSyncEnv *os_env, OSyncGroup *group) 
    25 { 
    26         int index; 
    27         index = g_list_index(os_env->groups, group); 
    28         if (index == -1) { 
    29                 index = g_list_length(os_env->groups); 
    30                 _osync_append_group(os_env, group); 
    31                 osync_debug("os_env", 3, "Appending group %s to list with index %i", osync_group_get_name(group), index); 
    32         } else { 
    33                 osync_debug("os_env", 3, "Found group %s in list with index %i", osync_group_get_name(group), index); 
    34         } 
    35         return index; 
    36 }*/ 
    3723 
    3824osync_bool osync_init(OSyncEnv *os_env) 
  • trunk/src/opensync_group.c

    r2 r4  
    99         
    1010        filename = g_strdup_printf("%s/group%i", osync_env_get_configdir(osinfo), g_random_int_range(1, 1000000)); 
    11         //group->name = g_path_get_basename(filename); 
    1211        group->configdir = filename; 
    1312        group->env = osinfo; 
    1413        osync_debug("OSGRP", 3, "Generated new group:"); 
    15         //osync_debug("OSMEM", 3, "Name: %s", group->name); 
    1614        osync_debug("OSGRP", 3, "Configdirectory: %s", filename); 
    1715        return group; 
     
    4644                osync_debug("OSGRP", 3, "Creating configdirectory %s", group->configdir); 
    4745                mkdir(group->configdir, 0777); 
     46                char *dbdir = g_strdup_printf("%s/db", group->configdir); 
     47                mkdir(dbdir, 0777); 
     48                g_free(dbdir); 
    4849        } 
    4950         
     
    123124                } 
    124125        } 
     126        char *dbdir = g_strdup_printf("%s/db", group->configdir); 
     127        char *logfile = g_strdup_printf("%s/group.log", dbdir); 
     128        FILE *log = fopen(logfile, "rw"); 
     129        group->dbenv = osync_db_setup(dbdir, log); 
     130        g_free(dbdir); 
     131        g_free(logfile); 
    125132        osync_env_append_group(env, group); 
    126133        return group; 
  • trunk/src/opensync_hashtable.c

    r1 r4  
    2222} 
    2323 
    24 osync_bool osync_hashtable_load_file(OSyncHashTable *table, char *file) 
     24osync_bool osync_hashtable_load_file(OSyncHashTable *table, char *file, OSyncGroup *group) 
    2525{ 
    26         table->dbhandle = osync_db_open(file, "Hash", DB_BTREE); 
     26        table->dbhandle = osync_db_open(file, "Hash", DB_BTREE, group->dbenv); 
    2727        g_assert(table->dbhandle); 
    2828        return TRUE; 
     
    3333        g_assert(member != NULL); 
    3434        char *filename = g_strdup_printf ("%s/hash.table", member->configdir); 
    35         osync_hashtable_load_file(table, filename); 
     35        osync_hashtable_load_file(table, filename, member->group); 
    3636        g_free(filename); 
    3737        return TRUE; //FIXME 
  • trunk/src/opensync_internals.h

    r2 r4  
    5454        gchar *configdir; 
    5555        OSyncEnv *env; 
     56        DB_ENV *dbenv; 
    5657        void *data; 
    5758}; 
  • trunk/src/opensync_mapping.c

    r2 r4  
    275275        g_assert(table->db_path != NULL); 
    276276        char *filename = g_strdup_printf("%s/change.db", table->db_path); 
    277         table->entrytable = osync_db_open(filename, NULL, DB_BTREE); 
     277        table->entrytable = osync_db_open(filename, NULL, DB_BTREE, table->group->dbenv); 
    278278        g_free(filename); 
    279279        filename = g_strdup_printf("%s/mapping.db", table->db_path); 
    280         table->maptable = osync_db_open_secondary(table->entrytable, filename, NULL, getmapid); 
     280        table->maptable = osync_db_open_secondary(table->entrytable, filename, NULL, getmapid, table->group->dbenv); 
    281281        g_free(filename); 
    282282