Changeset: 65fa881c74b6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=65fa881c74b6
Removed Files:
monetdb5/modules/kernel/logger.c
monetdb5/modules/kernel/logger.mal
sql/storage/bat/nop_logger.c
sql/storage/bat/nop_logger.h
Modified Files:
clients/Tests/exports.stable.out
gdk/gdk_bbp.c
gdk/gdk_logger.c
gdk/gdk_logger.h
gdk/gdk_tm.c
monetdb5/mal/mal.c
monetdb5/mal/mal_authorize.c
monetdb5/mal/mal_profiler.c
monetdb5/mal/mal_session.c
monetdb5/modules/kernel/Makefile.ag
monetdb5/modules/mal/mal_mapi.c
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_scenario.c
sql/storage/bat/Makefile.ag
sql/storage/store.c
tools/mserver/mserver5.c
Branch: default
Log Message:
merged
diffs (truncated from 1318 to 300 lines):
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -443,7 +443,6 @@ gdk_return logger_del_bat(logger *lg, lo
void logger_destroy(logger *lg);
gdk_return logger_exit(logger *lg);
log_bid logger_find_bat(logger *lg, const char *name, char tpe, oid id);
-lng logger_read_last_transaction_id(logger *lg, char *dir, char *logger_file,
role_t role);
gdk_return logger_reload(logger *lg);
gdk_return logger_restart(logger *lg);
int logger_sequence(logger *lg, int seq, lng *id);
@@ -2340,8 +2339,6 @@ str listRef;
str loadLibrary(str modulename, int flag);
char *locate_file(const char *basename, const char *ext, bit recurse);
str lockRef;
-str logger_create_wrap(logger *L, int *debug, str *fn, str *dirname, int
*version);
-str logger_destroy_wrap(void *ret, logger *L);
str lookupRef;
str mal2str(MalBlkPtr mb, int first, int last);
int malAtomSize(int size, const char *name);
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -1043,6 +1043,13 @@ BBPaddfarm(const char *dirname, int role
struct stat st;
int i;
+ if (dirname == NULL) {
+ assert(BBPfarms[0].dirname == NULL);
+ assert(rolemask & 1);
+ assert(BBPfarms[0].roles == 0);
+ BBPfarms[0].roles = rolemask;
+ return GDK_SUCCEED;
+ }
if (strchr(dirname, '\n') != NULL) {
GDKerror("BBPaddfarm: no newline allowed in directory name\n");
return GDK_FAIL;
@@ -1118,12 +1125,7 @@ BBPinit(void)
unsigned bbpversion = 0;
int i;
- if (GDKinmemory()) {
- if (BBPaddfarm(".", 1 << PERSISTENT) != GDK_SUCCEED ||
- BBPaddfarm(".", 1 << TRANSIENT) != GDK_SUCCEED) {
- return GDK_FAIL;
- }
- } else {
+ if (!GDKinmemory()) {
str bbpdirstr, backupbbpdirstr;
if (!(bbpdirstr = GDKfilepath(0, BATDIR, "BBP", "dir"))) {
@@ -1195,7 +1197,9 @@ BBPinit(void)
memset(BBP, 0, sizeof(BBP));
ATOMIC_SET(&BBPsize, 1);
- if (!GDKinmemory()) {
+ if (GDKinmemory()) {
+ bbpversion = GDKLIBRARY;
+ } else {
bbpversion = BBPheader(fp);
if (bbpversion == 0)
return GDK_FAIL;
@@ -2350,7 +2354,7 @@ decref(bat i, bool logical, bool release
* if they have been made cold or are not dirty */
if (BBP_refs(i) > 0 ||
(BBP_lrefs(i) > 0 &&
- (b == NULL || BATdirty(b) || !(BBP_status(i) & BBPPERSISTENT)))) {
+ (b == NULL || BATdirty(b) || !(BBP_status(i) & BBPPERSISTENT) ||
GDKinmemory()))) {
/* bat cannot be swapped out */
} else if (b ? b->batSharecnt == 0 : (BBP_status(i) & BBPTMP)) {
/* bat will be unloaded now. set the UNLOADING bit
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -187,6 +187,7 @@ logbat_new(int tt, BUN size, role_t role
static int
log_read_format(logger *l, logformat *data)
{
+ assert(!l->inmemory);
return mnstr_read(l->log, &data->flag, 1, 1) == 1 &&
mnstr_readLng(l->log, &data->nr) == 1 &&
mnstr_readInt(l->log, &data->tid) == 1;
@@ -195,6 +196,7 @@ log_read_format(logger *l, logformat *da
static gdk_return
log_write_format(logger *l, logformat *data)
{
+ assert(!l->inmemory);
if (mnstr_write(l->log, &data->flag, 1, 1) == 1 &&
mnstr_writeLng(l->log, data->nr) &&
mnstr_writeInt(l->log, data->tid))
@@ -210,6 +212,7 @@ log_read_string(logger *l)
ssize_t nr;
char *buf;
+ assert(!l->inmemory);
if (mnstr_readInt(l->log, &len) != 1) {
fprintf(stderr, "!ERROR: log_read_string: read failed\n");
//MK This leads to non-repeatable log structure?
@@ -239,6 +242,7 @@ log_write_string(logger *l, const char *
{
size_t len = strlen(n) + 1; /* log including EOS */
+ assert(!l->inmemory);
assert(len > 1);
assert(len <= INT_MAX);
if (!mnstr_writeInt(l->log, (int) len) ||
@@ -312,6 +316,7 @@ log_read_seq(logger *lg, logformat *l)
lng val;
BUN p;
+ assert(!lg->inmemory);
assert(l->nr <= (lng) INT_MAX);
if (mnstr_readLng(lg->log, &val) != 1) {
fprintf(stderr, "!ERROR: log_read_seq: read failed\n");
@@ -339,6 +344,7 @@ static gdk_return
log_write_id(logger *l, char tpe, oid id)
{
lng lid = id;
+ assert(!l->inmemory);
assert(lid >= 0);
if (mnstr_writeChr(l->log, tpe) &&
mnstr_writeLng(l->log, lid))
@@ -352,6 +358,7 @@ log_read_id(logger *lg, char *tpe, oid *
{
lng lid;
+ assert(!lg->inmemory);
if (mnstr_readChr(lg->log, tpe) != 1 ||
mnstr_readLng(lg->log, &lid) != 1) {
fprintf(stderr, "!ERROR: log_read_id: read failed\n");
@@ -368,6 +375,7 @@ fltRead(void *dst, stream *s, size_t cnt
flt *ptr;
size_t i;
+ assert(!GDKinmemory());
if ((ptr = BATatoms[TYPE_flt].atomRead(dst, s, cnt)) == NULL)
return NULL;
for (i = 0; i < cnt; i++)
@@ -382,6 +390,7 @@ dblRead(void *dst, stream *s, size_t cnt
dbl *ptr;
size_t i;
+ assert(!GDKinmemory());
if ((ptr = BATatoms[TYPE_dbl].atomRead(dst, s, cnt)) == NULL)
return NULL;
for (i = 0; i < cnt; i++)
@@ -396,6 +405,7 @@ mbrRead(void *dst, stream *s, size_t cnt
/* an MBR consists of 4 flt values; here we don't care about
* anything else, we just need to convert the old NIL to NaN
* for all those values */
+ assert(!GDKinmemory());
return fltRead(dst, s, cnt * 4);
}
#endif
@@ -408,6 +418,7 @@ log_read_updates(logger *lg, trans *tr,
log_return res = LOG_OK;
int ht = -1, tt = -1, tseq = 0;
+ assert(!lg->inmemory);
if (lg->debug & 1)
fprintf(stderr, "#logger found log_read_updates %s %s " LLFMT
"\n", name, l->flag == LOG_INSERT ? "insert" : "update", l->nr);
@@ -637,6 +648,7 @@ static log_return
log_read_destroy(logger *lg, trans *tr, char *name, char tpe, oid id)
{
(void) lg;
+ assert(!lg->inmemory);
if (tr_grow(tr) == GDK_SUCCEED) {
tr->changes[tr->nr].type = LOG_DESTROY;
tr->changes[tr->nr].tpe = tpe;
@@ -684,7 +696,7 @@ log_read_create(logger *lg, trans *tr, c
int ht, tt;
char *ha, *ta;
-
+ assert(!lg->inmemory);
if (lg->debug & 1)
fprintf(stderr, "#log_read_create %s\n", name);
@@ -750,6 +762,8 @@ static log_return
log_read_use(logger *lg, trans *tr, logformat *l, char *name, char tpe, oid id)
{
(void) lg;
+
+ assert(!lg->inmemory);
if (tr_grow(tr) != GDK_SUCCEED)
return LOG_ERR;
tr->changes[tr->nr].type = LOG_USE;
@@ -960,6 +974,10 @@ logger_open(logger *lg)
char id[BUFSIZ];
char *filename;
+ if (lg->inmemory) {
+ lg->end = 0;
+ return GDK_SUCCEED;
+ }
snprintf(id, sizeof(id), LLFMT, lg->id);
filename = GDKfilepath(BBPselectfarm(PERSISTENT, 0, offheap), lg->dir,
LOGFILE, id);
@@ -982,7 +1000,8 @@ logger_open(logger *lg)
static void
logger_close(logger *lg)
{
- close_stream(lg->log);
+ if (!lg->inmemory)
+ close_stream(lg->log);
lg->log = NULL;
}
@@ -997,6 +1016,7 @@ logger_readlog(logger *lg, char *filenam
int dbg = GDKdebug;
int fd;
+ assert(!lg->inmemory);
GDKdebug &= ~(CHECKMASK|PROPMASK);
if (lg->debug & 1) {
@@ -1224,6 +1244,7 @@ logger_readlogs(logger *lg, FILE *fp, ch
char id[BUFSIZ];
int len;
+ assert(!lg->inmemory);
if (lg->debug & 1) {
fprintf(stderr, "#logger_readlogs logger id is " LLFMT "\n",
lg->id);
}
@@ -1295,6 +1316,7 @@ check_version(logger *lg, FILE *fp)
{
int version = 0;
+ assert(!lg->inmemory);
if (fscanf(fp, "%6d", &version) != 1) {
GDKerror("Could not read the version number from the file
'%s/log'.\n",
lg->dir);
@@ -1560,14 +1582,16 @@ logger_load(int debug, const char *fn, c
bool needcommit = false;
int dbg = GDKdebug;
- if(!(filenamestr = GDKfilepath(farmid, lg->dir, LOGFILE, NULL)))
- goto error;
- snprintf(filename, FILENAME_MAX, "%s", filenamestr);
- len = snprintf(bak, sizeof(bak), "%s.bak", filename);
- GDKfree(filenamestr);
- if (len == -1 || len >= FILENAME_MAX) {
- GDKerror("Logger filename path is too large\n");
- goto error;
+ if (!lg->inmemory) {
+ if ((filenamestr = GDKfilepath(farmid, lg->dir, LOGFILE, NULL))
== NULL)
+ goto error;
+ snprintf(filename, FILENAME_MAX, "%s", filenamestr);
+ len = snprintf(bak, sizeof(bak), "%s.bak", filename);
+ GDKfree(filenamestr);
+ if (len == -1 || len >= FILENAME_MAX) {
+ GDKerror("Logger filename path is too large\n");
+ goto error;
+ }
}
lg->catalog_bid = NULL;
@@ -1583,17 +1607,19 @@ logger_load(int debug, const char *fn, c
lg->seqs_val = NULL;
lg->dseqs = NULL;
- /* try to open logfile backup, or failing that, the file
- * itself. we need to know whether this file exists when
- * checking the database consistency later on */
- if ((fp = fopen(bak, "r")) != NULL) {
- fclose(fp);
- fp = NULL;
- if (GDKunlink(farmid, lg->dir, LOGFILE, NULL) != GDK_SUCCEED ||
- GDKmove(farmid, lg->dir, LOGFILE, "bak", lg->dir, LOGFILE,
NULL) != GDK_SUCCEED)
- goto error;
+ if (!lg->inmemory) {
+ /* try to open logfile backup, or failing that, the file
+ * itself. we need to know whether this file exists when
+ * checking the database consistency later on */
+ if ((fp = fopen(bak, "r")) != NULL) {
+ fclose(fp);
+ fp = NULL;
+ if (GDKunlink(farmid, lg->dir, LOGFILE, NULL) !=
GDK_SUCCEED ||
+ GDKmove(farmid, lg->dir, LOGFILE, "bak", lg->dir,
LOGFILE, NULL) != GDK_SUCCEED)
+ goto error;
+ }
+ fp = fopen(filename, "r");
}
- fp = fopen(filename, "r");
stpconcat(bak, fn, "_catalog", NULL);
bid = BBPindex(bak);
@@ -1661,41 +1687,43 @@ logger_load(int debug, const char *fn, c
goto error;
}
- if (GDKcreatedir(filename) != GDK_SUCCEED) {
- GDKerror("logger_load: cannot create directory for log
file %s\n",
- filename);
- goto error;
- }
- if ((fp = fopen(filename, "w")) == NULL) {
- GDKerror("logger_load: cannot create log file %s\n",
- filename);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list