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]