Changeset: c1690999ec21 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c1690999ec21
Modified Files:
clients/Tests/exports.stable.out
clients/mapiclient/ReadlineTools.c
clients/mapiclient/dotmonetdb.c
common/options/monet_options.c
gdk/gdk_atoms.c
gdk/gdk_bat.c
gdk/gdk_bbp.c
gdk/gdk_bbp.h
gdk/gdk_hash.c
gdk/gdk_imprints.c
gdk/gdk_logger.c
gdk/gdk_orderidx.c
gdk/gdk_private.h
gdk/gdk_storage.c
gdk/gdk_system.c
gdk/gdk_system.h
gdk/gdk_utils.c
monetdb5/extras/rapi/rapi.c
monetdb5/mal/mal_client.c
monetdb5/mal/mal_client.h
monetdb5/mal/mal_dataflow.c
monetdb5/mal/mal_exception.c
monetdb5/mal/mal_linker.c
monetdb5/mal/mal_profiler.c
monetdb5/modules/kernel/Tests/status.malC
monetdb5/modules/kernel/status.c
monetdb5/modules/mal/bbp.c
monetdb5/modules/mal/mal_mapi.c
monetdb5/modules/mal/querylog.c
monetdb5/modules/mal/tokenizer.c
monetdb5/modules/mal/wlc.c
monetdb5/optimizer/opt_querylog.c
monetdb5/tools/Tests/mserver5--help.stable.err
monetdb5/tools/Tests/mserver5--help.stable.err.Windows
sql/backends/monet5/UDF/pyapi/pyapi.c
sql/backends/monet5/vaults/bam/bam_loader.c
sql/backends/monet5/wlr.c
sql/server/sql_mvc.c
tools/mserver/mserver5.1.in
tools/mserver/mserver5.c
tools/mserver/shutdowntest.c
Branch: translate-scripts
Log Message:
Merge with default.
diffs (truncated from 2091 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
@@ -186,12 +186,10 @@ gdk_return BBPaddfarm(const char *dirnam
void BBPclear(bat bid);
BAT *BBPdescriptor(bat b);
int BBPfix(bat b);
-int BBPin;
bat BBPindex(const char *nme);
void BBPkeepref(bat i);
bat BBPlimit;
void BBPlock(void);
-int BBPout;
BAT *BBPquickdesc(bat b, bool delaccess);
int BBPreclaim(BAT *b);
int BBPrelease(bat b);
@@ -278,8 +276,10 @@ void GDKregister(MT_Id pid);
gdk_return GDKreleasemmap(void *ptr, size_t size, size_t id);
gdk_return GDKreleasesem(int sem_id);
void GDKreset(int status);
+void GDKsetdebug(int debug);
gdk_return GDKsetenv(const char *name, const char *value);
void GDKsetmallocsuccesscount(lng count);
+void GDKsetverbose(int verbosity);
ssize_t GDKstrFromStr(unsigned char *restrict dst, const unsigned char
*restrict src, ssize_t len);
str GDKstrdup(const char *s) __attribute__((__warn_unused_result__));
str GDKstrndup(const char *s, size_t n)
__attribute__((__warn_unused_result__));
@@ -287,6 +287,7 @@ void GDKsyserror(_In_z_ _Printf_format_s
size_t GDKuniqueid(size_t offset);
gdk_return GDKupgradevarheap(BAT *b, var_t v, bool copyall, bool mayshare)
__attribute__((__warn_unused_result__));
lng GDKusec(void);
+int GDKverbose;
const char *GDKversion(void);
size_t GDKvm_cursize(void);
void *GDKzalloc(size_t size) __attribute__((__malloc__))
__attribute__((__alloc_size__(1))) __attribute__((__warn_unused_result__));
@@ -302,7 +303,7 @@ size_t HEAPvmsize(Heap *h);
void IMPSdestroy(BAT *b);
lng IMPSimprintsize(BAT *b);
int MT_check_nr_cores(void);
-int MT_create_thread(MT_Id *t, void (*function)(void *), void *arg, enum
MT_thr_detach d);
+int MT_create_thread(MT_Id *t, void (*function)(void *), void *arg, enum
MT_thr_detach d, const char *threadname);
void MT_exiting_thread(void);
MT_Id MT_getpid(void);
size_t MT_getrss(void);
@@ -313,6 +314,9 @@ void *MT_mmap(const char *path, int mode
int MT_munmap(void *p, size_t len);
bool MT_path_absolute(const char *path);
void MT_sleep_ms(unsigned int ms);
+bool MT_thread_init(void);
+const char *MT_thread_name(void);
+void MT_thread_setname(const char *name);
void OIDXdestroy(BAT *b);
ssize_t OIDfromStr(const char *src, size_t *len, oid **dst, bool external);
ssize_t OIDtoStr(str *dst, size_t *len, const oid *src, bool external);
diff --git a/clients/mapiclient/ReadlineTools.c
b/clients/mapiclient/ReadlineTools.c
--- a/clients/mapiclient/ReadlineTools.c
+++ b/clients/mapiclient/ReadlineTools.c
@@ -321,18 +321,25 @@ init_readline(Mapi mid, char *lang, int
}
if (save_history) {
+ int len;
#ifndef NATIVE_WIN32
if (getenv("HOME") != NULL) {
- snprintf(_history_file, FILENAME_MAX,
+ len = snprintf(_history_file, FILENAME_MAX,
"%s/.mapiclient_history_%s",
getenv("HOME"), language);
- _save_history = 1;
+ if (len == -1 || len >= FILENAME_MAX)
+ fprintf(stderr, "Warning: history filename path
is too large\n");
+ else
+ _save_history = 1;
}
#else
- snprintf(_history_file, FILENAME_MAX,
+ len = snprintf(_history_file, FILENAME_MAX,
"%s%c_mapiclient_history_%s",
mo_find_option(NULL, 0, "prefix"), DIR_SEP, language);
- _save_history = 1;
+ if (len == -1 || len >= FILENAME_MAX)
+ fprintf(stderr, "Warning: history filename path is too
large\n");
+ else
+ _save_history = 1;
#endif
if (_save_history) {
FILE *f;
diff --git a/clients/mapiclient/dotmonetdb.c b/clients/mapiclient/dotmonetdb.c
--- a/clients/mapiclient/dotmonetdb.c
+++ b/clients/mapiclient/dotmonetdb.c
@@ -15,18 +15,22 @@ parse_dotmonetdb(char **user, char **pas
{
char *cfile;
FILE *config = NULL;
- char buf[1024];
+ char buf[FILENAME_MAX];
if ((cfile = getenv("DOTMONETDBFILE")) == NULL) {
/* no environment variable: use a default */
if ((config = fopen(".monetdb", "r")) == NULL) {
if ((cfile = getenv("HOME")) != NULL) {
- snprintf(buf, sizeof(buf), "%s%c.monetdb",
cfile, DIR_SEP);
- config = fopen(buf, "r");
- if (config)
- cfile = strdup(buf);
- else
+ int len = snprintf(buf, sizeof(buf),
"%s%c.monetdb", cfile, DIR_SEP);
+ if (len == -1 || len >= FILENAME_MAX) {
cfile = NULL;
+ } else {
+ config = fopen(buf, "r");
+ if (config)
+ cfile = strdup(buf);
+ else
+ cfile = NULL;
+ }
}
} else {
cfile = strdup(".monetdb");
diff --git a/common/options/monet_options.c b/common/options/monet_options.c
--- a/common/options/monet_options.c
+++ b/common/options/monet_options.c
@@ -219,7 +219,7 @@ mo_builtin_settings(opt **Set)
if (Set == NULL)
return 0;
-#define N_OPTIONS 9 /*MUST MATCH # OPTIONS BELOW */
+#define N_OPTIONS 8 /*MUST MATCH # OPTIONS BELOW */
set = malloc(sizeof(opt) * N_OPTIONS);
if (set == NULL)
return 0;
@@ -230,10 +230,6 @@ mo_builtin_settings(opt **Set)
"dbfarm" DIR_SEP_STR "demo");
i++;
set[i].kind = opt_builtin;
- set[i].name = strdup("gdk_debug");
- set[i].value = strdup("0");
- i++;
- set[i].kind = opt_builtin;
set[i].name = strdup("monet_prompt");
set[i].value = strdup(">");
i++;
diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -1400,6 +1400,7 @@ ATOMunknown_find(const char *nme)
str
ATOMunknown_name(int i)
{
+ assert(i < 0);
assert(unknown[-i]);
return unknown[-i];
}
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -2065,7 +2065,6 @@ BATmode(BAT *b, bool transient)
if (!transient) {
check_type(b->ttype);
}
- BBP_dirty = true;
if (!transient && isVIEW(b)) {
if (VIEWreset(b) != GDK_SUCCEED) {
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -159,13 +159,6 @@ getBBPsize(void)
/*
- * other globals
- */
-bool BBP_dirty = false; /* BBP structures modified? */
-int BBPin = 0; /* bats loaded statistic */
-int BBPout = 0; /* bats saved statistic */
-
-/*
* @+ BBP Consistency and Concurrency
* While GDK provides the basic building blocks for an ACID system, in
* itself it is not such a system, as we this would entail too much
@@ -543,6 +536,7 @@ fixfloatbats(void)
char filename[FILENAME_MAX];
FILE *fp;
size_t len;
+ int written;
for (bid = 1; bid < (bat) ATOMIC_GET(BBPsize, BBPsizeLock); bid++) {
if ((b = BBP_desc(bid)) == NULL) {
@@ -557,10 +551,13 @@ fixfloatbats(void)
* logger that it also needs to do a
* conversion. That is done by creating a
* file here based on the name of this BAT. */
- snprintf(filename, sizeof(filename),
+ written = snprintf(filename, sizeof(filename),
"%s/%.*s_nil-nan-convert",
BBPfarms[0].dirname,
(int) (len - 12), BBP_logical(bid));
+ if (written == -1 || written >= FILENAME_MAX)
+ GDKfatal("fixfloatbats: cannot create file %s
has a very large pathname\n",
+ filename);
fp = fopen(filename, "w");
if (fp == NULL) {
GDKsyserror("fixfloatbats: cannot create file
%s\n",
@@ -899,6 +896,60 @@ BBPreadEntries(FILE *fp, unsigned bbpver
return GDK_SUCCEED;
}
+/* check that the necessary files for all BATs exist and are large
+ * enough */
+static gdk_return
+BBPcheckbats(void)
+{
+ for (bat bid = 1; bid < (bat) ATOMIC_GET(BBPsize, BBPsizeLock); bid++) {
+ struct stat statb;
+ BAT *b;
+ char *path;
+
+ if ((b = BBP_desc(bid)) == NULL) {
+ /* not a valid BAT */
+ continue;
+ }
+ if (b->ttype == TYPE_void) {
+ /* no files needed */
+ continue;
+ }
+ path = GDKfilepath(0, BATDIR, BBP_physical(b->batCacheid),
"tail");
+ if (path == NULL)
+ return GDK_FAIL;
+ if (stat(path, &statb) < 0) {
+ GDKsyserror("BBPcheckbats: cannot stat file %s\n",
+ path);
+ GDKfree(path);
+ return GDK_FAIL;
+ }
+ if ((size_t) statb.st_size < b->theap.free) {
+ GDKerror("BBPcheckbats: file %s too small (expected
%zu, actual %zu)\n", path, b->theap.free, (size_t) statb.st_size);
+ GDKfree(path);
+ return GDK_FAIL;
+ }
+ GDKfree(path);
+ if (b->tvheap != NULL) {
+ path = GDKfilepath(0, BATDIR,
BBP_physical(b->batCacheid), "theap");
+ if (path == NULL)
+ return GDK_FAIL;
+ if (stat(path, &statb) < 0) {
+ GDKsyserror("BBPcheckbats: cannot stat file
%s\n",
+ path);
+ GDKfree(path);
+ return GDK_FAIL;
+ }
+ if ((size_t) statb.st_size < b->tvheap->free) {
+ GDKerror("BBPcheckbats: file %s too small
(expected %zu, actual %zu)\n", path, b->tvheap->free, (size_t) statb.st_size);
+ GDKfree(path);
+ return GDK_FAIL;
+ }
+ GDKfree(path);
+ }
+ }
+ return GDK_SUCCEED;
+}
+
#ifdef HAVE_HGE
#define SIZEOF_MAX_INT SIZEOF_HGE
#else
@@ -1164,7 +1215,6 @@ BBPinit(void)
BBPlimit = 0;
memset(BBP, 0, sizeof(BBP));
ATOMIC_SET(BBPsize, 1, BBPsizeLock);
- BBP_dirty = true;
if (!GDKinmemory()) {
bbpversion = BBPheader(fp);
@@ -1192,6 +1242,9 @@ BBPinit(void)
return GDK_FAIL;
}
+ if (BBPcheckbats() != GDK_SUCCEED)
+ return GDK_FAIL;
+
/* cleanup any leftovers (must be done after BBPrecover) */
for (i = 0; i < MAXFARMS && BBPfarms[i].dirname != NULL; i++) {
int j;
@@ -1817,7 +1870,7 @@ BBPinsert(BAT *bn)
bool lock = locked_by == 0 || locked_by != pid;
char dirname[24];
bat i;
- int idx = threadmask(pid);
+ int idx = threadmask(pid), len = 0;
/* critical section: get a new BBP entry */
if (lock) {
@@ -1883,7 +1936,9 @@ BBPinsert(BAT *bn)
#endif
if (*BBP_bak(i) == 0)
- snprintf(BBP_bak(i), sizeof(BBP_bak(i)), "tmp_%o", (unsigned)
i);
+ len = snprintf(BBP_bak(i), sizeof(BBP_bak(i)), "tmp_%o",
(unsigned) i);
+ if (len == -1 || len >= FILENAME_MAX)
+ return 0;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list