Ceph : Issueshttps://tracker.ceph.com/https://tracker.ceph.com/favicon.ico2020-07-23T15:16:56ZCeph
Redmine Dashboard - Backport #46693 (Resolved): octopus: mgr/dashboard: Don't have two different unit tes...https://tracker.ceph.com/issues/466932020-07-23T15:16:56ZStephan Müller
<p><a class="external" href="https://github.com/ceph/ceph/pull/36267">https://github.com/ceph/ceph/pull/36267</a></p> Dashboard - Bug #46660 (Resolved): mgr/dashboard: Regression on table error handlinghttps://tracker.ceph.com/issues/466602020-07-21T14:47:00ZStephan Müller
<p>Regression was introduced by <a class="issue tracker-1 status-3 priority-5 priority-high3 closed" title="Bug: mgr/dashboard: OSD page is slow at loading all the inline pages and tabs (Resolved)" href="https://tracker.ceph.com/issues/45017">#45017</a> (PR mgr/dashboard: Migrate Tabs from ngx-bootstrap to ng-bootstrap #35290). Through the use of the new plugin some tables got wrapped into the new usage - however some components needed the use of the table as viewchild and though they got a static viewchild, but it's now dynamic.</p>
<p>The error occurs on the host and pools listing.</p> Orchestrator - Tasks #46376 (Resolved): cephadm: Make vagrant usage more comfortablehttps://tracker.ceph.com/issues/463762020-07-06T15:28:51ZStephan Müller
<p>Currently you can only use a big scale factor using the vagrant setup. You can have x * (mgr, mon, osd with 2 disks). It would be nicer to use the same constants as vstart is using to select how many mgr, mons and osds one likes to have. I would go further and add a disks constant two.</p>
<p>This would make the creation a lot more flexible. Another thing that is missing is an script to easily snapshot the created vm's and recreate them</p> Dashboard - Cleanup #46375 (Resolved): mgr/dashboard: Slow pool detail tab switcheshttps://tracker.ceph.com/issues/463752020-07-06T15:18:14ZStephan Müller
<p>Currently it take a lot time to switche in the pool table between tables.</p>
<p>It hasn't taken that long before we switched into the inline table detail view. I assume an equal behavior will be shown in other tables as well if they have a lot of entries.</p>
<p>For the switche from details tab to configuration tab takes around 1s and the other way around takes 2 seconds where the UI doesn't really response.<br />Through using CephADM pools as well there is a longer delay to wait on data, but the data is polled every 5 seconds anyway.<br />This seems to cause the problem that the pool that is build for details will update it's detail data because of the above polling.</p>
<p>There are multiple ways to address this:<br />1. Widen the poll time - downside the graphs won't update that often.<br />2. Show kv tables in a search able table with a default of 10 entries (only 10 or in this case 20 entries have to be drawn)<br />3. Reduce the amount of data shown and check if the data shown has changed. (Reduces lag if clicked on other tab because it first has to redraw the current table.)<br />4. Use detail data from a different source (only get data once from API when switching to the tab)<br />5. Include aspects of all above ways.</p> Dashboard - Bug #46303 (Resolved): mgr/dashboard: ExpressionChangedAfterItHasBeenCheckedError in ...https://tracker.ceph.com/issues/463032020-07-01T14:22:14ZStephan Müller
<p>ExpressionChangedAfterItHasBeenCheckedError in device selection modal in OSD creation form. It looks like it has something to do with the modal switch <a class="issue tracker-2 status-3 priority-4 priority-default closed child" title="Feature: mgr/dashboard: Use ng-bootstrap for Modal (Resolved)" href="https://tracker.ceph.com/issues/45759">#45759</a>.</p> Dashboard - Bug #46135 (Resolved): mgr/dashboard: Typeahead regression in the silence matcherhttps://tracker.ceph.com/issues/461352020-06-22T08:26:03ZStephan Müller
<p>This regression was introduced by PR #35300 which updated the typeahead module usage from ngx-bootstrap to ng-bootstrap's typeahead module.</p>
<p>The regression is that the typeahead didn't open on click into the<br />input field. Another regression is that the suggestions didn't overlap<br />the modal anymore.</p> Dashboard - Cleanup #45433 (Resolved): mgr/dashboard: Don't have two different unit test mechanicshttps://tracker.ceph.com/issues/454332020-05-07T15:13:20ZStephan Müller
<p>Use the <em>DEV</em> test method as default. To be able to do that our workaround needs to include a new statement. It has to set `testBedApi._instantiated` to false after every test.</p>
<p>This will look like the following in the end:</p>
<pre>
diff --git a/src/pybind/mgr/dashboard/frontend/src/testing/unit-test-helper.ts b/src/pybind/mgr/dashboard/frontend/src/testing/unit-test-helper.ts
index b7de47f303..e94c1a3df1 100644
--- a/src/pybind/mgr/dashboard/frontend/src/testing/unit-test-helper.ts
+++ b/src/pybind/mgr/dashboard/frontend/src/testing/unit-test-helper.ts
@@ -1,5 +1,5 @@
import { LOCALE_ID, TRANSLATIONS, TRANSLATIONS_FORMAT, Type } from '@angular/core';
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { ComponentFixture, getTestBed, TestBed } from '@angular/core/testing';
import { AbstractControl } from '@angular/forms';
import { By } from '@angular/platform-browser';
@@ -18,31 +18,28 @@ import {
AlertmanagerNotificationAlert,
PrometheusRule
} from '../app/shared/models/prometheus-alerts';
-import { _DEV_ } from '../unit-test-configuration';
import { CrushNode } from '../app/shared/models/crush-node';
import { CrushRule, CrushRuleConfig } from '../app/shared/models/crush-rule';
-export function configureTestBed(configuration: any, useOldMethod?: boolean) {
- if (_DEV_ && !useOldMethod) {
- const resetTestingModule = TestBed.resetTestingModule;
- beforeAll((done) =>
- (async () => {
- TestBed.resetTestingModule();
- TestBed.configureTestingModule(configuration);
- // prevent Angular from resetting testing module
- TestBed.resetTestingModule = () => TestBed;
- })()
- .then(done)
- .catch(done.fail)
- );
- afterAll(() => {
- TestBed.resetTestingModule = resetTestingModule;
- });
- } else {
- beforeEach(async(() => {
+export function configureTestBed(configuration: any) {
+ const testBedApi: any = getTestBed();
+ const resetTestingModule = TestBed.resetTestingModule;
+ beforeAll((done) =>
+ (async () => {
+ // prevent Angular from resetting testing module
+ TestBed.resetTestingModule = () => TestBed;
+ TestBed.resetTestingModule();
TestBed.configureTestingModule(configuration);
- }));
- }
+ })()
+ .then(done)
+ .catch(done.fail)
+ );
+ afterEach(() => {
+ testBedApi._instantiated = false;
+ });
+ afterAll(() => {
+ TestBed.resetTestingModule = resetTestingModule;
+ });
}
export class PermissionHelper {
</pre>
<p>This means to remove the unit test configuration and amending the documentation as well as the unit test script (And remove the usage of the second parameter).</p> Dashboard - Feature #45306 (New): mgr/dashboard: asynchronous back-end: Use HTTP2 or websocketshttps://tracker.ceph.com/issues/453062020-04-28T13:11:52ZStephan Müller
<p>In order to determine what we want to use in future. I will compare both HTTP2 and websockets.</p>
<p>First a bunch of information.</p>
<p>Currently we use the protocol HTTP1.1, which only allows one request per connection.</p>
<p>With HTTP2 and websockets it is possible to allow an unlimited amount of request per connection.</p>
<p>What does one request per connection mean? For example a client asks the server for a file, this will open a connection telling the server GET me something, the server will respond and close the connection. As our dashboard does not only consist of one file, a lot of connections are made. To meet the demand of any modern site of so many connections all modern browsers will do 8 connections simultaneously. On every connection also the same header is send.</p>
<p>What does unlimited amount of requests per connection mean? For example a client asks for a (whole) website. The client sends the first request like in HTTP1.1, the server responds with an HTTP1.1 Upgrade header, client and server negotiate which protocol to use (handshake). A connection is established and left open for requests. The client sends requests for multiple files while the server already responds with the files. This maxes out the established connection, as both participants can send at the same time (for example a video chat). As the connection is left open the server can PUSH data to the client even if he had not explicitly asked for (removes polling). To save data, only the headers during the handshake are send, they will not be send multiple times.</p>
<p>Whats the difference between HTTP2 (released as standard 2015) and websockets (released as standard 2011)?<br />Both only need one connection. Websockets can run insecure using port 80 and both can run secure using port 443. Websockets use a different URL prefix <strong>ws://</strong> for insecure connections or <strong>wss://</strong> for secure ones, HTTP2 uses only <strong>https://</strong> as prefix. If HTTP2 is used data will automatically be compressed and the handshake is easier to implement than with websockets.</p>
<p>Sure HTTP2 is the better one as the protocol is much newer, but can we use it with cherrypy?<br />Currently I only found a <a href="https://docs.cherrypy.org/en/latest/advanced.html#websocket-support" class="external">plugin</a> for cherrypy to allow websockets.<br />I've not found one for HTTP2 yet but I'm still collecting information.</p> Dashboard - Feature #44621 (Pending Backport): mgr/dashboard: Automatic preselection of failure d...https://tracker.ceph.com/issues/446212020-03-16T12:12:19ZStephan Müller
<p>Use the automatic preselection of the crush rule creation form inside the erasure code profile form to prevent wrong configured ec profiles which can't be used in the end.</p> Dashboard - Bug #44620 (Resolved): mgr/dashboard: Pool form max sizehttps://tracker.ceph.com/issues/446202020-03-16T12:07:27ZStephan Müller
<p>Currently the pool form max size is determined by "max_size" of the selected rule or the maximum amount of available OSDs. The amount can be wrong if the failure domain of the rule is not OSD.</p>
<p>I'm also currently not sure if "max_size" and "min_size" are useful values to show, at least pools created on a vstart cluster always show the same min and max size values. Please make that sure that those values can still be used safely.</p> Dashboard - Bug #44617 (New): mgr/dashboard: Some notifications are not shown in the notification...https://tracker.ceph.com/issues/446172020-03-16T10:02:31ZStephan Müller
<p>Some notifications are only popping up, but are not stored in the notifications table.<br />Observed the behavior for the erasure code profile creation and deletion as well for the crush rule creation and deletion.<br />It's possible that this affects also other pages.</p> Dashboard - Cleanup #44377 (Closed): mgr/dashboard: Removes fork join in pool formhttps://tracker.ceph.com/issues/443772020-03-02T14:54:31ZStephan Müller
<p>Should only use one request to get all info needed in pool form.</p> Dashboard - Cleanup #44371 (Closed): mgr/dashboard: Pool form refactoringhttps://tracker.ceph.com/issues/443712020-03-02T12:50:31ZStephan Müller
<ul>
<li>Fixes description path in ECP service</li>
<li>Removes unused ecp code</li>
<li>Changed info endpoints to use ui-api</li>
<li>Removed multi call through fork in pool form (only info is needed now)</li>
<li>General refactoring of component and it's tests</li>
<li>Don't show ECP actions during pool edit as all actions were disabled any way</li>
</ul> Dashboard - Bug #40330 (Resolved): mgr/dashboard: Warning about stale data makes it hard to click...https://tracker.ceph.com/issues/403302019-06-13T12:29:53ZStephan Müller
<p>Warning about Stale data in the datatable makes the content move up and down, making it hard to hit a certain row</p> Dashboard - Cleanup #25161 (Resolved): Every keystroke for the username in the RGW user form trig...https://tracker.ceph.com/issues/251612018-07-30T14:23:26ZStephan Müller
<p>Every keystroke for the username in the RGW user form triggers an API call, this should be minimized to at max 2 requests.</p>