diff --git a/client/galaxy/scripts/components/HistoryView.vue b/client/galaxy/scripts/components/HistoryView.vue index 77079b2f5ef..999632663fd 100644 --- a/client/galaxy/scripts/components/HistoryView.vue +++ b/client/galaxy/scripts/components/HistoryView.vue @@ -6,7 +6,7 @@ - + diff --git a/client/galaxy/scripts/mvc/history/history-contents.js b/client/galaxy/scripts/mvc/history/history-contents.js index 538ea914e06..65052d2c667 100644 --- a/client/galaxy/scripts/mvc/history/history-contents.js +++ b/client/galaxy/scripts/mvc/history/history-contents.js @@ -35,9 +35,6 @@ var HistoryContents = _super.extend(BASE_MVC.LoggableMixin).extend({ /** @type {String} order used here and when fetching from server */ order: "hid", - /** root api url */ - urlRoot: `${Galaxy.root}api/histories`, - /** complete api url */ url: function() { return `${this.urlRoot}/${this.historyId}/contents`; @@ -50,6 +47,7 @@ var HistoryContents = _super.extend(BASE_MVC.LoggableMixin).extend({ }); options = options || {}; + this.urlRoot = `${Galaxy.root}api/histories`; _super.prototype.initialize.call(this, models, options); this.history = options.history || null; diff --git a/client/galaxy/scripts/mvc/tours.js b/client/galaxy/scripts/mvc/tours.js index 5eb8fedafec..591bdf7dad1 100644 --- a/client/galaxy/scripts/mvc/tours.js +++ b/client/galaxy/scripts/mvc/tours.js @@ -47,7 +47,7 @@ const TOURPAGE_TEMPLATE = ` - <%- tour.attributes.description || "No description given." %> <% _.each(tour.attributes.tags, function(tag) { %> - + <%- tag.charAt(0).toUpperCase() + tag.slice(1) %> <% }); %> diff --git a/client/galaxy/style/scss/base.scss b/client/galaxy/style/scss/base.scss index e30091aba23..deb7b84cc03 100644 --- a/client/galaxy/style/scss/base.scss +++ b/client/galaxy/style/scss/base.scss @@ -1127,18 +1127,14 @@ div.odd_row { // Tool panel stuff // Extra label colors -.label-beta { +.badge-beta { @extend .badge-warning; } -.label-new { +.badge-new { @extend .badge-info; } -.sm-label-pad { - margin-right: 2px; -} - span.toolParameterExpandableCollapsable { font-weight: bold; cursor: pointer; @@ -1289,6 +1285,19 @@ a.action-button { vertical-align: middle; } +.btn-xs { + // The 'new' bootstrap 4 btn-sm is about the same size as the old btn-xs, + // should serve as a replacement for anything expecting this. + @extend .btn-sm; +} + +.btn-default { + // A hopefully temporary alias (as with above) to provide backwards + // compatibility for external stuff using .btn-default, which is now + // .btn-secondary. + @extend .btn-secondary; +} + //.action-button > * { // vertical-align: middle; //} diff --git a/lib/galaxy/jobs/handler.py b/lib/galaxy/jobs/handler.py index 905e8503755..114af0d5aab 100644 --- a/lib/galaxy/jobs/handler.py +++ b/lib/galaxy/jobs/handler.py @@ -214,6 +214,9 @@ class JobHandlerQueue(Monitors): self.__monitor_step() except Exception: log.exception("Exception in monitor_step") + # With sqlite backends we can run into locked databases occasionally + # To avoid that the monitor step locks again we backoff a little longer. + self._monitor_sleep(5) self._monitor_sleep(1) def __monitor_step(self): diff --git a/lib/galaxy/jobs/runners/slurm.py b/lib/galaxy/jobs/runners/slurm.py index c4c38163f9a..5c7856f1dfc 100644 --- a/lib/galaxy/jobs/runners/slurm.py +++ b/lib/galaxy/jobs/runners/slurm.py @@ -3,7 +3,10 @@ SLURM job control via the DRMAA API. """ import logging import os +import re +import shutil import subprocess +import tempfile import time from galaxy import model @@ -25,6 +28,7 @@ SLURM_MEMORY_LIMIT_EXCEEDED_MSG = 'slurmstepd: error: Exceeded job memory limit' SLURM_MEMORY_LIMIT_EXCEEDED_PARTIAL_WARNINGS = [': Exceeded job memory limit at some point.', ': Exceeded step memory limit at some point.'] SLURM_MEMORY_LIMIT_SCAN_SIZE = 16 * 1024 * 1024 # 16MB +SLURM_UNABLE_TO_ADD_TASK_TO_MEMORY_CG_MSG_RE = re.compile(r"""slurmstepd: error: task/cgroup: unable to add task\[pid=\d+\] to memory cg '\(null\)'$""") # These messages are returned to the user OUT_OF_MEMORY_MSG = 'This job was terminated because it used more memory than it was allocated.' @@ -149,6 +153,14 @@ class SlurmJobRunner(DRMAAJobRunner): self.work_queue.put((self.fail_job, ajs)) return if drmaa_state == self.drmaa_job_states.DONE: + with open(ajs.error_file, 'r') as rfh: + first_line = rfh.readline() + if SLURM_UNABLE_TO_ADD_TASK_TO_MEMORY_CG_MSG_RE.match(first_line): + with tempfile.NamedTemporaryFile('w', delete=False) as wfh: + shutil.copyfileobj(rfh, wfh) + wf_name = wfh.name + shutil.move(wf_name, ajs.error_file) + log.debug('(%s/%s) Job completed, removing SLURM spurious warning: "%s"', ajs.job_wrapper.get_id_tag(), ajs.job_id, first_line) with open(ajs.error_file, 'r+') as f: if os.path.getsize(ajs.error_file) > SLURM_MEMORY_LIMIT_SCAN_SIZE: f.seek(-SLURM_MEMORY_LIMIT_SCAN_SIZE, os.SEEK_END) diff --git a/scripts/grt/grt.yml.sample b/scripts/grt/grt.yml.sample index ff67c01f9e6..8c9456f11ce 100644 --- a/scripts/grt/grt.yml.sample +++ b/scripts/grt/grt.yml.sample @@ -1,11 +1,13 @@ grt: - # Go to https://telescope.galaxyproject.org to obtain an Instance ID and API key + # Register at https://telescope.galaxyproject.org to obtain an Instance ID and API key instance_id: api_key: + # Galaxy Project offers a public galactic-radio-telescope instance, however # you are free to run your own if you need. We would love it if you were # willing and able to contribute your data publicly. - url: http://localhost:8080 + url: https://telescope.galaxyproject.org/grt-admin/ + # Are you willing to share your toolbox? I.e. what tools are installed. # If your instance is public, this can help us direct users to your # instance. If you elect to not send your entire toolbox, we will still diff --git a/static/style/blue/base.css b/static/style/blue/base.css index 5f8f9dc68bf..3a411b43f56 100644 --- a/static/style/blue/base.css +++ b/static/style/blue/base.css @@ -1736,45 +1736,47 @@ button.btn-primary { box-shadow: 0 0 0 0.2rem rgba(37, 83, 123, 0.5); } .btn-secondary, input[type="submit"], -button, .action-button, .menubutton { +button, .action-button, .btn-default, .menubutton { color: #212529; background-color: #dee2e6; border-color: #dee2e6; } .btn-secondary:hover, input[type="submit"]:hover, - button:hover, .action-button:hover, .menubutton:hover { + button:hover, .action-button:hover, .btn-default:hover, .menubutton:hover { color: #212529; background-color: #c8cfd6; border-color: #c1c9d0; } .btn-secondary:focus, input[type="submit"]:focus, - button:focus, .action-button:focus, .menubutton:focus, .btn-secondary.focus, input.focus[type="submit"], - button.focus, .focus.action-button, .focus.menubutton { + button:focus, .action-button:focus, .btn-default:focus, .menubutton:focus, .btn-secondary.focus, input.focus[type="submit"], + button.focus, .focus.action-button, .focus.btn-default, .focus.menubutton { box-shadow: 0 0 0 0.2rem rgba(222, 226, 230, 0.5); } .btn-secondary.disabled, input.disabled[type="submit"], - button.disabled, .disabled.action-button, .disabled.menubutton, .btn-secondary:disabled, input[type="submit"]:disabled, - button:disabled, .action-button:disabled, .menubutton:disabled { + button.disabled, .disabled.action-button, .disabled.btn-default, .disabled.menubutton, .btn-secondary:disabled, input[type="submit"]:disabled, + button:disabled, .action-button:disabled, .btn-default:disabled, .menubutton:disabled { color: #212529; background-color: #dee2e6; border-color: #dee2e6; } .btn-secondary:not(:disabled):not(.disabled):active, input[type="submit"]:not(:disabled):not(.disabled):active, - button:not(:disabled):not(.disabled):active, .action-button:not(:disabled):not(.disabled):active, .menubutton:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, input[type="submit"]:not(:disabled):not(.disabled).active, - button:not(:disabled):not(.disabled).active, .action-button:not(:disabled):not(.disabled).active, .menubutton:not(:disabled):not(.disabled).active, + button:not(:disabled):not(.disabled):active, .action-button:not(:disabled):not(.disabled):active, .btn-default:not(:disabled):not(.disabled):active, .menubutton:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, input[type="submit"]:not(:disabled):not(.disabled).active, + button:not(:disabled):not(.disabled).active, .action-button:not(:disabled):not(.disabled).active, .btn-default:not(:disabled):not(.disabled).active, .menubutton:not(:disabled):not(.disabled).active, .show > .btn-secondary.dropdown-toggle, .show > input.dropdown-toggle[type="submit"], .show > button.dropdown-toggle, .show > .dropdown-toggle.action-button, + .show > .dropdown-toggle.btn-default, .show > .dropdown-toggle.menubutton { color: #212529; background-color: #c1c9d0; border-color: #bac2cb; } .btn-secondary:not(:disabled):not(.disabled):active:focus, input[type="submit"]:not(:disabled):not(.disabled):active:focus, - button:not(:disabled):not(.disabled):active:focus, .action-button:not(:disabled):not(.disabled):active:focus, .menubutton:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, input[type="submit"]:not(:disabled):not(.disabled).active:focus, - button:not(:disabled):not(.disabled).active:focus, .action-button:not(:disabled):not(.disabled).active:focus, .menubutton:not(:disabled):not(.disabled).active:focus, + button:not(:disabled):not(.disabled):active:focus, .action-button:not(:disabled):not(.disabled):active:focus, .btn-default:not(:disabled):not(.disabled):active:focus, .menubutton:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, input[type="submit"]:not(:disabled):not(.disabled).active:focus, + button:not(:disabled):not(.disabled).active:focus, .action-button:not(:disabled):not(.disabled).active:focus, .btn-default:not(:disabled):not(.disabled).active:focus, .menubutton:not(:disabled):not(.disabled).active:focus, .show > .btn-secondary.dropdown-toggle:focus, .show > input.dropdown-toggle[type="submit"]:focus, .show > button.dropdown-toggle:focus, .show > .dropdown-toggle.action-button:focus, + .show > .dropdown-toggle.btn-default:focus, .show > .dropdown-toggle.menubutton:focus { box-shadow: 0 0 0 0.2rem rgba(222, 226, 230, 0.5); } @@ -2125,7 +2127,7 @@ button, .btn-group-lg > .action-button, .btn-group-lg > .menubutton { border-radius: 0.3rem; } .btn-sm, .btn-group-sm > .btn, .btn-group-sm > input[type="submit"], .btn-group-sm > -button, .btn-group-sm > .action-button, .btn-group-sm > .menubutton, .multi-panel-history .control-column .btn, .multi-panel-history .control-column input[type="submit"], .multi-panel-history .control-column +button, .btn-group-sm > .action-button, .btn-group-sm > .menubutton, .btn-xs, .multi-panel-history .control-column .btn, .multi-panel-history .control-column input[type="submit"], .multi-panel-history .control-column button, .multi-panel-history .control-column .action-button, .multi-panel-history .control-column .menubutton, .multi-panel-history .history-column .panel-controls .btn, .multi-panel-history .history-column .panel-controls input[type="submit"], .multi-panel-history .history-column .panel-controls button, .multi-panel-history .history-column .panel-controls .action-button, .multi-panel-history .history-column .panel-controls .menubutton { padding: 0.25rem 0.5rem; @@ -2505,7 +2507,7 @@ button, margin-right: 0; } .btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split, .btn-group-sm > input[type="submit"] + .dropdown-toggle-split, .btn-group-sm > -button + .dropdown-toggle-split, .btn-group-sm > .action-button + .dropdown-toggle-split, .btn-group-sm > .menubutton + .dropdown-toggle-split, .multi-panel-history .control-column .btn + .dropdown-toggle-split, .multi-panel-history .control-column input[type="submit"] + .dropdown-toggle-split, .multi-panel-history .control-column +button + .dropdown-toggle-split, .btn-group-sm > .action-button + .dropdown-toggle-split, .btn-group-sm > .menubutton + .dropdown-toggle-split, .btn-xs + .dropdown-toggle-split, .multi-panel-history .control-column .btn + .dropdown-toggle-split, .multi-panel-history .control-column input[type="submit"] + .dropdown-toggle-split, .multi-panel-history .control-column button + .dropdown-toggle-split, .multi-panel-history .control-column .action-button + .dropdown-toggle-split, .multi-panel-history .control-column .menubutton + .dropdown-toggle-split, .multi-panel-history .history-column .panel-controls .btn + .dropdown-toggle-split, .multi-panel-history .history-column .panel-controls input[type="submit"] + .dropdown-toggle-split, .multi-panel-history .history-column .panel-controls button + .dropdown-toggle-split, .multi-panel-history .history-column .panel-controls .action-button + .dropdown-toggle-split, .multi-panel-history .history-column .panel-controls .menubutton + .dropdown-toggle-split { padding-right: 0.375rem; @@ -3715,18 +3717,18 @@ button .badge, .action-button .badge, .menubutton .badge { text-decoration: none; background-color: #198e19; } -.badge-info, .label-new { +.badge-info, .badge-new { color: #fff; background-color: #1cbceb; } - .badge-info[href]:hover, [href].label-new:hover, .badge-info[href]:focus, [href].label-new:focus { + .badge-info[href]:hover, [href].badge-new:hover, .badge-info[href]:focus, [href].badge-new:focus { color: #fff; text-decoration: none; background-color: #119ac3; } -.badge-warning, .label-beta { +.badge-warning, .badge-beta { color: #212529; background-color: #f69713; } - .badge-warning[href]:hover, [href].label-beta:hover, .badge-warning[href]:focus, [href].label-beta:focus { + .badge-warning[href]:hover, [href].badge-beta:hover, .badge-warning[href]:focus, [href].badge-beta:focus { color: #212529; text-decoration: none; background-color: #ce7b08; } @@ -9003,7 +9005,7 @@ button, .action-button, .menubutton { white-space: normal; } .btn-secondary, input[type="submit"], -button, .action-button, .menubutton { +button, .action-button, .btn-default, .menubutton { border: 1px solid #bfbfbf; } .dropdown-menu { @@ -13351,9 +13353,6 @@ div.odd_row { #footer { display: none; } -.sm-label-pad { - margin-right: 2px; } - span.toolParameterExpandableCollapsable { font-weight: bold; cursor: pointer; }