Changeset: 2c9d59d222ce for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/2c9d59d222ce
Branch: Jan2022
Log Message:

merged


diffs (199 lines):

diff --git a/common/stream/Tests/read_iconv.py 
b/common/stream/Tests/read_iconv.py
--- a/common/stream/Tests/read_iconv.py
+++ b/common/stream/Tests/read_iconv.py
@@ -20,26 +20,38 @@ def run_streamcat(text, enc, expected_er
     filename = tf.write(enc_text)
 
     cmd = ['streamcat', 'read', filename, 'rstream', f'iconv:{enc}']
-    descr = f"command {cmd} with input {enc_text!r}"
+    descr = f"command {cmd}\nwith input {enc_text!r}"
     proc = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     output = proc.stdout
     os.remove(filename)
 
+    def show_stderr():
+        if proc.stderr:
+            print("--- STDERR ---", file=sys.stderr)
+            sys.stderr.buffer.write(proc.stderr)
+            # if proc.stderr.endswith(b'\n'):
+        else:
+            print("--- NOTHING ON STDERR ---", file=sys.stderr)
+
     if expected_error:
         if proc.returncode == 0:
-            print(f"{descr} exited without expected error", file=sys.stderr)
+            print(f"{descr}\nexited without expected error", file=sys.stderr)
+            show_stderr()
             sys.exit(1)
         elif expected_error not in proc.stderr:
-            print(f"{descr} failed as expected but stderr does not contain 
{expected_error!r}", file=sys.stderr)
+            print(f"{descr}\nfailed as expected but stderr does not contain 
{expected_error!r}:", file=sys.stderr)
+            show_stderr()
             sys.exit(1)
         else:
             return
 
     if proc.returncode != 0:
-        print(f"{descr} exited with status {proc.returncode}", file=sys.stderr)
+        print(f"{descr}\nexited with status {proc.returncode}", 
file=sys.stderr)
+        show_stderr()
         sys.exit(1)
     if output != expected:
-        print(f"{descr} yielded {output!r}, expected {expected!r}")
+        print(f"{descr}\nyielded {output!r}, expected {expected!r}", 
file=sys.stderr)
+        show_stderr()
         sys.exit(1)
 
 
diff --git a/common/stream/Tests/write_iconv.py 
b/common/stream/Tests/write_iconv.py
--- a/common/stream/Tests/write_iconv.py
+++ b/common/stream/Tests/write_iconv.py
@@ -18,13 +18,14 @@ def run_streamcat(text, enc):
     cmd = ['streamcat', 'write', tf.path(), 'wstream', f'iconv:{enc}']
     proc = subprocess.run(cmd, input=utf8_text)
     if proc.returncode != 0:
-        print(f"command {cmd} exited with status {proc.returncode} for input 
{utf8_text!r} ({text!r})", file=sys.stderr)
+        print(f"command {cmd}\nexited with status {proc.returncode}\nfor input 
{utf8_text!r} ({text!r})", file=sys.stderr)
         sys.exit(1)
     output = tf.read()
     os.remove(tf.path())
 
     if output != expected:
-        raise Exception(f"command {cmd} with input {utf8_text!r} yielded 
{output!r}, expected {expected!r}")
+        print(f"command {cmd}\nwith input {utf8_text!r} ({text!r})\nyielded 
{output!r}, expected {expected!r}", file=sys.stderr)
+        sys.exit(1)
 
 
 text = "MøNëTDB"
diff --git a/common/stream/iconv_stream.c b/common/stream/iconv_stream.c
--- a/common/stream/iconv_stream.c
+++ b/common/stream/iconv_stream.c
@@ -90,8 +90,7 @@ ic_write(stream *restrict s, const void 
                                /* not enough space in output buffer */
                                break;
                        default:
-                               /* cannot happen (according to manual) */
-                               mnstr_set_error(s, MNSTR_WRITE_ERROR, "iconv 
internal error %d", errno);
+                               mnstr_set_error_errno(s, MNSTR_WRITE_ERROR, 
"iconv reported an error");
                                goto bailout;
                        }
                }
@@ -153,7 +152,7 @@ ic_read(stream *restrict s, void *restri
                        }
                        if (iconv(ic->cd, NULL, NULL, &outbuf, &outbytesleft) 
== (size_t) -1) {
                                /* some error occurred */
-                               mnstr_set_error(s, MNSTR_READ_ERROR, 
"unspecified iconv error occurred");
+                               mnstr_set_error_errno(s, MNSTR_READ_ERROR, 
"iconv reported an error");
                                return -1;
                        }
                        goto exit_func; /* double break */
@@ -176,8 +175,7 @@ ic_read(stream *restrict s, void *restri
                                 * the buffer */
                                goto exit_func;
                        default:
-                               /* cannot happen (according to manual) */
-                               mnstr_set_error(s, MNSTR_READ_ERROR, "inconv 
stream: internal error");
+                               mnstr_set_error_errno(s, MNSTR_READ_ERROR, 
"iconv reported an error");
                                return -1;
                        }
                }
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -2658,6 +2658,9 @@ hashjoin(BAT **r1p, BAT **r2p, BAT *l, B
        bool lskipped = false;  /* whether we skipped values in l */
        Hash *restrict hsh = NULL;
        bool locked = false;
+       BUN maxsize;
+       BAT *r1 = NULL;
+       BAT *r2 = NULL;
 
        assert(ATOMtype(l->ttype) == ATOMtype(r->ttype));
 
@@ -2693,19 +2696,6 @@ hashjoin(BAT **r1p, BAT **r2p, BAT *l, B
                               nil_on_miss, only_misses, __func__, t0);
        }
 
-       BUN maxsize = joininitresults(r1p, r2p, lci->ncand, rci->ncand,
-                                     l->tkey, r->tkey, semi | max_one,
-                                     nil_on_miss, only_misses, min_one,
-                                     estimate);
-       if (maxsize == BUN_NONE) {
-               bat_iterator_end(&li);
-               bat_iterator_end(&ri);
-               return GDK_FAIL;
-       }
-
-       BAT *r1 = *r1p;
-       BAT *r2 = r2p ? *r2p : NULL;
-
        rl = rci->seq - r->hseqbase;
        rh = canditer_last(rci) + 1 - r->hseqbase;
        if (hash_cand) {
@@ -2815,6 +2805,17 @@ hashjoin(BAT **r1p, BAT **r2p, BAT *l, B
                }
        }
 
+       maxsize = joininitresults(r1p, r2p, lci->ncand, rci->ncand,
+                                 l->tkey, r->tkey, semi | max_one,
+                                 nil_on_miss, only_misses, min_one,
+                                 estimate);
+       if (maxsize == BUN_NONE) {
+               goto bailout;
+       }
+
+       r1 = *r1p;
+       r2 = r2p ? *r2p : NULL;
+
        /* basic properties will be adjusted if necessary later on,
         * they were initially set by joininitresults() */
 
diff --git a/sql/test/concurrent/Tests/many-concurrent-client-connections.py 
b/sql/test/concurrent/Tests/many-concurrent-client-connections.SQL.py
rename from sql/test/concurrent/Tests/many-concurrent-client-connections.py
rename to sql/test/concurrent/Tests/many-concurrent-client-connections.SQL.py
--- a/sql/test/concurrent/Tests/many-concurrent-client-connections.py
+++ b/sql/test/concurrent/Tests/many-concurrent-client-connections.SQL.py
@@ -1,5 +1,10 @@
 import os, pymonetdb
-from concurrent.futures import ProcessPoolExecutor
+from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor
+
+if os.uname().sysname == 'Linux':
+    executor = ProcessPoolExecutor
+else:
+    executor = ThreadPoolExecutor
 
 h   = os.getenv('MAPIHOST')
 p   = int(os.getenv('MAPIPORT'))
@@ -16,5 +21,5 @@ def client(_):
         conn.close()
 
 
-with ProcessPoolExecutor(nr_clients) as pool:
+with executor(nr_clients) as pool:
     pool.map(client, range(nr_clients))
diff --git a/sql/test/concurrent/Tests/read-segment-after-free.SQL.py 
b/sql/test/concurrent/Tests/read-segment-after-free.SQL.py
--- a/sql/test/concurrent/Tests/read-segment-after-free.SQL.py
+++ b/sql/test/concurrent/Tests/read-segment-after-free.SQL.py
@@ -1,8 +1,13 @@
 import os, random, pymonetdb
-from concurrent.futures import ProcessPoolExecutor
+from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor
 import time
 from pymonetdb.exceptions import OperationalError
 
+if os.uname().sysname == 'Linux':
+    executor = ProcessPoolExecutor
+else:
+    executor = ThreadPoolExecutor
+
 init    =   '''
             drop table if exists foo;
             create table foo (c1, c2, c3, c4, c5) AS VALUES
@@ -47,5 +52,5 @@ def client(_):
             # concurrency conflicts are allowed
             pass
 
-with ProcessPoolExecutor(nr_clients) as pool:
+with executor(nr_clients) as pool:
     pool.map(client, range(nr_clients))
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to