Changeset: 30313f954490 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=30313f954490
Modified Files:
        gdk/gdk.h
        gdk/gdk_atoms.c
        gdk/gdk_bbp.c
        gdk/gdk_hash.c
        gdk/gdk_heap.c
        gdk/gdk_imprints.c
        gdk/gdk_logger.c
        gdk/gdk_orderidx.c
        gdk/gdk_storage.c
        monetdb5/mal/mal.h
        tools/mserver/mserver5.1.in
Branch: Jul2017
Log Message:

Split FORCEMITOMASK into two: FORCEMITOMASK and NOSYNCMASK.
NOSYNCMASK can be used to not synchronize files to disk (dangerous if
you value your data).  The --forcemito flag now is a combination of the
two debug masks.


diffs (truncated from 308 to 300 lines):

diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -469,10 +469,8 @@
 #define XPROPDEBUG     if (GDKdebug & XPROPMASK)
 */
 
-/* JOINPROPMASK not used anymore
-#define JOINPROPMASK   (1<<24)
-#define JOINPROPCHK    if (!(GDKdebug & JOINPROPMASK))
-*/
+#define NOSYNCMASK     (1<<24)
+
 #define DEADBEEFMASK   (1<<25)
 #define DEADBEEFCHK    if (!(GDKdebug & DEADBEEFMASK))
 
diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -1203,7 +1203,8 @@ strCleanHash(Heap *h, int rebuild)
        if (memcmp(newhash, h->base, sizeof(newhash)) != 0) {
                memcpy(h->base, newhash, sizeof(newhash));
                if (h->storage == STORE_MMAP) {
-                       (void) MT_msync(h->base, GDK_STRHASHSIZE);
+                       if (!(GDKdebug & NOSYNCMASK))
+                               (void) MT_msync(h->base, GDK_STRHASHSIZE);
                } else
                        h->dirty = 1;
        }
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -1747,17 +1747,13 @@ BBPdir_subcommit(int cnt, bat *subcommit
        }
 
        if (fflush(nbbpf) == EOF ||
-           (!(GDKdebug & FORCEMITOMASK) &&
-#ifdef NATIVE_WIN32
-            _commit(_fileno(nbbpf)) < 0
-#else
-#ifdef HAVE_FDATASYNC
-            fdatasync(fileno(nbbpf)) < 0
-#else
-#ifdef HAVE_FSYNC
-            fsync(fileno(nbbpf)) < 0
-#endif
-#endif
+           (!(GDKdebug & NOSYNCMASK)
+#if defined(NATIVE_WIN32)
+            && _commit(_fileno(nbbpf)) < 0
+#elif defined(HAVE_FDATASYNC)
+            && fdatasync(fileno(nbbpf)) < 0
+#elif defined(HAVE_FSYNC)
+            && fsync(fileno(nbbpf)) < 0
 #endif
                    )) {
                GDKsyserror("BBPdir_subcommit: Syncing BBP.dir file failed\n");
@@ -1811,18 +1807,15 @@ BBPdir(int cnt, bat *subcommit)
        }
 
        if (fflush(fp) == EOF ||
-#ifdef NATIVE_WIN32
-           _commit(_fileno(fp)) < 0
-#else
-#ifdef HAVE_FDATASYNC
-           fdatasync(fileno(fp)) < 0
-#else
-#ifdef HAVE_FSYNC
-           fsync(fileno(fp)) < 0
+           (!(GDKdebug & NOSYNCMASK)
+#if defined(NATIVE_WIN32)
+            && _commit(_fileno(fp)) < 0
+#elif defined(HAVE_FDATASYNC)
+            && fdatasync(fileno(fp)) < 0
+#elif defined(HAVE_FSYNC)
+            && fsync(fileno(fp)) < 0
 #endif
-#endif
-#endif
-               ) {
+                   )) {
                GDKsyserror("BBPdir: Syncing BBP.dir file failed\n");
                goto bailout;
        }
diff --git a/gdk/gdk_hash.c b/gdk/gdk_hash.c
--- a/gdk/gdk_hash.c
+++ b/gdk/gdk_hash.c
@@ -291,7 +291,7 @@ BAThashsync(void *arg)
                        ((size_t *) hp->base)[0] |= 1 << 24;
                        if (write(fd, hp->base, SIZEOF_SIZE_T) >= 0) {
                                failed = ""; /* not failed */
-                               if (!(GDKdebug & FORCEMITOMASK)) {
+                               if (!(GDKdebug & NOSYNCMASK)) {
 #if defined(NATIVE_WIN32)
                                        _commit(fd);
 #elif defined(HAVE_FDATASYNC)
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -451,13 +451,15 @@ GDKupgradevarheap(BAT *b, var_t v, int c
                        base += ret;
                }
                if (ret < 0 ||
+                   (!(GDKdebug & NOSYNCMASK)
 #if defined(NATIVE_WIN32)
-                   _commit(fd) < 0 ||
+                    && _commit(fd) < 0
 #elif defined(HAVE_FDATASYNC)
-                   fdatasync(fd) < 0 ||
+                    && fdatasync(fd) < 0
 #elif defined(HAVE_FSYNC)
-                   fsync(fd) < 0 ||
+                    && fsync(fd) < 0
 #endif
+                           ) ||
                    close(fd) < 0) {
                        /* something went wrong: abandon ship */
                        GDKsyserror("GDKupgradevarheap: syncing heap to disk 
failed\n");
@@ -1280,9 +1282,10 @@ HEAP_recover(Heap *h, const var_t *offse
        }
        h->cleanhash = 0;
        if (dirty) {
-               if (h->storage == STORE_MMAP)
-                       (void) MT_msync(h->base, dirty);
-               else
+               if (h->storage == STORE_MMAP) {
+                       if (!(GDKdebug & NOSYNCMASK))
+                               (void) MT_msync(h->base, dirty);
+               } else
                        h->dirty = 1;
        }
 }
diff --git a/gdk/gdk_imprints.c b/gdk/gdk_imprints.c
--- a/gdk/gdk_imprints.c
+++ b/gdk/gdk_imprints.c
@@ -487,7 +487,7 @@ BATimprints(BAT *b)
                        ((size_t *) imprints->imprints->base)[0] |= (size_t) 1 
<< 16;
                        if (write(fd, imprints->imprints->base, sizeof(size_t)) 
< 0)
                                perror("write imprints");
-                       if (!(GDKdebug & FORCEMITOMASK)) {
+                       if (!(GDKdebug & NOSYNCMASK)) {
 #if defined(NATIVE_WIN32)
                                _commit(fd);
 #elif defined(HAVE_FDATASYNC)
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1535,13 +1535,15 @@ logger_load(int debug, const char *fn, c
                        goto error;
                }
                if (fflush(fp) < 0 ||
+                   (!(GDKdebug & NOSYNCMASK)
 #if defined(_MSC_VER)
-                   _commit(_fileno(fp)) < 0 ||
+                    && _commit(_fileno(fp)) < 0
 #elif defined(HAVE_FDATASYNC)
-                   fdatasync(fileno(fp)) < 0 ||
+                    && fdatasync(fileno(fp)) < 0
 #elif defined(HAVE_FSYNC)
-                   fsync(fileno(fp)) < 0 ||
+                    && fsync(fileno(fp)) < 0
 #endif
+                           ) ||
                    fclose(fp) < 0) {
                        unlink(filename);
                        GDKerror("logger_load: closing log file %s failed",
@@ -2074,14 +2076,15 @@ logger_exit(logger *lg)
                }
 
                if (fflush(fp) < 0 ||
+                   (!(GDKdebug & NOSYNCMASK)
 #if defined(WIN32)
-                   _commit(_fileno(fp)) < 0
+                    && _commit(_fileno(fp)) < 0
 #elif defined(HAVE_FDATASYNC)
-                   fdatasync(fileno(fp)) < 0
+                    && fdatasync(fileno(fp)) < 0
 #elif defined(HAVE_FSYNC)
-                   fsync(fileno(fp)) < 0
+                    && fsync(fileno(fp)) < 0
 #endif
-                       ) {
+                           )) {
                        (void) fclose(fp);
                        fprintf(stderr, "!ERROR: logger_exit: flush of %s 
failed\n",
                                filename);
@@ -2616,7 +2619,7 @@ log_tend(logger *lg)
        if (res != GDK_SUCCEED ||
            log_write_format(lg, &l) != GDK_SUCCEED ||
            mnstr_flush(lg->log) ||
-           mnstr_fsync(lg->log) ||
+           (!(GDKdebug & NOSYNCMASK) && mnstr_fsync(lg->log)) ||
            pre_allocate(lg) != GDK_SUCCEED) {
                fprintf(stderr, "!ERROR: log_tend: write failed\n");
                return GDK_FAIL;
@@ -2657,7 +2660,7 @@ log_sequence_(logger *lg, int seq, lng v
        if (log_write_format(lg, &l) != GDK_SUCCEED ||
            !mnstr_writeLng(lg->log, val) ||
            (flush && mnstr_flush(lg->log)) ||
-           (flush && mnstr_fsync(lg->log)) ||
+           (flush && !(GDKdebug & NOSYNCMASK) && mnstr_fsync(lg->log)) ||
            pre_allocate(lg) != GDK_SUCCEED) {
                fprintf(stderr, "!ERROR: log_sequence_: write failed\n");
                return GDK_FAIL;
@@ -2684,7 +2687,7 @@ log_sequence_nrs(logger *lg)
        }
        if (ok != GDK_SUCCEED ||
            mnstr_flush(lg->log) ||
-           mnstr_fsync(lg->log)) {
+           (!(GDKdebug & NOSYNCMASK) && mnstr_fsync(lg->log))) {
                fprintf(stderr, "!ERROR: log_sequence_nrs: write failed\n");
                return GDK_FAIL;
        }
diff --git a/gdk/gdk_orderidx.c b/gdk/gdk_orderidx.c
--- a/gdk/gdk_orderidx.c
+++ b/gdk/gdk_orderidx.c
@@ -29,7 +29,7 @@ BATidxsync(void *arg)
                    (fd = GDKfdlocate(hp->farmid, hp->filename, "rb+", NULL)) 
>= 0) {
                        ((oid *) hp->base)[0] |= (oid) 1 << 24;
                        if (write(fd, hp->base, SIZEOF_SIZE_T) >= 0) {
-                               if (!(GDKdebug & FORCEMITOMASK)) {
+                               if (!(GDKdebug & NOSYNCMASK)) {
 #if defined(NATIVE_WIN32)
                                        _commit(fd);
 #elif defined(HAVE_FDATASYNC)
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -414,7 +414,7 @@ GDKsave(int farmid, const char *nme, con
        IODEBUG fprintf(stderr, "#GDKsave: name=%s, ext=%s, mode %d, 
dosync=%d\n", nme, ext ? ext : "", (int) mode, dosync);
 
        if (mode == STORE_MMAP) {
-               if (dosync && size && MT_msync(buf, size) < 0)
+               if (dosync && size && !(GDKdebug & NOSYNCMASK) && MT_msync(buf, 
size) < 0)
                        err = -1;
                if (err)
                        GDKsyserror("GDKsave: error on: name=%s, ext=%s, "
@@ -456,15 +456,13 @@ GDKsave(int farmid, const char *nme, con
                                                (unsigned) MIN(1 << 30, size),
                                                ret);
                        }
-                       if (dosync && !(GDKdebug & FORCEMITOMASK) &&
+                       if (dosync && !(GDKdebug & NOSYNCMASK)
 #if defined(NATIVE_WIN32)
-                           _commit(fd) < 0
+                           && _commit(fd) < 0
 #elif defined(HAVE_FDATASYNC)
-                           fdatasync(fd) < 0
+                           && fdatasync(fd) < 0
 #elif defined(HAVE_FSYNC)
-                           fsync(fd) < 0
-#else
-                           0
+                           && fsync(fd) < 0
 #endif
                                ) {
                                GDKsyserror("GDKsave: error on: name=%s, "
@@ -665,8 +663,8 @@ BATmsyncImplementation(void *arg)
 void
 BATmsync(BAT *b)
 {
-       /* we don't sync views */
-       if (isVIEW(b))
+       /* we don't sync views or if we're told not to */
+       if (isVIEW(b) || (GDKdebug & NOSYNCMASK))
                return;
        /* we don't sync transients */
        if (b->theap.farmid != 0 ||
diff --git a/monetdb5/mal/mal.h b/monetdb5/mal/mal.h
--- a/monetdb5/mal/mal.h
+++ b/monetdb5/mal/mal.h
@@ -72,7 +72,7 @@ mal_export int have_hge;
 #define GRPalgorithms (ALGOMASK | ESTIMASK)
 #define GRPperformance (DEADBEEFMASK)
 #define GRPoptimizers  (OPTMASK)
-#define GRPforcemito (FORCEMITOMASK)
+#define GRPforcemito (FORCEMITOMASK | NOSYNCMASK)
 
 mal_export MT_Lock  mal_contextLock;
 mal_export MT_Lock  mal_remoteLock;
diff --git a/tools/mserver/mserver5.1.in b/tools/mserver/mserver5.1.in
--- a/tools/mserver/mserver5.1.in
+++ b/tools/mserver/mserver5.1.in
@@ -151,9 +151,12 @@ combination of):
                              (for join, select)
 .\"    8388608 = XPROPMASK    = extended property checking:
 .\"                             tells also about not set properties
-.\"   16777216 = JOINPROPMASK = disable property checking with
-.\"                             join & outerjoin (e.g., for
-.\"                             performance measurements)
+   16777216 = NOSYNCMASK = disable forcefully synchronizing files
+                             to disk.  If this flag is set, there is
+                             no guarantee that the database remains
+                             consistent after a crash.  DO NOT USE
+                             (unless you really don't care about your
+                             data).
    33554432 = DEADBEEFMASK = disable "cleaning" of freed memory
                              in GDKfree() (e.g., for performance
                              measurements)
@@ -191,7 +194,7 @@ these debug flags as well:
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to