Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rebase postgres branch on master #2398

Open
wants to merge 341 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
341 commits
Select commit Hold shift + click to select a range
8809241
JAMES-2586 - Postgres Mailbox DAO - Fix rename deadlock
chibenwa Dec 1, 2023
44de094
JAMES-2586 - Postgres MailboxAnnotation DAO - Fix null pointer
vttranlina Dec 4, 2023
08d0567
JAMES-2586 - Introduce PostgresMailboxSessionMapperFactoryTODO and us…
vttranlina Nov 30, 2023
a965036
JAMES-2586 Guide binding Postgres Message/Mailbox mapper
vttranlina Nov 30, 2023
9a23da7
JAMES-2586 Fix Postgres Mailbox Annotation mpt imap test
Dec 4, 2023
c83f9fc
JAMES-2586 Rework ConnectionThreadSafetyTest -> PostgresExecutorThrea…
quantranhong1999 Dec 5, 2023
2f70847
JAMES-2586 PostgresExecutor: Retry upon PreparedStatement conflicts
quantranhong1999 Dec 5, 2023
bb28f39
JAMES-2586 PostgresExecutor: Retry only upon PreparedStatement confli…
quantranhong1999 Dec 5, 2023
49f61c7
JAMES-2586 Implement PostgresPerUserMaxQuotaManager (#1839)
hungphan227 Dec 6, 2023
5d6e0f4
JAMES-2586 [PGSQL] Initialization to configure users repository
vttranlina Dec 5, 2023
83967a6
JAMES-2586 Enable ACL support for PG
chibenwa Dec 5, 2023
de9c9ad
JAMES-2586 Remove unused class MessageUtils.java
chibenwa Dec 5, 2023
52b322a
JAMES-2586 Remove unused method in MessageManager
chibenwa Dec 5, 2023
1c6a3a1
JAMES-2586 Enable UniqueID support for PostgresMailboxManager
chibenwa Dec 5, 2023
3014ce5
JAMES-2586 Enable PostgresMailboxManager annotation tests
chibenwa Dec 5, 2023
332ac4c
JAMES-2586 Fully drop JPA within mailbox-postgresql
chibenwa Dec 6, 2023
63ae3d6
JAMES-2586 [PGSQL] Implement correctly FetchType
vttranlina Dec 4, 2023
9abbfe9
JAMES-2586 [PGSQL] Optimize getMailboxCounter method
vttranlina Dec 4, 2023
cfb93ae
JAMES-2586 [PGSQL] Improve PostresMessageManager::getMetadata method
vttranlina Dec 4, 2023
7b9f4d3
JAMES-2586 Fix missing guice binding for Postgres quota module
vttranlina Dec 5, 2023
65e2f18
JAMES-2586 Fixup - Postgres app - Use junit 5 (replace to junit 4)
vttranlina Dec 5, 2023
404077b
JAMES-2586 Postgres app – Remove server test for authentication datab…
vttranlina Dec 5, 2023
d8f3d78
JAMES-2586 Rename JPAAttachmentContentLoader to PostgresAttachmentCon…
Arsnael Dec 7, 2023
ff4bc4d
JAMES-2586 Add a unit test for recreate RLS column should not fail
quantranhong1999 Dec 7, 2023
abfaf29
JAMES-2586 PostgresExecutor: better recognize prepared statement conf…
quantranhong1999 Dec 7, 2023
92a2b79
JAMES-2586 PostgresTableManager - Check the existence of RLS column/p…
vttranlina Dec 11, 2023
fae71c7
JAMES-2586 PostgresTableManager - Cleanup
vttranlina Dec 11, 2023
8fe4d37
JAMES-2586 PostgresRecipientRewriteTableDAO and PostgresRecipientRewr…
Dec 7, 2023
57bde18
JAMES-2586 Fixup compile error after merge master
vttranlina Dec 11, 2023
ebeeb1d
JAMES-2586 PostgresDelegationStore (#1851)
hungphan227 Dec 13, 2023
ef878ea
JAMES-2586 Remove JPAHealthCheck.java
chibenwa Dec 12, 2023
b685cd4
JAMES-2586 Implement PostgresMailRepositoryUrlStore
chibenwa Dec 12, 2023
cf5da8f
JAMES-2586 Remove JPAMailRepositoryUrlStore.java
chibenwa Dec 12, 2023
0a677e6
JAMES-2586 Implement and bind PostgresHealthCheck
chibenwa Dec 12, 2023
932ebc8
JAMES-3967 Store mails when relay is exceeded
chibenwa Dec 15, 2023
8da059b
JAMES-2586 ADR for Posgres mailbox tables structure (#1857)
hungphan227 Dec 18, 2023
e0468c1
JAMES-2586 Implement PostgresSieveScriptDAO + PostgresSieveRepository
quantranhong1999 Dec 11, 2023
e574eff
JAMES-2586 Delete JPASieveScript.java
chibenwa Dec 12, 2023
98c01a9
JAMES-2586 Guice binding for PostgresSieveScriptDAO
quantranhong1999 Dec 12, 2023
bbd01da
JAMES-2586 Implement PostgresMailRepository
chibenwa Dec 14, 2023
1f29fd5
JAMES-2586 Guice binding for PostgresMailRepository + remove related …
quantranhong1999 Dec 18, 2023
cbb61b5
JAMES-2586 Documentation for PostgresMailRepository
quantranhong1999 Dec 18, 2023
b431e7c
JAMES-2586 Updating postgres-app default configuration to PostgresMai…
quantranhong1999 Dec 18, 2023
58d0fa2
JAMES-2586 Finally remove the rest of JPA in postgres-app
quantranhong1999 Dec 18, 2023
c05e46b
JAMES-2586 Add an `addAdditionalAlterQueries` option when declaring P…
quantranhong1999 Dec 14, 2023
1b0416b
JAMES-2586 Fix compilation errors
quantranhong1999 Dec 19, 2023
bf45306
JAMES-2586 Fix repositoryPath in postgres-app mailetcontainer.xml
quantranhong1999 Dec 19, 2023
37837e3
JAMES-2586 add missing RLS tests
Dec 18, 2023
004df31
JAMES-2586 Add an Id for SieveScript (#1863)
chibenwa Dec 19, 2023
9c53bb9
JAMES-2586 Fix [PGSQL] Concurrency control for flags updates (#1858)
vttranlina Dec 20, 2023
c7c72c9
[PGSQL] ADR on PGSQL flags update concurrency control mechanism (#1867)
vttranlina Dec 20, 2023
5056b86
JAMES-2586 Add search module chooser for Postgres app
Arsnael Dec 19, 2023
e7d4109
JAMES-2586 Add docker compose distributed with OpenSearch for postgre…
Arsnael Dec 20, 2023
6578230
JAMES-2586 Rework README for Postgres-app and rework the docker compo…
Arsnael Dec 20, 2023
40e7645
JAMES-2586 Module chooser: S3, file blobStore
quantranhong1999 Dec 20, 2023
7088db7
JAMES-2586 Message body deduplication (#1873)
quantranhong1999 Dec 21, 2023
75048b6
JAMES-2586 Remove james-server-cassandra-app direct dependency (#1875)
chibenwa Dec 22, 2023
39a909e
JAMES-2586 Implement AllSearchOverride for Postgresql
Arsnael Dec 21, 2023
b329cfd
JAMES-2586 Implement DeletedSearchOverride for Postgresql
Arsnael Dec 22, 2023
ae7216e
JAMES-2586 Implement DeletedWithRangeSearchOverride for Postgresql
Arsnael Dec 22, 2023
6b35fbe
JAMES-2586 Implement NotDeletedWithRangeSearchOverride for Postgresql
Arsnael Dec 22, 2023
60e6115
JAMES-2586 Implement UidSearchOverride for Postgresql
Arsnael Dec 22, 2023
aacc42e
JAMES-2586 Implement UnseenSearchOverrideTest for Postgresql
Arsnael Dec 22, 2023
8eee5a8
JAMES-2586 Correct search overrides documentation in opensearch.prope…
Arsnael Dec 22, 2023
5770faa
JAMES-2586 Refactor search overrides tests for postgresql
Arsnael Dec 22, 2023
8029cb5
JAMES-2586 Unnecessary join on deleted uid search queries in postgresql
Arsnael Dec 22, 2023
34926cc
JAMES-2586 Moving RabbitMQExtension from distributed-app to queue-rab…
vttranlina Dec 25, 2023
7346bd3
JAMES-2586 Plug RabbitMQ EventBus into Postgres-app
vttranlina Dec 21, 2023
7e52fe6
JAMES-2586 Implement DeleteMessageListener for postgres (#1869)
hungphan227 Dec 25, 2023
c9accb2
JAMES-2586 Fixup search overrides - Using Postgres Factory Executor r…
vttranlina Dec 26, 2023
66b1fef
JAMES-2586 Implement PostgresEventDeadLetters
quantranhong1999 Dec 25, 2023
e105aa9
JAMES-2586 Fix flaky test DistributedPostgresJamesServerTest.guiceSer…
quantranhong1999 Dec 25, 2023
fdc0a73
JAMES-2586 Add missing license
quantranhong1999 Dec 26, 2023
25c568e
JAMES-2586 Add a health check integration test
quantranhong1999 Dec 28, 2023
0fe4ea5
JAMES-2586 Implement PostgresBlobStoreDAO
Dec 26, 2023
48d8bf5
JAMES-2586 Disable concurrent test of PostgresBlobStoreDAO
vttranlina Jan 3, 2024
1657998
JAMES-2586 [PGSQL] Guice binding Postgres BlobStore & Adapt to BlobSt…
vttranlina Dec 27, 2023
5841191
JAMES-2586 Adopt Postgres 16.1 (#1897)
chibenwa Jan 5, 2024
9dfb84b
JAMES-2586 Bump jOOQ to 3.16.23
quantranhong1999 Jan 6, 2024
61d9d60
JAMES-2586 Bump r2dbc-postgresql to 1.0.3.RELEASE
quantranhong1999 Jan 6, 2024
7af5e31
JAMES-2586 - Update test cases for Delete message listener - when ena…
vttranlina Jan 5, 2024
f69b805
JAMES-2586 - Fix BUG - DeleteMessageListener - not work correctly whe…
vttranlina Jan 5, 2024
2ec3c09
Guice InitializationOperation support priority when init module
vttranlina Jan 3, 2024
82c45bd
JAMES-2586 Refactor the way initPostgres of PostgresTableManager
vttranlina Jan 3, 2024
14ee22c
JAMES-2586 Implement PostgresDeletedMessageMetadataVault
quantranhong1999 Jan 2, 2024
c639d12
JAMES-2586 Guice binding + module chooser + sample config for Postgre…
quantranhong1999 Jan 2, 2024
98e5c87
JAMES-2586 Plug DeletedMessageVaultDeletionCallback into DeleteMessag…
quantranhong1999 Jan 8, 2024
4f8d988
JAMES-2586 PostgresDeletedMessageVaultIntegrationTest
quantranhong1999 Jan 8, 2024
b6edc7a
JAMES-2586 Plug PreDeletionHooks
quantranhong1999 Jan 8, 2024
f3dc19a
JAMES-2586 - Set blobStorage implementation is postgres by default
vttranlina Jan 9, 2024
c7a3b8b
JAMES-2586 Implement BlobReferenceSource(s) for postgres-app
Jan 4, 2024
b290699
JAMES-2586 add mailbox para for generateMessageUid method in MapperPr…
Jan 12, 2024
732b2a2
JAMES-2586 Implement PostgresMessageIdMapper
Jan 12, 2024
ab53348
JAMES-2586 Introduce data-jmap-postgres module
quantranhong1999 Jan 15, 2024
030e681
JAMES-2586 DeleteMessageListener: better concurrency control upon mai…
quantranhong1999 Jan 15, 2024
978bb48
JAMES-2586 Jenkinsfile: run tests for `server/data/data-jmap-postgres…
quantranhong1999 Jan 15, 2024
9721856
JAMES-2586 - CLEAN CODE - Guice binding for Postgres User Repository…
vttranlina Jan 12, 2024
8a0df71
JAMES-2586 Implement PostgresMessageFastViewProjection
quantranhong1999 Jan 16, 2024
b05a5e4
JAMES-2586 Moving Managers out of the mail package
Arsnael Jan 17, 2024
a0e8ab0
JAMES-2586 Wire StoreMessageIdManager on top of the PostgresMessageId…
Arsnael Jan 17, 2024
d497221
JAMES-2586 Little refactoring around DeleteMessageListener binding in…
Arsnael Jan 18, 2024
252a977
JAMES-2586 JMAP Guice bindings modules to pg-app
Jan 16, 2024
154f4c9
fixup! JAMES-2586 JMAP Guice bindings modules to pg-app
Jan 16, 2024
e5c2022
fixup! JAMES-2586 JMAP Guice bindings modules to pg-app
Jan 16, 2024
1e7907a
JAMES-2586 Implement PostgresAttachmentMapper, DAO and binding
vttranlina Jan 16, 2024
1314c65
JAMES-2586 Implement Postgres Attachment Blob reference source
vttranlina Jan 18, 2024
5d7db9e
JAMES-2586 - Delete attachment in DeleteMessageListener
vttranlina Jan 18, 2024
d42df3f
JAMES-2586 Webadmin integration tests for postgres
Jan 19, 2024
c2f5e26
JAMES-2586 Implement PostgresEmailChangeRepository
Jan 17, 2024
c39158e
JAMES-2586 - Delete Message Listener - add test case when delete mail…
vttranlina Jan 22, 2024
e6c9cd7
JAMES-2586 - Fixbug - Delete Message Listener - Fix hanging issue
vttranlina Jan 22, 2024
bbce8d1
JAMES-2586 - Fixbug hanging issue when Jooq execute delete and return…
vttranlina Jan 22, 2024
15f153f
JAMES-2586 Implement PostgresEmailChangeRepository - Fixup Guice binding
vttranlina Jan 23, 2024
7c8c6f6
JAMES-2586 Implement Postgres upload repository
vttranlina Jan 24, 2024
69f0c08
JAMES-2586 Implement Postgres upload usage repository
vttranlina Jan 24, 2024
eefb176
JAMES-2586 Guice binding for Postgres upload
vttranlina Jan 24, 2024
e4ac56c
JAMES-2586: The UploadRepositoryCleanupTask should rely on the Upload…
vttranlina Jan 24, 2024
92ffe79
JAMES-2586: Guice binding JmapUploadCleanupModule for Postgres webadmin
vttranlina Jan 24, 2024
4484b7a
JAMES-2586 Disable row-level security by default in postgres.properties
vttranlina Jan 29, 2024
1925084
JAMES-2586 Implement Postgres Push subscription
vttranlina Jan 26, 2024
eb06ce1
JAMES-2586 Introduce sql script to clean up PGSL data
vttranlina Jan 29, 2024
94064cc
JAMES-2586 Implement PostgresThreadIdGuessingAlgorithm (#1941)
hungphan227 Jan 31, 2024
a816e79
JAMES-2586 Implement PostgresMailboxChangeRepository
quantranhong1999 Jan 24, 2024
493fa6d
JAMES-2586 Guice binding PostgresMailboxChangeRepository
quantranhong1999 Jan 25, 2024
f28cb24
JAMES-2586 Implement PostgresFilteringProjection
Feb 1, 2024
afb6e85
JAMES-2586 Implement PostgresCustomIdentityDAO
Jan 29, 2024
9966078
JAMES-2586 Handle case when Postgres index/constraint already exists
vttranlina Feb 6, 2024
3df63b8
JAMES-2586 More flexible on comparing Vacation's ZonedDateTime
quantranhong1999 Feb 5, 2024
c738668
JAMES-2586 Implement PostgresVacationRepository
quantranhong1999 Feb 5, 2024
7b83381
JAMES-2586 Guice binding PostgresVacationRepository
quantranhong1999 Feb 5, 2024
3e1eb31
JAMES-2586 Improve PostgresVacationRepository
quantranhong1999 Feb 6, 2024
8f05992
JAMES-2586 Temporarily disable a flaky PostgresUploadService test
quantranhong1999 Feb 6, 2024
c156138
JAMES-2586 Optimize query increase/decrease for Quota Current Value
vttranlina Feb 7, 2024
2b4df10
JAMES-2586 Add Index for Postgres Mailbox table
vttranlina Feb 7, 2024
490dbe0
JAMES-2586 Implement PostgresNotificationRegistry
quantranhong1999 Feb 7, 2024
9b21d23
JAMES-2586 SQL script to clean outdated vacation notifications
quantranhong1999 Feb 7, 2024
fb4b8e2
JAMES-2586 Guice binding for PostgresNotificationRegistry
quantranhong1999 Feb 7, 2024
3843d09
JAMES-2586 Fix contract test NotificationRegistryContract::registerSh…
quantranhong1999 Feb 7, 2024
472cc1c
JAMES-2586 [Documentation] Using pg_stat_statements extension for tra…
vttranlina Feb 16, 2024
27d82bc
JAMES-2586 Avoid Using COUNT() in SQL When You Could Use EXISTS()
vttranlina Feb 18, 2024
4adfbb0
JAMES-2586 Implement PostgresEventStore
Feb 7, 2024
cc4bab5
JAMES-2586 Implement PostgresEmailQueryView (#2007)
hungphan227 Feb 21, 2024
d33439e
JAMES-2586 - Postgres push subscription - expires value should be sto…
vttranlina Feb 29, 2024
e22e897
JAMES-2586 Integration tests for JMAP postgres
Feb 20, 2024
2c7a172
JAMES-2586 Disable some tests in Integration tests JMAP postgres
Feb 21, 2024
971af25
JAMES-2586 Fix PostgresAuthenticationTest
Mar 1, 2024
fba96b3
JAMES 2586 PostgresPushSubscriptionRepository: rely on Postgres uniqu…
quantranhong1999 Mar 10, 2024
0b5d237
JAMES-2586 [Postgres] FIXUP when query with IN - should pre-check col…
vttranlina Mar 11, 2024
258bc1c
[Build] Use tmpfs for Postgres db test container
Arsnael Mar 7, 2024
256a118
JAMES-2586 Fix PostgresPushSubscriptionSetMethodTest, PostgresThreadG…
Feb 25, 2024
cb469ac
JAMES-2586 Replace drop by truncate in PostgresMessageFastViewProjection
Mar 11, 2024
e8227c0
JAMES 2586 Increase timeout to 1 hour for postgres-jmap-integration-t…
quantranhong1999 Mar 14, 2024
898ba55
JAMES 2586 Try forkCount=2 to see if the tests are faster
quantranhong1999 Mar 14, 2024
57d5afe
Add sslMode to require in PostgresqlConnectionConfiguration (#2109)
Arsnael Mar 15, 2024
d842a44
JAMES-2586 Reduce repeat count for some JMAP integration tests
quantranhong1999 Mar 14, 2024
d0bc58c
JAMES-2586 Add PostgresAttachmentMapper to PostgresMessageIdMapper
Mar 14, 2024
e36a3d5
JAMES-2586 Bind PostgresMessageFastViewProjection
Mar 14, 2024
b6ae00f
JAMES-2586 Optimize AttachmentLoader
vttranlina Mar 6, 2024
94a9bb8
JAMES-2586 Fix PostgresEmailGetMethodTest
Mar 14, 2024
41c1bc4
JAMES-2586 Fix PostgresEmailQueryMethodTest
Mar 14, 2024
e33fba5
JAMES-2586 Fix PostgresMailboxSetMethodTest
Mar 14, 2024
0399a72
JAMES-2586 remove redundant import in PostgresPushSubscriptionSetMeth…
Mar 14, 2024
4bfbe83
JAMES-2586 Remove opensearch in PostgresWebPushTest
Mar 14, 2024
a03f857
JAMES-3925 - JMAP Upload - Method delete of Upload Repository should …
vttranlina Feb 29, 2024
6bfe15e
JAMES-2586 - JMAP Upload - Fix unstable UploadService test
vttranlina Mar 19, 2024
30cf9a5
JAMES-2586 Fix Postgres build after rebase on master
Arsnael Mar 20, 2024
09d6a95
JAMES-2586 JMAP Upload - fix precision of uploadDate field
vttranlina Mar 21, 2024
bc67127
JAMES-2586 Refactor the handle way duplicate value on constraint inde…
vttranlina Mar 19, 2024
4441e20
JAMES-2586 [REFACTORING] - PostgresTableManager - fix incorrect log
vttranlina Mar 19, 2024
a2da833
JAMES-2586 Avoid sorting PG messages
vttranlina Mar 18, 2024
c528931
JAMES-2586 [REFACTORING] - Extract dedicated class for retrieving Pos…
vttranlina Mar 18, 2024
ba37806
JAMES-2586 Fix MailboxSetMethodContract
vttranlina Mar 20, 2024
e7e9df8
JAMES-2586 Avoid declare jooq and r2dbc-postgresql version in multipl…
quantranhong1999 Mar 21, 2024
354eee2
JAMES-2586 Bump jOOQ to 3.19.6
quantranhong1999 Mar 21, 2024
36f0a1a
JAMES-2586 Bump r2dbc-postgresql to 1.0.4
quantranhong1999 Mar 21, 2024
317f109
JAMES-2586 Adapt jooq 3.19.6 change
quantranhong1999 Mar 22, 2024
b744953
JAMES-2586 Postgres RewriteTablesTest should not fail unstable test p…
quantranhong1999 Mar 22, 2024
9a55076
JAMES-2586 Create AttachmentIdFactory
Mar 19, 2024
322380a
JAMES-2586 Add UuidBackedAttachmentIdFactory
Mar 21, 2024
919bb5a
JAMES-2586 Update Guice binding Postgres (#2154)
vttranlina Mar 26, 2024
d1d442a
Duplicated the QuotaDTO event and related classes from quota-mailing-…
vttranlina Mar 27, 2024
dce47af
Refactor cassandra-quota-mailing: using the QuotaDTO event and relate…
vttranlina Mar 28, 2024
18f212f
JAMES-2586 Postgres - Binding QuotaMailing module for postgres app Tu…
vttranlina Mar 27, 2024
3d93a9d
JAMES-2586 Postgres - Guice binding EventDTO for DLP Configuration
vttranlina Mar 27, 2024
f80b741
JAMES-2586 Postgres - Guice binding EventDTO for FilteringRuleSetDefine
vttranlina Mar 27, 2024
a877a3b
JAMES-2586 - [Revert] Optimize query increase/decrease for Quota Curr…
vttranlina Apr 1, 2024
6b8378a
Revert "Provision Current Quota when MailboxAdded event"
vttranlina Apr 1, 2024
cb50238
JAMES-2586 Introduce module task-postgres
quantranhong1999 Mar 28, 2024
d397aee
JAMES-2586 Implement PostgresTaskExecutionDetailsProjection
quantranhong1999 Mar 29, 2024
9eabf24
JAMES-2586 Relax TaskExecutionDetailsProjectionContract: can compare …
quantranhong1999 Mar 29, 2024
d8e74da
JAMES-2586 Guice binding Distributed TaskManager for postgres-app
quantranhong1999 Mar 29, 2024
4bcc55c
JAMES-2586 Disable DistributedTaskSerializationModule
quantranhong1999 Apr 1, 2024
445aa7b
JAMES-2586 Add missing cleanup task webadmin routes
quantranhong1999 Apr 1, 2024
798bb00
JAMES-2586 Do not use ActiveMQ mail queue when distributed mode
quantranhong1999 Apr 1, 2024
94bf1d2
JAMES-2586 Add binding for DKIMMailetModule
quantranhong1999 Apr 1, 2024
3dbf76d
JAMES-2586 - Postgres - Bind DistributedTaskSerializationModule into …
vttranlina Apr 2, 2024
93adc14
JAMES-2586 - Postgres - Binding ACLUpdated Event DTO
vttranlina Apr 3, 2024
26cb755
JAMES-2586 PopulateEmailQueryViewTask should not hang for postgres-ap…
quantranhong1999 Apr 9, 2024
767b159
JAMES-2586 Fix flaky tests in EmailQueryMethodTest
Apr 5, 2024
e550654
JAMES-2586 Enable flaky tests in PostgresEmailQueryMethodTest
Apr 5, 2024
0e87b06
JAMES-2586 Apply reactor timeout for jOOQ
quantranhong1999 Apr 5, 2024
a34ab82
JAMES-2586 Mitigate fix for https://github.com/jOOQ/jOOQ/issues/16556
quantranhong1999 Apr 8, 2024
0d9efec
JAMES-2586 Create metrics for PostgresExecutor
Apr 10, 2024
69e16d3
JAMES-2586 Update postgresql guice binding - adapt after rebase maste…
vttranlina Apr 16, 2024
3060e18
JAMES-2586 [UPDATE] [PGSQL] more javax APIs migrated to jakarta
vttranlina Apr 16, 2024
5b96ab0
[BUILD] Jenkinsfile - add module server/blob/blob-postgres
vttranlina Apr 15, 2024
55c086f
JAMES-2586 Disable some unstable tests of PostgresBlobStoreDAOTest
vttranlina Apr 15, 2024
fdfd06a
JAMES-2586 Implement PoolBackedPostgresConnectionFactory
Apr 8, 2024
a3af702
JAMES-2586 Update PostgresCommonModule to use PoolBackedPostgresConne…
Apr 11, 2024
8aa8194
JAMES-2586 Add connection pool config to PostgresConfiguration
Apr 17, 2024
89df4b3
JAMES-2586 Close postgres connections when the app shutdown
Apr 26, 2024
6e15af3
JAMES-2586 Fix some disabled tests in PostgresBlobStoreDAOTest by usi…
Apr 26, 2024
e3b4f2c
JAMES-2586 Create rls-bypass instance for PoolBackedPostgresConnectio…
May 2, 2024
c8ed44b
JAMES-2586 Update PoolBackedPostgresConnectionFactory to avoid runnin…
May 17, 2024
2ecf030
JAMES-2586 Fix sequential issue with updating flags in the reactive p…
Arsnael May 24, 2024
8494d58
JAMES-2586 Postgres app should use Java 21 base image (#2277)
quantranhong1999 Jun 6, 2024
20e1c8f
JAMES-2586 - Rename class DeletedMessageVaultDeletionCallback -> Post…
vttranlina Jun 6, 2024
c007899
[BUILD] Increase jOOQ reactive timeout for testing (#2301)
quantranhong1999 Jun 17, 2024
8f89620
JAMES-3946 Add a DropLists postgresql backend (#2290)
Maxxx873 Jun 18, 2024
be4c280
JAMES-2586 Clean/Refactor PostgresExtension
vttranlina Jun 10, 2024
570aff9
JAMES-2586 Drop SinglePostgresConnectionFactory
vttranlina Jun 13, 2024
152f924
JAMES-2586 Drop DomainImplPostgresConnectionFactory
vttranlina Jun 13, 2024
b3dbdc8
JAMES-2586 Refactor JamesPostgresConnectionFactory: distinctly getCon…
vttranlina Jun 13, 2024
fb9682a
JAMES-2586 Re naming "non-rls" to "by-pass-rls"
vttranlina Jun 13, 2024
7e0d57d
JAMES-2586 [UPGRADE] jooq 3.19.6 -> 3.19.9
vttranlina Jun 12, 2024
03d8221
JAMES-2586 [UPGRADE] r2dbc.postgresql.version 1.0.4.RELEASE => 1.0.5.…
vttranlina Jun 12, 2024
b2740e1
JAMES-2586 [UPGRADE] org.testcontainers:postgresql 1.19.1 -> 1.19.8
vttranlina Jun 12, 2024
66535e2
JAMES-2586 [UPGRADE] Postgres docker image 16.1 -> 16.3
vttranlina Jun 12, 2024
2b16627
JAMES-2586 - Update primaryKey constraint for Postgres mailbox_change…
vttranlina Jun 5, 2024
be56a16
JAMES-2586 (RLS) Optimize findNonPersonalMailboxes method in Postgres…
Jun 18, 2024
7725692
JAMES-2586 (NON_RLS) Optimize findNonPersonalMailboxes method in Post…
Jun 18, 2024
7b3f538
JAMES-2586 Refactor code after optimizing findNonPersonalMailboxes me…
Jun 20, 2024
5505593
JAMES-2586 Change boolean rlsEnabled to enum RowLevelSecurity
Jun 21, 2024
7fb9412
JAMES-2586 [PGSQL] Fix checkstyle & adapt code after rebase master
vttranlina Jun 25, 2024
f753b5c
JAMES-2586 Fix sequential issue with updating flags in the reactive p…
vttranlina Jun 25, 2024
ca7fbe7
JAMES-2586 Fix BlobStoreConfigurationTest
vttranlina Jun 26, 2024
711790d
[ENHANCEMENT] Better reactify Identity methods - update for Postgres
vttranlina Jun 26, 2024
3c6695c
JAMES-2586 Fixup PostgresPushSubscriptionSetMethodTest - add ClockMQE…
vttranlina Jun 26, 2024
16dc81e
Disable test: JamesWithNonCompatibleElasticSearchServerTest
vttranlina Jun 27, 2024
c75c371
Fixup - add missing dependencies in apache-james-mpt-smtp-cassandra-r…
vttranlina Jun 27, 2024
4791371
[Antora] [PGSQL] Setup postgresql James server documentation section
vttranlina Jun 26, 2024
645b821
[Antora] [PGSQL] Objectives and motivation page for postgres doc
vttranlina Jun 26, 2024
4beebdf
[Antora] [PGSQL] Add Configuration section to postgresql doc
vttranlina Jul 1, 2024
e1d49ca
[Antora] [PGSQL] Add Performance benchmarks section to postgresql doc
vttranlina Jul 3, 2024
98a1460
[Antora] [PGSQL] Architecture section for postgres doc
vttranlina Jul 3, 2024
621d5c9
[Antora] [PGSQL] Add Operate section to postgresql doc
vttranlina Jul 2, 2024
7db0dc0
[Antora] Add run section to postgresql documentation
Arsnael Jun 28, 2024
c3317a5
[Antora] Add missing link in run with docker page to james cli comman…
Arsnael Jul 1, 2024
41d90f5
[Antora] [PGSQL] Add Extending to postgresql doc
vttranlina Jul 5, 2024
a51a495
JAMES-4054 Remove X-SMIME-Status header in mailetcontainer.xml
Arsnael Aug 20, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
19 changes: 17 additions & 2 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,21 @@ pipeline {
MVN_SHOW_TIMESTAMPS="-Dorg.slf4j.simpleLogger.showDateTime=true -Dorg.slf4j.simpleLogger.dateTimeFormat=HH:mm:ss,SSS"
CI = true
LC_CTYPE = 'en_US.UTF-8'

POSTGRES_MODULES = 'backends-common/postgres,' +
'mailbox/postgres,' +
'server/blob/blob-postgres,' +
'server/data/data-postgres,' +
'server/data/data-jmap-postgres,' +
'server/container/guice/postgres-common,' +
'server/container/guice/mailbox-postgres,' +
'server/apps/postgres-app,' +
'server/protocols/jmap-rfc-8621-integration-tests/postgres-jmap-rfc-8621-integration-tests,' +
'server/protocols/webadmin-integration-test/postgres-webadmin-integration-test,' +
'server/task/task-postgres,' +
'mpt/impl/imap-mailbox/postgres,' +
'event-bus/postgres,' +
'mailbox/plugin/deleted-messages-vault-postgres'
}

tools {
Expand Down Expand Up @@ -94,7 +109,7 @@ pipeline {
stage('Stable Tests') {
steps {
echo 'Running tests'
sh 'mvn -B -e -fae test ${MVN_SHOW_TIMESTAMPS} -P ci-test ${MVN_LOCAL_REPO_OPT} -Dassembly.skipAssembly=true jacoco:report-aggregate@jacoco-report'
sh 'mvn -B -e -fae test ${MVN_SHOW_TIMESTAMPS} -P ci-test ${MVN_LOCAL_REPO_OPT} -pl ${POSTGRES_MODULES} -Dassembly.skipAssembly=true jacoco:report-aggregate@jacoco-report'
}
post {
always {
Expand All @@ -115,7 +130,7 @@ pipeline {
steps {
echo 'Running unstable tests'
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
sh 'mvn -B -e -fae test -Punstable-tests ${MVN_SHOW_TIMESTAMPS} -P ci-test ${MVN_LOCAL_REPO_OPT} -Dassembly.skipAssembly=true'
sh 'mvn -B -e -fae test -Punstable-tests ${MVN_SHOW_TIMESTAMPS} -P ci-test ${MVN_LOCAL_REPO_OPT} -pl ${POSTGRES_MODULES} -Dassembly.skipAssembly=true'
}
}
post {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,6 @@
import static org.apache.james.backends.cassandra.components.CassandraQuotaCurrentValueTable.QUOTA_TYPE;
import static org.apache.james.backends.cassandra.components.CassandraQuotaCurrentValueTable.TABLE_NAME;

import java.util.Objects;

import jakarta.inject.Inject;

import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
Expand All @@ -47,66 +45,12 @@
import com.datastax.oss.driver.api.querybuilder.delete.Delete;
import com.datastax.oss.driver.api.querybuilder.select.Select;
import com.datastax.oss.driver.api.querybuilder.update.Update;
import com.google.common.base.MoreObjects;

import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

public class CassandraQuotaCurrentValueDao {

public static class QuotaKey {

public static QuotaKey of(QuotaComponent component, String identifier, QuotaType quotaType) {
return new QuotaKey(component, identifier, quotaType);
}

private final QuotaComponent quotaComponent;
private final String identifier;
private final QuotaType quotaType;

public QuotaComponent getQuotaComponent() {
return quotaComponent;
}

public String getIdentifier() {
return identifier;
}

public QuotaType getQuotaType() {
return quotaType;
}

private QuotaKey(QuotaComponent quotaComponent, String identifier, QuotaType quotaType) {
this.quotaComponent = quotaComponent;
this.identifier = identifier;
this.quotaType = quotaType;
}

@Override
public final int hashCode() {
return Objects.hash(quotaComponent, identifier, quotaType);
}

@Override
public final boolean equals(Object o) {
if (o instanceof QuotaKey) {
QuotaKey other = (QuotaKey) o;
return Objects.equals(quotaComponent, other.quotaComponent)
&& Objects.equals(identifier, other.identifier)
&& Objects.equals(quotaType, other.quotaType);
}
return false;
}

public String toString() {
return MoreObjects.toStringHelper(this)
.add("quotaComponent", quotaComponent)
.add("identifier", identifier)
.add("quotaType", quotaType)
.toString();
}
}

private static final Logger LOGGER = LoggerFactory.getLogger(CassandraQuotaCurrentValueDao.class);

private final CassandraAsyncExecutor queryExecutor;
Expand All @@ -126,7 +70,7 @@ public CassandraQuotaCurrentValueDao(CqlSession session) {
this.deleteQuotaCurrentValueStatement = session.prepare(deleteQuotaCurrentValueStatement().build());
}

public Mono<Void> increase(QuotaKey quotaKey, long amount) {
public Mono<Void> increase(QuotaCurrentValue.Key quotaKey, long amount) {
return queryExecutor.executeVoid(increaseStatement.bind()
.setString(QUOTA_COMPONENT, quotaKey.getQuotaComponent().getValue())
.setString(IDENTIFIER, quotaKey.getIdentifier())
Expand All @@ -139,7 +83,7 @@ public Mono<Void> increase(QuotaKey quotaKey, long amount) {
});
}

public Mono<Void> decrease(QuotaKey quotaKey, long amount) {
public Mono<Void> decrease(QuotaCurrentValue.Key quotaKey, long amount) {
return queryExecutor.executeVoid(decreaseStatement.bind()
.setString(QUOTA_COMPONENT, quotaKey.getQuotaComponent().getValue())
.setString(IDENTIFIER, quotaKey.getIdentifier())
Expand All @@ -152,15 +96,15 @@ public Mono<Void> decrease(QuotaKey quotaKey, long amount) {
});
}

public Mono<QuotaCurrentValue> getQuotaCurrentValue(QuotaKey quotaKey) {
public Mono<QuotaCurrentValue> getQuotaCurrentValue(QuotaCurrentValue.Key quotaKey) {
return queryExecutor.executeSingleRow(getQuotaCurrentValueStatement.bind()
.setString(QUOTA_COMPONENT, quotaKey.getQuotaComponent().getValue())
.setString(IDENTIFIER, quotaKey.getIdentifier())
.setString(QUOTA_TYPE, quotaKey.getQuotaType().getValue()))
.map(row -> convertRowToModel(row));
}

public Mono<Void> deleteQuotaCurrentValue(QuotaKey quotaKey) {
public Mono<Void> deleteQuotaCurrentValue(QuotaCurrentValue.Key quotaKey) {
return queryExecutor.executeVoid(deleteQuotaCurrentValueStatement.bind()
.setString(QUOTA_COMPONENT, quotaKey.getQuotaComponent().getValue())
.setString(IDENTIFIER, quotaKey.getIdentifier())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@
import static org.apache.james.backends.cassandra.components.CassandraQuotaLimitTable.QUOTA_TYPE;
import static org.apache.james.backends.cassandra.components.CassandraQuotaLimitTable.TABLE_NAME;

import java.util.Objects;

import jakarta.inject.Inject;

import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
Expand All @@ -47,74 +45,11 @@
import com.datastax.oss.driver.api.querybuilder.delete.Delete;
import com.datastax.oss.driver.api.querybuilder.insert.Insert;
import com.datastax.oss.driver.api.querybuilder.select.Select;
import com.google.common.base.MoreObjects;

import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

public class CassandraQuotaLimitDao {

public static class QuotaLimitKey {

public static QuotaLimitKey of(QuotaComponent component, QuotaScope scope, String identifier, QuotaType quotaType) {
return new QuotaLimitKey(component, scope, identifier, quotaType);
}

private final QuotaComponent quotaComponent;
private final QuotaScope quotaScope;
private final String identifier;
private final QuotaType quotaType;

public QuotaComponent getQuotaComponent() {
return quotaComponent;
}

public QuotaScope getQuotaScope() {
return quotaScope;
}

public String getIdentifier() {
return identifier;
}

public QuotaType getQuotaType() {
return quotaType;
}

private QuotaLimitKey(QuotaComponent quotaComponent, QuotaScope quotaScope, String identifier, QuotaType quotaType) {
this.quotaComponent = quotaComponent;
this.quotaScope = quotaScope;
this.identifier = identifier;
this.quotaType = quotaType;
}

@Override
public final int hashCode() {
return Objects.hash(quotaComponent, quotaScope, identifier, quotaType);
}

@Override
public final boolean equals(Object o) {
if (o instanceof QuotaLimitKey) {
QuotaLimitKey other = (QuotaLimitKey) o;
return Objects.equals(quotaComponent, other.quotaComponent)
&& Objects.equals(quotaScope, other.quotaScope)
&& Objects.equals(identifier, other.identifier)
&& Objects.equals(quotaType, other.quotaType);
}
return false;
}

public String toString() {
return MoreObjects.toStringHelper(this)
.add("quotaComponent", quotaComponent)
.add("quotaScope", quotaScope)
.add("identifier", identifier)
.add("quotaType", quotaType)
.toString();
}
}

private final CassandraAsyncExecutor queryExecutor;
private final PreparedStatement getQuotaLimitStatement;
private final PreparedStatement getQuotaLimitsStatement;
Expand All @@ -130,7 +65,7 @@ public CassandraQuotaLimitDao(CqlSession session) {
this.deleteQuotaLimitStatement = session.prepare((deleteQuotaLimitStatement().build()));
}

public Mono<QuotaLimit> getQuotaLimit(QuotaLimitKey quotaKey) {
public Mono<QuotaLimit> getQuotaLimit(QuotaLimit.QuotaLimitKey quotaKey) {
return queryExecutor.executeSingleRow(getQuotaLimitStatement.bind()
.setString(QUOTA_COMPONENT, quotaKey.getQuotaComponent().getValue())
.setString(QUOTA_SCOPE, quotaKey.getQuotaScope().getValue())
Expand All @@ -156,7 +91,7 @@ public Mono<Void> setQuotaLimit(QuotaLimit quotaLimit) {
.set(QUOTA_LIMIT, quotaLimit.getQuotaLimit().orElse(null), Long.class));
}

public Mono<Void> deleteQuotaLimit(QuotaLimitKey quotaKey) {
public Mono<Void> deleteQuotaLimit(QuotaLimit.QuotaLimitKey quotaKey) {
return queryExecutor.executeVoid(deleteQuotaLimitStatement.bind()
.setString(QUOTA_COMPONENT, quotaKey.getQuotaComponent().getValue())
.setString(QUOTA_SCOPE, quotaKey.getQuotaScope().getValue())
Expand Down Expand Up @@ -203,7 +138,8 @@ private QuotaLimit convertRowToModel(Row row) {
.quotaScope(QuotaScope.of(row.get(QUOTA_SCOPE, String.class)))
.identifier(row.get(IDENTIFIER, String.class))
.quotaType(QuotaType.of(row.get(QUOTA_TYPE, String.class)))
.quotaLimit(row.get(QUOTA_LIMIT, Long.class)).build();
.quotaLimit(row.get(QUOTA_LIMIT, Long.class))
.build();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
import org.apache.james.backends.cassandra.CassandraClusterExtension;
import org.apache.james.backends.cassandra.components.CassandraMutualizedQuotaModule;
import org.apache.james.backends.cassandra.components.CassandraQuotaCurrentValueDao;
import org.apache.james.backends.cassandra.components.CassandraQuotaCurrentValueDao.QuotaKey;
import org.apache.james.core.quota.QuotaComponent;
import org.apache.james.core.quota.QuotaCurrentValue;
import org.apache.james.core.quota.QuotaType;
Expand All @@ -36,7 +35,7 @@
import org.junit.jupiter.api.extension.RegisterExtension;

public class CassandraQuotaCurrentValueDaoTest {
private static final QuotaKey QUOTA_KEY = QuotaKey.of(QuotaComponent.MAILBOX, "james@abc.com", QuotaType.SIZE);
private static final QuotaCurrentValue.Key QUOTA_KEY = QuotaCurrentValue.Key.of(QuotaComponent.MAILBOX, "james@abc.com", QuotaType.SIZE);

private CassandraQuotaCurrentValueDao cassandraQuotaCurrentValueDao;

Expand Down Expand Up @@ -92,7 +91,7 @@ void decreaseQuotaCurrentValueShouldDecreaseValueSuccessfully() {

@Test
void deleteQuotaCurrentValueShouldDeleteSuccessfully() {
QuotaKey quotaKey = QuotaKey.of(QuotaComponent.MAILBOX, "andre@abc.com", QuotaType.SIZE);
QuotaCurrentValue.Key quotaKey = QuotaCurrentValue.Key.of(QuotaComponent.MAILBOX, "andre@abc.com", QuotaType.SIZE);
cassandraQuotaCurrentValueDao.increase(quotaKey, 100L).block();
cassandraQuotaCurrentValueDao.deleteQuotaCurrentValue(quotaKey).block();

Expand Down Expand Up @@ -125,7 +124,7 @@ void decreaseQuotaCurrentValueShouldNotThrowExceptionWhenQueryExecutorThrowExcep

@Test
void getQuotasByComponentShouldGetAllQuotaTypesSuccessfully() {
QuotaKey countQuotaKey = QuotaKey.of(QuotaComponent.MAILBOX, "james@abc.com", QuotaType.COUNT);
QuotaCurrentValue.Key countQuotaKey = QuotaCurrentValue.Key.of(QuotaComponent.MAILBOX, "james@abc.com", QuotaType.COUNT);

QuotaCurrentValue expectedQuotaSize = QuotaCurrentValue.builder().quotaComponent(QUOTA_KEY.getQuotaComponent())
.identifier(QUOTA_KEY.getIdentifier()).quotaType(QUOTA_KEY.getQuotaType()).currentValue(100L).build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ void setQuotaLimitShouldSaveObjectSuccessfully() {
QuotaLimit expected = QuotaLimit.builder().quotaComponent(QuotaComponent.MAILBOX).quotaScope(QuotaScope.DOMAIN).identifier("A").quotaType(QuotaType.COUNT).quotaLimit(100L).build();
cassandraQuotaLimitDao.setQuotaLimit(expected).block();

assertThat(cassandraQuotaLimitDao.getQuotaLimit(CassandraQuotaLimitDao.QuotaLimitKey.of(QuotaComponent.MAILBOX, QuotaScope.DOMAIN, "A", QuotaType.COUNT)).block())
assertThat(cassandraQuotaLimitDao.getQuotaLimit(QuotaLimit.QuotaLimitKey.of(QuotaComponent.MAILBOX, QuotaScope.DOMAIN, "A", QuotaType.COUNT)).block())
.isEqualTo(expected);
}

Expand All @@ -70,7 +70,7 @@ void setQuotaLimitWithEmptyQuotaLimitValueShouldNotThrowNullPointerException() {
QuotaLimit emptyQuotaLimitValue = QuotaLimit.builder().quotaComponent(QuotaComponent.MAILBOX).quotaScope(QuotaScope.DOMAIN).identifier("A").quotaType(QuotaType.COUNT).build();
cassandraQuotaLimitDao.setQuotaLimit(emptyQuotaLimitValue).block();

assertThat(cassandraQuotaLimitDao.getQuotaLimit(CassandraQuotaLimitDao.QuotaLimitKey.of(QuotaComponent.MAILBOX, QuotaScope.DOMAIN, "A", QuotaType.COUNT)).block())
assertThat(cassandraQuotaLimitDao.getQuotaLimit(QuotaLimit.QuotaLimitKey.of(QuotaComponent.MAILBOX, QuotaScope.DOMAIN, "A", QuotaType.COUNT)).block())
.isEqualTo(emptyQuotaLimitValue);
}

Expand All @@ -79,17 +79,17 @@ void setQuotaLimitShouldSaveObjectSuccessfullyWhenLimitIsMinusOne() {
QuotaLimit expected = QuotaLimit.builder().quotaComponent(QuotaComponent.MAILBOX).quotaScope(QuotaScope.DOMAIN).identifier("A").quotaType(QuotaType.COUNT).quotaLimit(-1L).build();
cassandraQuotaLimitDao.setQuotaLimit(expected).block();

assertThat(cassandraQuotaLimitDao.getQuotaLimit(CassandraQuotaLimitDao.QuotaLimitKey.of(QuotaComponent.MAILBOX, QuotaScope.DOMAIN, "A", QuotaType.COUNT)).block())
assertThat(cassandraQuotaLimitDao.getQuotaLimit(QuotaLimit.QuotaLimitKey.of(QuotaComponent.MAILBOX, QuotaScope.DOMAIN, "A", QuotaType.COUNT)).block())
.isEqualTo(expected);
}

@Test
void deleteQuotaLimitShouldDeleteObjectSuccessfully() {
QuotaLimit quotaLimit = QuotaLimit.builder().quotaComponent(QuotaComponent.MAILBOX).quotaScope(QuotaScope.DOMAIN).identifier("A").quotaType(QuotaType.COUNT).quotaLimit(100L).build();
cassandraQuotaLimitDao.setQuotaLimit(quotaLimit).block();
cassandraQuotaLimitDao.deleteQuotaLimit(CassandraQuotaLimitDao.QuotaLimitKey.of(QuotaComponent.MAILBOX, QuotaScope.DOMAIN, "A", QuotaType.COUNT)).block();
cassandraQuotaLimitDao.deleteQuotaLimit(QuotaLimit.QuotaLimitKey.of(QuotaComponent.MAILBOX, QuotaScope.DOMAIN, "A", QuotaType.COUNT)).block();

assertThat(cassandraQuotaLimitDao.getQuotaLimit(CassandraQuotaLimitDao.QuotaLimitKey.of(QuotaComponent.MAILBOX, QuotaScope.DOMAIN, "A", QuotaType.COUNT)).block())
assertThat(cassandraQuotaLimitDao.getQuotaLimit(QuotaLimit.QuotaLimitKey.of(QuotaComponent.MAILBOX, QuotaScope.DOMAIN, "A", QuotaType.COUNT)).block())
.isNull();
}

Expand Down
1 change: 1 addition & 0 deletions backends-common/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
<module>cassandra</module>
<module>jpa</module>
<module>opensearch</module>
<module>postgres</module>
<module>pulsar</module>
<module>rabbitmq</module>
<module>redis</module>
Expand Down
Loading