Merge branch '15467-config-fixups'
authorPeter Amstutz <pamstutz@veritasgenetics.com>
Mon, 29 Jul 2019 19:37:32 +0000 (15:37 -0400)
committerPeter Amstutz <pamstutz@veritasgenetics.com>
Mon, 29 Jul 2019 19:37:32 +0000 (15:37 -0400)
Also includes 14713-cds-new-config and 14717-ws-new-config

Updates run_test_server.py and run-tests.sh to use new config.yml

refs #14713
refs #14717
refs #15467

Arvados-DCO-1.1-Signed-off-by: Peter Amstutz <pamstutz@veritasgenetics.com>

apps/workbench/app/views/users/_show_admin.html.erb
sdk/python/arvados/events.py
sdk/python/tests/test_events.py
tools/arvbox/bin/arvbox
tools/arvbox/lib/arvbox/docker/cluster-config.sh

index 89156aaf820238c3394d5e7d2c7975d03f9009f8..ddff79be01c3b02c4a6ff6c7c95f28f129fb1711 100644 (file)
@@ -76,7 +76,7 @@ SPDX-License-Identifier: AGPL-3.0 %>
                     disabled: (group.owner_uuid == @object.uuid),
                     data: {
                       permission_head: group.uuid,
-                      permission_uuid: permitted_group_perms[group.uuid]}) %>
+                      permission_uuid: permitted_group_perms[group.uuid] || 'x'}) %>
                 <small>user&rarr;group</small>
               </label>
               <label class="checkbox-inline" data-toggle-permission="true" data-permission-head="<%= @object.uuid %>" data-permission-name="can_read">
@@ -87,7 +87,7 @@ SPDX-License-Identifier: AGPL-3.0 %>
                     disabled: (group.owner_uuid == @object.uuid),
                     data: {
                       permission_tail: group.uuid,
-                      permission_uuid: member_group_perms[group.uuid]}) %>
+                      permission_uuid: member_group_perms[group.uuid] || 'x'}) %>
                 <small>group&rarr;user</small>
               </label>
               <label class="checkbox-inline">
index c308750f430c352327f53b13d5d46329b0ee28ed..22364d2ae5897ffbc119172bab4fab4e227d9f67 100644 (file)
@@ -163,16 +163,17 @@ class PollClient(threading.Thread):
         self._closing = threading.Event()
         self._closing_lock = threading.RLock()
 
-    def run(self):
         if self.last_log_id != None:
             # Caller supplied the last-seen event ID from a previous
-            # connection
-            skip_old_events = [["id", ">", str(self.last_log_id)]]
+            # connection.
+            self._skip_old_events = [["id", ">", str(self.last_log_id)]]
         else:
             # We need to do a reverse-order query to find the most
-            # recent event ID (see "if not skip_old_events" below).
-            skip_old_events = False
+            # recent event ID (see "if not self._skip_old_events"
+            # in run()).
+            self._skip_old_events = False
 
+    def run(self):
         self.on_event({'status': 200})
 
         while not self._closing.is_set():
@@ -180,7 +181,7 @@ class PollClient(threading.Thread):
             for f in self.filters:
                 for tries_left in RetryLoop(num_retries=25, backoff_start=.1, max_wait=self.poll_time):
                     try:
-                        if not skip_old_events:
+                        if not self._skip_old_events:
                             # If the caller didn't provide a known
                             # recent ID, our first request will ask
                             # for the single most recent event from
@@ -198,7 +199,7 @@ class PollClient(threading.Thread):
                             # filter on that same cutoff time, or
                             # (once we see our first matching event)
                             # the ID of the last-seen event.
-                            skip_old_events = [[
+                            self._skip_old_events = [[
                                 "created_at", ">=",
                                 time.strftime(
                                     "%Y-%m-%dT%H:%M:%SZ",
@@ -206,9 +207,9 @@ class PollClient(threading.Thread):
                             items = self.api.logs().list(
                                 order="id desc",
                                 limit=1,
-                                filters=f+skip_old_events).execute()
+                                filters=f+self._skip_old_events).execute()
                             if items["items"]:
-                                skip_old_events = [
+                                self._skip_old_events = [
                                     ["id", ">", str(items["items"][0]["id"])]]
                                 items = {
                                     "items": [],
@@ -223,7 +224,7 @@ class PollClient(threading.Thread):
                             # order.
                             items = self.api.logs().list(
                                 order="id asc",
-                                filters=f+skip_old_events).execute()
+                                filters=f+self._skip_old_events).execute()
                         break
                     except errors.ApiError as error:
                         pass
@@ -237,7 +238,7 @@ class PollClient(threading.Thread):
                     _thread.interrupt_main()
                     return
                 for i in items["items"]:
-                    skip_old_events = [["id", ">", str(i["id"])]]
+                    self._skip_old_events = [["id", ">", str(i["id"])]]
                     with self._closing_lock:
                         if self._closing.is_set():
                             return
index 35614346d5c3e73465fc9aeb9f45932eb17d59cb..f5192160f3e5fad01d080b0eb16bf834bdfd1ed6 100644 (file)
@@ -63,6 +63,14 @@ class WebsocketTest(run_test_server.TestCaseWithServers):
             last_log_id=(1 if start_time else None))
         self.assertIsInstance(self.ws, expect_type)
         self.assertEqual(200, events.get(True, 5)['status'])
+
+        if hasattr(self.ws, '_skip_old_events'):
+            # Avoid race by waiting for the first "find ID threshold"
+            # poll to finish.
+            deadline = time.time() + 10
+            while not self.ws._skip_old_events:
+                self.assertLess(time.time(), deadline)
+                time.sleep(0.1)
         human = arvados.api('v1').humans().create(body={}).execute()
 
         want_uuids = []
index 0a0d82e71b59c4c0290457e85aaf2b33480b28c2..e56fbd489be3312c0e9159379d351a75acd20630 100755 (executable)
@@ -286,6 +286,7 @@ run() {
                    -e TERM=$TERM \
                    -e WORKSPACE=/usr/src/arvados \
                    -e GEM_HOME=/var/lib/gems \
+                  -e CONFIGSRC=/var/lib/arvados/run_tests \
                    $ARVBOX_CONTAINER \
                    /usr/local/lib/arvbox/runsu.sh \
                    /usr/src/arvados/build/run-tests.sh \
index ee9c130429813f863d48315c5eeed81d3572c226..7719fefce6c35912ffb63fc61152ae513d99a31f 100755 (executable)
@@ -72,8 +72,6 @@ Clusters:
     Collections:
       BlobSigningKey: $blob_signing_key
       DefaultReplication: 1
-    Containers:
-      SupportedDockerImageFormats: ["v2"]
     Login:
       ProviderAppSecret: $sso_app_secret
       ProviderAppID: arvados-server
@@ -91,3 +89,16 @@ EOF
 /usr/local/lib/arvbox/yml_override.py /var/lib/arvados/cluster_config.yml
 
 cp /var/lib/arvados/cluster_config.yml /etc/arvados/config.yml
+
+mkdir -p /var/lib/arvados/run_tests
+cat >/var/lib/arvados/run_tests/config.yml <<EOF
+Clusters:
+  zzzzz:
+    PostgreSQL:
+      Connection:
+        host: localhost
+        user: arvados
+        password: ${database_pw}
+        dbname: arvados_test
+        client_encoding: utf8
+EOF