Граф коммитов

1633 Коммитов

Автор SHA1 Сообщение Дата
Harrison Healey
2ebc8ec90f MM-20897 Add category muting (#16225)
* Make UpdateSidebarCategories return the original categories

* MM-20897 Add category muting

* Prevent muting the DMs category

* Fix muted state not being stored in the database

* Address feedback

* Address some feedback

* Fix unit tests

* MM-20897 Mute/unmute channels in the database in bulk

* Satisfy golangci-lint
2020-11-16 15:19:01 -05:00
Agniva De Sarker
c82c37a36e MM-28067: Optimize app server startup in tests (#16263)
* MM-28067: Optimize app server startup in tests

For every test, we would wipe out the database and then start
the server again. This would run through all the migrations
and create new rows in Systems and Roles table every time.
As a result, this was consuming a lot of setup time for every test.

We optimize this by preloading the DB with dummy data in the roles
and systems table so that the server code just skips over those migrations.
This is completely forward compatible and adding new migrations does not
need to generate the sql files again. Only in case of schema changes to the
roles or systems table, this would need to be done.

It is unlikely the Systems table schema will get changed. The Roles table
might change in future but it's a comparatively rare event. Given the reduction
in CI runtime we are seeing, it's a worthy optimization.

We also apply some more optimizations:
- Coalesce multiple UpdateConfig calls into a single one. Each UpdateConfig call
has to do a json marshal which would take precious CPU cycles. It's much more
efficient to do everything in a single call.
- Remove unnecessary debug.FreeOSMemory in reload config. This was an artifact
from old days and is no longer required.

Numbers:
Results show a full **2 minutes** shaved off the test runtime. Earlier, tests
would take around 16 minutes. Now they take 14 minutes.

```release-note
NONE
```

* fix app package
2020-11-16 13:55:32 +01:00
Farhan Munshi
c9a4a475d3 [MM-28717] Refactor applyMultiRoleFilters to use sq builder (#15500)
* Refactor apply multi role filters and add role filters to get all profiles

* Add some tests

* Fix tests

* Fix lint

* Trigger CI

* Rename param to make more sense

* Tie get filtered user stats to usermanagement read users

* Dont filter out other system roles when searching for team members or team admins only filter out system admins

* add new permissions

* add migration

* fix test

* remove system roles as default permissions

* implement changes discussed with dennis

* add read only and fix i18n

* use model consts instead of strings

* turn the permissions into pseudo constants

* Update read only default permissions

Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Co-authored-by: Hossein Ahmadian-Yazdi <hyazdi1997@gmail.com>
2020-11-13 10:57:57 -05:00
Agniva De Sarker
39b5b601f8 MM-30026: Use DB master when getting team members from a session (#16170)
* MM-30026: Use DB master when getting team members from a session

A race condition happens when the read-replica isn't updated yet
by the time a session expiry message reaches another node in the cluster.

Here is the sequence of events that can cause it:
- Server1 gets any request which has to wipe session cache.

- The SQL query is written to DB master, and a cluster message is propagated
to clear the session cache for that user.

- Now before the read-replica is updated with the master’s update,
the cluster message reaches Server2. The session cache is wiped out for that user.

- _Any random_ request for that user hits Server2. Does NOT have to be
the update team name request. The request does not find the value
in session cache, because it’s wiped off, and picks it up from the DB.
Surprise surprise, it gets the stale value. Sticks it into the cache.

By now, the read-replica is updated. But guess what, we aren’t going to
ask the DB anymore, because we have it in the cache. And the cache has the stale value.

We use a temporary approach for now by introducing a context in the DB calls so that
the useMaster information can be easily passed. And this has the added advantage of
reusing the same context for future DB calls in case it happens. And we can also
add more context keys as needed.

A proper approach needs some architectural changes. See the issue for more details.

```release-note
Fixed a bug where a session will hold on to a cached value
in an HA setup with read-replicas configured.
```

* incorporate review comments

Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
2020-11-10 10:43:45 +05:30
Eli Yukelzon
45e340b5be MM-29987 Implement new collapsed threads API (#16091) 2020-11-08 10:36:46 +02:00
Jesús Espino
b08b51d52d MM-30300: Add coalesce to get null content as empty string on FileInfo store (#16216)
* MM-30300: Add coalesce to get null content as empty string on FileInfo store

* Making explicit the fields get from the FileInfo table

* Addressing PR review comments
2020-11-06 12:49:15 +01:00
Choo Jia Le
ccf5916ef0 [MM-24337]: Fix the team and channel filtering UT to include empty team or channel (#15912)
* Fix the team and channel filtering UT to include empty team or channel

* Fix tests that were failing before this change

Once we've activated the team/channels filter tests for PostgreSQL
and MySQL there are some tests failing so this changes fixes them

* Disable team filtering tests for DBs by now

We have a discrepancy between DB search and ES/Bleve on how to filter
teams when you have users in both teams:

  - DB when filtering by one team and searching by another returns users that are in both teams
  - Bleve and ES returns empty

Co-authored-by: Mario de Frutos <mario@defrutos.org>
Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
2020-11-05 12:45:41 +01:00
Agniva De Sarker
66731e2740 MM-29980: Optimize profilesInChannels cache to fast path (#16116)
* MM-29980: Optimize profilesInChannels cache to fast path

We add one more message type to the fast path- profiles in channels. There
are 2 primary reasons for this:

- This is not really a new model type, but just a map of users. And users already use
the fast path. So we can get some more gains without really investing much more code.
- A more important reason is that with the upcoming striped mutex changes, we will get
a higher throughput at the cost of a bit more CPU utilization. The reason being that
since less amount of time will be spent in lock-contention, the CPU is free to do more
stuff. So this change is to counter that increase.

As usual, this gives much better performance than the original decoder.

Micro-benchmark results
```
name               old time/op    new time/op    delta
LRU/UserMap=new-8    16.6µs ± 3%     3.9µs ± 4%  -76.15%  (p=0.000 n=10+10)

name               old alloc/op   new alloc/op   delta
LRU/UserMap=new-8    4.78kB ± 0%    2.74kB ± 0%  -42.65%  (p=0.000 n=10+10)

name               old allocs/op  new allocs/op  delta
LRU/UserMap=new-8      38.0 ± 0%      30.0 ± 0%  -21.05%  (p=0.000 n=10+10)
```

https://mattermost.atlassian.net/browse/MM-29980

Here are some results from a load test. The comparison is done with a 2 node cluster; one running master
and one running with this patch so that it's easier to compare. The total users are 2000.

<See PR>

```release-note
NONE
```

* Fix gofmt

* Trigger CI
2020-11-04 10:08:10 +05:30
Jesús Espino
24621a22ed Add the content field to FileInfo (#15749)
* Add the content field to FileInfo

* Fixing the upgrade code

* Trying to fix the text-scheme

* Fixing test-schema

* Fixing test-schema

* Moving the migration to the next version
2020-11-02 15:43:48 +01:00
Ibrahim Serdar Acikgoz
9bff309dd0 storetest/team_store: fix flaky test for searching a short term (#16172)
Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
2020-10-31 12:13:28 +03:00
Ibrahim Serdar Acikgoz
71c371509b storetest/user_store: fix flaky test (#16095) 2020-10-30 20:09:28 +03:00
Eli Yukelzon
fe352ab57f MM-29703 Mark threads as read when channels are marked (#15994)
Co-authored-by: Jesús Espino <jespinog@gmail.com>
2020-10-30 17:00:21 +02:00
Carlos Tadeu Panato Junior
1729239385 upgrade DB to 5.29 (#16081) 2020-10-30 13:37:26 +01:00
Harrison Healey
8bb772638c MM-29067 Add deterministic IDs for default sidebar categories (#16030)
Automatic Merge
2020-10-29 10:24:01 -04:00
Alex Johnson
9cb704d537 Documents exported methods within SqlTeamStore methods (#15996)
Co-authored-by: Justine Geffen <justinegeffen@users.noreply.github.com>
2020-10-27 16:19:11 +01:00
Ibrahim Serdar Acikgoz
04ef5c682e storetest/reaction_store: add sleep before updating (#16060) 2020-10-27 13:02:25 +03:00
Claudio Costa
9484366784 Fix nil dereference panic in SearchArchivedInTeam (#16064)
Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
2020-10-26 15:19:14 +01:00
Rodrigo Villablanca
96f1739f8f UserStore migration (#15563)
* Migration completed

* Fix tests

* Fix tests

* Fix tests

* Suggestions

* Trigger CI

* Suggestions

* Merge with master

* Trigger CI

Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Co-authored-by: Agniva De Sarker <agnivade@yahoo.co.in>
2020-10-26 15:11:27 +05:30
Agniva De Sarker
d51d843fcd MM-22950: Remove supplier test (#16072)
This test is too flaky to be written as a test. Let's just remove it.

https://mattermost.atlassian.net/browse/MM-29950

```release-note
NONE
```
2020-10-26 13:21:24 +05:30
Martin Kraft
d519ab580f MM-28815: Message export query optimization. (#15757)
* MM-28815: Optimizes message export query.

* MM-28815: Removes DeleteAt WHERE condition.

* MM-28815: Adds Id to the ORDER BY clause.

* MM-28815: Concatenates the string to remove the confusing '%%' in the query.

* MM-28115: Remvoes secondary sorting.

* MM-28815: Keeps the alias in the order by.

* MM-28815: Removing forced index.

* MM-28815: Formatting.
2020-10-16 10:21:36 -04:00
Eli Yukelzon
8844141df3 MM-28249 Auto follow threads (#15878)
Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
2020-10-15 18:01:16 +03:00
Aayush Pal
fa9279a675 Added GoDoc for functions mentioned in Task 7 (#14004) team_store.go (#15762) 2020-10-14 12:53:48 +02:00
Jeremy MacArthur
71997eaac7 Adding godocs for the 4 functions listed: (#15806)
* Adding godocs for the 4 functions listed:

SqlTeamStore.UpdateLastTeamIconUpdate
SqlTeamStore.UpdateMembersRole
SqlTeamStore.UserBelongsToTeams
SqlTeamStore.GetTeamMembersForExport

* Apply suggestions from code review

Applying suggestions from the community to help clean up the grammar in the docs.

Co-authored-by: Justine Geffen <justinegeffen@users.noreply.github.com>

* Apply suggestions from code review part 2

Co-authored-by: Justine Geffen <justinegeffen@users.noreply.github.com>

Co-authored-by: Justine Geffen <justinegeffen@users.noreply.github.com>
Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
2020-10-08 13:42:55 +02:00
Ibrahim Serdar Acikgoz
c67c46a684 [MM-28810] channel_store_categories: check if object is nil after the query (#15635)
* check if onj is nil

* channel_store_categories: add tests

* reflect review comments

* remove store declaraation
2020-10-07 09:33:18 +03:00
Eli Yukelzon
375931a4b9 Post image schema fix (#15763) 2020-10-04 16:14:06 +03:00
Rodrigo Villablanca
bb4df5a68e ChannelStore migration Part 3 (#15504)
* Migration finished

* Change error var name

* Fix imports

* Fix tests

* Merge with master

* Doing some suggestions

* More suggestions

* Fix i18n

Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Co-authored-by: Agniva De Sarker <agnivade@yahoo.co.in>
2020-10-04 10:12:29 +05:30
Joshua Bezaleel Abednego
5353bceaea MM-24948: Command webhook store squirrel refactor (#14659)
Automatic Merge
2020-10-03 22:57:28 -04:00
Eli Yukelzon
b8ceb610e6 MM-27353 Mini image previews (#15376) 2020-10-02 11:14:57 +03:00
Eli Yukelzon
595248b10e MM-28247 Threads metadata table (#15571) 2020-10-01 18:48:38 +03:00
catalintomai
1c0d590c81 Add AWS Metering service support (#15290) 2020-09-28 11:43:08 -07:00
catalintomai
f74b86ae95 MM-28733 : Admin Advisor v2 (#15515) 2020-09-25 14:59:41 -07:00
Carlos Tadeu Panato Junior
c392f993d6 upgrade DB to 5.28 (#15556) 2020-09-24 18:44:31 +02:00
Rodrigo Villablanca
8118cac350 Poststore migration part3 (#15505)
* Migration completed

* Order in translations file

* Fix: lints

* Trigger CI

* Fix message key

* Change mlog.Error for mlog.Warn

* Fix imports

* Adding translations needed for EE

* Trigger CI

* Fix merge with master

Co-authored-by: Agniva De Sarker <agnivade@yahoo.co.in>
Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
2020-09-24 10:46:36 +05:30
Jaime Cepeda
f3cb2538a7 Refactor SQL queries in store/sqlstore/channel_member_history_store.go to use the squirrel builder (#15529) 2020-09-23 01:32:03 +02:00
Ibrahim Serdar Acikgoz
b0216053a1 [MM-28195] storetest/user_store: fix flaky test (#15543)
* storetest/user_store: fix flaky test

* reflect review comments
2020-09-22 11:28:12 +03:00
Eli Yukelzon
4e9ddd4686 MM-27918 In-Product notices support (#15316) 2020-09-21 10:28:46 +03:00
Miguel de la Cruz
1d2220141e [MM-26420] Adds wildcard support to Bleve (#14885) 2020-09-18 10:49:56 +02:00
Rodrigo Villablanca
1d4a7c0552 TeamStore migration part 2 (#15396)
* Migration completed

* Fix tests

* Reduce to one line

* Fix: change to plain error

* Fix imports

* Trigger CI

* Fix i18

* Fix merge with master

* Trigger CI
2020-09-16 21:54:39 -03:00
Rodrigo Villablanca
f0fc51244c TeamStore migration Part 3 (#15397)
* Migration completed

* TODO
2020-09-16 12:12:10 -03:00
Ibrahim Serdar Acikgoz
e69a2a41ca [MM-28210] sqlstore/user_store: filter deleted users for GetProfilesInChannel (#15390)
* sqlstore/user_store: filter deleted users for GetProfilesInChannel

* allow GetProfilesInChannel use userGetOptions

* sqlstore/user_store: add more test cases

* store/user_store: refine filter
2020-09-16 11:04:17 +03:00
Claudio Costa
9c272f0b20 [MM-26812] Add support for resumable file uploads (#15252)
* Implement AppendFile for FileBackend

* Split test into subtests

* [MM-26812] Add support for resumable file uploads (#15252)

* Implement UploadSession

* Implement UploadSessionStore

* Add error strings

* Implement resumable file uploads

* Add UploadType

* Fix retry layer tests

* Regenerate store layers

* Fix store error handling

* Use base for filename

* Prevent concurrent uploads on the same upload session

* Fix erroneus error string

* Improve error handling

Co-authored-by: Mattermod <mattermod@users.noreply.github.com>

* Fix translations

Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
2020-09-15 21:28:25 +02:00
Rodrigo Villablanca
9ee9c78412 ChannelStore migration Part 2 (#15405)
* Migration completed

* Several corrections in tests

* Fix imports

* Fix some errors after testing

* Trigger CI

* Fix tests

* Suggestions

* Suggestions

* Add license

Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
2020-09-15 23:18:30 +05:30
Claudio Costa
7abc4f5383 [MM-28033] Perform localcachelayer tests for one DB type only when in CI (#15433)
* Perform localcachelayer tests for one DB type only if in CI

* Add newStoreType() for sqlstore case
2020-09-15 15:05:13 +02:00
Ibrahim Serdar Acikgoz
9c2d2180e6 store/channel_store_categories: fix index out of bounds error (#15423) 2020-09-15 15:25:12 +03:00
Agniva De Sarker
42eca5315b MM-27957: Fix flaky test TestRecycleDBConns (#15415)
https://mattermost.atlassian.net/browse/MM-27957
2020-09-11 18:33:09 +05:30
Ayan Banerjee
748526cc4c [MM-23003] Document sql store 'SqlTeamStore' methods (Task 8) fixes (#15318)
Automatic Merge
2020-09-10 07:29:57 -04:00
Claudio Costa
4e1824e143 [MM-28397] Fix data race in SqlSupplier (#15419)
* Fix data race in SqlSupplier

* Add comment

Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
2020-09-10 09:57:00 +02:00
Doug Lauder
1b67322fb9 MM-27744 disable Zap for unit tests. (#15398)
MM-27744 disable Zap for unit tests.

Zap has no concept of shutdown or close. Zap is only shutdown when the app exits. Not a problem for console logging, but when creating a new Zap logger that outputs to files on every unit test, that leaves no easy way to clean up until process exit. Depending on what else is running this can exhaust all file handles and cause unit tests to fail.

Zap is now disabled unit tests and uses Logr instead, regardless of config settings. `make test-server` peak file handle usage dropped from ~5K to less than 100.
2020-09-09 15:25:55 -04:00
Agniva De Sarker
1fde5112b6 MM-28444: Optimize GetPostsSince in postgres (#15411)
GetPostsSince is used when loading posts for a channel.

An opportunity for optimization is that the primary SQL query
is repeated twice and then a UNION is constructed for the results.

```
SELECT
		       *
		FROM
		       Posts
		WHERE
		       UpdateAt > :Time AND ChannelId = :ChannelId
		       LIMIT 1000
```

But we can use a CTE for this which caches the results to be reused later.

This leads to the main query being executed once rather than twice. And from
Postgres 12 onwards, CTEs can be inlined which opens the door to further optimizations.

From the docs (https://www.postgresql.org/docs/10/queries-with.html)

> A useful property of WITH queries is that they are evaluated only once per
execution of the parent query, even if they are referred to more than once
by the parent query or sibling WITH queries. Thus, expensive calculations
that are needed in multiple places can be placed within a WITH query to avoid redundant work.
Another possible application is to prevent unwanted multiple evaluations of functions
with side-effects. However, the other side of this coin is that the optimizer is
less able to push restrictions from the parent query down into a WITH query than an ordinary subquery.

In our case, the caveat does not apply because we are only filtering columns and not rows,
so we can safely use it.

Following are the query plan comparisons:
Old: http://tatiyants.com/pev/#/plans/plan_1599394993105
New: http://tatiyants.com/pev/#/plans/plan_1599395970886

As we can see, in old bitmap index scan+heap scan happens twice, but in the new one,
it happens only once.

This has been load tested with a large dataset and confirmed to exhibit good improvements.
2020-09-09 21:22:54 +05:30
Agniva De Sarker
7116563ff3 MM-27953: Fix flaky test TestTeamStore//SearchPrivate (#15409)
We got hit by yet another random text search issue, but this was
on the more extreme end because this was a string of length 4 and still
it collided.

I am not sure if there is a fool proof solution to this than just
going for a larger string.

https://mattermost.atlassian.net/browse/MM-27953
2020-09-08 20:18:19 +05:30