Changeset: 65f18487fd7c for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=65f18487fd7c
Added Files:
tools/embeddedpy/embedded.c
tools/embeddedpy/embedded.h
Modified Files:
gdk/gdk_bbp.c
gdk/gdk_logger.c
gdk/gdk_storage.c
gdk/gdk_utils.c
monetdb5/mal/mal_client.h
monetdb5/mal/mal_private.h
monetdb5/mal/mal_session.c
sql/backends/monet5/sql_scenario.c
sql/server/sql_scan.c
tools/embeddedpy/Makefile.ag
Branch: pyapi
Log Message:
Merge with embedded branch.
diffs (truncated from 969 to 300 lines):
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -1038,6 +1038,8 @@ BBPinit(void)
int bbpversion;
int oidsize;
oid BBPoid;
+ str bbpdirstr = GDKfilepath(0, BATDIR, "BBP", "dir");
+ str backupbbpdirstr = GDKfilepath(0, BAKDIR, "BBP", "dir");
#ifdef NEED_MT_LOCK_INIT
MT_lock_init(&GDKunloadLock, "GDKunloadLock");
@@ -1055,17 +1057,16 @@ BBPinit(void)
GDKfatal("BBPinit: cannot properly recover_subdir process %s.
Please check whether your disk is full or write-protected", SUBDIR);
/* try to obtain a BBP.dir from bakdir */
-
- if (stat(BAKDIR DIR_SEP_STR "BBP.dir", &st) == 0) {
+ if (stat(backupbbpdirstr, &st) == 0) {
/* backup exists; *must* use it */
- if (recover_dir(0, stat(BATDIR DIR_SEP_STR "BBP.dir", &st) ==
0) != GDK_SUCCEED)
+ if (recover_dir(0, stat(bbpdirstr, &st) == 0) != GDK_SUCCEED)
goto bailout;
if ((fp = GDKfilelocate(0, "BBP", "r", "dir")) == NULL)
GDKfatal("BBPinit: cannot open recovered BBP.dir.");
} else if ((fp = GDKfilelocate(0, "BBP", "r", "dir")) == NULL) {
/* there was no BBP.dir either. Panic! try to use a
* BBP.bak */
- if (stat(BAKDIR DIR_SEP_STR "BBP.dir", &st) < 0) {
+ if (stat(backupbbpdirstr, &st) < 0) {
/* no BBP.bak (nor BBP.dir or BACKUP/BBP.dir):
* create a new one */
IODEBUG fprintf(stderr, "#BBPdir: initializing
BBP.\n"); /* BBPdir instead of BBPinit for backward compatibility of
error messages */
@@ -1110,7 +1111,7 @@ BBPinit(void)
GDKfatal("BBPinit: cannot properly prepare process %s. Please
check whether your disk is full or write-protected", BAKDIR);
/* cleanup any leftovers (must be done after BBPrecover) */
- BBPdiskscan(BATDIR);
+ BBPdiskscan(GDKfilepath(0, NULL, BATDIR, NULL));
#if SIZEOF_SIZE_T == 8 && SIZEOF_OID == 8
if (oidsize == SIZEOF_INT)
@@ -1120,7 +1121,8 @@ BBPinit(void)
#endif
if (bbpversion < GDKLIBRARY)
TMcommit();
-
+ GDKfree(bbpdirstr);
+ GDKfree(backupbbpdirstr);
return;
bailout:
@@ -1333,8 +1335,8 @@ BBPdir_subcommit(int cnt, bat *subcommit
/* we need to copy the backup BBP.dir to the new, but
* replacing the entries for the subcommitted bats */
- if ((obbpf = fopen(SUBDIR DIR_SEP_STR "BBP.dir", "r")) == NULL) {
- if ((obbpf = fopen(BAKDIR DIR_SEP_STR "BBP.dir", "r")) == NULL)
+ if ((obbpf = GDKfileopen(0, SUBDIR, "BBP", "dir", "r")) == NULL) {
+ if ((obbpf = GDKfileopen(0, BAKDIR, "BBP", "dir", "r")) == NULL)
GDKfatal("BBPdir: subcommit attempted without backup
BBP.dir.");
}
/* read first three lines */
@@ -3264,6 +3266,9 @@ static gdk_return
BBPprepare(bit subcommit)
{
int start_subcommit, set = 1 + subcommit;
+ str bakdirpath = GDKfilepath(0, NULL, BAKDIR, NULL);
+ str subdirpath = GDKfilepath(0, NULL, SUBDIR, NULL);
+
gdk_return ret = GDK_SUCCEED;
/* tmLock is only used here, helds usually very shortly just
@@ -3280,21 +3285,21 @@ BBPprepare(bit subcommit)
backup_dir = 0;
ret = BBPrecover(0);
if (ret == GDK_SUCCEED) {
- if (mkdir(BAKDIR, 0755) < 0 && errno != EEXIST) {
- GDKsyserror("BBPprepare: cannot create
directory %s\n", BAKDIR);
+ if (mkdir(bakdirpath, 0755) < 0 && errno != EEXIST) {
+ GDKsyserror("BBPprepare: cannot create
directory %s\n", bakdirpath);
ret = GDK_FAIL;
}
/* if BAKDIR already exists, don't signal error */
- IODEBUG fprintf(stderr, "#mkdir %s = %d\n", BAKDIR,
(int) ret);
+ IODEBUG fprintf(stderr, "#mkdir %s = %d\n", bakdirpath,
(int) ret);
}
}
if (ret == GDK_SUCCEED && start_subcommit) {
/* make a new SUBDIR (subdir of BAKDIR) */
- if (mkdir(SUBDIR, 0755) < 0) {
- GDKsyserror("BBPprepare: cannot create directory %s\n",
SUBDIR);
+ if (mkdir(subdirpath, 0755) < 0) {
+ GDKsyserror("BBPprepare: cannot create directory %s\n",
subdirpath);
ret = GDK_FAIL;
}
- IODEBUG fprintf(stderr, "#mkdir %s = %d\n", SUBDIR, (int) ret);
+ IODEBUG fprintf(stderr, "#mkdir %s = %d\n", subdirpath, (int)
ret);
}
if (ret == GDK_SUCCEED && backup_dir != set) {
/* a valid backup dir *must* at least contain BBP.dir */
@@ -3308,7 +3313,8 @@ BBPprepare(bit subcommit)
backup_files++;
}
MT_lock_unset(&GDKtmLock, "BBPprepare");
-
+ GDKfree(bakdirpath);
+ GDKfree(subdirpath);
return ret;
}
@@ -3439,6 +3445,9 @@ BBPsync(int cnt, bat *subcommit)
int bbpdirty = 0;
int t0 = 0, t1 = 0;
+ str bakdir = GDKfilepath(0, NULL, subcommit ? SUBDIR : BAKDIR, NULL);
+ str deldir = GDKfilepath(0, NULL, DELDIR, NULL);
+
PERFDEBUG t0 = t1 = GDKms();
ret = BBPprepare(subcommit != NULL);
@@ -3503,22 +3512,22 @@ BBPsync(int cnt, bat *subcommit)
if (bbpdirty || backup_files > 0) {
if (ret == GDK_SUCCEED) {
- char *bakdir = subcommit ? SUBDIR : BAKDIR;
/* atomic switchover */
/* this is the big one: this call determines
* whether the operation of this function
* succeeded, so no changing of ret after this
* call anymore */
- if (rename(bakdir, DELDIR) < 0)
+
+ if (rename(bakdir, deldir) < 0)
ret = GDK_FAIL;
if (ret != GDK_SUCCEED &&
GDKremovedir(0, DELDIR) == GDK_SUCCEED && /* maybe
there was an old deldir */
- rename(bakdir, DELDIR) < 0)
+ rename(bakdir, deldir) < 0)
ret = GDK_FAIL;
if (ret != GDK_SUCCEED)
- GDKsyserror("BBPsync: rename(%s,%s) failed.\n",
bakdir, DELDIR);
- IODEBUG fprintf(stderr, "#BBPsync: rename %s %s =
%d\n", bakdir, DELDIR, (int) ret);
+ GDKsyserror("BBPsync: rename(%s,%s) failed.\n",
bakdir, deldir);
+ IODEBUG fprintf(stderr, "#BBPsync: rename %s %s =
%d\n", bakdir, deldir, (int) ret);
}
/* AFTERMATH */
@@ -3535,7 +3544,8 @@ BBPsync(int cnt, bat *subcommit)
}
}
PERFDEBUG fprintf(stderr, "#BBPsync (ready time %d)\n", (t0 = GDKms())
- t1);
-
+ GDKfree(bakdir);
+ GDKfree(deldir);
return ret;
}
@@ -3608,7 +3618,10 @@ force_move(int farmid, const char *srcdi
gdk_return
BBPrecover(int farmid)
{
- DIR *dirp = opendir(BAKDIR);
+ str bakdirpath = GDKfilepath(farmid, NULL, BAKDIR, NULL);
+ str leftdirpath = GDKfilepath(farmid, NULL, LEFTDIR, NULL);
+
+ DIR *dirp = opendir(bakdirpath);
struct dirent *dent;
long_str path, dstpath;
bat i;
@@ -3626,8 +3639,8 @@ BBPrecover(int farmid)
dstdir = dstpath + j;
IODEBUG fprintf(stderr, "#BBPrecover(start)\n");
- if (mkdir(LEFTDIR, 0755) < 0 && errno != EEXIST) {
- GDKsyserror("BBPrecover: cannot create directory %s\n",
LEFTDIR);
+ if (mkdir(leftdirpath, 0755) < 0 && errno != EEXIST) {
+ GDKsyserror("BBPrecover: cannot create directory %s\n",
leftdirpath);
closedir(dirp);
return GDK_FAIL;
}
@@ -3688,17 +3701,18 @@ BBPrecover(int farmid)
}
if (ret == GDK_SUCCEED) {
- if (rmdir(BAKDIR) < 0) {
- GDKsyserror("BBPrecover: cannot remove directory %s\n",
BAKDIR);
+ if (rmdir(bakdirpath) < 0) {
+ GDKsyserror("BBPrecover: cannot remove directory %s\n",
bakdirpath);
ret = GDK_FAIL;
}
- IODEBUG fprintf(stderr, "#rmdir %s = %d\n", BAKDIR, (int) ret);
+ IODEBUG fprintf(stderr, "#rmdir %s = %d\n", bakdirpath, (int)
ret);
}
if (ret != GDK_SUCCEED)
GDKerror("BBPrecover: recovery failed. Please check whether
your disk is full or write-protected.\n");
IODEBUG fprintf(stderr, "#BBPrecover(end)\n");
-
+ GDKfree(bakdirpath);
+ GDKfree(leftdirpath);
return ret;
}
@@ -3710,7 +3724,8 @@ BBPrecover(int farmid)
gdk_return
BBPrecover_subdir(void)
{
- DIR *dirp = opendir(SUBDIR);
+ str subdirpath = GDKfilepath(0, NULL, SUBDIR, NULL);
+ DIR *dirp = opendir(subdirpath);
struct dirent *dent;
gdk_return ret = GDK_SUCCEED;
@@ -3743,6 +3758,7 @@ BBPrecover_subdir(void)
if (ret != GDK_SUCCEED)
GDKerror("BBPrecover_subdir: recovery failed. Please check
whether your disk is full or write-protected.\n");
+ GDKfree(subdirpath);
return ret;
}
@@ -3786,7 +3802,7 @@ BBPdiskscan(const char *parent)
{
DIR *dirp = opendir(parent);
struct dirent *dent;
- long_str fullname;
+ char fullname[PATHLENGTH];
str dst = fullname;
size_t dstlen = sizeof(fullname);
const char *src = parent;
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -934,14 +934,12 @@ logger_readlog(logger *lg, char *filenam
time_t t0, t1;
struct stat sb;
lng fpos;
- char *path = GDKfilepath(BBPselectfarm(lg->dbfarm_role, 0, offheap),
NULL, filename, NULL);
if (lg->debug & 1) {
fprintf(stderr, "#logger_readlog opening %s\n", filename);
}
- lg->log = open_rstream(path);
- GDKfree(path);
+ lg->log = open_rstream(filename);
/* if the file doesn't exist, there is nothing to be read back */
if (!lg->log || mnstr_errnr(lg->log)) {
@@ -959,8 +957,10 @@ logger_readlog(logger *lg, char *filenam
return 1;
}
t0 = time(NULL);
- printf("# Start reading the write-ahead log '%s'\n", filename);
- fflush(stdout);
+ if (lg->debug & 1) {
+ printf("# Start reading the write-ahead log '%s'\n", filename);
+ fflush(stdout);
+ }
while (!err && log_read_format(lg, &l)) {
char *name = NULL;
@@ -1060,8 +1060,10 @@ logger_readlog(logger *lg, char *filenam
while (tr)
tr = tr_abort(lg, tr);
t0 = time(NULL);
- printf("# Finished reading the write-ahead log '%s'\n", filename);
- fflush(stdout);
+ if (lg->debug & 1) {
+ printf("# Finished reading the write-ahead log '%s'\n",
filename);
+ fflush(stdout);
+ }
return LOG_OK;
}
@@ -1353,24 +1355,27 @@ logger_load(int debug, const char* fn, c
int id = LOG_SID;
FILE *fp;
char bak[PATHLENGTH];
+ str filenamestr = NULL;
log_bid snapshots_bid = 0;
bat catalog_bid, catalog_nme, dcatalog, bid;
int farmid = BBPselectfarm(lg->dbfarm_role, 0, offheap);
- snprintf(filename, PATHLENGTH, "%s%s", lg->dir, LOGFILE);
+ filenamestr = GDKfilepath(farmid, lg->dir, LOGFILE, NULL);
+ snprintf(filename, PATHLENGTH, "%s", filenamestr);
snprintf(bak, sizeof(bak), "%s.bak", filename);
+ GDKfree(filenamestr);
/* 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 = GDKfileopen(farmid, NULL, bak, NULL, "r")) != NULL) {
+ if ((fp = fopen(bak, "r")) != NULL) {
fclose(fp);
(void) GDKunlink(farmid, lg->dir, LOGFILE, NULL);
if (GDKmove(farmid, lg->dir, LOGFILE, "bak", lg->dir, LOGFILE,
NULL) != GDK_SUCCEED)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list