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→group</small>
</label>
<label class="checkbox-inline" data-toggle-permission="true" data-permission-head="<%= @object.uuid %>" data-permission-name="can_read">
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→user</small>
</label>
<label class="checkbox-inline">
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():
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
# 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",
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": [],
# 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
_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
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 = []
Collections:
BlobSigningKey: $blob_signing_key
DefaultReplication: 1
- Containers:
- SupportedDockerImageFormats: ["v2"]
Login:
ProviderAppSecret: $sso_app_secret
ProviderAppID: arvados-server
/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