Ben Schumacher
d0c4780eb1
[MM-28761] Fix errcheck linter issues in hosted_purchase_screening worker ( #30624 )
2025-04-29 08:57:52 +02:00
Ben Schumacher
5ee308bd83
[MM-61467] Fix errcheck linter issues in post_test.go ( #30686 )
2025-04-29 08:50:47 +02:00
Harrison Healey
210bdfcb72
MM-63056/MM-63058/MM-63049 Improve accessibility of Threads list ( #30816 )
...
* MM-63056 Add accessible name to Threads item menus
* MM-63058 Add accessible name to Threads mark as unread button
* MM-63049 Change Threads list to use tab pattern for filtering
* Revert accidentally added i18n string
2025-04-28 15:54:50 -04:00
Julien Tant
22ce9b606f
[MM-63802] Hide search team selector if user only member of one team ( #30791 )
...
Co-authored-by: Mattermost Build <build@mattermost.com >
2025-04-28 18:56:50 +00:00
Hosted Weblate
ca932e550d
Update translation files
...
Updated by "Cleanup translation files" hook in Weblate.
Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/
2025-04-28 17:26:29 +02:00
Frank Paul Silye
0b5a9ae21a
Translated using Weblate (Norwegian Bokmål)
...
Currently translated at 78.5% (4826 of 6144 strings)
Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/nb_NO/
2025-04-28 17:26:29 +02:00
master7
fe6ec462a8
Translated using Weblate (Polish)
...
Currently translated at 100.0% (6144 of 6144 strings)
Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/pl/
2025-04-28 17:26:29 +02:00
MArtin Johnson
655744e9a9
Translated using Weblate (Swedish)
...
Currently translated at 100.0% (6144 of 6144 strings)
Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/sv/
2025-04-28 17:26:29 +02:00
Tom De Moor
92e267e4ee
Translated using Weblate (Dutch)
...
Currently translated at 99.9% (6142 of 6144 strings)
Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/nl/
2025-04-28 17:26:29 +02:00
MArtin Johnson
d646bd980d
Translated using Weblate (Swedish)
...
Currently translated at 100.0% (2651 of 2651 strings)
Translation: Mattermost/server
Translate-URL: https://translate.mattermost.com/projects/mattermost/server/sv/
2025-04-28 17:26:29 +02:00
Tom De Moor
fa0b149e19
Translated using Weblate (Dutch)
...
Currently translated at 99.6% (2643 of 2651 strings)
Translation: Mattermost/server
Translate-URL: https://translate.mattermost.com/projects/mattermost/server/nl/
2025-04-28 17:26:29 +02:00
Frank Paul Silye
9a92294d74
Translated using Weblate (Norwegian Bokmål)
...
Currently translated at 78.4% (4823 of 6144 strings)
Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/nb_NO/
2025-04-28 17:26:29 +02:00
jprusch
2a5ce71284
Translated using Weblate (German)
...
Currently translated at 100.0% (6144 of 6144 strings)
Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/de/
2025-04-28 17:26:29 +02:00
jprusch
99a6c8ef5a
Translated using Weblate (German)
...
Currently translated at 100.0% (2651 of 2651 strings)
Translation: Mattermost/server
Translate-URL: https://translate.mattermost.com/projects/mattermost/server/de/
2025-04-28 17:26:29 +02:00
Frank Paul Silye
e8544246d4
Translated using Weblate (Norwegian Bokmål)
...
Currently translated at 78.1% (4803 of 6144 strings)
Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/nb_NO/
2025-04-28 17:26:29 +02:00
ThrRip
3e8d80aca9
Translated using Weblate (Chinese (Simplified Han script))
...
Currently translated at 100.0% (6144 of 6144 strings)
Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/zh_Hans/
2025-04-28 17:26:29 +02:00
ThrRip
608ca11389
Translated using Weblate (Chinese (Simplified Han script))
...
Currently translated at 100.0% (2651 of 2651 strings)
Translation: Mattermost/server
Translate-URL: https://translate.mattermost.com/projects/mattermost/server/zh_Hans/
2025-04-28 17:26:29 +02:00
Frank Paul Silye
be98a5f946
Translated using Weblate (Norwegian Bokmål)
...
Currently translated at 78.0% (4796 of 6144 strings)
Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/nb_NO/
2025-04-28 17:26:29 +02:00
Benjamin Danon
2bf3d6690b
Translated using Weblate (French)
...
Currently translated at 81.6% (5014 of 6144 strings)
Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/fr/
2025-04-28 17:26:29 +02:00
Matthew Williams
4f0dfd9a1d
Translated using Weblate (English (Australia))
...
Currently translated at 100.0% (6144 of 6144 strings)
Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/en_AU/
2025-04-28 17:26:29 +02:00
master7
bed64d2336
Translated using Weblate (Polish)
...
Currently translated at 100.0% (2651 of 2651 strings)
Translation: Mattermost/server
Translate-URL: https://translate.mattermost.com/projects/mattermost/server/pl/
2025-04-28 17:26:29 +02:00
Matthew Williams
cdc46023b5
Translated using Weblate (English (Australia))
...
Currently translated at 100.0% (2651 of 2651 strings)
Translation: Mattermost/server
Translate-URL: https://translate.mattermost.com/projects/mattermost/server/en_AU/
2025-04-28 17:26:29 +02:00
Frank Paul Silye
21d9bee299
Translated using Weblate (Norwegian Bokmål)
...
Currently translated at 78.0% (4794 of 6144 strings)
Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/nb_NO/
2025-04-28 17:26:29 +02:00
master7
279a220cc4
Translated using Weblate (Polish)
...
Currently translated at 100.0% (6144 of 6144 strings)
Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/pl/
2025-04-28 17:26:29 +02:00
Serhii Khomiuk
7751ebfbdf
Translated using Weblate (Ukrainian)
...
Currently translated at 100.0% (6144 of 6144 strings)
Translation: Mattermost/webapp
Translate-URL: https://translate.mattermost.com/projects/mattermost/webapp/uk/
2025-04-28 17:26:29 +02:00
Serhii Khomiuk
dafc50f49a
Translated using Weblate (Ukrainian)
...
Currently translated at 100.0% (2651 of 2651 strings)
Translation: Mattermost/server
Translate-URL: https://translate.mattermost.com/projects/mattermost/server/uk/
2025-04-28 17:26:29 +02:00
David Krauser
94dcd9f311
Upgrade logr to v2.0.22 ( #30827 )
2025-04-28 10:20:42 -04:00
Agniva De Sarker
efde5e2717
[AI assisted] MM-62755: Refactor scanning to map to a util ( #30780 )
...
With some neat generics, I was able to refactor
the scanning to a util function. I used it to
refactor 3 places and also removed an unnecessary method.
Claude was quite good here.
https://mattermost.atlassian.net/browse/MM-62755
```release-note
NONE
```
2025-04-28 19:21:12 +05:30
Ben Schumacher
cd5523f5fb
MM-29092 Fix error handling in auto_environment.go ( #30610 )
...
Co-authored-by: Claude <noreply@anthropic.com >
Co-authored-by: Caleb Roseland <caleb@calebroseland.com >
2025-04-28 15:05:31 +02:00
Ben Schumacher
eea39a5f23
[MM-61087] Fix errcheck linter issues in channels/jobs/helper_test.go ( #30643 )
...
Co-authored-by: Claude <noreply@anthropic.com >
2025-04-28 15:02:10 +02:00
Ben Schumacher
6a228877b7
[MM-28762] Fix errcheck issues in jobs.go ( #30708 )
...
Co-authored-by: Claude <noreply@anthropic.com >
2025-04-28 14:57:40 +02:00
Ben Schumacher
6fc60c8e5f
[MM-61105] Fix errcheck linter errors in config_test.go ( #30689 )
2025-04-28 14:53:45 +02:00
Matthew Birtch
34fb9adbc2
MM-63800 Add label tag for create account checkbox ( #30799 )
...
* added proper label tag for checkbox
* fix linting issues
* updated cursor on checkbox label
* remove uneccessary class on span
* resolve lint error
* Update screenshots
---------
Co-authored-by: yasserfaraazkhan <attitude3cena.yf@gmail.com >
2025-04-25 12:35:25 -04:00
Harrison Healey
80b61ad79b
MM-61611 Fix layout of emoji picker in mobile view ( #30747 )
...
* Stop emoji picker header from overlapping tabs
* Move emoji picker header above tabs
There was also some stuff I could remove because the header will always
be visible.
* Don't scroll the emoji picker on hover
* MM-61611 Fix emoji picker tabs being covered in mobile view
* Improve layout of emoji picker and gif picker
A lot of the emoji picker was explicitly sized before which made it
difficult to make everything responsive in mobile view. Making the emoji
picker layout into a flexbox fixed that, but due to the way that it's
nested, that was a bit tricky, and it required a couple tricks:
1. The AutoSizer doesn't work if it's placed inside a flexbox container,
but you can fix that by putting a div with position: relative in
between it and the flexbox parent. That was already the case, but I
accidentally removed it while trying to sort out the seemingly
excessive nesting.
2. Children of flexbox elements will cause the parent to expand if they
don't have min-height/min-width set. That's because the default
value for those is 0 outside of flexbox, but it's auto inside of one.
This breaks the layout and animation of the skin tone selector in the
emoji picker, but that has issues on master as well, so it'll be
addressed in the next commit.
* Improve and fix opening animation for skin tone selector
While this looked worse before in mobile view, it had some weirdness in
desktop as well. I ended up rewriting the way that that animation worked
so that I could position it correctly in both mobile (where it doesn't
cover the input) and desktop (where it does).
Notably, that change required:
1. Changing the skin tone selector to wait until its contents are hidden
to unmount them so that the position and size could be calculated
correctly.
2. Removed the flexbox from the search row and used a margin to make the
skin tone button pretend to offset the input. That let us smoothy
expand the selector over the input without having the input resize
behind it.
* Update CSS for positioning emojis and headings in emoji picker
2025-04-25 19:28:31 +03:00
Jesse Hallam
291d5a2ba7
fix missing newline in upgrader.go ( #30853 )
2025-04-25 11:21:37 -03:00
Daniel Espino García
71334c6d8b
Report a problem ( #30444 )
...
* Add report a problem type and allow logs config
* Improve device type logic
* Add tests and minor fixes
* Add texts
* Fix tests by avoiding circular dependencies
* Fix test
* Fix useexternallink updating mailtos, and changing the content of query parameters
* Fix texts
* Fix e2e test
* Fix tsc
---------
Co-authored-by: Mattermost Build <build@mattermost.com >
2025-04-25 11:08:39 +02:00
Agniva De Sarker
29f7c895b8
MM-63878: Fix INSERT IGNORE in saveChannelT ( #30850 )
...
INSERT IGNORE will ignore ALL errors in the INSERT statement.
This is not what was intended. The right way is to do a
redundant update on duplicate key.
It's not great, but that's how MySQL wants us to do it.
https://mattermost.atlassian.net/browse/MM-63878
```release-note
NONE
```
2025-04-24 21:29:09 +05:30
Arya Khochare
faf68a6d86
MM-56630 Scroll Fix of center panel ( #30144 )
...
* pageup/pagedown button scroll for center post-list
* revert package.json
* changing id, using ? and returning in keyHandler
* added e2e test for pageup/pagedown scroll
* Fix dynamic-virtualized-list not being in lockfile and update path
Moving the package under the MM namespace wasn't necessary, but it stops
some warnings from NPM.
* Move E2E test from Cypress to Playwright
Cypress's cy.type doesn't seem to properly trigger browser functions
because it doesn't seem to use native keyboard events. A newer version
of Cypress has a new cy.press method which is supposed to use native
keyboard events, but it also only supports the tab key currently, so it
wouldn't be useful here.
* Fix new test on iPad
* Add page up/down support to RHS and Threads view
* Update type definitions for dynamic-virtualized-list
---------
Co-authored-by: Harrison Healey <harrisonmhealey@gmail.com >
2025-04-24 11:15:40 -04:00
Pablo Vélez
89319cafb1
Mm 61590 - trap focus in modals ( #30622 )
...
* MM-61590 - trap focus in modals
* Adjust focus trap for dynamic loading elements and multi modal support
* add tests and improve code in generic modal
* fix snapshot
---------
Co-authored-by: Mattermost Build <build@mattermost.com >
2025-04-24 11:46:36 +02:00
Agniva De Sarker
131cf039bb
MM-63756: Added index to sidebarchannels table ( #30724 )
...
The (s SqlChannelStore) getSidebarCategoriesT gets called quite frequently.
- Team switch
- WS reconnect
- Category created
- Category updated
- Category deleted
Of these 1 and 2 are probably the most commonly called sources. Based on that,
the sidebarChannels table is not that well-optimized. Even though
the query time might be reasonable, without an index, it has to churn a lot of
DB CPU for a sequential scan.
We add a new index to optimize this.
CREATE INDEX idx_sidebarchannels_categoryid ON sidebarchannels(categoryid);
```
Before:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Sort (cost=40854.18..40854.19 rows=4 width=193) (actual time=251.635..251.646 rows=204 loops=1)
Sort Key: sidebarcategories.sortorder, sidebarchannels.sortorder
Sort Method: quicksort Memory: 65kB
Buffers: shared hit=1203 read=23668
-> Nested Loop (cost=8.87..40854.14 rows=4 width=193) (actual time=251.345..251.455 rows=204 loops=1)
Buffers: shared hit=1203 read=23668
-> Nested Loop (cost=0.41..9.47 rows=1 width=54) (actual time=0.068..0.074 rows=1 loops=1)
Buffers: shared hit=5
-> Seq Scan on teams (cost=0.00..1.03 rows=1 width=27) (actual time=0.024..0.026 rows=1 loops=1)
Filter: (((id)::text = '3ee5y5ok6jgxicrmqstdnghmfr'::text) AND (deleteat = 0))
Rows Removed by Filter: 1
Buffers: shared hit=1
-> Index Scan using teammembers_pkey on teammembers (cost=0.41..8.43 rows=1 width=27) (actual time=0.039..0.043 rows=1 loops=1)
Index Cond: (((teamid)::text = '3ee5y5ok6jgxicrmqstdnghmfr'::text) AND ((userid)::text = 'tc3p1yqw67d8idcp3g98awexqe'::text))
Filter: (deleteat = 0)
Buffers: shared hit=4
-> Hash Right Join (cost=8.45..40844.62 rows=4 width=193) (actual time=251.274..251.361 rows=204 loops=1)
Hash Cond: ((sidebarchannels.categoryid)::text = (sidebarcategories.id)::text)
Buffers: shared hit=1198 read=23668
-> Seq Scan on sidebarchannels (cost=0.00..37514.77 rows=1265277 width=100) (actual time=0.043..99.345 rows=1265444 loops=1)
Buffers: shared hit=1194 read=23668
-> Hash (cost=8.44..8.44 rows=1 width=158) (actual time=0.047..0.047 rows=6 loops=1)
Buckets: 1024 Batches: 1 Memory Usage: 10kB
Buffers: shared hit=4
-> Index Scan using idx_sidebarcategories_userid_teamid on sidebarcategories (cost=0.42..8.44 rows=1 width=158) (actual time=0.029..0.037 rows=6 loops=1)
Index Cond: (((userid)::text = 'tc3p1yqw67d8idcp3g98awexqe'::text) AND ((teamid)::text = '3ee5y5ok6jgxicrmqstdnghmfr'::text))
Buffers: shared hit=4
Planning:
Buffers: shared hit=9
Planning Time: 1.215 ms
Execution Time: 251.755 ms
(31 rows)
After:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Sort (cost=1544.53..1544.54 rows=4 width=192) (actual time=0.834..0.859 rows=204 loops=1)
Sort Key: sidebarcategories.sortorder, sidebarchannels.sortorder
Sort Method: quicksort Memory: 65kB
Buffers: shared hit=58
-> Nested Loop Left Join (cost=8.53..1544.49 rows=4 width=192) (actual time=0.066..0.252 rows=204 loops=1)
Buffers: shared hit=58
-> Nested Loop (cost=0.83..17.93 rows=1 width=157) (actual time=0.042..0.098 rows=6 loops=1)
Buffers: shared hit=34
-> Nested Loop (cost=0.42..9.48 rows=1 width=157) (actual time=0.030..0.049 rows=6 loops=1)
Buffers: shared hit=10
-> Index Scan using idx_sidebarcategories_userid_teamid on sidebarcategories (cost=0.42..8.44 rows=1 width=157) (actual time=0.018..0.022 rows=6 loops=1)
Index Cond: (((userid)::text = 'tc3p1yqw67d8idcp3g98awexqe'::text) AND ((teamid)::text = '3ee5y5ok6jgxicrmqstdnghmfr'::text))
Buffers: shared hit=4
-> Seq Scan on teams (cost=0.00..1.03 rows=1 width=27) (actual time=0.002..0.003 rows=1 loops=6)
Filter: (((id)::text = '3ee5y5ok6jgxicrmqstdnghmfr'::text) AND (deleteat = 0))
Rows Removed by Filter: 1
Buffers: shared hit=6
-> Index Scan using teammembers_pkey on teammembers (cost=0.41..8.43 rows=1 width=27) (actual time=0.007..0.007 rows=1 loops=6)
Index Cond: (((teamid)::text = '3ee5y5ok6jgxicrmqstdnghmfr'::text) AND ((userid)::text = 'tc3p1yqw67d8idcp3g98awexqe'::text))
Filter: (deleteat = 0)
Buffers: shared hit=24
-> Bitmap Heap Scan on sidebarchannels (cost=7.69..1522.35 rows=421 width=100) (actual time=0.012..0.017 rows=34 loops=6)
Recheck Cond: ((categoryid)::text = (sidebarcategories.id)::text)
Heap Blocks: exact=6
Buffers: shared hit=24
-> Bitmap Index Scan on idx_sidebarchannels_categoryid (cost=0.00..7.58 rows=421 width=0) (actual time=0.010..0.010 rows=34 loops=6)
Index Cond: ((categoryid)::text = (sidebarcategories.id)::text)
Buffers: shared hit=18
Planning:
Buffers: shared hit=18
Planning Time: 0.543 ms
Execution Time: 0.968 ms
(32 rows)
```
I have also looked at potentially re-ordering the JOINs to make
sidebarchannels and sidebarcategories JOIN earlier, but that didn't give
a major benefit.
Also looked at adding a compound index with (categoryid, sortorder) to improve
sorting performance, but that didn't give a major benefit from what the single
column index already gives.
The `completePopulatingCategoryChannelsT` query also partially benefits
from this. But the Postgres optimizer sometimes selects the index on categoryId
and sometimes on ChannelId, both giving equivalent performance. So there's no major
improvement there, but at the same time, no regression as well.
```
Original:
[bigdb] # EXPLAIN (ANALYZE, BUFFERS) SELECT Id FROM ChannelMembers LEFT JOIN Channels ON Channels.Id=ChannelMembers.ChannelId WHERE (ChannelMembers.UserId = 'tc3p1yqw67d8idcp3g98awexqe' AND Channels.Type IN ('D'
,'G') AND Channels.DeleteAt = 0 AND NOT EXISTS ( SELECT 1 FROM SidebarChannels JOIN SidebarCategories on SidebarChannels.CategoryId=SidebarCategories.Id WHERE (SidebarChannels.ChannelId = ChannelMembers.ChannelI
d AND SidebarCategories.UserId = 'tc3p1yqw67d8idcp3g98awexqe' AND SidebarCategories.TeamId = '3ee5y5ok6jgxicrmqstdnghmfr') )) ORDER BY DisplayName ASC;
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Sort (cost=5864.68..5865.84 rows=463 width=40) (actual time=9.008..9.022 rows=39 loops=1)
Sort Key: channels.displayname
Sort Method: quicksort Memory: 27kB
Buffers: shared hit=2112
-> Nested Loop Anti Join (cost=1.96..5844.18 rows=463 width=40) (actual time=0.188..8.932 rows=39 loops=1)
Buffers: shared hit=2112
-> Nested Loop (cost=0.99..3476.66 rows=463 width=67) (actual time=0.159..7.952 rows=39 loops=1)
Buffers: shared hit=1956
-> Index Only Scan using idx_channelmembers_user_id_channel_id_last_viewed_at on channelmembers (cost=0.56..40.78 rows=470 width=27) (actual time=0.036..0.467 rows=437 loops=1)
Index Cond: (userid = 'tc3p1yqw67d8idcp3g98awexqe'::text)
Heap Fetches: 45
Buffers: shared hit=208
-> Memoize (cost=0.43..7.69 rows=1 width=40) (actual time=0.016..0.016 rows=0 loops=437)
Cache Key: channelmembers.channelid
Cache Mode: logical
Hits: 0 Misses: 437 Evictions: 0 Overflows: 0 Memory Usage: 42kB
Buffers: shared hit=1748
-> Index Scan using channels_pkey on channels (cost=0.42..7.68 rows=1 width=40) (actual time=0.015..0.015 rows=0 loops=437)
Index Cond: ((id)::text = (channelmembers.channelid)::text)
Filter: ((type = ANY ('{D,G}'::channel_type[])) AND (deleteat = 0))
Rows Removed by Filter: 1
Buffers: shared hit=1748
-> Nested Loop (cost=0.97..5.10 rows=1 width=27) (actual time=0.023..0.023 rows=0 loops=39)
Buffers: shared hit=156
-> Index Only Scan using sidebarchannels_pkey on sidebarchannels (cost=0.55..4.56 rows=1 width=92) (actual time=0.022..0.022 rows=0 loops=39)
Index Cond: (channelid = (channelmembers.channelid)::text)
Heap Fetches: 0
Buffers: shared hit=156
-> Index Scan using sidebarcategories_pkey on sidebarcategories (cost=0.42..0.48 rows=1 width=65) (never executed)
Index Cond: ((id)::text = (sidebarchannels.categoryid)::text)
Filter: (((userid)::text = 'tc3p1yqw67d8idcp3g98awexqe'::text) AND ((teamid)::text = '3ee5y5ok6jgxicrmqstdnghmfr'::text))
Planning:
Buffers: shared hit=48 dirtied=1
Planning Time: 2.222 ms
Execution Time: 9.142 ms
(35 rows)
New:
[bigdb] # EXPLAIN (ANALYZE, BUFFERS) SELECT Id FROM ChannelMembers LEFT JOIN Channels ON Channels.Id=ChannelMembers.ChannelId WHERE (ChannelMembers.UserId = 'tc3p1yqw67d8idcp3g98awexqe' AND Channels.Type IN ('D'
,'G') AND Channels.DeleteAt = 0 AND NOT EXISTS ( SELECT 1 FROM SidebarChannels JOIN SidebarCategories on SidebarChannels.CategoryId=SidebarCategories.Id WHERE (SidebarChannels.ChannelId = ChannelMembers.ChannelId AND SidebarCategories.UserId = 'tc3p1yqw67d8idcp3g98awexqe' AND SidebarCategories.TeamId = '3ee5y5ok6jgxicrmqstdnghmfr') )) ORDER BY DisplayName ASC;
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Sort (cost=5059.95..5061.11 rows=463 width=40) (actual time=12.072..12.086 rows=39 loops=1)
Sort Key: channels.displayname
Sort Method: quicksort Memory: 27kB
Buffers: shared hit=1984
-> Nested Loop Anti Join (cost=9.10..5039.45 rows=463 width=40) (actual time=0.751..12.009 rows=39 loops=1)
Join Filter: ((sidebarchannels.channelid)::text = (channelmembers.channelid)::text)
Rows Removed by Join Filter: 7839
Buffers: shared hit=1984
-> Nested Loop (cost=0.99..3476.66 rows=463 width=67) (actual time=0.161..7.579 rows=39 loops=1)
Buffers: shared hit=1956
-> Index Only Scan using idx_channelmembers_user_id_channel_id_last_viewed_at on channelmembers (cost=0.56..40.78 rows=470 width=27) (actual time=0.036..0.449 rows=437 loops=1)
Index Cond: (userid = 'tc3p1yqw67d8idcp3g98awexqe'::text)
Heap Fetches: 45
Buffers: shared hit=208
-> Memoize (cost=0.43..7.69 rows=1 width=40) (actual time=0.016..0.016 rows=0 loops=437)
Cache Key: channelmembers.channelid
Cache Mode: logical
Hits: 0 Misses: 437 Evictions: 0 Overflows: 0 Memory Usage: 42kB
Buffers: shared hit=1748
-> Index Scan using channels_pkey on channels (cost=0.42..7.68 rows=1 width=40) (actual time=0.014..0.014 rows=0 loops=437)
Index Cond: ((id)::text = (channelmembers.channelid)::text)
Filter: ((type = ANY ('{D,G}'::channel_type[])) AND (deleteat = 0))
Rows Removed by Filter: 1
Buffers: shared hit=1748
-> Materialize (cost=8.11..1535.03 rows=4 width=27) (actual time=0.003..0.046 rows=201 loops=39)
Buffers: shared hit=28
-> Nested Loop (cost=8.11..1535.01 rows=4 width=27) (actual time=0.099..0.383 rows=201 loops=1)
Buffers: shared hit=28
-> Index Scan using idx_sidebarcategories_userid_teamid on sidebarcategories (cost=0.42..8.44 rows=1 width=65) (actual time=0.047..0.057 rows=6 loops=1)
Index Cond: (((userid)::text = 'tc3p1yqw67d8idcp3g98awexqe'::text) AND ((teamid)::text = '3ee5y5ok6jgxicrmqstdnghmfr'::text))
Buffers: shared hit=4
-> Bitmap Heap Scan on sidebarchannels (cost=7.69..1522.35 rows=421 width=92) (actual time=0.028..0.040 rows=34 loops=6)
Recheck Cond: ((categoryid)::text = (sidebarcategories.id)::text)
Heap Blocks: exact=6
Buffers: shared hit=24
-> Bitmap Index Scan on idx_sidebarchannels_categoryid (cost=0.00..7.58 rows=421 width=0) (actual time=0.023..0.023 rows=34 loops=6)
Index Cond: ((categoryid)::text = (sidebarcategories.id)::text)
Buffers: shared hit=18
Planning:
Buffers: shared hit=51
Planning Time: 2.240 ms
Execution Time: 12.210 ms
(42 rows)
```
Analysis on MySQL for completion:
```
Before:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| -> Sort: SidebarCategories.SortOrder, SidebarChannels.SortOrder (actual time=277.675..277.675 rows=4 loops=1)
-> Stream results (cost=138558.36 rows=1287808) (actual time=242.506..277.650 rows=4 loops=1)
-> Left hash join (<hash>(SidebarChannels.CategoryId)=<hash>(SidebarCategories.Id)), extra conditions: (SidebarChannels.CategoryId = SidebarCategories.Id) (cost=138558.36 rows=1287808) (actual time=242.498..277.626 rows=4 loops=1)
-> Index lookup on SidebarCategories using idx_sidebarcategories_userid_teamid (UserId='qdggj9pyobgkjpj8htwzizks1r', TeamId='xmh7bupzajnudqf3h4mm76qapy') (cost=1.40 rows=4) (actual time=0.092..0.094 rows=4 loops=1)
-> Hash
-> Table scan on SidebarChannels (cost=8394.55 rows=321952) (actual time=0.123..106.334 rows=300002 loops=1)
|
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
After:
----------------------------------------------------------------+
| -> Sort: SidebarCategories.SortOrder, SidebarChannels.SortOrder (actual time=0.739..0.742 rows=4 loops=1)
-> Stream results (cost=6.80 rows=7) (actual time=0.468..0.703 rows=4 loops=1)
-> Nested loop left join (cost=6.80 rows=7) (actual time=0.456..0.673 rows=4 loops=1)
-> Index lookup on SidebarCategories using idx_sidebarcategories_userid_teamid (UserId='qdggj9pyobgkjpj8htwzizks1r', TeamId='xmh7bupzajnudqf3h4mm76qapy') (cost=4.38 rows=4) (actual time=0.302..0.313 rows=4 loops=1)
-> Index lookup on SidebarChannels using idx_sidebarchannels_categoryid (CategoryId=SidebarCategories.Id) (cost=0.48 rows=2) (actual time=0.085..0.087 rows=0 loops=4)
|
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
```
Timing wise, it takes around 2s to add the index on a table with 1.2M rows
for Postgres. And it takes around 5s on MySQL on a table with 300K rows.
It looks like it takes longer on MySQL, but since both migrations are
non-locking, it should be fine.
https://mattermost.atlassian.net/browse/MM-63756
```release-note
NONE
```
2025-04-24 12:11:28 +05:30
Jesse Hallam
011f179831
avoid SELECT * in preference store ( #30835 )
2025-04-23 15:06:04 -04:00
Agniva De Sarker
271d928e87
MM-63467: Refactor constLabels to a common initializer ( #30779 )
...
This is useful to avoid mistakes while adding new metrics.
https://mattermost.atlassian.net/browse/MM-63467
```release-note
NONE
```
Co-authored-by: Mattermost Build <build@mattermost.com >
2025-04-23 21:59:51 +05:30
Pablo Vélez
6ae0efd285
MM61173 - settings modal base creation ( #30338 )
...
* MM-61173 - channel settings modal: base modal, initial commit, file creation and base component
* new enhancements to the base modal creation
* revert changes on textbox_links and edit channel header
* fix types and add back unintentioned deleted value
* add the preview textbox component
* extract logic for info tab into its own component
* add the purpose input to the window
* move other component logic to its own component and code clean up
* ability to update channel type
* more advances on the archive channel tab
* fix unit test in textbox
* fix translations
* do not show the archive modal in default channel
* fix issue with url editor not being resetted on undo action
* adjust text and styling for the header and purpose inputs
* remove textboxlinks and use button eye icon
* adjust test and preview button style
* add unit test to channel patch
* move logic from parent modal to info tab component
* fix border issues and focus back to preview textareas
* prevent saving changes when pressing enter when selecting an icon
* enhance input component to cover limits validations and enhances tests
* set default error message for save changes panel
* add props to provide custom value to the buttons
* remove channel input errors on reset button click
* create new component settings textbox
* rename component to advanced textbox and add unit tests
* styling of the info tab and add error state to advanced textbox
* add logic to prevent tab switch with unsaved changes
* adjust url error logic and code clean up
* code clean up and enhance comments
* add char min length to advanced textbox logic
* add the channel settings modal to the new menu
* add new test files and fix reset error
* remove unused error variables
* adjust translations and remove unncesary import
* enhance permissions for archive channels and manage channel settings
* Adjust permission tree so channel admins can convert from private to public
* enhance the test suit around channel conversion type
* fix some e2e tests and solve channel input name issue
* fix unit test by interacting first with the input element
* adjust e2e tests to channel settings modal changes
* remove commented tests and implement pr feedback
* adjust more pr feedback to the code
* more pr feedback enhancements
* further enhancements to tab navigation, and adjust more e2e tests
* remove unused components and fix e2e tests
* revert unnecessary permissions changes
* Add name label to textboxes
* adjust e2e and unit tests
* revert min lenght change value and adjust tests and snapshots
* Channel banner settings (#30721 )
* Added channel banner setting header
* Updated section styling
* handled animation
* handled min and max lengths
* cleanup
* color change fix
* general improvements
* Fixed API test
* removed unused param className
* added e2e tests
* test: add channel settings configuration tab test file
* Based on the context, here's a concise commit message for this change:
feat: Add comprehensive tests for ChannelSettingsConfigurationTab
* added some more tests
* CI
* reverted package-lock.json changes in Playwright
* remove extra border from advaced textbox
* adjust styling for name label in advance texbox and restart preview state on modal close
* sync package.lock in playwright
---------
Co-authored-by: Mattermost Build <build@mattermost.com >
Co-authored-by: Harshil Sharma <harshilsharma63@gmail.com >
Co-authored-by: Harshil Sharma <18575143+harshilsharma63@users.noreply.github.com >
2025-04-23 12:49:54 +02:00
Amy Blais
f0dfe1c49f
Updated minimum supported Edge, Chrome and Firefox versions ( #30825 )
...
Automatic Merge
2025-04-23 11:42:43 +03:00
Jesse Hallam
f6aeca7e50
avoid SELECT * in jobs store ( #30832 )
2025-04-23 12:11:09 +05:30
Jesse Hallam
3c9b2511bc
avoid SELECT * in audit store ( #30829 )
2025-04-23 08:37:06 +02:00
M-ZubairAhmed
e9c54bf88e
[MM-63685] Virtualize drafts in the drafts list ( #30563 )
2025-04-23 11:38:04 +05:30
Julien Tant
282f0769e5
[MM-62517] Improve cross team search UI ( #30698 )
...
Co-authored-by: Mattermost Build <build@mattermost.com >
2025-04-22 23:36:45 +00:00
Jesse Hallam
94bc32b50c
avoid SELECT * in cluster discovery store ( #30830 )
2025-04-23 05:08:43 +08:00
Jesse Hallam
b095ba22b8
avoid SELECT * in notify admin store ( #30834 )
2025-04-22 17:27:33 -03:00