struct env *env_open(const char *home, uint32_t flags) { LOG; struct env *e; e = xcalloc(1, sizeof(*e)); e->flags = flags; /* tree */ e->inner_node_fanout = 16; e->inner_default_node_size = 4 << 20; /* 4MB */ e->leaf_default_node_size = 4 << 20; /* 4MB */ e->leaf_default_basement_size = 128 << 10; /* 128KB */ /* cache */ e->cache_limits_bytes = 1024 << 20; e->cache_high_watermark = 80; /* 80% */ e->cache_flush_period_ms = 100; /* 0.1s */ e->cache_checkpoint_period_ms = 600000; /* 60s */ /* IO */ e->use_directio = 1; e->redo_path = "./dbbench"; e->enable_redo_log = 1; if (!home) home = "."; e->dir = xcalloc(1, strlen(home) + 1); xmemcpy(e->dir, (void*)home, strlen(home)); ness_check_dir(e->dir); /* compress */ e->compress_method = NESS_SNAPPY_METHOD; /* callback */ e->bt_compare_func = bt_compare_func_builtin; /* internal */ e->cache = cache_new(e); /* e->cache->cf_first->hdr->blocksize */ nassert(e->cache); e->txnmgr = txnmgr_new(); nassert(e->txnmgr); e->status = status_new(); nassert(e->status); return e; }
struct logw *logw_open(struct options *opts, uint64_t logsn) { int flag; mode_t mode; struct logw *lgw; char name[FILE_NAME_MAXLEN]; mode = S_IRWXU | S_IRWXG | S_IRWXO; flag = O_CREAT | O_WRONLY | O_BINARY; ness_check_dir(opts->redo_path); memset(name, 0, FILE_NAME_MAXLEN); snprintf(name, FILE_NAME_MAXLEN, "%s/ness.redo.%" PRIu64, opts->redo_path, logsn); lgw = xcalloc(1, sizeof(*lgw)); lgw->base_size = (1 << 20); lgw->base = xcalloc(lgw->base_size, sizeof(char*)); lgw->fd = ness_os_open(name, flag, mode); nassert(lgw->fd > -1); return lgw; }