You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by gi...@apache.org on 2023/05/02 04:40:52 UTC
[james-site] branch asf-staging updated: Site checkin for project Apache James: Jenkins Tools
This is an automated email from the ASF dual-hosted git repository.
git-site-role pushed a commit to branch asf-staging
in repository https://gitbox.apache.org/repos/asf/james-site.git
The following commit(s) were added to refs/heads/asf-staging by this push:
new c974e6e71 Site checkin for project Apache James: Jenkins Tools
c974e6e71 is described below
commit c974e6e7103c3982bcf6681f684316fbcc2b28c8
Author: jenkins <bu...@apache.org>
AuthorDate: Tue May 2 04:40:50 2023 +0000
Site checkin for project Apache James: Jenkins Tools
---
james-distributed-app/3.7.2/_images/BlobStore.png | Bin 0 -> 132760 bytes
james-distributed-app/3.7.2/_images/IMAP_board.png | Bin 0 -> 215231 bytes
james-distributed-app/3.7.2/_images/JMAP_board.png | Bin 0 -> 127304 bytes
james-distributed-app/3.7.2/_images/JVM_board.png | Bin 0 -> 152770 bytes
james-distributed-app/3.7.2/_images/MATCHER.png | Bin 0 -> 135315 bytes
.../3.7.2/_images/apache-james-lens.png | Bin 0 -> 31245 bytes
.../_images/cassandra_stress_test_result_1.png | Bin 0 -> 68487 bytes
.../_images/cassandra_stress_test_result_2.png | Bin 0 -> 62484 bytes
.../3.7.2/_images/james-hexagons-extensions.png | Bin 0 -> 39191 bytes
.../3.7.2/_images/james-imap-base-performance.png | Bin 0 -> 192914 bytes
.../3.7.2/_images/preload-dashboards.png | Bin 0 -> 59900 bytes
.../_images/remote-delivery-error-handling.png | Bin 0 -> 64745 bytes
.../3.7.2/_images/server-components.png | Bin 0 -> 97620 bytes
.../3.7.2/_images/specialized-instances.png | Bin 0 -> 45878 bytes
james-distributed-app/3.7.2/_images/storage.png | Bin 0 -> 129939 bytes
james-distributed-app/3.7.2/_images/webAdmin.png | Bin 0 -> 49488 bytes
.../3.7.2/architecture/consistency-model.html | 583 ++
.../3.7.2/architecture/implemented-standards.html | 709 ++
.../3.7.2/architecture/index.html | 966 +++
.../3.7.2/architecture/specialized-instances.html | 462 ++
.../3.7.2/benchmark/db-benchmark.html | 1043 +++
james-distributed-app/3.7.2/benchmark/index.html | 401 +
.../3.7.2/benchmark/james-benchmark.html | 594 ++
.../3.7.2/configure/batchsizes.html | 442 ++
.../3.7.2/configure/blobstore.html | 771 ++
.../3.7.2/configure/cassandra.html | 598 ++
.../3.7.2/configure/collecting-contacts.html | 446 ++
.../3.7.2/configure/collecting-events.html | 480 ++
james-distributed-app/3.7.2/configure/dns.html | 466 ++
.../3.7.2/configure/domainlist.html | 452 ++
james-distributed-app/3.7.2/configure/dsn.html | 654 ++
.../3.7.2/configure/extensions.html | 464 ++
.../3.7.2/configure/healthcheck.html | 431 ++
james-distributed-app/3.7.2/configure/imap.html | 595 ++
james-distributed-app/3.7.2/configure/index.html | 608 ++
james-distributed-app/3.7.2/configure/jmap.html | 648 ++
james-distributed-app/3.7.2/configure/jmx.html | 430 ++
james-distributed-app/3.7.2/configure/jvm.html | 481 ++
.../3.7.2/configure/listeners.html | 667 ++
.../3.7.2/configure/mailetcontainer.html | 527 ++
james-distributed-app/3.7.2/configure/mailets.html | 3044 ++++++++
.../3.7.2/configure/mailrepositorystore.html | 440 ++
.../3.7.2/configure/matchers.html | 1411 ++++
.../3.7.2/configure/opensearch.html | 852 +++
james-distributed-app/3.7.2/configure/pop3.html | 486 ++
.../3.7.2/configure/rabbitmq.html | 637 ++
.../3.7.2/configure/recipientrewritetable.html | 422 ++
james-distributed-app/3.7.2/configure/redis.html | 439 ++
.../configure/remote-delivery-error-handling.html | 576 ++
james-distributed-app/3.7.2/configure/sieve.html | 540 ++
.../3.7.2/configure/smtp-hooks.html | 804 ++
james-distributed-app/3.7.2/configure/smtp.html | 764 ++
james-distributed-app/3.7.2/configure/spam.html | 668 ++
james-distributed-app/3.7.2/configure/ssl.html | 733 ++
james-distributed-app/3.7.2/configure/tika.html | 463 ++
.../3.7.2/configure/usersrepository.html | 506 ++
james-distributed-app/3.7.2/configure/vault.html | 452 ++
.../3.7.2/configure/webadmin.html | 547 ++
james-distributed-app/3.7.2/extending/index.html | 661 ++
.../3.7.2/extending/mail-processing.html | 582 ++
.../3.7.2/extending/mailbox-listeners.html | 492 ++
.../3.7.2/extending/smtp-hooks.html | 515 ++
.../3.7.2/extending/webadmin-routes.html | 448 ++
james-distributed-app/3.7.2/index.html | 442 ++
james-distributed-app/3.7.2/objectives.html | 452 ++
.../3.7.2/operate/cassandra-migration.html | 427 ++
james-distributed-app/3.7.2/operate/cli.html | 878 +++
james-distributed-app/3.7.2/operate/guide.html | 1258 ++++
james-distributed-app/3.7.2/operate/index.html | 489 ++
james-distributed-app/3.7.2/operate/logging.html | 785 ++
james-distributed-app/3.7.2/operate/metrics.html | 730 ++
james-distributed-app/3.7.2/operate/migrating.html | 452 ++
james-distributed-app/3.7.2/operate/security.html | 704 ++
james-distributed-app/3.7.2/operate/webadmin.html | 7669 +++++++++++++++++++
james-distributed-app/3.7.2/run/index.html | 427 ++
james-distributed-app/3.7.2/run/k8s-checklist.html | 506 ++
.../3.7.2/run/k8s-logsMetrics.html | 433 ++
james-distributed-app/3.7.2/run/k8s-secrets.html | 515 ++
james-distributed-app/3.7.2/run/k8s-values.html | 789 ++
james-distributed-app/3.7.2/run/run-docker.html | 609 ++
james-distributed-app/3.7.2/run/run-java.html | 522 ++
.../3.7.2/run/run-kubernetes.html | 769 ++
james-distributed-app/3.7.3/_images/BlobStore.png | Bin 0 -> 132760 bytes
james-distributed-app/3.7.3/_images/IMAP_board.png | Bin 0 -> 215231 bytes
james-distributed-app/3.7.3/_images/JMAP_board.png | Bin 0 -> 127304 bytes
james-distributed-app/3.7.3/_images/JVM_board.png | Bin 0 -> 152770 bytes
james-distributed-app/3.7.3/_images/MATCHER.png | Bin 0 -> 135315 bytes
.../3.7.3/_images/apache-james-lens.png | Bin 0 -> 31245 bytes
.../_images/cassandra_stress_test_result_1.png | Bin 0 -> 68487 bytes
.../_images/cassandra_stress_test_result_2.png | Bin 0 -> 62484 bytes
.../3.7.3/_images/james-hexagons-extensions.png | Bin 0 -> 39191 bytes
.../3.7.3/_images/james-imap-base-performance.png | Bin 0 -> 192914 bytes
.../3.7.3/_images/preload-dashboards.png | Bin 0 -> 59900 bytes
.../_images/remote-delivery-error-handling.png | Bin 0 -> 64745 bytes
.../3.7.3/_images/server-components.png | Bin 0 -> 97620 bytes
.../3.7.3/_images/specialized-instances.png | Bin 0 -> 45878 bytes
james-distributed-app/3.7.3/_images/storage.png | Bin 0 -> 129939 bytes
james-distributed-app/3.7.3/_images/webAdmin.png | Bin 0 -> 49488 bytes
.../3.7.3/architecture/consistency-model.html | 586 ++
.../3.7.3/architecture/implemented-standards.html | 712 ++
.../3.7.3/architecture/index.html | 969 +++
.../3.7.3/architecture/specialized-instances.html | 465 ++
.../3.7.3/benchmark/db-benchmark.html | 1046 +++
james-distributed-app/3.7.3/benchmark/index.html | 404 +
.../3.7.3/benchmark/james-benchmark.html | 597 ++
.../3.7.3/configure/batchsizes.html | 445 ++
.../3.7.3/configure/blobstore.html | 774 ++
.../3.7.3/configure/cassandra.html | 601 ++
.../3.7.3/configure/collecting-contacts.html | 449 ++
.../3.7.3/configure/collecting-events.html | 483 ++
james-distributed-app/3.7.3/configure/dns.html | 469 ++
.../3.7.3/configure/domainlist.html | 455 ++
james-distributed-app/3.7.3/configure/dsn.html | 657 ++
.../3.7.3/configure/extensions.html | 467 ++
.../3.7.3/configure/healthcheck.html | 434 ++
james-distributed-app/3.7.3/configure/imap.html | 637 ++
james-distributed-app/3.7.3/configure/index.html | 611 ++
james-distributed-app/3.7.3/configure/jmap.html | 651 ++
james-distributed-app/3.7.3/configure/jmx.html | 495 ++
james-distributed-app/3.7.3/configure/jvm.html | 484 ++
.../3.7.3/configure/listeners.html | 630 ++
.../3.7.3/configure/mailetcontainer.html | 530 ++
james-distributed-app/3.7.3/configure/mailets.html | 3050 ++++++++
.../3.7.3/configure/mailrepositorystore.html | 443 ++
.../3.7.3/configure/matchers.html | 1414 ++++
.../3.7.3/configure/opensearch.html | 855 +++
james-distributed-app/3.7.3/configure/pop3.html | 489 ++
.../3.7.3/configure/rabbitmq.html | 640 ++
.../3.7.3/configure/recipientrewritetable.html | 425 ++
james-distributed-app/3.7.3/configure/redis.html | 442 ++
.../configure/remote-delivery-error-handling.html | 579 ++
james-distributed-app/3.7.3/configure/sieve.html | 543 ++
.../3.7.3/configure/smtp-hooks.html | 807 ++
james-distributed-app/3.7.3/configure/smtp.html | 767 ++
james-distributed-app/3.7.3/configure/spam.html | 671 ++
james-distributed-app/3.7.3/configure/ssl.html | 736 ++
james-distributed-app/3.7.3/configure/tika.html | 466 ++
.../3.7.3/configure/usersrepository.html | 509 ++
james-distributed-app/3.7.3/configure/vault.html | 451 ++
.../3.7.3/configure/webadmin.html | 550 ++
james-distributed-app/3.7.3/extending/imap.html | 424 ++
james-distributed-app/3.7.3/extending/index.html | 667 ++
.../3.7.3/extending/mail-processing.html | 585 ++
.../3.7.3/extending/mailbox-listeners.html | 495 ++
.../3.7.3/extending/smtp-hooks.html | 518 ++
.../3.7.3/extending/webadmin-routes.html | 451 ++
james-distributed-app/3.7.3/index.html | 445 ++
james-distributed-app/3.7.3/objectives.html | 455 ++
.../3.7.3/operate/cassandra-migration.html | 430 ++
james-distributed-app/3.7.3/operate/cli.html | 881 +++
james-distributed-app/3.7.3/operate/guide.html | 1261 ++++
james-distributed-app/3.7.3/operate/index.html | 492 ++
james-distributed-app/3.7.3/operate/logging.html | 788 ++
james-distributed-app/3.7.3/operate/metrics.html | 733 ++
james-distributed-app/3.7.3/operate/migrating.html | 455 ++
james-distributed-app/3.7.3/operate/security.html | 719 ++
james-distributed-app/3.7.3/operate/webadmin.html | 7838 ++++++++++++++++++++
james-distributed-app/3.7.3/run/index.html | 430 ++
james-distributed-app/3.7.3/run/k8s-checklist.html | 509 ++
.../3.7.3/run/k8s-logsMetrics.html | 436 ++
james-distributed-app/3.7.3/run/k8s-secrets.html | 518 ++
james-distributed-app/3.7.3/run/k8s-values.html | 792 ++
james-distributed-app/3.7.3/run/run-docker.html | 612 ++
james-distributed-app/3.7.3/run/run-java.html | 525 ++
.../3.7.3/run/run-kubernetes.html | 772 ++
james-project/3.7.2/community/_images/linagora.png | Bin 0 -> 14370 bytes
james-project/3.7.2/community/contributing.html | 683 ++
james-project/3.7.2/community/download.html | 359 +
james-project/3.7.2/community/guidelines.html | 595 ++
james-project/3.7.2/community/index.html | 466 ++
james-project/3.7.2/community/mailing-lists.html | 584 ++
james-project/3.7.2/community/release.html | 691 ++
james-project/3.7.2/community/support.html | 404 +
james-project/3.7.2/community/website.html | 448 ++
james-project/3.7.2/concepts/configuration.html | 395 +
james-project/3.7.2/concepts/glossary.html | 436 ++
james-project/3.7.2/concepts/index.html | 434 ++
james-project/3.7.2/concepts/mail/index.html | 379 +
james-project/3.7.2/concepts/messages/imf.html | 451 ++
james-project/3.7.2/concepts/messages/index.html | 376 +
james-project/3.7.2/concepts/messages/mime.html | 462 ++
james-project/3.7.2/concepts/processing/index.html | 359 +
james-project/3.7.2/concepts/protocols/esmtp.html | 423 ++
james-project/3.7.2/concepts/protocols/imap.html | 639 ++
james-project/3.7.2/concepts/protocols/index.html | 386 +
james-project/3.7.2/concepts/protocols/jmap.html | 360 +
james-project/3.7.2/concepts/protocols/lmtp.html | 406 +
james-project/3.7.2/concepts/protocols/pop.html | 528 ++
james-project/3.7.2/concepts/protocols/smtp.html | 556 ++
james-project/3.7.2/concepts/storage/index.html | 408 +
james-project/3.7.2/concepts/storage/mailbox.html | 565 ++
james-project/3.7.2/concepts/storage/users.html | 465 ++
james-project/3.7.2/concepts/user/index.html | 523 ++
james-project/3.7.2/customization/index.html | 356 +
.../3.7.2/development/deployment-tests.html | 401 +
james-project/3.7.2/development/index.html | 358 +
james-project/3.7.2/development/logging.html | 438 ++
james-project/3.7.2/index.html | 432 ++
james-project/3.7.2/servers/15-minute-demo.html | 727 ++
james-project/3.7.2/servers/5-minute-demo.html | 501 ++
.../3.7.2/servers/basic/architecture.html | 360 +
james-project/3.7.2/servers/basic/concepts.html | 380 +
james-project/3.7.2/servers/basic/conf/index.html | 360 +
james-project/3.7.2/servers/basic/context.html | 394 +
james-project/3.7.2/servers/basic/help.html | 360 +
james-project/3.7.2/servers/basic/index.html | 393 +
james-project/3.7.2/servers/basic/objectives.html | 410 +
james-project/3.7.2/servers/demo.html | 393 +
james-project/3.7.2/servers/extendable.html | 359 +
james-project/3.7.2/servers/index.html | 478 ++
james-project/3.7.2/servers/run.html | 515 ++
james-project/3.7.2/servers/test.html | 359 +
james-project/3.7.3/community/_images/linagora.png | Bin 0 -> 14370 bytes
james-project/3.7.3/community/contributing.html | 683 ++
james-project/3.7.3/community/download.html | 359 +
james-project/3.7.3/community/guidelines.html | 595 ++
james-project/3.7.3/community/index.html | 466 ++
james-project/3.7.3/community/mailing-lists.html | 584 ++
james-project/3.7.3/community/release.html | 691 ++
james-project/3.7.3/community/support.html | 404 +
james-project/3.7.3/community/website.html | 448 ++
james-project/3.7.3/concepts/configuration.html | 395 +
james-project/3.7.3/concepts/glossary.html | 436 ++
james-project/3.7.3/concepts/index.html | 434 ++
james-project/3.7.3/concepts/mail/index.html | 379 +
james-project/3.7.3/concepts/messages/imf.html | 451 ++
james-project/3.7.3/concepts/messages/index.html | 376 +
james-project/3.7.3/concepts/messages/mime.html | 462 ++
james-project/3.7.3/concepts/processing/index.html | 359 +
james-project/3.7.3/concepts/protocols/esmtp.html | 423 ++
james-project/3.7.3/concepts/protocols/imap.html | 639 ++
james-project/3.7.3/concepts/protocols/index.html | 386 +
james-project/3.7.3/concepts/protocols/jmap.html | 360 +
james-project/3.7.3/concepts/protocols/lmtp.html | 406 +
james-project/3.7.3/concepts/protocols/pop.html | 528 ++
james-project/3.7.3/concepts/protocols/smtp.html | 556 ++
james-project/3.7.3/concepts/storage/index.html | 408 +
james-project/3.7.3/concepts/storage/mailbox.html | 565 ++
james-project/3.7.3/concepts/storage/users.html | 465 ++
james-project/3.7.3/concepts/user/index.html | 523 ++
james-project/3.7.3/customization/index.html | 356 +
.../3.7.3/development/deployment-tests.html | 401 +
james-project/3.7.3/development/index.html | 358 +
james-project/3.7.3/development/logging.html | 438 ++
james-project/3.7.3/index.html | 432 ++
james-project/3.7.3/servers/15-minute-demo.html | 727 ++
james-project/3.7.3/servers/5-minute-demo.html | 501 ++
.../3.7.3/servers/basic/architecture.html | 360 +
james-project/3.7.3/servers/basic/concepts.html | 380 +
james-project/3.7.3/servers/basic/conf/index.html | 360 +
james-project/3.7.3/servers/basic/context.html | 394 +
james-project/3.7.3/servers/basic/help.html | 360 +
james-project/3.7.3/servers/basic/index.html | 393 +
james-project/3.7.3/servers/basic/objectives.html | 410 +
james-project/3.7.3/servers/demo.html | 393 +
james-project/3.7.3/servers/extendable.html | 359 +
james-project/3.7.3/servers/index.html | 478 ++
james-project/3.7.3/servers/run.html | 515 ++
james-project/3.7.3/servers/test.html | 359 +
sitemap-james-distributed-app.xml | 134 +-
sitemap-james-project.xml | 286 +-
sitemap-james-site.xml | 4 +-
262 files changed, 141097 insertions(+), 212 deletions(-)
diff --git a/james-distributed-app/3.7.2/_images/BlobStore.png b/james-distributed-app/3.7.2/_images/BlobStore.png
new file mode 100644
index 000000000..d964d2a8a
Binary files /dev/null and b/james-distributed-app/3.7.2/_images/BlobStore.png differ
diff --git a/james-distributed-app/3.7.2/_images/IMAP_board.png b/james-distributed-app/3.7.2/_images/IMAP_board.png
new file mode 100644
index 000000000..2c3e935d9
Binary files /dev/null and b/james-distributed-app/3.7.2/_images/IMAP_board.png differ
diff --git a/james-distributed-app/3.7.2/_images/JMAP_board.png b/james-distributed-app/3.7.2/_images/JMAP_board.png
new file mode 100644
index 000000000..e97b0211a
Binary files /dev/null and b/james-distributed-app/3.7.2/_images/JMAP_board.png differ
diff --git a/james-distributed-app/3.7.2/_images/JVM_board.png b/james-distributed-app/3.7.2/_images/JVM_board.png
new file mode 100644
index 000000000..45f9463e3
Binary files /dev/null and b/james-distributed-app/3.7.2/_images/JVM_board.png differ
diff --git a/james-distributed-app/3.7.2/_images/MATCHER.png b/james-distributed-app/3.7.2/_images/MATCHER.png
new file mode 100644
index 000000000..4730e94e7
Binary files /dev/null and b/james-distributed-app/3.7.2/_images/MATCHER.png differ
diff --git a/james-distributed-app/3.7.2/_images/apache-james-lens.png b/james-distributed-app/3.7.2/_images/apache-james-lens.png
new file mode 100644
index 000000000..e97507cd8
Binary files /dev/null and b/james-distributed-app/3.7.2/_images/apache-james-lens.png differ
diff --git a/james-distributed-app/3.7.2/_images/cassandra_stress_test_result_1.png b/james-distributed-app/3.7.2/_images/cassandra_stress_test_result_1.png
new file mode 100644
index 000000000..b4ab9fafa
Binary files /dev/null and b/james-distributed-app/3.7.2/_images/cassandra_stress_test_result_1.png differ
diff --git a/james-distributed-app/3.7.2/_images/cassandra_stress_test_result_2.png b/james-distributed-app/3.7.2/_images/cassandra_stress_test_result_2.png
new file mode 100644
index 000000000..189f602a5
Binary files /dev/null and b/james-distributed-app/3.7.2/_images/cassandra_stress_test_result_2.png differ
diff --git a/james-distributed-app/3.7.2/_images/james-hexagons-extensions.png b/james-distributed-app/3.7.2/_images/james-hexagons-extensions.png
new file mode 100644
index 000000000..6e228e20f
Binary files /dev/null and b/james-distributed-app/3.7.2/_images/james-hexagons-extensions.png differ
diff --git a/james-distributed-app/3.7.2/_images/james-imap-base-performance.png b/james-distributed-app/3.7.2/_images/james-imap-base-performance.png
new file mode 100644
index 000000000..1caa11dc4
Binary files /dev/null and b/james-distributed-app/3.7.2/_images/james-imap-base-performance.png differ
diff --git a/james-distributed-app/3.7.2/_images/preload-dashboards.png b/james-distributed-app/3.7.2/_images/preload-dashboards.png
new file mode 100644
index 000000000..8ecc77fd5
Binary files /dev/null and b/james-distributed-app/3.7.2/_images/preload-dashboards.png differ
diff --git a/james-distributed-app/3.7.2/_images/remote-delivery-error-handling.png b/james-distributed-app/3.7.2/_images/remote-delivery-error-handling.png
new file mode 100644
index 000000000..7e0665a0a
Binary files /dev/null and b/james-distributed-app/3.7.2/_images/remote-delivery-error-handling.png differ
diff --git a/james-distributed-app/3.7.2/_images/server-components.png b/james-distributed-app/3.7.2/_images/server-components.png
new file mode 100644
index 000000000..30112d9a3
Binary files /dev/null and b/james-distributed-app/3.7.2/_images/server-components.png differ
diff --git a/james-distributed-app/3.7.2/_images/specialized-instances.png b/james-distributed-app/3.7.2/_images/specialized-instances.png
new file mode 100644
index 000000000..687cefe89
Binary files /dev/null and b/james-distributed-app/3.7.2/_images/specialized-instances.png differ
diff --git a/james-distributed-app/3.7.2/_images/storage.png b/james-distributed-app/3.7.2/_images/storage.png
new file mode 100644
index 000000000..d52322aaa
Binary files /dev/null and b/james-distributed-app/3.7.2/_images/storage.png differ
diff --git a/james-distributed-app/3.7.2/_images/webAdmin.png b/james-distributed-app/3.7.2/_images/webAdmin.png
new file mode 100644
index 000000000..a0b88a9d8
Binary files /dev/null and b/james-distributed-app/3.7.2/_images/webAdmin.png differ
diff --git a/james-distributed-app/3.7.2/architecture/consistency-model.html b/james-distributed-app/3.7.2/architecture/consistency-model.html
new file mode 100644
index 000000000..655c7df59
--- /dev/null
+++ b/james-distributed-app/3.7.2/architecture/consistency-model.html
@@ -0,0 +1,583 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <title>Distributed James Server — Consistency Model :: Apache James</title>
+ <meta name="generator" content="Antora 2.3.4">
+ <link rel="stylesheet" href="../../../_/css/site.css">
+ <script>var uiRootPath = '../../../_'</script>
+ </head>
+ <body class="article">
+<header class="header">
+ <nav class="navbar">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="https://james.apache.org"><img src="/_/img/james.svg" alt="james logo"> Apache James</a>
+ <button class="navbar-burger" data-target="topbar-nav">
+ <span></span>
+ <span></span>
+ <span></span>
+ </button>
+ </div>
+ <div id="topbar-nav" class="navbar-menu">
+ <div class="navbar-end">
+ <a class="navbar-item" href="#">Home</a>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Products</a>
+ <div class="navbar-dropdown">
+ <div class="navbar-item"><strong>James server</strong></div>
+ <a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
+ <a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
+ <hr class="navbar-divider">
+ <a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
+ <a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
+ <a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
+ <a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
+ <a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
+ </div>
+ </div>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Community</a>
+ <div class="navbar-dropdown">
+ <!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
+ <a class="navbar-item" href="/james-project/3.6.0/community/mailing-lists.html">Mailing lists</a>
+ <a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
+ <a class="navbar-item" href="https://twitter.com/ApacheJames">
+ <span class="icon">
+ <svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
+ <path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.1 [...]
+ </svg>
+ </span> Twitter
+ </a>
+ <a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 [...]
+ </div>
+ </div>
+<!-- <div class="navbar-item">
+ <span class="control">
+ <a class="button is-primary" href="#">Download</a>
+ </span>
+ </div> -->
+ </div>
+ </div>
+ </nav>
+</header>
+<div class="body">
+<div class="nav-container" data-component="james-distributed-app" data-version="3.7.2">
+ <aside class="nav">
+ <div class="panels">
+<div class="nav-panel-menu is-active" data-panel="menu">
+ <nav class="nav-menu">
+ <h3 class="title"><a href="../index.html">Apache James Distributed Server</a></h3>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="0">
+<ul class="nav-list">
+ <li class="nav-item" data-depth="1">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../index.html">Distributed James Application</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../objectives.html">Objectives and motivation</a>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="index.html">Architecture</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="implemented-standards.html">Implemented standards</a>
+ </li>
+ <li class="nav-item is-current-page" data-depth="3">
+ <a class="nav-link" href="consistency-model.html">Consistency Model</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="specialized-instances.html">Specialized instances</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/index.html">Run</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-java.html">Run with Java</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-docker.html">Run with Docker</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/run-kubernetes.html">Run with Kubernetes</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-checklist.html">Deployment Checklist</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-logsMetrics.html">Logs & Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-values.html">values.yaml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-secrets.html">secrets.yaml</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../configure/index.html">Configuration</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Protocols</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/imap.html">imapserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/jmap.html">jmap.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/jmx.html">jmx.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/smtp.html">smtpserver.xml & lmtpserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/smtp-hooks.html">Packaged SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/pop3.html">pop3server.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/webadmin.html">webadmin.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/ssl.html">SSL & TLS</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/sieve.html">Sieve & ManageSieve</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Storage dependencies</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/blobstore.html">blobstore.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/cassandra.html">cassandra.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/opensearch.html">opensearch.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/rabbitmq.html">rabbitmq.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/redis.html">redis.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/tika.html">tika.properties</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Core components</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/batchsizes.html">batchsizes.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/dns.html">dnsservice.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/domainlist.html">domainlist.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/healthcheck.html">healthcheck.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailetcontainer.html">mailetcontainer.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailets.html">Packaged Mailets</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/matchers.html">Packaged Matchers</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailrepositorystore.html">mailrepositorystore.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/recipientrewritetable.html">recipientrewritetable.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/usersrepository.html">usersrepository.xml</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Extensions</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/vault.html">deletedMessageVault.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/extensions.html">extensions.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/listeners.html">listeners.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/spam.html">Anti-Spam setup</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/remote-delivery-error-handling.html">About RemoteDelivery error handling</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/collecting-contacts.html">Contact collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/collecting-events.html">Event collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/dsn.html">ESMTP DSN support</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../operate/index.html">Operate</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/guide.html">Operator guide</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/logging.html">Logging</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/webadmin.html">WebAdmin REST administration API</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/metrics.html">Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/migrating.html">Migrating existing data</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cli.html">Command Line Interface</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cassandra-migration.html">Cassandra migration</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/security.html">Security checklist</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../extending/index.html">Extending server behavior</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mail-processing.html">Custom mail processing components</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mailbox-listeners.html">Custom Mailbox Listeners</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/smtp-hooks.html">Custom SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/webadmin-routes.html">Custom WebAdmin routes</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../benchmark/index.html">Performance benchmark</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/db-benchmark.html">Database benchmarks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/james-benchmark.html">James benchmarks</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </nav>
+</div>
+<div class="nav-panel-explore" data-panel="explore">
+ <div class="context">
+ <span class="title">Apache James Distributed Server</span>
+ <span class="version">3.7.2 SNAPSHOT</span>
+ </div>
+ <ul class="components">
+ <li class="component is-current">
+ <a class="title" href="../index.html">Apache James Distributed Server</a>
+ <ul class="versions">
+ <li class="version is-current is-latest">
+ <a href="../index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-project/3.7.2/index.html">Apache James Server</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-project/3.7.2/index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ <li class="version">
+ <a href="../../../james-project/3.6.0/index.html">3.6.0 Snapshot</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-site/latest/index.html">Apache James Site</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-site/latest/index.html">latest</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+</div>
+ </div>
+ </aside>
+</div>
+<main class="article">
+<div class="toolbar" role="navigation">
+<button class="nav-toggle"></button>
+ <a href="../../../james-site/latest/homepage.html" class="home-link"></a>
+<nav class="breadcrumbs" aria-label="breadcrumbs">
+ <ul>
+ <li><a href="../index.html">Apache James Distributed Server</a></li>
+ <li><a href="../index.html">Distributed James Application</a></li>
+ <li><a href="index.html">Architecture</a></li>
+ <li><a href="consistency-model.html">Consistency Model</a></li>
+ </ul>
+</nav>
+ <div class="edit-this-page"><a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/architecture/consistency-model.adoc">Edit this Page</a></div>
+ </div>
+ <div class="content">
+<aside class="toc sidebar" data-title="Contents" data-levels="2">
+ <div class="toc-menu"></div>
+</aside>
+<article class="doc">
+<h1 class="page">Distributed James Server — Consistency Model</h1>
+<div id="preamble">
+<div class="sectionbody">
+<div class="paragraph">
+<p>This page presents the consistency model used by the Distributed Server and
+points to the tools built around it.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_data_replication"><a class="anchor" href="#_data_replication"></a>Data Replication</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The Distributed Server relies on different storage technologies, all having their own
+consistency models.</p>
+</div>
+<div class="paragraph">
+<p>These data stores replicate data in order to enforce some level of availability. We call
+this process replication. By consistency, we mean the ability for all replica to hold the
+same data. By availability, we mean the ability for a replica to answer a request.</p>
+</div>
+<div class="paragraph">
+<p>In distributed systems, <a href="https://en.wikipedia.org/wiki/CAP_theorem">according to the CAP theorem</a>,
+as we will necessarily encounter network partitions, then trade-offs need to be made between
+consistency and availability.</p>
+</div>
+<div class="paragraph">
+<p>This section details this trade-off for data stores used by the Distributed Server.</p>
+</div>
+<div class="sect2">
+<h3 id="_cassandra_consistency_model"><a class="anchor" href="#_cassandra_consistency_model"></a>Cassandra consistency model</h3>
+<div class="paragraph">
+<p><a href="https://cassandra.apache.org/">Cassandra</a> is an
+<a href="https://en.wikipedia.org/wiki/Eventual_consistency">eventually consistent</a> data store.
+This means that replica can hold diverging data, but are guaranteed to converge over time.</p>
+</div>
+<div class="paragraph">
+<p>Several mechanisms are built in Cassandra to enforce this convergence, and need to be
+leveraged by <strong>Distributed Server Administrator</strong>. Namely
+<a href="https://docs.datastax.com/en/dse/5.1/dse-admin/datastax_enterprise/tools/nodetool/toolsRepair.html">nodetool repair</a>,
+<a href="https://cassandra.apache.org/doc/latest/operating/hints.html">Hinted hand-off</a> and
+<a href="https://cassandra.apache.org/doc/latest/operating/read_repair.html">Read repair</a>.</p>
+</div>
+<div class="paragraph">
+<p>The Distributed Server tries to mitigate inconsistencies by relying on
+<a href="https://docs.datastax.com/en/archived/cassandra/3.0/cassandra/dml/dmlConfigConsistency.html">QUORUM</a> read and write levels.
+This means that a majority of replica are needed for read and write operations to be performed.</p>
+</div>
+<div class="paragraph">
+<p>Critical business operations, like UID allocation, rely on strong consistency mechanisms brought by
+<a href="https://www.datastax.com/blog/2013/07/lightweight-transactions-cassandra-20">lightweight transaction</a>.</p>
+</div>
+<div class="sect3">
+<h4 id="_about_multi_data_center_setups"><a class="anchor" href="#_about_multi_data_center_setups"></a>About multi data-center setups</h4>
+<div class="paragraph">
+<p>As strong consistency is required for some operation, especially regarding IMAP monotic UID and MODSEQ generation,
+and as lightweight transactions are slow across data centers, running James with a
+<a href="https://docs.datastax.com/en/ddac/doc/datastax_enterprise/production/DDACmultiDCperWorkloadType.html">multi data-center</a>
+Cassandra setup is discouraged.</p>
+</div>
+<div class="paragraph">
+<p>However, <a href="../configure/cassandra.html" class="page">this page</a> enables setting alternative read level,
+which could be acceptable regarding limited requirements. <code>LOCAL_QUORUM</code> coupled with <code>LOCAL_SERIAL</code>
+is likely the only scalable setup. Some options were added to turn off SERIAL consistency usage for message
+and mailbox management. However, the use of Lightweight Transaction cannot be disabled for UIDs and ModSeqs.</p>
+</div>
+<div class="paragraph">
+<p>Running the Distributed Server IMAP server in a multi datacenter setup will likely result either in data loss,
+or very slow operations - as we rely on monotic UID generation, without strong consistency, UIDs could be allocated
+several times.</p>
+</div>
+<div class="paragraph">
+<p>We did wire a multi-DC friendly distributed, POP3 only server that leverages acceptable performance while staying
+consistent. This is achieved by having a reduced feature set - supporting only the POP3 server and using messageIds as
+identifiers (generated without synchronisation using TimeUUIDs). You can find this application
+<a href="https://github.com/apache/james-project/tree/master/server/apps/distributed-pop3-app">on GitHub</a>. In the future,
+JMAP support could be added, but requires followup developments as some components critically depends on UIDs
+(for instance the search).</p>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_opensearch_consistency_model"><a class="anchor" href="#_opensearch_consistency_model"></a>OpenSearch consistency model</h3>
+<div class="paragraph">
+<p>OpenSearch relies on <a href="https://www.elastic.co/blog/a-new-era-for-cluster-coordination-in-elasticsearch">strong consistency</a>
+with home grown algorithm.</p>
+</div>
+<div class="paragraph">
+<p>The 6.x release line, that the distributed server is using is known to be slow to recover from failures.</p>
+</div>
+<div class="paragraph">
+<p>Be aware that data is asynchronously indexed in OpenSearch, changes will be eventually visible.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_rabbitmq_consistency_model"><a class="anchor" href="#_rabbitmq_consistency_model"></a>RabbitMQ consistency model</h3>
+<div class="paragraph">
+<p>The Distributed Server relies out of the box on a single RabbitMQ server, thus consistency concerns
+are not (yet) applicable. Availability concerns are applicable.</p>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_denormalization"><a class="anchor" href="#_denormalization"></a>Denormalization</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>In Cassandra, data needs to be structured to match the read patterns. To support several conflicting
+read patterns, the data needs to be duplicated into different structures. This process is called
+denormalization.</p>
+</div>
+<div class="paragraph">
+<p>While data can be consistent at the table level, some inconsistencies can sneak in at the applicative
+level across denormalization tables.</p>
+</div>
+<div class="paragraph">
+<p>We write to a "table of truth" first, then duplicate the data to denormalization tables.</p>
+</div>
+<div class="paragraph">
+<p>The Distributed server offers several mechanisms to mitigate these inconsistencies:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Writes to denormalization tables are retried.</p>
+</li>
+<li>
+<p>Some <a href="../operate/guide.html#_solving_cassandra_inconsistencies" class="page">SolveInconsistencies tasks</a> are exposed and are able to heal a given denormalization table.
+They reset the "deduplication tables" content to the "table of truth" content.</p>
+</li>
+<li>
+<p><a href="https://github.com/apache/james-project/blob/master/src/adr/0042-applicative-read-repairs.md">Read repairs</a>,
+when implemented for a given denormalization, enables auto-healing. When an inconsistency is detected, They reset the
+"deduplication tables" entry to the "table of truth" entry.</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_consistency_across_data_stores"><a class="anchor" href="#_consistency_across_data_stores"></a>Consistency across data stores</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The Distributed Server leverages several data stores:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Cassandra is used for metadata storage</p>
+</li>
+<li>
+<p>OpenSearch for search</p>
+</li>
+<li>
+<p>Object Storage for large object storage</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Thus the Distributed Server also offers mechanisms to enforce consistency across data stores.</p>
+</div>
+<div class="sect2">
+<h3 id="_write_path_organisation"><a class="anchor" href="#_write_path_organisation"></a>Write path organisation</h3>
+<div class="paragraph">
+<p>The primary data stores are composed of Cassandra for metadata and Object storage for binary data.</p>
+</div>
+<div class="paragraph">
+<p>To ensure the data referenced in Cassandra is pointing to a valid object in the object store, we write
+the object store payload first, then write the corresponding metadata in Cassandra.</p>
+</div>
+<div class="paragraph">
+<p>Such a procedure avoids metadata pointing to unexisting blobs, however might lead to some unreferenced
+blobs.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_cassandra_opensearch"><a class="anchor" href="#_cassandra_opensearch"></a>Cassandra <⇒ OpenSearch</h3>
+<div class="paragraph">
+<p>After being written to the primary stores (namely Cassandra & Object Storage), email content is
+asynchronously indexed into OpenSearch.</p>
+</div>
+<div class="paragraph">
+<p>This process, called the EventBus, which retries temporary errors, and stores transient errors for
+later admin-triggered retries is described further <a href="../operate/guide.html#_mailbox_event_bus" class="page">here</a>.
+His role is to spread load and limit inconsistencies.</p>
+</div>
+<div class="paragraph">
+<p>Furthermore, some <a href="../operate/guide.html#_usual_troubleshooting_procedures" class="page">re-indexing tasks</a>
+enables to re-synchronise OpenSearch content with the primary data stores</p>
+</div>
+</div>
+</div>
+</div>
+</article>
+ </div>
+</main>
+</div>
+<footer class="footer">
+ <p>This page was built using the Antora default UI.</p>
+ <p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
+</footer>
+<script id="site-script" src="../../../_/js/site.js" data-ui-root-path="../../../_"></script>
+<script async src="../../../_/js/vendor/highlight.js"></script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/james-distributed-app/3.7.2/architecture/implemented-standards.html b/james-distributed-app/3.7.2/architecture/implemented-standards.html
new file mode 100644
index 000000000..867e2536c
--- /dev/null
+++ b/james-distributed-app/3.7.2/architecture/implemented-standards.html
@@ -0,0 +1,709 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <title>Distributed James Server — Implemented standards :: Apache James</title>
+ <meta name="generator" content="Antora 2.3.4">
+ <link rel="stylesheet" href="../../../_/css/site.css">
+ <script>var uiRootPath = '../../../_'</script>
+ </head>
+ <body class="article">
+<header class="header">
+ <nav class="navbar">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="https://james.apache.org"><img src="/_/img/james.svg" alt="james logo"> Apache James</a>
+ <button class="navbar-burger" data-target="topbar-nav">
+ <span></span>
+ <span></span>
+ <span></span>
+ </button>
+ </div>
+ <div id="topbar-nav" class="navbar-menu">
+ <div class="navbar-end">
+ <a class="navbar-item" href="#">Home</a>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Products</a>
+ <div class="navbar-dropdown">
+ <div class="navbar-item"><strong>James server</strong></div>
+ <a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
+ <a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
+ <hr class="navbar-divider">
+ <a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
+ <a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
+ <a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
+ <a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
+ <a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
+ </div>
+ </div>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Community</a>
+ <div class="navbar-dropdown">
+ <!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
+ <a class="navbar-item" href="/james-project/3.6.0/community/mailing-lists.html">Mailing lists</a>
+ <a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
+ <a class="navbar-item" href="https://twitter.com/ApacheJames">
+ <span class="icon">
+ <svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
+ <path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.1 [...]
+ </svg>
+ </span> Twitter
+ </a>
+ <a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 [...]
+ </div>
+ </div>
+<!-- <div class="navbar-item">
+ <span class="control">
+ <a class="button is-primary" href="#">Download</a>
+ </span>
+ </div> -->
+ </div>
+ </div>
+ </nav>
+</header>
+<div class="body">
+<div class="nav-container" data-component="james-distributed-app" data-version="3.7.2">
+ <aside class="nav">
+ <div class="panels">
+<div class="nav-panel-menu is-active" data-panel="menu">
+ <nav class="nav-menu">
+ <h3 class="title"><a href="../index.html">Apache James Distributed Server</a></h3>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="0">
+<ul class="nav-list">
+ <li class="nav-item" data-depth="1">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../index.html">Distributed James Application</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../objectives.html">Objectives and motivation</a>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="index.html">Architecture</a>
+<ul class="nav-list">
+ <li class="nav-item is-current-page" data-depth="3">
+ <a class="nav-link" href="implemented-standards.html">Implemented standards</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="consistency-model.html">Consistency Model</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="specialized-instances.html">Specialized instances</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/index.html">Run</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-java.html">Run with Java</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-docker.html">Run with Docker</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/run-kubernetes.html">Run with Kubernetes</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-checklist.html">Deployment Checklist</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-logsMetrics.html">Logs & Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-values.html">values.yaml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-secrets.html">secrets.yaml</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../configure/index.html">Configuration</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Protocols</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/imap.html">imapserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/jmap.html">jmap.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/jmx.html">jmx.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/smtp.html">smtpserver.xml & lmtpserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/smtp-hooks.html">Packaged SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/pop3.html">pop3server.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/webadmin.html">webadmin.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/ssl.html">SSL & TLS</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/sieve.html">Sieve & ManageSieve</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Storage dependencies</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/blobstore.html">blobstore.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/cassandra.html">cassandra.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/opensearch.html">opensearch.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/rabbitmq.html">rabbitmq.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/redis.html">redis.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/tika.html">tika.properties</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Core components</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/batchsizes.html">batchsizes.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/dns.html">dnsservice.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/domainlist.html">domainlist.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/healthcheck.html">healthcheck.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailetcontainer.html">mailetcontainer.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailets.html">Packaged Mailets</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/matchers.html">Packaged Matchers</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailrepositorystore.html">mailrepositorystore.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/recipientrewritetable.html">recipientrewritetable.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/usersrepository.html">usersrepository.xml</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Extensions</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/vault.html">deletedMessageVault.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/extensions.html">extensions.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/listeners.html">listeners.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/spam.html">Anti-Spam setup</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/remote-delivery-error-handling.html">About RemoteDelivery error handling</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/collecting-contacts.html">Contact collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/collecting-events.html">Event collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/dsn.html">ESMTP DSN support</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../operate/index.html">Operate</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/guide.html">Operator guide</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/logging.html">Logging</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/webadmin.html">WebAdmin REST administration API</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/metrics.html">Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/migrating.html">Migrating existing data</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cli.html">Command Line Interface</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cassandra-migration.html">Cassandra migration</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/security.html">Security checklist</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../extending/index.html">Extending server behavior</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mail-processing.html">Custom mail processing components</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mailbox-listeners.html">Custom Mailbox Listeners</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/smtp-hooks.html">Custom SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/webadmin-routes.html">Custom WebAdmin routes</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../benchmark/index.html">Performance benchmark</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/db-benchmark.html">Database benchmarks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/james-benchmark.html">James benchmarks</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </nav>
+</div>
+<div class="nav-panel-explore" data-panel="explore">
+ <div class="context">
+ <span class="title">Apache James Distributed Server</span>
+ <span class="version">3.7.2 SNAPSHOT</span>
+ </div>
+ <ul class="components">
+ <li class="component is-current">
+ <a class="title" href="../index.html">Apache James Distributed Server</a>
+ <ul class="versions">
+ <li class="version is-current is-latest">
+ <a href="../index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-project/3.7.2/index.html">Apache James Server</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-project/3.7.2/index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ <li class="version">
+ <a href="../../../james-project/3.6.0/index.html">3.6.0 Snapshot</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-site/latest/index.html">Apache James Site</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-site/latest/index.html">latest</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+</div>
+ </div>
+ </aside>
+</div>
+<main class="article">
+<div class="toolbar" role="navigation">
+<button class="nav-toggle"></button>
+ <a href="../../../james-site/latest/homepage.html" class="home-link"></a>
+<nav class="breadcrumbs" aria-label="breadcrumbs">
+ <ul>
+ <li><a href="../index.html">Apache James Distributed Server</a></li>
+ <li><a href="../index.html">Distributed James Application</a></li>
+ <li><a href="index.html">Architecture</a></li>
+ <li><a href="implemented-standards.html">Implemented standards</a></li>
+ </ul>
+</nav>
+ <div class="edit-this-page"><a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/architecture/implemented-standards.adoc">Edit this Page</a></div>
+ </div>
+ <div class="content">
+<aside class="toc sidebar" data-title="Contents" data-levels="2">
+ <div class="toc-menu"></div>
+</aside>
+<article class="doc">
+<h1 class="page">Distributed James Server — Implemented standards</h1>
+<div id="preamble">
+<div class="sectionbody">
+<div class="paragraph">
+<p>This page details standards implemented by the distributed server.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_message_formats"><a class="anchor" href="#_message_formats"></a>Message formats</h2>
+<div class="sectionbody">
+<div class="ulist">
+<ul>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc5322">RFC-5322</a> Internet Message Format (MIME)</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc2045">RFC-2045</a> Format of Internet Message Bodies</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc3464">RFC-3464</a> An Extensible Message Format for Delivery Status Notifications</p>
+</li>
+<li>
+<p>James allow emmit DSNs from the mailet container.</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc8098">RFC-8098</a> Message Disposition Notification</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_tls_authentication"><a class="anchor" href="#_tls_authentication"></a>TLS & authentication</h2>
+<div class="sectionbody">
+<div class="ulist">
+<ul>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc2595.html">RFC-2595</a> TLS for IMAP, POP3, SMTP (StartTLS)</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc8314.html">RFC-8314</a> Implicit TLS</p>
+</li>
+<li>
+<p><a href="https://www.rfc-editor.org/rfc/rfc4959.html">RFC-4959</a> SASL IR: Initial client response</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc4616">RFC-4616</a> SASL plain authentication</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc8314.html">RFC-7628</a> SASL for OAUTH</p>
+</li>
+<li>
+<p>Implemented for IMAP and SMTP</p>
+</li>
+<li>
+<p>Support for OIDC standard only.</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_smtp"><a class="anchor" href="#_smtp"></a>SMTP</h2>
+<div class="sectionbody">
+<div class="ulist">
+<ul>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc5321">RFC-5321</a> SMTP Protocol</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc974">RFC-974</a> MAIL ROUTING AND THE DOMAIN SYSTEM</p>
+</li>
+<li>
+<p><a href="https://www.rfc-editor.org/rfc/rfc3461">RFC-3461</a> Simple Mail Transfer Protocol (SMTP) Service Extension for Delivery Status Notifications (DSNs)</p>
+</li>
+<li>
+<p>Requires extra configuration.</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc1652">RFC-1652</a> SMTP Service Extension for 8bit-MIME transport</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc1830">RFC-1830</a> SMTP Service Extensions for Transmission of Large and Binary MIME Messages</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc1869">RFC-1869</a> SMTP Service Extensions</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc1870">RFC-1870</a> SMTP Service Extension for Message Size Declaration</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc1891">RFC-1891</a> SMTP Service Extension for Delivery Status Notifications</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc1893">RFC-1893</a> Enhanced Mail System Status Codes</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc2034">RFC-2034</a> SMTP Service Extension for Returning Enhanced Error Codes</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc2142">RFC-2142</a> Mailbox Names For Common Services, Roles And Functions</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc2197">RFC-2197</a> SMTP Service Extension for Command Pipelining</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc2554">RFC-2554</a> ESMTP Service Extension for Authentication</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc1893">RFC-1893</a> Enhanced Mail System Status Codes</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_lmtp"><a class="anchor" href="#_lmtp"></a>LMTP</h2>
+<div class="sectionbody">
+<div class="ulist">
+<ul>
+<li>
+<p><a href="https://james.apache.org/server/rfclist/lmtp/rfc2033.txt">RFC-2033</a> LMTP Local Mail Transfer Protocol</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_imap"><a class="anchor" href="#_imap"></a>IMAP</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The following IMAP specifications are implemented:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc3501.html">RFC-3501</a> INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc2177.html">RFC-2177</a> IMAP IDLE (mailbox scoped push notifications)</p>
+</li>
+<li>
+<p><a href="https://www.rfc-editor.org/rfc/rfc9208.html">RFC-9208</a> IMAP QUOTA Extension</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc2342.html">RFC-2342</a> IMAP namespace</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc2088.html">RFC-2088</a> IMAP non synchronized literals</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc4315.html">RFC-4315</a> IMAP UIDPLUS</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc5464.html">RFC-5464</a> IMAP Metadata (annotations on mailboxes)</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc4551.html">RFC-4551</a> IMAP Condstore</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc5162.html">RFC-5162</a> IMAP QRESYNC (synchronisation semantic for deleted messages)</p>
+</li>
+<li>
+<p>We don’t store a log of deleted modseq thus clients should rely on known sequences mechanism to optimize exchanges.</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc4978.html">RFC-4978</a> IMAP Compress (optional)</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc5161.html">RFC-5161</a> IMAP ENABLE</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc6851.html">RFC-6851</a> IMAP MOVE command</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc5182.html">RFC-5182</a> IMAP Extension for Referencing the Last SEARCH Result</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc5032.html">RFC-5032</a> IMAP WITHIN (for relative date search semantic)</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc4731.html">RFC-4731</a> IMAP ESEARCH: extentions for IMAP search: new options like min, max, count.</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc3348.html">RFC-3348</a> IMAP Child Mailbox Extension</p>
+</li>
+<li>
+<p><a href="https://www.rfc-editor.org/rfc/rfc8508.html">RFC-8508</a> IMAP Replace Extension</p>
+</li>
+<li>
+<p><a href="https://www.rfc-editor.org/rfc/rfc7889.html">RFC-7889</a> IMAP Extension for APPENDLIMIT</p>
+</li>
+<li>
+<p><a href="https://www.rfc-editor.org/rfc/rfc8474.html">RFC-8474</a> IMAP Extension for Object Identifiers</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc2971.html">RFC-2971</a> IMAP ID Extension</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc8438.html">RFC-8438</a> IMAP Extension for STATUS=SIZE</p>
+</li>
+<li>
+<p><a href="https://www.rfc-editor.org/rfc/rfc5258.html">RFC-5258</a> IMAP LIST Command Extensions</p>
+</li>
+<li>
+<p><a href="https://www.rfc-editor.org/rfc/rfc5819.html">RFC-5819</a> IMAP4 Extension for Returning STATUS Information in Extended LIST</p>
+</li>
+<li>
+<p><a href="https://www.rfc-editor.org/rfc/rfc8440.html">RFC-8440</a> IMAP4 Extension for Returning MYRIGHTS Information in Extended LIST</p>
+</li>
+<li>
+<p><a href="https://www.rfc-editor.org/rfc/rfc8440.html">RFC-6154</a> IMAP LIST Extension for Special-Use Mailboxes</p>
+</li>
+<li>
+<p><a href="https://www.rfc-editor.org/rfc/rfc8514.html">RFC-8514</a> IMAP SAVEDATE Extension</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Partially implemented specifications:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc4314.html">RFC-4314</a> IMAP ACL</p>
+</li>
+<li>
+<p>ACLs can be created and managed but mailbox not belonging to one account cannot, as of today, be accessed in IMAP.</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_jmap"><a class="anchor" href="#_jmap"></a>JMAP</h2>
+<div class="sectionbody">
+<div class="ulist">
+<ul>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc8620">RFC-8620</a> Json Metadata Application Protocol (JMAP)</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc8621">RFC-8621</a> JMAP for emails</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc8887">RFC-8887</a> JMAP over websockets</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc9007.html">RFC-9007</a> Message Delivery Notifications with JMAP.</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc8030.html">RFC-8030</a> Web PUSH: JMAP enable sending push notifications through a push gateway.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p><a href="https://jmap.io/">JMAP</a> is intended to be a new standard for email clients to connect to mail
+stores. It therefore intends to primarily replace IMAP + SMTP submission. It is also designed to be more
+generic. It does not replace MTA-to-MTA SMTP transmission.</p>
+</div>
+<div class="paragraph">
+<p>The <a href="https://github.com/apache/james-project/tree/master/server/protocols/jmap-rfc-8621/doc/specs/spec">annotated documentation</a>
+presents the limits of the JMAP RFC-8621 implementation part of the Apache James project.</p>
+</div>
+<div class="paragraph">
+<p>Some methods / types are not yet implemented, some implementations are naive, and the PUSH is not supported yet.</p>
+</div>
+<div class="paragraph">
+<p>Users are invited to read these limitations before using actively the JMAP RFC-8621 implementation, and should ensure their
+client applications only uses supported operations.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_pop3"><a class="anchor" href="#_pop3"></a>POP3</h2>
+<div class="sectionbody">
+<div class="ulist">
+<ul>
+<li>
+<p><a href="https://www.ietf.org/rfc/rfc1939.txt">RFC-1939</a> Post Office Protocol - Version 3</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_managesieve"><a class="anchor" href="#_managesieve"></a>ManageSieve</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Support for manageSieve is experimental.</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc5804">RFC-5804</a> A Protocol for Remotely Managing Sieve Scripts</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_sieve"><a class="anchor" href="#_sieve"></a>Sieve</h2>
+<div class="sectionbody">
+<div class="ulist">
+<ul>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc5228">RFC-5228</a> Sieve: An Email Filtering Language</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc5173">RFC-5173</a> Sieve Email Filtering: Body Extension</p>
+</li>
+<li>
+<p><a href="https://datatracker.ietf.org/doc/html/rfc5230">RFC-5230</a> Sieve Email Filtering: Vacation Extension</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</article>
+ </div>
+</main>
+</div>
+<footer class="footer">
+ <p>This page was built using the Antora default UI.</p>
+ <p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
+</footer>
+<script id="site-script" src="../../../_/js/site.js" data-ui-root-path="../../../_"></script>
+<script async src="../../../_/js/vendor/highlight.js"></script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/james-distributed-app/3.7.2/architecture/index.html b/james-distributed-app/3.7.2/architecture/index.html
new file mode 100644
index 000000000..67dc26da7
--- /dev/null
+++ b/james-distributed-app/3.7.2/architecture/index.html
@@ -0,0 +1,966 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <title>Distributed James Server — Architecture :: Apache James</title>
+ <meta name="generator" content="Antora 2.3.4">
+ <link rel="stylesheet" href="../../../_/css/site.css">
+ <script>var uiRootPath = '../../../_'</script>
+ </head>
+ <body class="article">
+<header class="header">
+ <nav class="navbar">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="https://james.apache.org"><img src="/_/img/james.svg" alt="james logo"> Apache James</a>
+ <button class="navbar-burger" data-target="topbar-nav">
+ <span></span>
+ <span></span>
+ <span></span>
+ </button>
+ </div>
+ <div id="topbar-nav" class="navbar-menu">
+ <div class="navbar-end">
+ <a class="navbar-item" href="#">Home</a>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Products</a>
+ <div class="navbar-dropdown">
+ <div class="navbar-item"><strong>James server</strong></div>
+ <a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
+ <a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
+ <hr class="navbar-divider">
+ <a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
+ <a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
+ <a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
+ <a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
+ <a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
+ </div>
+ </div>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Community</a>
+ <div class="navbar-dropdown">
+ <!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
+ <a class="navbar-item" href="/james-project/3.6.0/community/mailing-lists.html">Mailing lists</a>
+ <a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
+ <a class="navbar-item" href="https://twitter.com/ApacheJames">
+ <span class="icon">
+ <svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
+ <path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.1 [...]
+ </svg>
+ </span> Twitter
+ </a>
+ <a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 [...]
+ </div>
+ </div>
+<!-- <div class="navbar-item">
+ <span class="control">
+ <a class="button is-primary" href="#">Download</a>
+ </span>
+ </div> -->
+ </div>
+ </div>
+ </nav>
+</header>
+<div class="body">
+<div class="nav-container" data-component="james-distributed-app" data-version="3.7.2">
+ <aside class="nav">
+ <div class="panels">
+<div class="nav-panel-menu is-active" data-panel="menu">
+ <nav class="nav-menu">
+ <h3 class="title"><a href="../index.html">Apache James Distributed Server</a></h3>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="0">
+<ul class="nav-list">
+ <li class="nav-item" data-depth="1">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../index.html">Distributed James Application</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../objectives.html">Objectives and motivation</a>
+ </li>
+ <li class="nav-item is-current-page" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="index.html">Architecture</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="implemented-standards.html">Implemented standards</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="consistency-model.html">Consistency Model</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="specialized-instances.html">Specialized instances</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/index.html">Run</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-java.html">Run with Java</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-docker.html">Run with Docker</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/run-kubernetes.html">Run with Kubernetes</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-checklist.html">Deployment Checklist</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-logsMetrics.html">Logs & Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-values.html">values.yaml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-secrets.html">secrets.yaml</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../configure/index.html">Configuration</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Protocols</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/imap.html">imapserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/jmap.html">jmap.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/jmx.html">jmx.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/smtp.html">smtpserver.xml & lmtpserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/smtp-hooks.html">Packaged SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/pop3.html">pop3server.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/webadmin.html">webadmin.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/ssl.html">SSL & TLS</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/sieve.html">Sieve & ManageSieve</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Storage dependencies</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/blobstore.html">blobstore.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/cassandra.html">cassandra.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/opensearch.html">opensearch.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/rabbitmq.html">rabbitmq.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/redis.html">redis.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/tika.html">tika.properties</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Core components</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/batchsizes.html">batchsizes.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/dns.html">dnsservice.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/domainlist.html">domainlist.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/healthcheck.html">healthcheck.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailetcontainer.html">mailetcontainer.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailets.html">Packaged Mailets</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/matchers.html">Packaged Matchers</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailrepositorystore.html">mailrepositorystore.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/recipientrewritetable.html">recipientrewritetable.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/usersrepository.html">usersrepository.xml</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Extensions</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/vault.html">deletedMessageVault.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/extensions.html">extensions.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/listeners.html">listeners.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/spam.html">Anti-Spam setup</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/remote-delivery-error-handling.html">About RemoteDelivery error handling</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/collecting-contacts.html">Contact collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/collecting-events.html">Event collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/dsn.html">ESMTP DSN support</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../operate/index.html">Operate</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/guide.html">Operator guide</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/logging.html">Logging</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/webadmin.html">WebAdmin REST administration API</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/metrics.html">Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/migrating.html">Migrating existing data</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cli.html">Command Line Interface</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cassandra-migration.html">Cassandra migration</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/security.html">Security checklist</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../extending/index.html">Extending server behavior</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mail-processing.html">Custom mail processing components</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mailbox-listeners.html">Custom Mailbox Listeners</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/smtp-hooks.html">Custom SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/webadmin-routes.html">Custom WebAdmin routes</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../benchmark/index.html">Performance benchmark</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/db-benchmark.html">Database benchmarks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/james-benchmark.html">James benchmarks</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </nav>
+</div>
+<div class="nav-panel-explore" data-panel="explore">
+ <div class="context">
+ <span class="title">Apache James Distributed Server</span>
+ <span class="version">3.7.2 SNAPSHOT</span>
+ </div>
+ <ul class="components">
+ <li class="component is-current">
+ <a class="title" href="../index.html">Apache James Distributed Server</a>
+ <ul class="versions">
+ <li class="version is-current is-latest">
+ <a href="../index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-project/3.7.2/index.html">Apache James Server</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-project/3.7.2/index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ <li class="version">
+ <a href="../../../james-project/3.6.0/index.html">3.6.0 Snapshot</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-site/latest/index.html">Apache James Site</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-site/latest/index.html">latest</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+</div>
+ </div>
+ </aside>
+</div>
+<main class="article">
+<div class="toolbar" role="navigation">
+<button class="nav-toggle"></button>
+ <a href="../../../james-site/latest/homepage.html" class="home-link"></a>
+<nav class="breadcrumbs" aria-label="breadcrumbs">
+ <ul>
+ <li><a href="../index.html">Apache James Distributed Server</a></li>
+ <li><a href="../index.html">Distributed James Application</a></li>
+ <li><a href="index.html">Architecture</a></li>
+ </ul>
+</nav>
+ <div class="edit-this-page"><a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/architecture/index.adoc">Edit this Page</a></div>
+ </div>
+ <div class="content">
+<aside class="toc sidebar" data-title="Contents" data-levels="2">
+ <div class="toc-menu"></div>
+</aside>
+<article class="doc">
+<h1 class="page">Distributed James Server — Architecture</h1>
+<div id="preamble">
+<div class="sectionbody">
+<div class="paragraph">
+<p>This sections presents the Distributed Server architecture.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_storage"><a class="anchor" href="#_storage"></a>Storage</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>In order to deliver its promises, the Distributed Server leverages the following storage strategies:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="../_images/storage.png" alt="Storage responsibilities for the Distributed Server">
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>Cassandra</strong> is used for metadata storage. Cassandra is efficient for a very high workload of small queries following
+a known pattern.</p>
+</li>
+<li>
+<p>The <strong>blob store</strong> storage interface is responsible of storing potentially large binary data. For instance
+ email bodies, headers or attachments. Different technologies can be used: <strong>Cassandra</strong>, or S3 compatible <strong>Object Storage</strong>
+(S3 or Swift).</p>
+</li>
+<li>
+<p><strong>OpenSearch</strong> component empowers full text search on emails. It also enables querying data with unplanned access
+patterns. OpenSearch throughtput do not however match the one of Cassandra thus its use is avoided upon regular workloads.</p>
+</li>
+<li>
+<p><strong>RabbitMQ</strong> enables James nodes of a same cluster to collaborate together. It is used to implement connected protocols,
+notification patterns as well as distributed resilient work queues and mail queue.</p>
+</li>
+<li>
+<p><strong>Tika</strong> (optional) enables text extraction from attachments, thus improving full text search results.</p>
+</li>
+<li>
+<p><strong><a href="https://spamassassin.apache.org/">SpamAssassin</a> or <a href="https://rspamd.com/">Rspamd</a></strong> (optional) can be used for Spam detection and user feedback is supported.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p><a href="consistency-model.html" class="page">This page</a> further details Distributed James consistency model.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_protocols"><a class="anchor" href="#_protocols"></a>Protocols</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The following protocols are supported and can be used to interact with the Distributed Server:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>SMTP</strong></p>
+</li>
+<li>
+<p><strong>IMAP</strong></p>
+</li>
+<li>
+<p><a href="../operate/webadmin.html" class="page">WebAdmin</a> REST Administration API</p>
+</li>
+<li>
+<p><strong>LMTP</strong></p>
+</li>
+<li>
+<p><strong>POP3</strong></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The following protocols should be considered experimental:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>JMAP</strong> (RFC-8620 &RFC-8621 specifications and known limitations of the James implementation are defined <a href="https://github.com/apache/james-project/tree/master/server/protocols/jmap-rfc-8621/doc">here</a>)</p>
+</li>
+<li>
+<p><strong>ManagedSieve</strong></p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The following protocols should be considered deprecated:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>JMAP-draft</strong> (draft specification as defined <a href="https://github.com/apache/james-project/tree/master/server/protocols/jmap-draft/doc">here</a>)</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Read more on <a href="implemented-standards.html" class="page">implemented standards</a>.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_topology"><a class="anchor" href="#_topology"></a>Topology</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>While it is perfectly possible to deploy homogeneous James instances, with the same configuration and thus the same
+protocols and the same responsibilities one might want to investigate in
+<a href="specialized-instances.html" class="page">'Specialized instances'</a>.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_components"><a class="anchor" href="#_components"></a>Components</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>This section presents the various components of the Distributed server, providing context about
+their interactions, and about their implementations.</p>
+</div>
+<div class="sect2">
+<h3 id="_high_level_view"><a class="anchor" href="#_high_level_view"></a>High level view</h3>
+<div class="paragraph">
+<p>Here is a high level view of the various server components and their interactions:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="../_images/server-components.png" alt="Server components mobilized for SMTP & IMAP">
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>The SMTP protocol receives a mail, and enqueue it on the MailQueue</p>
+</li>
+<li>
+<p>The MailetContainer will start processing the mail Asynchronously and will take business decisions like storing the
+email localy in a user mailbox. The behaviour of the MailetContainer is highly customizable thanks to the Mailets and
+the Matcher composibility.</p>
+</li>
+<li>
+<p>The Mailbox component is responsible of storing a user’s mails.</p>
+</li>
+<li>
+<p>The user can use the IMAP or the JMAP protocol to retrieve and read his mails.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>These components will be presented more in depth below.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_mail_processing"><a class="anchor" href="#_mail_processing"></a>Mail processing</h3>
+<div class="paragraph">
+<p>Mail processing allows to take asynchronously business decisions on
+received emails.</p>
+</div>
+<div class="paragraph">
+<p>Here are its components:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>The <code>spooler</code> takes mail out of the mailQueue and executes mail
+processing within the <code>mailet container</code>.</p>
+</li>
+<li>
+<p>The <code>mailet container</code> synchronously executes the user defined logic.
+This <code>logic' is written through the use of `mailet</code>, <code>matcher</code> and
+<code>processor</code>.</p>
+</li>
+<li>
+<p>A <code>mailet</code> represents an action: mail modification, envelop
+modification, a side effect, or stop processing.</p>
+</li>
+<li>
+<p>A <code>matcher</code> represents a condition to execute a mailet.</p>
+</li>
+<li>
+<p>A <code>processor</code> is a flow of pair of <code>matcher</code> and <code>mailet</code> executed
+sequentially. The <code>ToProcessor</code> mailet is a <code>goto</code> instruction to start
+executing another <code>processor</code></p>
+</li>
+<li>
+<p>A <code>mail repository</code> allows storage of a mail as part of its
+processing. Standard configuration relies on the following mail
+repository:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>cassandra://var/mail/error/</code> : unexpected errors that occurred
+during mail processing. Emails impacted by performance related
+exceptions, or logical bug within James code are typically stored here.
+These mails could be reprocessed once the cause of the error is fixed.
+The <code>Mail.error</code> field can help diagnose the issue. Correlation with
+logs can be achieved via the use of the <code>Mail.name</code> field.</p>
+</li>
+<li>
+<p><code>cassandra://var/mail/address-error/</code> : mail addressed to a
+non-existing recipient of a handled local domain. These mails could be
+reprocessed once the user is created, for instance.</p>
+</li>
+<li>
+<p><code>cassandra://var/mail/relay-denied/</code> : mail for whom relay was
+denied: missing authentication can, for instance, be a cause. In
+addition to prevent disasters upon miss configuration, an email review
+of this mail repository can help refine a host spammer blacklist.</p>
+</li>
+<li>
+<p><code>cassandra://var/mail/rrt-error/</code> : runtime error upon Recipient
+Rewritting occurred. This is typically due to a loop.</p>
+</li>
+</ul>
+</div>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_mail_queue"><a class="anchor" href="#_mail_queue"></a>Mail Queue</h3>
+<div class="paragraph">
+<p>An email queue is a mandatory component of SMTP servers. It is a system
+that creates a queue of emails that are waiting to be processed for
+delivery. Email queuing is a form of Message Queuing – an asynchronous
+service-to-service communication. A message queue is meant to decouple a
+producing process from a consuming one. An email queue decouples email
+reception from email processing. It allows them to communicate without
+being connected. As such, the queued emails wait for processing until
+the recipient is available to receive them. As James is an Email Server,
+it also supports mail queue as well.</p>
+</div>
+<div class="sect3">
+<h4 id="_why_mail_queue_is_necessary"><a class="anchor" href="#_why_mail_queue_is_necessary"></a>Why Mail Queue is necessary</h4>
+<div class="paragraph">
+<p>You might often need to check mail queue to make sure all emails are
+delivered properly. At first, you need to know why email queues get
+clogged. Here are the two core reasons for that:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Exceeded volume of emails</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Some mailbox providers enforce email rate limits on IP addresses. The
+limits are based on the sender reputation. If you exceeded this rate and
+queued too many emails, the delivery speed will decrease.</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Spam-related issues</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Another common reason is that your email has been busted by spam
+filters. The filters will let the emails gradually pass to analyze how
+the rest of the recipients react to the message. If there is slow
+progress, it’s okay. Your email campaign is being observed and assessed.
+If it’s stuck, there could be different reasons including the blockage
+of your IP address.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_why_combining_cassandra_rabbitmq_and_object_storage_for_mailqueue"><a class="anchor" href="#_why_combining_cassandra_rabbitmq_and_object_storage_for_mailqueue"></a>Why combining Cassandra, RabbitMQ and Object storage for MailQueue</h4>
+<div class="ulist">
+<ul>
+<li>
+<p>RabbitMQ ensures the messaging function, and avoids polling.</p>
+</li>
+<li>
+<p>Cassandra enables administrative operations such as browsing, deleting
+using a time series which might require fine performance tuning (see
+<a href="http://cassandra.apache.org/doc/latest/operating/index.html">Operating
+Casandra documentation</a>).</p>
+</li>
+<li>
+<p>Object Storage stores potentially large binary payload.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>However the current design do not implement delays. Delays allow to
+define the time a mail have to be living in the mailqueue before being
+dequeued and is used for example for exponential wait delays upon remote
+delivery retries, or</p>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_mailbox"><a class="anchor" href="#_mailbox"></a>Mailbox</h3>
+<div class="paragraph">
+<p>Storage for emails belonging for users.</p>
+</div>
+<div class="paragraph">
+<p>Metadata are stored in Cassandra while headers, bodies and attachments are stored
+within the <a href="#_blobstore">BlobStore</a>.</p>
+</div>
+<div class="sect3">
+<h4 id="_search_index"><a class="anchor" href="#_search_index"></a>Search index</h4>
+<div class="paragraph">
+<p>Emails are indexed asynchronously in OpenSearch via the <a href="#_event_bus">EventBus</a>
+in order to enpower advanced and fast email full text search.</p>
+</div>
+<div class="paragraph">
+<p>Text extraction can be set up using <a href="https://tika.apache.org/">Tika</a>, allowing
+to extract the text from attachment, allowing to search your emails based on the attachment
+textual content. In such case, the OpenSearch indexer will call a Tika server prior
+indexing.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_quotas"><a class="anchor" href="#_quotas"></a>Quotas</h4>
+<div class="paragraph">
+<p>Current Quotas of users are hold in a Cassandra projection. Limitations can be defined via
+user, domain or globally.</p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_event_bus"><a class="anchor" href="#_event_bus"></a>Event Bus</h4>
+<div class="paragraph">
+<p>Distributed James relies on an event bus system to enrich mailbox capabilities. Each
+operation performed on the mailbox will trigger related events, that can
+be processed asynchronously by potentially any James node on a
+distributed system.</p>
+</div>
+<div class="paragraph">
+<p>Many different kind of events can be triggered during a mailbox
+operation, such as:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><code>MailboxEvent</code>: event related to an operation regarding a mailbox:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>MailboxDeletion</code>: a mailbox has been deleted</p>
+</li>
+<li>
+<p><code>MailboxAdded</code>: a mailbox has been added</p>
+</li>
+<li>
+<p><code>MailboxRenamed</code>: a mailbox has been renamed</p>
+</li>
+<li>
+<p><code>MailboxACLUpdated</code>: a mailbox got its rights and permissions updated</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><code>MessageEvent</code>: event related to an operation regarding a message:</p>
+<div class="ulist">
+<ul>
+<li>
+<p><code>Added</code>: messages have been added to a mailbox</p>
+</li>
+<li>
+<p><code>Expunged</code>: messages have been expunged from a mailbox</p>
+</li>
+<li>
+<p><code>FlagsUpdated</code>: messages had their flags updated</p>
+</li>
+<li>
+<p><code>MessageMoveEvent</code>: messages have been moved from a mailbox to an
+other</p>
+</li>
+</ul>
+</div>
+</li>
+<li>
+<p><code>QuotaUsageUpdatedEvent</code>: event related to quota update</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Mailbox listeners can register themselves on this event bus system to be
+called when an event is fired, allowing to do different kind of extra
+operations on the system, like:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Current quota calculation</p>
+</li>
+<li>
+<p>Message indexation with OpenSearch</p>
+</li>
+<li>
+<p>Mailbox annotations cleanup</p>
+</li>
+<li>
+<p>Ham/spam reporting to Spam filtering system</p>
+</li>
+<li>
+<p>…</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_deleted_messages_vault"><a class="anchor" href="#_deleted_messages_vault"></a>Deleted Messages Vault</h4>
+<div class="paragraph">
+<p>Deleted Messages Vault is an interesting feature that will help James
+users have a chance to:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>retain users deleted messages for some time.</p>
+</li>
+<li>
+<p>restore & export deleted messages by various criteria.</p>
+</li>
+<li>
+<p>permanently delete some retained messages.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>If the Deleted Messages Vault is enabled when users delete their mails,
+and by that we mean when they try to definitely delete them by emptying
+the trash, James will retain these mails into the Deleted Messages
+Vault, before an email or a mailbox is going to be deleted. And only
+administrators can interact with this component via
+wref:webadmin.adoc#_deleted-messages-vault[WebAdmin] REST APIs].</p>
+</div>
+<div class="paragraph">
+<p>However, mails are not retained forever as you have to configure a
+retention period before using it (with one-year retention by default if
+not defined). It’s also possible to permanently delete a mail if needed.</p>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_data"><a class="anchor" href="#_data"></a>Data</h3>
+<div class="paragraph">
+<p>Storage for domains and users.</p>
+</div>
+<div class="paragraph">
+<p>Domains are persisted in Cassandra.</p>
+</div>
+<div class="paragraph">
+<p>Users can be managed in Cassandra, or via a LDAP (read only).</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_recipient_rewrite_tables"><a class="anchor" href="#_recipient_rewrite_tables"></a>Recipient rewrite tables</h3>
+<div class="paragraph">
+<p>Storage of Recipients Rewritting rules, in Cassandra.</p>
+</div>
+<div class="sect3">
+<h4 id="_mapping_types"><a class="anchor" href="#_mapping_types"></a>Mapping types</h4>
+<div class="paragraph">
+<p>James allows using various mapping types for better expressing the intent of your address rewritting logic:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>Domain mapping</strong>: Rewrites the domain of mail addresses. Use it for technical purposes, user will not
+be allowed to use the source in their FROM address headers. Domain mappings can be managed via the CLI and
+added via <a href="../operate/webadmin.html#_domain_mappings" class="page">WebAdmin</a></p>
+</li>
+<li>
+<p><strong>Domain aliases</strong>: Rewrites the domain of mail addresses. Express the idea that both domains can be used
+inter-changeably. User will be allowed to use the source in their FROM address headers. Domain aliases can
+be managed via <a href="../operate/webadmin.html#_get_the_list_of_aliases_for_a_domain" class="page">WebAdmin</a></p>
+</li>
+<li>
+<p><strong>Forwards</strong>: Replaces the source address by another one. Vehicles the intent of forwarding incoming mails
+to other users. Listing the forward source in the forward destinations keeps a local copy. User will not be
+allowed to use the source in their FROM address headers. Forward can
+be managed via <a href="../operate/webadmin.html#_address_forwards" class="page">WebAdmin</a></p>
+</li>
+<li>
+<p><strong>Groups</strong>: Replaces the source address by another one. Vehicles the intent of a group registration: group
+address will be swapped by group member addresses (Feature poor mailing list). User will not be
+allowed to use the source in their FROM address headers. Groups can
+be managed via <a href="../operate/webadmin.html#_address_group" class="page">WebAdmin</a></p>
+</li>
+<li>
+<p><strong>Aliases</strong>: Replaces the source address by another one. Represents user owned mail address, with which
+he can interact as if it was his main mail address. User will be allowed to use the source in their FROM
+address headers. Aliases can be managed via <a href="../operate/webadmin.html#_address_aliases" class="page">WebAdmin</a></p>
+</li>
+<li>
+<p><strong>Address mappings</strong>: Replaces the source address by another one. Use for technical purposes, this mapping type do
+not hold specific intent. Prefer using one of the above mapping types…​ User will not be allowed to use the source
+in their FROM address headers. Address mappings can be managed via the CLI or via
+<a href="../operate/webadmin.html#_address_mappings" class="page">WebAdmin</a></p>
+</li>
+<li>
+<p><strong>Regex mappings</strong>: Applies the regex on the supplied address. User will not be allowed to use the source
+in their FROM address headers. Regex mappings can be managed via the CLI or via
+<a href="../operate/webadmin.html#_regex_mapping" class="page">WebAdmin</a></p>
+</li>
+<li>
+<p><strong>Error</strong>: Throws an error upon processing. User will not be allowed to use the source
+in their FROM address headers. Errors can be managed via the CLI</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_blobstore"><a class="anchor" href="#_blobstore"></a>BlobStore</h3>
+<div class="paragraph">
+<p>Stores potentially large binary data.</p>
+</div>
+<div class="paragraph">
+<p>Mailbox component, Mail Queue component, Deleted Message Vault
+component relies on it.</p>
+</div>
+<div class="paragraph">
+<p>Supported backends include S3 compatible ObjectStorage (<a href="https://wiki.openstack.org/wiki/Swift">Swift</a>, S3 API).</p>
+</div>
+<div class="paragraph">
+<p>Encryption can be configured on top of ObjectStorage.</p>
+</div>
+<div class="paragraph">
+<p>Blobs can currently be deduplicated in order to reduce storage space. This means that two blobs with
+the same content will be stored one once.</p>
+</div>
+<div class="paragraph">
+<p>The downside is that deletion is more complicated, and a garbage collection needs to be run. A first implementation
+based on bloom filters can be used and triggered using the WebAdmin REST API.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_task_manager"><a class="anchor" href="#_task_manager"></a>Task Manager</h3>
+<div class="paragraph">
+<p>Allows to control and schedule long running tasks run by other
+components. Among other it enables scheduling, progress monitoring,
+cancelation of long running tasks.</p>
+</div>
+<div class="paragraph">
+<p>Distributed James leverage a task manager using Event Sourcing and RabbitMQ for messaging.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_event_sourcing"><a class="anchor" href="#_event_sourcing"></a>Event sourcing</h3>
+<div class="paragraph">
+<p><a href="https://martinfowler.com/eaaDev/EventSourcing.html">Event sourcing</a> implementation
+for the Distributed server stores events in Cassandra. It enables components
+to rely on event sourcing technics for taking decisions.</p>
+</div>
+<div class="paragraph">
+<p>A short list of usage are:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Data leak prevention storage</p>
+</li>
+<li>
+<p>JMAP filtering rules storage</p>
+</li>
+<li>
+<p>Validation of the MailQueue configuration</p>
+</li>
+<li>
+<p>Sending email warnings to user close to their quota</p>
+</li>
+<li>
+<p>Implementation of the TaskManager</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+</div>
+</article>
+ </div>
+</main>
+</div>
+<footer class="footer">
+ <p>This page was built using the Antora default UI.</p>
+ <p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
+</footer>
+<script id="site-script" src="../../../_/js/site.js" data-ui-root-path="../../../_"></script>
+<script async src="../../../_/js/vendor/highlight.js"></script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/james-distributed-app/3.7.2/architecture/specialized-instances.html b/james-distributed-app/3.7.2/architecture/specialized-instances.html
new file mode 100644
index 000000000..ba8f2c3a8
--- /dev/null
+++ b/james-distributed-app/3.7.2/architecture/specialized-instances.html
@@ -0,0 +1,462 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <title>Distributed James Server — Specialized instances :: Apache James</title>
+ <meta name="generator" content="Antora 2.3.4">
+ <link rel="stylesheet" href="../../../_/css/site.css">
+ <script>var uiRootPath = '../../../_'</script>
+ </head>
+ <body class="article">
+<header class="header">
+ <nav class="navbar">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="https://james.apache.org"><img src="/_/img/james.svg" alt="james logo"> Apache James</a>
+ <button class="navbar-burger" data-target="topbar-nav">
+ <span></span>
+ <span></span>
+ <span></span>
+ </button>
+ </div>
+ <div id="topbar-nav" class="navbar-menu">
+ <div class="navbar-end">
+ <a class="navbar-item" href="#">Home</a>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Products</a>
+ <div class="navbar-dropdown">
+ <div class="navbar-item"><strong>James server</strong></div>
+ <a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
+ <a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
+ <hr class="navbar-divider">
+ <a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
+ <a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
+ <a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
+ <a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
+ <a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
+ </div>
+ </div>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Community</a>
+ <div class="navbar-dropdown">
+ <!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
+ <a class="navbar-item" href="/james-project/3.6.0/community/mailing-lists.html">Mailing lists</a>
+ <a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
+ <a class="navbar-item" href="https://twitter.com/ApacheJames">
+ <span class="icon">
+ <svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
+ <path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.1 [...]
+ </svg>
+ </span> Twitter
+ </a>
+ <a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 [...]
+ </div>
+ </div>
+<!-- <div class="navbar-item">
+ <span class="control">
+ <a class="button is-primary" href="#">Download</a>
+ </span>
+ </div> -->
+ </div>
+ </div>
+ </nav>
+</header>
+<div class="body">
+<div class="nav-container" data-component="james-distributed-app" data-version="3.7.2">
+ <aside class="nav">
+ <div class="panels">
+<div class="nav-panel-menu is-active" data-panel="menu">
+ <nav class="nav-menu">
+ <h3 class="title"><a href="../index.html">Apache James Distributed Server</a></h3>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="0">
+<ul class="nav-list">
+ <li class="nav-item" data-depth="1">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../index.html">Distributed James Application</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../objectives.html">Objectives and motivation</a>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="index.html">Architecture</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="implemented-standards.html">Implemented standards</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="consistency-model.html">Consistency Model</a>
+ </li>
+ <li class="nav-item is-current-page" data-depth="3">
+ <a class="nav-link" href="specialized-instances.html">Specialized instances</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/index.html">Run</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-java.html">Run with Java</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-docker.html">Run with Docker</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/run-kubernetes.html">Run with Kubernetes</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-checklist.html">Deployment Checklist</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-logsMetrics.html">Logs & Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-values.html">values.yaml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-secrets.html">secrets.yaml</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../configure/index.html">Configuration</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Protocols</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/imap.html">imapserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/jmap.html">jmap.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/jmx.html">jmx.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/smtp.html">smtpserver.xml & lmtpserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/smtp-hooks.html">Packaged SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/pop3.html">pop3server.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/webadmin.html">webadmin.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/ssl.html">SSL & TLS</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/sieve.html">Sieve & ManageSieve</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Storage dependencies</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/blobstore.html">blobstore.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/cassandra.html">cassandra.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/opensearch.html">opensearch.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/rabbitmq.html">rabbitmq.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/redis.html">redis.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/tika.html">tika.properties</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Core components</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/batchsizes.html">batchsizes.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/dns.html">dnsservice.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/domainlist.html">domainlist.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/healthcheck.html">healthcheck.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailetcontainer.html">mailetcontainer.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailets.html">Packaged Mailets</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/matchers.html">Packaged Matchers</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailrepositorystore.html">mailrepositorystore.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/recipientrewritetable.html">recipientrewritetable.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/usersrepository.html">usersrepository.xml</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Extensions</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/vault.html">deletedMessageVault.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/extensions.html">extensions.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/listeners.html">listeners.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/spam.html">Anti-Spam setup</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/remote-delivery-error-handling.html">About RemoteDelivery error handling</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/collecting-contacts.html">Contact collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/collecting-events.html">Event collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/dsn.html">ESMTP DSN support</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../operate/index.html">Operate</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/guide.html">Operator guide</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/logging.html">Logging</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/webadmin.html">WebAdmin REST administration API</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/metrics.html">Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/migrating.html">Migrating existing data</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cli.html">Command Line Interface</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cassandra-migration.html">Cassandra migration</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/security.html">Security checklist</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../extending/index.html">Extending server behavior</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mail-processing.html">Custom mail processing components</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mailbox-listeners.html">Custom Mailbox Listeners</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/smtp-hooks.html">Custom SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/webadmin-routes.html">Custom WebAdmin routes</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../benchmark/index.html">Performance benchmark</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/db-benchmark.html">Database benchmarks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/james-benchmark.html">James benchmarks</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </nav>
+</div>
+<div class="nav-panel-explore" data-panel="explore">
+ <div class="context">
+ <span class="title">Apache James Distributed Server</span>
+ <span class="version">3.7.2 SNAPSHOT</span>
+ </div>
+ <ul class="components">
+ <li class="component is-current">
+ <a class="title" href="../index.html">Apache James Distributed Server</a>
+ <ul class="versions">
+ <li class="version is-current is-latest">
+ <a href="../index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-project/3.7.2/index.html">Apache James Server</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-project/3.7.2/index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ <li class="version">
+ <a href="../../../james-project/3.6.0/index.html">3.6.0 Snapshot</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-site/latest/index.html">Apache James Site</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-site/latest/index.html">latest</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+</div>
+ </div>
+ </aside>
+</div>
+<main class="article">
+<div class="toolbar" role="navigation">
+<button class="nav-toggle"></button>
+ <a href="../../../james-site/latest/homepage.html" class="home-link"></a>
+<nav class="breadcrumbs" aria-label="breadcrumbs">
+ <ul>
+ <li><a href="../index.html">Apache James Distributed Server</a></li>
+ <li><a href="../index.html">Distributed James Application</a></li>
+ <li><a href="index.html">Architecture</a></li>
+ <li><a href="specialized-instances.html">Specialized instances</a></li>
+ </ul>
+</nav>
+ <div class="edit-this-page"><a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/architecture/specialized-instances.adoc">Edit this Page</a></div>
+ </div>
+ <div class="content">
+<aside class="toc sidebar" data-title="Contents" data-levels="2">
+ <div class="toc-menu"></div>
+</aside>
+<article class="doc">
+<h1 class="page">Distributed James Server — Specialized instances</h1>
+<div class="paragraph">
+<p>While it is perfectly possible to deploy homogeneous James instances, with the same configuration and thus the same
+protocols and the same responsibilities one might want to investigate in 'Specialized instances'.</p>
+</div>
+<div class="paragraph">
+<p>This deployment topology consists of Distributed James servers with heterogeneous configurations on top of shared
+data-bases. Groups of James servers will thus handle various protocols and have different responsibilities.</p>
+</div>
+<div class="paragraph">
+<p>This approach limits cascading failures across protocols and services. Think of <strong>OutOfMemoryErrors</strong>, Cassandra driver
+queue overuse, CPUs starvation, etc.</p>
+</div>
+<div class="paragraph">
+<p>However, we can’t speak of micro-services here: all James instances runs the same code, James is still a monolith, and
+databases need to be shared across instances.</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="../_images/specialized-instances.png" alt="Example of Specialized instances topology">
+</div>
+</div>
+<div class="paragraph">
+<p>We speak of:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>Front-line servers</strong> serves protocols. James enables to easily turn protocols on and off. Typically, each protocol would
+be isolated in its own group of James instances: james-imap, james-jmap, james-smtp, james-webadmin, etc…​ Refer to
+protocols configuration files to learn more.</p>
+</li>
+<li>
+<p><strong>Back-office servers</strong> handles other services like:</p>
+</li>
+<li>
+<p>Mail processing.</p>
+</li>
+<li>
+<p>Remote delivery.</p>
+</li>
+<li>
+<p>Event processing.</p>
+</li>
+<li>
+<p>Task execution.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Front-line servers will likely not handle back office responsibilities (but be sure to have back-office servers that do!).</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><a href="../configure/mailetcontainer.html" class="page">Mail processing can be switched off</a>.</p>
+</li>
+<li>
+<p><a href="../configure/listeners.html" class="page">Mailbox event processing can be switched off</a>.</p>
+</li>
+<li>
+<p><a href="../configure/rabbitmq.html" class="page">Task execution can be switched off</a>.</p>
+</li>
+<li>
+<p>Remote Delivery service is not started if the RemoteDelivery mailet is not positioned in mailetcontainer.xml.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Of course, the above instances can be collocated at will, to reach some intermediate deployments with fewer
+instances to mitigate costs.</p>
+</div>
+</article>
+ </div>
+</main>
+</div>
+<footer class="footer">
+ <p>This page was built using the Antora default UI.</p>
+ <p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
+</footer>
+<script id="site-script" src="../../../_/js/site.js" data-ui-root-path="../../../_"></script>
+<script async src="../../../_/js/vendor/highlight.js"></script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/james-distributed-app/3.7.2/benchmark/db-benchmark.html b/james-distributed-app/3.7.2/benchmark/db-benchmark.html
new file mode 100644
index 000000000..336ffc5b2
--- /dev/null
+++ b/james-distributed-app/3.7.2/benchmark/db-benchmark.html
@@ -0,0 +1,1043 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <title>Distributed James Server — Database benchmarks :: Apache James</title>
+ <meta name="generator" content="Antora 2.3.4">
+ <link rel="stylesheet" href="../../../_/css/site.css">
+ <script>var uiRootPath = '../../../_'</script>
+ </head>
+ <body class="article">
+<header class="header">
+ <nav class="navbar">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="https://james.apache.org"><img src="/_/img/james.svg" alt="james logo"> Apache James</a>
+ <button class="navbar-burger" data-target="topbar-nav">
+ <span></span>
+ <span></span>
+ <span></span>
+ </button>
+ </div>
+ <div id="topbar-nav" class="navbar-menu">
+ <div class="navbar-end">
+ <a class="navbar-item" href="#">Home</a>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Products</a>
+ <div class="navbar-dropdown">
+ <div class="navbar-item"><strong>James server</strong></div>
+ <a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
+ <a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
+ <hr class="navbar-divider">
+ <a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
+ <a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
+ <a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
+ <a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
+ <a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
+ </div>
+ </div>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Community</a>
+ <div class="navbar-dropdown">
+ <!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
+ <a class="navbar-item" href="/james-project/3.6.0/community/mailing-lists.html">Mailing lists</a>
+ <a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
+ <a class="navbar-item" href="https://twitter.com/ApacheJames">
+ <span class="icon">
+ <svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
+ <path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.1 [...]
+ </svg>
+ </span> Twitter
+ </a>
+ <a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 [...]
+ </div>
+ </div>
+<!-- <div class="navbar-item">
+ <span class="control">
+ <a class="button is-primary" href="#">Download</a>
+ </span>
+ </div> -->
+ </div>
+ </div>
+ </nav>
+</header>
+<div class="body">
+<div class="nav-container" data-component="james-distributed-app" data-version="3.7.2">
+ <aside class="nav">
+ <div class="panels">
+<div class="nav-panel-menu is-active" data-panel="menu">
+ <nav class="nav-menu">
+ <h3 class="title"><a href="../index.html">Apache James Distributed Server</a></h3>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="0">
+<ul class="nav-list">
+ <li class="nav-item" data-depth="1">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../index.html">Distributed James Application</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../objectives.html">Objectives and motivation</a>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../architecture/index.html">Architecture</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/implemented-standards.html">Implemented standards</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/consistency-model.html">Consistency Model</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/specialized-instances.html">Specialized instances</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/index.html">Run</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-java.html">Run with Java</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-docker.html">Run with Docker</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/run-kubernetes.html">Run with Kubernetes</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-checklist.html">Deployment Checklist</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-logsMetrics.html">Logs & Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-values.html">values.yaml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-secrets.html">secrets.yaml</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../configure/index.html">Configuration</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Protocols</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/imap.html">imapserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/jmap.html">jmap.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/jmx.html">jmx.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/smtp.html">smtpserver.xml & lmtpserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/smtp-hooks.html">Packaged SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/pop3.html">pop3server.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/webadmin.html">webadmin.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/ssl.html">SSL & TLS</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/sieve.html">Sieve & ManageSieve</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Storage dependencies</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/blobstore.html">blobstore.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/cassandra.html">cassandra.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/opensearch.html">opensearch.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/rabbitmq.html">rabbitmq.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/redis.html">redis.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/tika.html">tika.properties</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Core components</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/batchsizes.html">batchsizes.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/dns.html">dnsservice.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/domainlist.html">domainlist.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/healthcheck.html">healthcheck.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailetcontainer.html">mailetcontainer.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailets.html">Packaged Mailets</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/matchers.html">Packaged Matchers</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailrepositorystore.html">mailrepositorystore.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/recipientrewritetable.html">recipientrewritetable.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/usersrepository.html">usersrepository.xml</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Extensions</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/vault.html">deletedMessageVault.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/extensions.html">extensions.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/listeners.html">listeners.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/spam.html">Anti-Spam setup</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/remote-delivery-error-handling.html">About RemoteDelivery error handling</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/collecting-contacts.html">Contact collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/collecting-events.html">Event collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/dsn.html">ESMTP DSN support</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../operate/index.html">Operate</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/guide.html">Operator guide</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/logging.html">Logging</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/webadmin.html">WebAdmin REST administration API</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/metrics.html">Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/migrating.html">Migrating existing data</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cli.html">Command Line Interface</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cassandra-migration.html">Cassandra migration</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/security.html">Security checklist</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../extending/index.html">Extending server behavior</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mail-processing.html">Custom mail processing components</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mailbox-listeners.html">Custom Mailbox Listeners</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/smtp-hooks.html">Custom SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/webadmin-routes.html">Custom WebAdmin routes</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="index.html">Performance benchmark</a>
+<ul class="nav-list">
+ <li class="nav-item is-current-page" data-depth="3">
+ <a class="nav-link" href="db-benchmark.html">Database benchmarks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="james-benchmark.html">James benchmarks</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </nav>
+</div>
+<div class="nav-panel-explore" data-panel="explore">
+ <div class="context">
+ <span class="title">Apache James Distributed Server</span>
+ <span class="version">3.7.2 SNAPSHOT</span>
+ </div>
+ <ul class="components">
+ <li class="component is-current">
+ <a class="title" href="../index.html">Apache James Distributed Server</a>
+ <ul class="versions">
+ <li class="version is-current is-latest">
+ <a href="../index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-project/3.7.2/index.html">Apache James Server</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-project/3.7.2/index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ <li class="version">
+ <a href="../../../james-project/3.6.0/index.html">3.6.0 Snapshot</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-site/latest/index.html">Apache James Site</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-site/latest/index.html">latest</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+</div>
+ </div>
+ </aside>
+</div>
+<main class="article">
+<div class="toolbar" role="navigation">
+<button class="nav-toggle"></button>
+ <a href="../../../james-site/latest/homepage.html" class="home-link"></a>
+<nav class="breadcrumbs" aria-label="breadcrumbs">
+ <ul>
+ <li><a href="../index.html">Apache James Distributed Server</a></li>
+ <li><a href="../index.html">Distributed James Application</a></li>
+ <li><a href="index.html">Performance benchmark</a></li>
+ <li><a href="db-benchmark.html">Database benchmarks</a></li>
+ </ul>
+</nav>
+ <div class="edit-this-page"><a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/benchmark/db-benchmark.adoc">Edit this Page</a></div>
+ </div>
+ <div class="content">
+<aside class="toc sidebar" data-title="Contents" data-levels="2">
+ <div class="toc-menu"></div>
+</aside>
+<article class="doc">
+<h1 class="page">Distributed James Server — Database benchmarks</h1>
+<div id="preamble">
+<div class="sectionbody">
+<div class="paragraph">
+<p>This document provides basic performance of Distributed James' databases, benchmark methodologies as a basis for a James administrator who
+can test and evaluate if his Distributed James databases are performing well.</p>
+</div>
+<div class="paragraph">
+<p>It includes:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>A sample deployment topology</p>
+</li>
+<li>
+<p>Propose benchmark methodology and base performance for each database. This aims to help operators to quickly identify
+performance issues and compliance of their databases.</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_sample_deployment_topology"><a class="anchor" href="#_sample_deployment_topology"></a>Sample deployment topology</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>We deploy a sample topology of Distributed James with these following databases:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Apache Cassandra 4 as main database: 3 nodes, each node has 8 OVH vCores CPU and 30 GB memory limit (OVH b2-30 instance).</p>
+</li>
+<li>
+<p>OpenDistro 1.13.1 as search engine: 3 nodes, each node has 8 OVH vCores CPU and 30 GB memory limit (OVH b2-30 instance).</p>
+</li>
+<li>
+<p>RabbitMQ 3.8.17 as message queue: 3 Kubernetes pods, each pod has 0.6 OVH vCore CPU and 2 GB memory limit.</p>
+</li>
+<li>
+<p>OVH Swift S3 as an object storage</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>With the above system, our email service operates stably with valuable performance.
+For a more details, it can handle a load throughput up to about 1000 JMAP requests per second with 99th percentile latency is 400ms.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_benchmark_methodologies_and_base_performances"><a class="anchor" href="#_benchmark_methodologies_and_base_performances"></a>Benchmark methodologies and base performances</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>We are willing to share the benchmark methodologies and the result to you as a reference to evaluate your Distributed James' performance.
+Other evaluation methods are welcome, as long as your databases exhibit similar or even better performance than ours.
+It is up to your business needs. If your databases shows results that fall far from our baseline performance, there’s a good chance that
+there are problems with your system, and you need to check it out thoroughly.</p>
+</div>
+<div class="sect2">
+<h3 id="_benchmark_cassandra"><a class="anchor" href="#_benchmark_cassandra"></a>Benchmark Cassandra</h3>
+<div class="sect3">
+<h4 id="_benchmark_methodology"><a class="anchor" href="#_benchmark_methodology"></a>Benchmark methodology</h4>
+<div class="sect4">
+<h5 id="_benchmark_tool"><a class="anchor" href="#_benchmark_tool"></a>Benchmark tool</h5>
+<div class="paragraph">
+<p>We use <a href="https://cassandra.apache.org/doc/latest/cassandra/tools/cassandra_stress.html">cassandra-stress tool</a> - an official
+tool of Cassandra for stress loading tests.</p>
+</div>
+<div class="paragraph">
+<p>The cassandra-stress tool is a Java-based stress testing utility for basic benchmarking and load testing a Cassandra cluster.
+Data modeling choices can greatly affect application performance. Significant load testing over several trials is the best method for discovering issues with a particular data model. The cassandra-stress tool is an effective tool for populating a cluster and stress testing CQL tables and queries. Use cassandra-stress to:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Quickly determine how a schema performs.</p>
+</li>
+<li>
+<p>Understand how your database scales.</p>
+</li>
+<li>
+<p>Optimize your data model and settings.</p>
+</li>
+<li>
+<p>Determine production capacity.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>There are several operation types:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>write-only, read-only, and mixed workloads of standard data</p>
+</li>
+<li>
+<p>write-only and read-only workloads for counter columns</p>
+</li>
+<li>
+<p>user configured workloads, running custom queries on custom schemas</p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_how_to_benchmark"><a class="anchor" href="#_how_to_benchmark"></a>How to benchmark</h5>
+<div class="paragraph">
+<p>Here we are using a simple case to test and compare Cassandra performance between different setup environments.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">keyspace: stresscql
+
+keyspace_definition: |
+ CREATE KEYSPACE stresscql WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
+
+table: mixed_workload
+
+table_definition: |
+ CREATE TABLE mixed_workload (
+ key uuid PRIMARY KEY,
+ a blob,
+ b blob
+ ) WITH COMPACT STORAGE
+
+columnspec:
+ - name: a
+ size: uniform(1..10000)
+ - name: b
+ size: uniform(1..100000)
+
+insert:
+ partitions: fixed(1)
+
+queries:
+ read:
+ cql: select * from mixed_workload where key = ?
+ fields: samerow</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Create the yaml file as above and copy to a Cassandra node.</p>
+</div>
+<div class="paragraph">
+<p>Insert some sample data:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-bash hljs" data-lang="bash">cassandra-stress user profile=mixed_workload.yml n=100000 "ops(insert=1)" cl=ONE -mode native cql3 user=<user> password=<password> -node <IP> -rate threads=8 -graph file=./graph_insert.xml title=Benchmark revision=insert_ONE</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Read intensive scenario:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-bash hljs" data-lang="bash">cassandra-stress user profile=mixed_workload.yml n=100000 "ops(insert=1,read=4)" cl=ONE -mode native cql3 user=<user> password=<password> -node <IP> -rate threads=8 -graph file=./graph_mixed.xml title=Benchmark revision=mixed_ONE</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>In there:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>n=100000: The number of insert batches, not number of individual insert operations.</p>
+</li>
+<li>
+<p>rate threads=8: The number of concurrent threads. If not specified it will start with 4 threads and increase until server reaches a limit.</p>
+</li>
+<li>
+<p>ops(insert=1,read=4): This will execute insert and read queries in the ratio 1:4.</p>
+</li>
+<li>
+<p>graph: Export results to graph in html format.</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_sample_benchmark_result"><a class="anchor" href="#_sample_benchmark_result"></a>Sample benchmark result</h4>
+<div class="imageblock">
+<div class="content">
+<img src="../_images/cassandra_stress_test_result_1.png" alt="cassandra stress test result 1">
+</div>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="../_images/cassandra_stress_test_result_2.png" alt="cassandra stress test result 2">
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_references"><a class="anchor" href="#_references"></a>References</h4>
+<div class="paragraph">
+<p><a href="https://www.datastax.com/blog/improved-cassandra-21-stress-tool-benchmark-any-schema-part-1">Datastax - Cassandra stress tool</a></p>
+</div>
+<div class="paragraph">
+<p><a href="https://www.instaclustr.com/deep-diving-cassandra-stress-part-3-using-yaml-profiles/">Deep Diving cassandra-stress – Part 3 (Using YAML Profiles)</a></p>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_benchmark_elasticsearch"><a class="anchor" href="#_benchmark_elasticsearch"></a>Benchmark Elasticsearch</h3>
+<div class="sect3">
+<h4 id="_benchmark_methodology_2"><a class="anchor" href="#_benchmark_methodology_2"></a>Benchmark methodology</h4>
+<div class="sect4">
+<h5 id="_benchmark_tool_2"><a class="anchor" href="#_benchmark_tool_2"></a>Benchmark tool</h5>
+<div class="paragraph">
+<p>We use <a href="https://github.com/elastic/rally">EsRally</a> - an official Elasticsearch benchmarking tool. EsRally provides the following features:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Automatically create Elasticsearch clusters, stress tests them, and delete them.</p>
+</li>
+<li>
+<p>Manage stress testing data and solutions by Elasticsearch version.</p>
+</li>
+<li>
+<p>Present stress testing data in a comprehensive way, allowing you to compare and analyze the data of different stress tests and store the data on a particular Elasticsearch instance for secondary analysis.</p>
+</li>
+<li>
+<p>Collect Java Virtual Machine (JVM) details, such as memory and garbage collection (GC) data, to locate performance problems.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>You can have a look at <a href="https://elasticsearch-benchmarks.elastic.co/" class="bare">https://elasticsearch-benchmarks.elastic.co/</a> where Elasticsearch also officially uses esrally to test its performance and publishes the results in real-time.</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_how_to_benchmark_2"><a class="anchor" href="#_how_to_benchmark_2"></a>How to benchmark</h5>
+<div class="paragraph">
+<p>Please follow <a href="https://esrally.readthedocs.io/en/latest/quickstart.html?spm=a2c65.11461447.0.0.e26a498c3KJZNe">Esrally quickstart documentation</a>
+to set up it first.</p>
+</div>
+<div class="paragraph">
+<p>Let’s see which tracks (simulation profiles) that EsRally provides: <code><code>esrally list tracks</code></code>.
+For our James use case, we are interested in <code><code>pmc</code></code> track: <code><code>Full-text benchmark with academic papers from PMC</code></code>.</p>
+</div>
+<div class="paragraph">
+<p>Run the below script to benchmark against your Elasticsearch cluster:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-bash hljs" data-lang="bash">esrally race --pipeline=benchmark-only --track=[track-name] --target-host=[ip_node1:port_node1],[ip_node2:port_node2],[ip_node3:port_node3] --client-options="use_ssl:false,verify_certs:false,basic_auth_user:'[user]',basic_auth_password:'[password]'"</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>In there:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>--pipeline=benchmark-only: benchmark against a running cluster</p>
+</li>
+<li>
+<p>track-name: track you want to benchmark</p>
+</li>
+<li>
+<p>ip:port: Elasticsearch Node' socket</p>
+</li>
+<li>
+<p>--client-options: change to your Elasticsearch authentication credentials</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_sample_benchmark_result_2"><a class="anchor" href="#_sample_benchmark_result_2"></a>Sample benchmark result</h4>
+<div class="sect4">
+<h5 id="_pmc_track"><a class="anchor" href="#_pmc_track"></a>PMC track</h5>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code>| Metric | Task | Value | Unit |
+|---------------------------------------------------------------:|------------------------------:|------------:|--------:|
+| Min Throughput | index-append | 734.63 | docs/s |
+| Mean Throughput | index-append | 763.16 | docs/s |
+| Median Throughput | index-append | 746.5 | docs/s |
+| Max Throughput | index-append | 833.51 | docs/s |
+| 50th percentile latency | index-append | 4738.57 | ms |
+| 90th percentile latency | index-append | 8129.1 | ms |
+| 99th percentile latency | index-append | 11734.5 | ms |
+| 100th percentile latency | index-append | 14662.9 | ms |
+| 50th percentile service time | index-append | 4738.57 | ms |
+| 90th percentile service time | index-append | 8129.1 | ms |
+| 99th percentile service time | index-append | 11734.5 | ms |
+| 100th percentile service time | index-append | 14662.9 | ms |
+| error rate | index-append | 0 | % |
+| Min Throughput | default | 19.94 | ops/s |
+| Mean Throughput | default | 19.95 | ops/s |
+| Median Throughput | default | 19.95 | ops/s |
+| Max Throughput | default | 19.96 | ops/s |
+| 50th percentile latency | default | 23.1322 | ms |
+| 90th percentile latency | default | 25.4129 | ms |
+| 99th percentile latency | default | 29.1382 | ms |
+| 100th percentile latency | default | 29.4762 | ms |
+| 50th percentile service time | default | 21.4895 | ms |
+| 90th percentile service time | default | 23.589 | ms |
+| 99th percentile service time | default | 26.6134 | ms |
+| 100th percentile service time | default | 27.9068 | ms |
+| error rate | default | 0 | % |
+| Min Throughput | term | 19.93 | ops/s |
+| Mean Throughput | term | 19.94 | ops/s |
+| Median Throughput | term | 19.94 | ops/s |
+| Max Throughput | term | 19.95 | ops/s |
+| 50th percentile latency | term | 31.0684 | ms |
+| 90th percentile latency | term | 34.1419 | ms |
+| 99th percentile latency | term | 74.7904 | ms |
+| 100th percentile latency | term | 103.663 | ms |
+| 50th percentile service time | term | 29.6775 | ms |
+| 90th percentile service time | term | 32.4288 | ms |
+| 99th percentile service time | term | 36.013 | ms |
+| 100th percentile service time | term | 102.193 | ms |
+| error rate | term | 0 | % |
+| Min Throughput | phrase | 19.94 | ops/s |
+| Mean Throughput | phrase | 19.95 | ops/s |
+| Median Throughput | phrase | 19.95 | ops/s |
+| Max Throughput | phrase | 19.95 | ops/s |
+| 50th percentile latency | phrase | 23.0255 | ms |
+| 90th percentile latency | phrase | 26.1607 | ms |
+| 99th percentile latency | phrase | 31.2094 | ms |
+| 100th percentile latency | phrase | 45.5012 | ms |
+| 50th percentile service time | phrase | 21.5109 | ms |
+| 90th percentile service time | phrase | 24.4144 | ms |
+| 99th percentile service time | phrase | 26.1865 | ms |
+| 100th percentile service time | phrase | 43.5122 | ms |
+| error rate | phrase | 0 | % |
+
+----------------------------------
+[INFO] SUCCESS (took 1772 seconds)
+----------------------------------</code></pre>
+</div>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_pmc_custom_track"><a class="anchor" href="#_pmc_custom_track"></a>PMC custom track</h5>
+<div class="paragraph">
+<p>We customized the PMC track by increasing search throughput target to figure out our Elasticsearch cluster limit.</p>
+</div>
+<div class="paragraph">
+<p>The result is that with 25-30 request/s we have a 99th percentile latency of 1s.</p>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_references_2"><a class="anchor" href="#_references_2"></a>References</h4>
+<div class="paragraph">
+<p><a href="https://www.alibabacloud.com/blog/esrally-official-stress-testing-tool-for-elasticsearch_597102">esrally: Official Stress Testing Tool for Elasticsearch</a></p>
+</div>
+<div class="paragraph">
+<p><a href="https://esrally.readthedocs.io/en/latest/adding_tracks.html">Create a custom EsRally track</a></p>
+</div>
+<div class="paragraph">
+<p><a href="https://discuss.elastic.co/t/why-the-percentile-latency-is-several-times-more-than-service-time/69630">Why the percentile latency is several times more than service time</a></p>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_benchmark_rabbitmq"><a class="anchor" href="#_benchmark_rabbitmq"></a>Benchmark RabbitMQ</h3>
+<div class="sect3">
+<h4 id="_benchmark_methodology_3"><a class="anchor" href="#_benchmark_methodology_3"></a>Benchmark methodology</h4>
+<div class="sect4">
+<h5 id="_benchmark_tool_3"><a class="anchor" href="#_benchmark_tool_3"></a>Benchmark tool</h5>
+<div class="paragraph">
+<p>We use <a href="https://github.com/rabbitmq/rabbitmq-perf-test">rabbitmq-perf-test</a> tool.</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_how_to_benchmark_3"><a class="anchor" href="#_how_to_benchmark_3"></a>How to benchmark</h5>
+<div class="paragraph">
+<p>Using PerfTestMulti for more friendly:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Provide input scenario from a single file</p>
+</li>
+<li>
+<p>Provide output result as a single file. Can be visualized result file by the chart (graph WebUI)</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Run a command like below:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-bash hljs" data-lang="bash">bin/runjava com.rabbitmq.perf.PerfTestMulti [scenario-file] [result-file]</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>In order to visualize result, coping [result-file] to <code><code>/html/examples/[result-file]</code></code>.
+Start webserver to view graph by the command:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-bash hljs" data-lang="bash">bin/runjava com.rabbitmq.perf.WebServer</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Then browse: <a href="http://localhost:8080/examples/sample.html" class="bare">http://localhost:8080/examples/sample.html</a></p>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_sample_benchmark_result_3"><a class="anchor" href="#_sample_benchmark_result_3"></a>Sample benchmark result</h4>
+<div class="ulist">
+<ul>
+<li>
+<p>Scenario file:</p>
+</li>
+</ul>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code>[{'name': 'consume', 'type': 'simple',
+'uri': 'amqp://james:eeN7Auquaeng@localhost:5677',
+'params':
+ [{'time-limit': 30, 'producer-count': 2, 'consumer-count': 4}]}]</code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Result file:</p>
+</li>
+</ul>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-json hljs" data-lang="json">{
+ "consume": {
+ "send-bytes-rate": 0,
+ "recv-msg-rate": 4330.225080385852,
+ "avg-latency": 18975254,
+ "send-msg-rate": 455161.3183279743,
+ "recv-bytes-rate": 0,
+ "samples": [{
+ "elapsed": 15086,
+ "send-bytes-rate": 0,
+ "recv-msg-rate": 0,
+ "send-msg-rate": 0.06628662335940608,
+ "recv-bytes-rate": 0
+ },
+ {
+ "elapsed": 16086,
+ "send-bytes-rate": 0,
+ "recv-msg-rate": 1579,
+ "max-latency": 928296,
+ "min-latency": 278765,
+ "avg-latency": 725508,
+ "send-msg-rate": 388994,
+ "recv-bytes-rate": 0
+ },
+ {
+ "elapsed": 48184,
+ "send-bytes-rate": 0,
+ "recv-msg-rate": 3768.4918347742555,
+ "max-latency": 32969370,
+ "min-latency": 31852685,
+ "avg-latency": 32385432,
+ "send-msg-rate": 0,
+ "recv-bytes-rate": 0
+ },
+ {
+ "elapsed": 49186,
+ "send-bytes-rate": 0,
+ "recv-msg-rate": 4416.167664670658,
+ "max-latency": 33953465,
+ "min-latency": 32854771,
+ "avg-latency": 33373113,
+ "send-msg-rate": 0,
+ "recv-bytes-rate": 0
+ }]
+ }
+}</code></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Key result points:</p>
+</li>
+</ul>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<colgroup>
+<col style="width: 33.3333%;">
+<col style="width: 33.3333%;">
+<col style="width: 33.3334%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Metrics</th>
+<th class="tableblock halign-left valign-top">Unit</th>
+<th class="tableblock halign-left valign-top">Result</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Publisher throughput (the sending rate)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">messages / second</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">3111</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Consumer throughput (the receiving rate)</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">messages / second</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">4404</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_benchmark_s3_storage"><a class="anchor" href="#_benchmark_s3_storage"></a>Benchmark S3 storage</h3>
+<div class="sect3">
+<h4 id="_benchmark_methodology_4"><a class="anchor" href="#_benchmark_methodology_4"></a>Benchmark methodology</h4>
+<div class="sect4">
+<h5 id="_benchmark_tool_4"><a class="anchor" href="#_benchmark_tool_4"></a>Benchmark tool</h5>
+<div class="paragraph">
+<p>We use <a href="https://github.com/dvassallo/s3-benchmark">s3-benchmark</a> tool.</p>
+</div>
+</div>
+<div class="sect4">
+<h5 id="_how_to_benchmark_4"><a class="anchor" href="#_how_to_benchmark_4"></a>How to benchmark</h5>
+<div class="olist arabic">
+<ol class="arabic">
+<li>
+<p>Make sure you set up appropriate S3 credentials with <code>awscli</code>.</p>
+</li>
+<li>
+<p>If you are using a compatible S3 storage of cloud providers like OVH, you would need to configure
+<code>awscli-plugin-endpoint</code>. E.g: <a href="https://docs.ovh.com/au/en/storage/getting_started_with_the_swift_S3_API/">Getting started with the OVH Swift S3 API</a></p>
+</li>
+<li>
+<p>Install <code>s3-benchmark</code> tool and run the command:</p>
+</li>
+</ol>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-bash hljs" data-lang="bash">./s3-benchmark -endpoint=[endpoint] -region=[region] -bucket-name=[bucket-name] -payloads-min=[payload-min] -payloads-max=[payload-max] threads-max=[threads-max]</code></pre>
+</div>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_sample_benchmark_result_4"><a class="anchor" href="#_sample_benchmark_result_4"></a>Sample benchmark result</h4>
+<div class="paragraph">
+<p>We did S3 performance testing with suitable email objects sizes: 4 KB, 128 KB, 1 MB, 8 MB.</p>
+</div>
+<div class="paragraph">
+<p>Result:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code class="language-bash hljs" data-lang="bash">--- SETUP --------------------------------------------------------------------------------------------------------------------
+
+Uploading 4 KB objects
+ 100% |████████████████████████████████████████| [4s:0s]
+Uploading 128 KB objects
+ 100% |████████████████████████████████████████| [9s:0s]
+Uploading 1 MB objects
+ 100% |████████████████████████████████████████| [8s:0s]
+Uploading 8 MB objects
+ 100% |████████████████████████████████████████| [10s:0s]
+
+--- BENCHMARK ----------------------------------------------------------------------------------------------------------------
+
+Download performance with 4 KB objects (b2-30)
+ +-------------------------------------------------------------------------------------------------+
+ | Time to First Byte (ms) | Time to Last Byte (ms) |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+| Threads | Throughput | avg min p25 p50 p75 p90 p99 max | avg min p25 p50 p75 p90 p99 max |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+| 8 | 0.6 MB/s | 36 10 17 22 36 57 233 249 | 37 10 17 22 36 57 233 249 |
+| 9 | 0.6 MB/s | 30 10 15 21 33 45 82 234 | 30 10 15 21 33 45 83 235 |
+| 10 | 0.2 MB/s | 55 11 18 22 28 52 248 1075 | 55 11 18 22 28 52 249 1075 |
+| 11 | 0.3 MB/s | 66 11 18 23 45 233 293 683 | 67 11 19 23 45 233 293 683 |
+| 12 | 0.6 MB/s | 35 12 19 22 43 55 67 235 | 35 12 19 22 43 56 67 235 |
+| 13 | 0.2 MB/s | 68 11 19 26 58 79 279 1037 | 68 11 19 26 58 80 279 1037 |
+| 14 | 0.6 MB/s | 43 17 20 24 52 56 230 236 | 43 17 20 25 52 56 230 236 |
+| 15 | 0.2 MB/s | 69 11 16 23 50 66 274 1299 | 69 11 16 24 50 66 274 1299 |
+| 16 | 0.5 MB/s | 52 9 19 31 81 95 228 237 | 53 9 19 31 81 95 229 237 |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+
+Download performance with 128 KB objects (b2-30)
+ +-------------------------------------------------------------------------------------------------+
+ | Time to First Byte (ms) | Time to Last Byte (ms) |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+| Threads | Throughput | avg min p25 p50 p75 p90 p99 max | avg min p25 p50 p75 p90 p99 max |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+| 8 | 3.3 MB/s | 71 16 22 28 39 66 232 1768 | 73 16 23 29 43 67 233 1769 |
+| 9 | 3.6 MB/s | 74 9 19 23 34 58 239 1646 | 75 10 20 24 37 59 240 1647 |
+| 10 | 2.9 MB/s | 97 16 21 24 48 89 656 2034 | 99 17 21 26 49 92 657 2035 |
+| 11 | 3.0 MB/s | 100 10 21 26 39 64 1049 2029 | 101 11 21 27 40 65 1050 2030 |
+| 12 | 3.0 MB/s | 76 12 19 24 44 56 256 2012 | 77 13 20 25 48 69 258 2013 |
+| 13 | 6.1 MB/s | 73 10 13 20 43 223 505 1026 | 74 10 15 21 43 224 506 1027 |
+| 14 | 5.5 MB/s | 81 11 15 23 51 240 666 1060 | 82 12 16 23 54 241 667 1060 |
+| 15 | 2.7 MB/s | 80 10 19 28 43 59 234 2222 | 84 11 25 34 47 60 236 2224 |
+| 16 | 18.6 MB/s | 58 10 19 26 61 224 248 266 | 61 10 22 29 65 224 249 267 |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+
+Download performance with 1 MB objects (b2-30)
+ +-------------------------------------------------------------------------------------------------+
+ | Time to First Byte (ms) | Time to Last Byte (ms) |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+| Threads | Throughput | avg min p25 p50 p75 p90 p99 max | avg min p25 p50 p75 p90 p99 max |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+| 8 | 56.4 MB/s | 41 12 26 34 43 57 94 235 | 136 30 69 100 161 284 345 396 |
+| 9 | 55.2 MB/s | 53 19 32 39 50 69 238 247 | 149 26 84 117 164 245 324 655 |
+| 10 | 33.9 MB/s | 74 17 27 37 50 77 456 1060 | 177 29 97 134 205 273 484 1076 |
+| 11 | 57.3 MB/s | 56 26 35 44 57 71 251 298 | 185 40 93 129 216 329 546 871 |
+| 12 | 37.7 MB/s | 66 21 33 43 58 73 102 1024 | 202 24 81 125 205 427 839 1222 |
+| 13 | 57.6 MB/s | 59 24 35 40 58 71 275 289 | 215 40 94 181 288 393 500 674 |
+| 14 | 47.1 MB/s | 73 18 46 56 66 75 475 519 | 229 30 116 221 272 441 603 686 |
+| 15 | 58.2 MB/s | 65 11 40 51 63 75 260 294 | 243 29 132 174 265 485 831 849 |
+| 16 | 23.1 MB/s | 96 14 46 55 62 80 124 2022 | 278 31 124 187 249 634 827 2028 |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+
+Download performance with 8 MB objects (b2-30)
+ +-------------------------------------------------------------------------------------------------+
+ | Time to First Byte (ms) | Time to Last Byte (ms) |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+| Threads | Throughput | avg min p25 p50 p75 p90 p99 max | avg min p25 p50 p75 p90 p99 max |
++---------+----------------+------------------------------------------------+------------------------------------------------+
+| 8 | 58.4 MB/s | 88 35 65 79 88 96 288 307 | 1063 458 564 759 928 1151 4967 6841 |
+| 9 | 50.4 MB/s | 137 32 52 69 145 286 509 1404 | 1212 160 471 581 1720 2873 3744 4871 |
+| 10 | 58.2 MB/s | 77 46 54 66 77 98 275 285 | 1319 377 432 962 1264 3232 4266 6151 |
+| 11 | 58.4 MB/s | 97 32 63 72 80 91 323 707 | 1429 325 593 722 1648 3020 6172 6370 |
+| 12 | 58.5 MB/s | 108 26 65 81 91 261 301 519 | 1569 472 696 1101 1915 3175 4066 5110 |
+| 13 | 56.1 MB/s | 115 35 69 83 93 125 329 1092 | 1712 458 801 1165 2354 3559 3865 5945 |
+| 14 | 58.6 MB/s | 103 26 70 78 88 112 309 656 | 1807 789 999 1269 1998 3258 5201 6651 |
+| 15 | 58.3 MB/s | 113 31 55 67 79 134 276 1490 | 1947 497 1081 1756 2730 3557 3799 3974 |
+| 16 | 58.0 MB/s | 99 35 67 79 96 146 282 513 | 2091 531 882 1136 2161 6034 6686 6702 |
++---------+----------------+------------------------------------------------+------------------------------------------------+</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>We believe that the actual OVH Swift S3' throughput should be at least about 100 MB/s. This was not fully achieved due to
+network limitations of the client machine performing the benchmark.</p>
+</div>
+</div>
+</div>
+</div>
+</div>
+</article>
+ </div>
+</main>
+</div>
+<footer class="footer">
+ <p>This page was built using the Antora default UI.</p>
+ <p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
+</footer>
+<script id="site-script" src="../../../_/js/site.js" data-ui-root-path="../../../_"></script>
+<script async src="../../../_/js/vendor/highlight.js"></script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/james-distributed-app/3.7.2/benchmark/index.html b/james-distributed-app/3.7.2/benchmark/index.html
new file mode 100644
index 000000000..4d4b5aac2
--- /dev/null
+++ b/james-distributed-app/3.7.2/benchmark/index.html
@@ -0,0 +1,401 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <title>Distributed James Server — Performance testing the Distributed server :: Apache James</title>
+ <meta name="generator" content="Antora 2.3.4">
+ <link rel="stylesheet" href="../../../_/css/site.css">
+ <script>var uiRootPath = '../../../_'</script>
+ </head>
+ <body class="article">
+<header class="header">
+ <nav class="navbar">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="https://james.apache.org"><img src="/_/img/james.svg" alt="james logo"> Apache James</a>
+ <button class="navbar-burger" data-target="topbar-nav">
+ <span></span>
+ <span></span>
+ <span></span>
+ </button>
+ </div>
+ <div id="topbar-nav" class="navbar-menu">
+ <div class="navbar-end">
+ <a class="navbar-item" href="#">Home</a>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Products</a>
+ <div class="navbar-dropdown">
+ <div class="navbar-item"><strong>James server</strong></div>
+ <a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
+ <a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
+ <hr class="navbar-divider">
+ <a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
+ <a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
+ <a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
+ <a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
+ <a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
+ </div>
+ </div>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Community</a>
+ <div class="navbar-dropdown">
+ <!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
+ <a class="navbar-item" href="/james-project/3.6.0/community/mailing-lists.html">Mailing lists</a>
+ <a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
+ <a class="navbar-item" href="https://twitter.com/ApacheJames">
+ <span class="icon">
+ <svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
+ <path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.1 [...]
+ </svg>
+ </span> Twitter
+ </a>
+ <a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 [...]
+ </div>
+ </div>
+<!-- <div class="navbar-item">
+ <span class="control">
+ <a class="button is-primary" href="#">Download</a>
+ </span>
+ </div> -->
+ </div>
+ </div>
+ </nav>
+</header>
+<div class="body">
+<div class="nav-container" data-component="james-distributed-app" data-version="3.7.2">
+ <aside class="nav">
+ <div class="panels">
+<div class="nav-panel-menu is-active" data-panel="menu">
+ <nav class="nav-menu">
+ <h3 class="title"><a href="../index.html">Apache James Distributed Server</a></h3>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="0">
+<ul class="nav-list">
+ <li class="nav-item" data-depth="1">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../index.html">Distributed James Application</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../objectives.html">Objectives and motivation</a>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../architecture/index.html">Architecture</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/implemented-standards.html">Implemented standards</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/consistency-model.html">Consistency Model</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/specialized-instances.html">Specialized instances</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/index.html">Run</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-java.html">Run with Java</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-docker.html">Run with Docker</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/run-kubernetes.html">Run with Kubernetes</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-checklist.html">Deployment Checklist</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-logsMetrics.html">Logs & Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-values.html">values.yaml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-secrets.html">secrets.yaml</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../configure/index.html">Configuration</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Protocols</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/imap.html">imapserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/jmap.html">jmap.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/jmx.html">jmx.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/smtp.html">smtpserver.xml & lmtpserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/smtp-hooks.html">Packaged SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/pop3.html">pop3server.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/webadmin.html">webadmin.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/ssl.html">SSL & TLS</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/sieve.html">Sieve & ManageSieve</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Storage dependencies</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/blobstore.html">blobstore.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/cassandra.html">cassandra.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/opensearch.html">opensearch.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/rabbitmq.html">rabbitmq.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/redis.html">redis.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/tika.html">tika.properties</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Core components</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/batchsizes.html">batchsizes.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/dns.html">dnsservice.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/domainlist.html">domainlist.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/healthcheck.html">healthcheck.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailetcontainer.html">mailetcontainer.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailets.html">Packaged Mailets</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/matchers.html">Packaged Matchers</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailrepositorystore.html">mailrepositorystore.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/recipientrewritetable.html">recipientrewritetable.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/usersrepository.html">usersrepository.xml</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Extensions</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/vault.html">deletedMessageVault.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/extensions.html">extensions.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/listeners.html">listeners.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/spam.html">Anti-Spam setup</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/remote-delivery-error-handling.html">About RemoteDelivery error handling</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/collecting-contacts.html">Contact collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/collecting-events.html">Event collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/dsn.html">ESMTP DSN support</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../operate/index.html">Operate</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/guide.html">Operator guide</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/logging.html">Logging</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/webadmin.html">WebAdmin REST administration API</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/metrics.html">Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/migrating.html">Migrating existing data</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cli.html">Command Line Interface</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cassandra-migration.html">Cassandra migration</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/security.html">Security checklist</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../extending/index.html">Extending server behavior</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mail-processing.html">Custom mail processing components</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mailbox-listeners.html">Custom Mailbox Listeners</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/smtp-hooks.html">Custom SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/webadmin-routes.html">Custom WebAdmin routes</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item is-current-page" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="index.html">Performance benchmark</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="db-benchmark.html">Database benchmarks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="james-benchmark.html">James benchmarks</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </nav>
+</div>
+<div class="nav-panel-explore" data-panel="explore">
+ <div class="context">
+ <span class="title">Apache James Distributed Server</span>
+ <span class="version">3.7.2 SNAPSHOT</span>
+ </div>
+ <ul class="components">
+ <li class="component is-current">
+ <a class="title" href="../index.html">Apache James Distributed Server</a>
+ <ul class="versions">
+ <li class="version is-current is-latest">
+ <a href="../index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-project/3.7.2/index.html">Apache James Server</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-project/3.7.2/index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ <li class="version">
+ <a href="../../../james-project/3.6.0/index.html">3.6.0 Snapshot</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-site/latest/index.html">Apache James Site</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-site/latest/index.html">latest</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+</div>
+ </div>
+ </aside>
+</div>
+<main class="article">
+<div class="toolbar" role="navigation">
+<button class="nav-toggle"></button>
+ <a href="../../../james-site/latest/homepage.html" class="home-link"></a>
+<nav class="breadcrumbs" aria-label="breadcrumbs">
+ <ul>
+ <li><a href="../index.html">Apache James Distributed Server</a></li>
+ <li><a href="../index.html">Distributed James Application</a></li>
+ <li><a href="index.html">Performance benchmark</a></li>
+ </ul>
+</nav>
+ <div class="edit-this-page"><a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/benchmark/index.adoc">Edit this Page</a></div>
+ </div>
+ <div class="content">
+<aside class="toc sidebar" data-title="Contents" data-levels="2">
+ <div class="toc-menu"></div>
+</aside>
+<article class="doc">
+<h1 class="page">Distributed James Server — Performance testing the Distributed server</h1>
+<div class="paragraph">
+<p>The following pages detail how to do performance testing for the Distributed server also its database.</p>
+</div>
+<div class="paragraph">
+<p>Once you have a Distributed James server up and running you then need to ensure it operates correctly and has a decent performance.
+You may need to do performance testings periodically to make sure your James performs well.</p>
+</div>
+<div class="paragraph">
+<p>We introduced <a href="james-benchmark.html" class="page">tools and base benchmark result for Distributed James</a> also <a href="db-benchmark.html" class="page">James database’s base performance and how to benchmark them</a>
+to cover this topic.</p>
+</div>
+</article>
+ </div>
+</main>
+</div>
+<footer class="footer">
+ <p>This page was built using the Antora default UI.</p>
+ <p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
+</footer>
+<script id="site-script" src="../../../_/js/site.js" data-ui-root-path="../../../_"></script>
+<script async src="../../../_/js/vendor/highlight.js"></script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/james-distributed-app/3.7.2/benchmark/james-benchmark.html b/james-distributed-app/3.7.2/benchmark/james-benchmark.html
new file mode 100644
index 000000000..4b59a6373
--- /dev/null
+++ b/james-distributed-app/3.7.2/benchmark/james-benchmark.html
@@ -0,0 +1,594 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <title>Distributed James Server benchmark :: Apache James</title>
+ <meta name="generator" content="Antora 2.3.4">
+ <link rel="stylesheet" href="../../../_/css/site.css">
+ <script>var uiRootPath = '../../../_'</script>
+ </head>
+ <body class="article">
+<header class="header">
+ <nav class="navbar">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="https://james.apache.org"><img src="/_/img/james.svg" alt="james logo"> Apache James</a>
+ <button class="navbar-burger" data-target="topbar-nav">
+ <span></span>
+ <span></span>
+ <span></span>
+ </button>
+ </div>
+ <div id="topbar-nav" class="navbar-menu">
+ <div class="navbar-end">
+ <a class="navbar-item" href="#">Home</a>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Products</a>
+ <div class="navbar-dropdown">
+ <div class="navbar-item"><strong>James server</strong></div>
+ <a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
+ <a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
+ <hr class="navbar-divider">
+ <a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
+ <a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
+ <a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
+ <a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
+ <a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
+ </div>
+ </div>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Community</a>
+ <div class="navbar-dropdown">
+ <!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
+ <a class="navbar-item" href="/james-project/3.6.0/community/mailing-lists.html">Mailing lists</a>
+ <a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
+ <a class="navbar-item" href="https://twitter.com/ApacheJames">
+ <span class="icon">
+ <svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
+ <path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.1 [...]
+ </svg>
+ </span> Twitter
+ </a>
+ <a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 [...]
+ </div>
+ </div>
+<!-- <div class="navbar-item">
+ <span class="control">
+ <a class="button is-primary" href="#">Download</a>
+ </span>
+ </div> -->
+ </div>
+ </div>
+ </nav>
+</header>
+<div class="body">
+<div class="nav-container" data-component="james-distributed-app" data-version="3.7.2">
+ <aside class="nav">
+ <div class="panels">
+<div class="nav-panel-menu is-active" data-panel="menu">
+ <nav class="nav-menu">
+ <h3 class="title"><a href="../index.html">Apache James Distributed Server</a></h3>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="0">
+<ul class="nav-list">
+ <li class="nav-item" data-depth="1">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../index.html">Distributed James Application</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../objectives.html">Objectives and motivation</a>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../architecture/index.html">Architecture</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/implemented-standards.html">Implemented standards</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/consistency-model.html">Consistency Model</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/specialized-instances.html">Specialized instances</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/index.html">Run</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-java.html">Run with Java</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-docker.html">Run with Docker</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/run-kubernetes.html">Run with Kubernetes</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-checklist.html">Deployment Checklist</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-logsMetrics.html">Logs & Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-values.html">values.yaml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-secrets.html">secrets.yaml</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../configure/index.html">Configuration</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Protocols</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/imap.html">imapserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/jmap.html">jmap.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/jmx.html">jmx.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/smtp.html">smtpserver.xml & lmtpserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/smtp-hooks.html">Packaged SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/pop3.html">pop3server.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/webadmin.html">webadmin.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/ssl.html">SSL & TLS</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/sieve.html">Sieve & ManageSieve</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Storage dependencies</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/blobstore.html">blobstore.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/cassandra.html">cassandra.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/opensearch.html">opensearch.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/rabbitmq.html">rabbitmq.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/redis.html">redis.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/tika.html">tika.properties</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Core components</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/batchsizes.html">batchsizes.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/dns.html">dnsservice.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/domainlist.html">domainlist.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/healthcheck.html">healthcheck.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailetcontainer.html">mailetcontainer.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailets.html">Packaged Mailets</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/matchers.html">Packaged Matchers</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/mailrepositorystore.html">mailrepositorystore.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/recipientrewritetable.html">recipientrewritetable.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/usersrepository.html">usersrepository.xml</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Extensions</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/vault.html">deletedMessageVault.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/extensions.html">extensions.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/listeners.html">listeners.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/spam.html">Anti-Spam setup</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/remote-delivery-error-handling.html">About RemoteDelivery error handling</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/collecting-contacts.html">Contact collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/collecting-events.html">Event collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../configure/dsn.html">ESMTP DSN support</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../operate/index.html">Operate</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/guide.html">Operator guide</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/logging.html">Logging</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/webadmin.html">WebAdmin REST administration API</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/metrics.html">Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/migrating.html">Migrating existing data</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cli.html">Command Line Interface</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cassandra-migration.html">Cassandra migration</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/security.html">Security checklist</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../extending/index.html">Extending server behavior</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mail-processing.html">Custom mail processing components</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mailbox-listeners.html">Custom Mailbox Listeners</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/smtp-hooks.html">Custom SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/webadmin-routes.html">Custom WebAdmin routes</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="index.html">Performance benchmark</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="db-benchmark.html">Database benchmarks</a>
+ </li>
+ <li class="nav-item is-current-page" data-depth="3">
+ <a class="nav-link" href="james-benchmark.html">James benchmarks</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </nav>
+</div>
+<div class="nav-panel-explore" data-panel="explore">
+ <div class="context">
+ <span class="title">Apache James Distributed Server</span>
+ <span class="version">3.7.2 SNAPSHOT</span>
+ </div>
+ <ul class="components">
+ <li class="component is-current">
+ <a class="title" href="../index.html">Apache James Distributed Server</a>
+ <ul class="versions">
+ <li class="version is-current is-latest">
+ <a href="../index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-project/3.7.2/index.html">Apache James Server</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-project/3.7.2/index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ <li class="version">
+ <a href="../../../james-project/3.6.0/index.html">3.6.0 Snapshot</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-site/latest/index.html">Apache James Site</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-site/latest/index.html">latest</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+</div>
+ </div>
+ </aside>
+</div>
+<main class="article">
+<div class="toolbar" role="navigation">
+<button class="nav-toggle"></button>
+ <a href="../../../james-site/latest/homepage.html" class="home-link"></a>
+<nav class="breadcrumbs" aria-label="breadcrumbs">
+ <ul>
+ <li><a href="../index.html">Apache James Distributed Server</a></li>
+ <li><a href="../index.html">Distributed James Application</a></li>
+ <li><a href="index.html">Performance benchmark</a></li>
+ <li><a href="james-benchmark.html">James benchmarks</a></li>
+ </ul>
+</nav>
+ <div class="edit-this-page"><a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/benchmark/james-benchmark.adoc">Edit this Page</a></div>
+ </div>
+ <div class="content">
+<aside class="toc sidebar" data-title="Contents" data-levels="2">
+ <div class="toc-menu"></div>
+</aside>
+<article class="doc">
+<h1 class="page">Distributed James Server benchmark</h1>
+<div id="preamble">
+<div class="sectionbody">
+<div class="paragraph">
+<p>This document provides benchmark methodology and basic performance of Distributed James as a basis for a James administrator who
+can test and evaluate if his Distributed James is performing well.</p>
+</div>
+<div class="paragraph">
+<p>It includes:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>A sample Distributed James deployment topology</p>
+</li>
+<li>
+<p>Propose benchmark methodology</p>
+</li>
+<li>
+<p>Sample performance results</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>This aims to help operators quickly identify performance issues.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_sample_deployment_topology"><a class="anchor" href="#_sample_deployment_topology"></a>Sample deployment topology</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>We deploy a sample topology of Distributed James with these following components:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Distributed James: 3 Kubernetes pods, each pod has 2 OVH vCore CPU and 4 GB memory limit.</p>
+</li>
+<li>
+<p>Apache Cassandra 4 as main database: 3 nodes, each node has 8 OVH vCores CPU and 30 GB memory limit (OVH b2-30 instance).</p>
+</li>
+<li>
+<p>OpenDistro 1.13.1 as search engine: 3 nodes, each node has 8 OVH vCores CPU and 30 GB memory limit (OVH b2-30 instance).</p>
+</li>
+<li>
+<p>RabbitMQ 3.8.17 as message queue: 3 Kubernetes pods, each pod has 0.6 OVH vCore CPU and 2 GB memory limit.</p>
+</li>
+<li>
+<p>OVH Swift S3 as an object storage</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_benchmark_methodology_and_base_performance"><a class="anchor" href="#_benchmark_methodology_and_base_performance"></a>Benchmark methodology and base performance</h2>
+<div class="sectionbody">
+<div class="sect2">
+<h3 id="_provision_testing_data"><a class="anchor" href="#_provision_testing_data"></a>Provision testing data</h3>
+<div class="paragraph">
+<p>Before doing the performance test, you should make sure you have a Distributed James up and running with some provisioned testing
+data so that it is representative of reality.</p>
+</div>
+<div class="paragraph">
+<p>Please follow these steps to provision testing data:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Prepare James with a custom <code>mailetcontainer.xml</code> having Random storing mailet. This help us easily setting a good amount of
+provisioned emails.</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Add this under transport processor</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre><mailet match="All" class="RandomStoring"/></pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Modify <a href="https://github.com/apache/james-project/tree/master/server/apps/distributed-app/docs/modules/ROOT/pages/benchmark/provision.sh">provision.sh</a>
+upon your need (number of users, mailboxes, emails to be provisioned).</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>Currently, this script provisions 10 users, 15 mailboxes and hundreds of emails for example. Normally to make the performance test representative, you
+should provision thousands of users, thousands of mailboxes and millions of emails.</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Add the permission to execute the script:</p>
+</li>
+</ul>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>chmod +x provision.sh</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Install postfix (to get the smtp-source command):</p>
+</li>
+</ul>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>sudo apt-get install postfix</pre>
+</div>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Run the provision script:</p>
+</li>
+</ul>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>./provision.sh</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>After provisioning once, you should remove the Random storing mailet and move on to performance testing phase.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_provide_performance_testing_method"><a class="anchor" href="#_provide_performance_testing_method"></a>Provide performance testing method</h3>
+<div class="paragraph">
+<p>We introduce the tailored <a href="https://github.com/linagora/james-gatling">James Gatling</a> which bases on <a href="https://gatling.io/">Gatling - Load testing framework</a>
+for performance testing against IMAP/JMAP servers. Other testing method is welcome as long as you feel it is appropriate.</p>
+</div>
+<div class="paragraph">
+<p>Here are steps to do performance testing with James Gatling:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Setup James Gatling with <code>sbt</code> build tool</p>
+</li>
+<li>
+<p>Configure the <code>Configuration.scala</code> to point to your Distributed James IMAP/JMAP server(s). For more configuration details, please read
+<a href="https://github.com/linagora/james-gatling#readme">James Gatling Readme</a>.</p>
+</li>
+<li>
+<p>Run the performance testing simulation:</p>
+</li>
+</ul>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>$ sbt
+> gatling:testOnly SIMULATION_FQDN</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>In there: <code>SIMULATION_FQDN</code> is fully qualified class name of a performance test simulation.</p>
+</div>
+<div class="paragraph">
+<p>We did provide a lot of simulations in <code>org.apache.james.gatling.simulation</code> path. You can have a look and choose the suitable simulation.
+<code>sbt gatling:testOnly org.apache.james.gatling.simulation.imap.PlatformValidationSimulation</code> is a good starting point. Or you can even customize your simulation also!</p>
+</div>
+<div class="paragraph">
+<p>Some symbolic simulations we often use:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>IMAP: <code>org.apache.james.gatling.simulation.imap.PlatformValidationSimulation</code></p>
+</li>
+<li>
+<p>JMAP draft: <code>org.apache.james.gatling.simulation.jmap.draft.PlatformValidationSimulation</code></p>
+</li>
+<li>
+<p>JMAP rfc8621: <code>org.apache.james.gatling.simulation.jmap.rfc8621.PushPlatformValidationSimulation</code></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_base_performance_result"><a class="anchor" href="#_base_performance_result"></a>Base performance result</h3>
+<div class="paragraph">
+<p>A sample IMAP performance testing result (PlatformValidationSimulation):</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="../_images/james-imap-base-performance.png" alt="james imap base performance">
+</div>
+</div>
+<div class="paragraph">
+<p>If you get a IMAP performance far below this base performance, you should consider investigating for performance issues.</p>
+</div>
+</div>
+</div>
+</div>
+</article>
+ </div>
+</main>
+</div>
+<footer class="footer">
+ <p>This page was built using the Antora default UI.</p>
+ <p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
+</footer>
+<script id="site-script" src="../../../_/js/site.js" data-ui-root-path="../../../_"></script>
+<script async src="../../../_/js/vendor/highlight.js"></script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/james-distributed-app/3.7.2/configure/batchsizes.html b/james-distributed-app/3.7.2/configure/batchsizes.html
new file mode 100644
index 000000000..9576f355b
--- /dev/null
+++ b/james-distributed-app/3.7.2/configure/batchsizes.html
@@ -0,0 +1,442 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <title>Distributed James Server — batchsizes.properties :: Apache James</title>
+ <meta name="generator" content="Antora 2.3.4">
+ <link rel="stylesheet" href="../../../_/css/site.css">
+ <script>var uiRootPath = '../../../_'</script>
+ </head>
+ <body class="article">
+<header class="header">
+ <nav class="navbar">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="https://james.apache.org"><img src="/_/img/james.svg" alt="james logo"> Apache James</a>
+ <button class="navbar-burger" data-target="topbar-nav">
+ <span></span>
+ <span></span>
+ <span></span>
+ </button>
+ </div>
+ <div id="topbar-nav" class="navbar-menu">
+ <div class="navbar-end">
+ <a class="navbar-item" href="#">Home</a>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Products</a>
+ <div class="navbar-dropdown">
+ <div class="navbar-item"><strong>James server</strong></div>
+ <a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
+ <a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
+ <hr class="navbar-divider">
+ <a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
+ <a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
+ <a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
+ <a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
+ <a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
+ </div>
+ </div>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Community</a>
+ <div class="navbar-dropdown">
+ <!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
+ <a class="navbar-item" href="/james-project/3.6.0/community/mailing-lists.html">Mailing lists</a>
+ <a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
+ <a class="navbar-item" href="https://twitter.com/ApacheJames">
+ <span class="icon">
+ <svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
+ <path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.1 [...]
+ </svg>
+ </span> Twitter
+ </a>
+ <a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 [...]
+ </div>
+ </div>
+<!-- <div class="navbar-item">
+ <span class="control">
+ <a class="button is-primary" href="#">Download</a>
+ </span>
+ </div> -->
+ </div>
+ </div>
+ </nav>
+</header>
+<div class="body">
+<div class="nav-container" data-component="james-distributed-app" data-version="3.7.2">
+ <aside class="nav">
+ <div class="panels">
+<div class="nav-panel-menu is-active" data-panel="menu">
+ <nav class="nav-menu">
+ <h3 class="title"><a href="../index.html">Apache James Distributed Server</a></h3>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="0">
+<ul class="nav-list">
+ <li class="nav-item" data-depth="1">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../index.html">Distributed James Application</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../objectives.html">Objectives and motivation</a>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../architecture/index.html">Architecture</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/implemented-standards.html">Implemented standards</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/consistency-model.html">Consistency Model</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/specialized-instances.html">Specialized instances</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/index.html">Run</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-java.html">Run with Java</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-docker.html">Run with Docker</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/run-kubernetes.html">Run with Kubernetes</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-checklist.html">Deployment Checklist</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-logsMetrics.html">Logs & Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-values.html">values.yaml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-secrets.html">secrets.yaml</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="index.html">Configuration</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Protocols</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="imap.html">imapserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="jmap.html">jmap.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="jmx.html">jmx.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="smtp.html">smtpserver.xml & lmtpserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="smtp-hooks.html">Packaged SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="pop3.html">pop3server.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="webadmin.html">webadmin.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="ssl.html">SSL & TLS</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="sieve.html">Sieve & ManageSieve</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Storage dependencies</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="blobstore.html">blobstore.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="cassandra.html">cassandra.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="opensearch.html">opensearch.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="rabbitmq.html">rabbitmq.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="redis.html">redis.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="tika.html">tika.properties</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Core components</span>
+<ul class="nav-list">
+ <li class="nav-item is-current-page" data-depth="4">
+ <a class="nav-link" href="batchsizes.html">batchsizes.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="dns.html">dnsservice.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="domainlist.html">domainlist.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="healthcheck.html">healthcheck.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailetcontainer.html">mailetcontainer.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailets.html">Packaged Mailets</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="matchers.html">Packaged Matchers</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailrepositorystore.html">mailrepositorystore.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="recipientrewritetable.html">recipientrewritetable.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="usersrepository.html">usersrepository.xml</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Extensions</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="vault.html">deletedMessageVault.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="extensions.html">extensions.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="listeners.html">listeners.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="spam.html">Anti-Spam setup</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="remote-delivery-error-handling.html">About RemoteDelivery error handling</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="collecting-contacts.html">Contact collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="collecting-events.html">Event collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="dsn.html">ESMTP DSN support</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../operate/index.html">Operate</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/guide.html">Operator guide</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/logging.html">Logging</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/webadmin.html">WebAdmin REST administration API</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/metrics.html">Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/migrating.html">Migrating existing data</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cli.html">Command Line Interface</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cassandra-migration.html">Cassandra migration</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/security.html">Security checklist</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../extending/index.html">Extending server behavior</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mail-processing.html">Custom mail processing components</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mailbox-listeners.html">Custom Mailbox Listeners</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/smtp-hooks.html">Custom SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/webadmin-routes.html">Custom WebAdmin routes</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../benchmark/index.html">Performance benchmark</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/db-benchmark.html">Database benchmarks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/james-benchmark.html">James benchmarks</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </nav>
+</div>
+<div class="nav-panel-explore" data-panel="explore">
+ <div class="context">
+ <span class="title">Apache James Distributed Server</span>
+ <span class="version">3.7.2 SNAPSHOT</span>
+ </div>
+ <ul class="components">
+ <li class="component is-current">
+ <a class="title" href="../index.html">Apache James Distributed Server</a>
+ <ul class="versions">
+ <li class="version is-current is-latest">
+ <a href="../index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-project/3.7.2/index.html">Apache James Server</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-project/3.7.2/index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ <li class="version">
+ <a href="../../../james-project/3.6.0/index.html">3.6.0 Snapshot</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-site/latest/index.html">Apache James Site</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-site/latest/index.html">latest</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+</div>
+ </div>
+ </aside>
+</div>
+<main class="article">
+<div class="toolbar" role="navigation">
+<button class="nav-toggle"></button>
+ <a href="../../../james-site/latest/homepage.html" class="home-link"></a>
+<nav class="breadcrumbs" aria-label="breadcrumbs">
+ <ul>
+ <li><a href="../index.html">Apache James Distributed Server</a></li>
+ <li><a href="../index.html">Distributed James Application</a></li>
+ <li><a href="index.html">Configuration</a></li>
+ <li>Core components</li>
+ <li><a href="batchsizes.html">batchsizes.properties</a></li>
+ </ul>
+</nav>
+ <div class="edit-this-page"><a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/configure/batchsizes.adoc">Edit this Page</a></div>
+ </div>
+ <div class="content">
+<aside class="toc sidebar" data-title="Contents" data-levels="2">
+ <div class="toc-menu"></div>
+</aside>
+<article class="doc">
+<h1 class="page">Distributed James Server — batchsizes.properties</h1>
+<div class="paragraph">
+<p>This files allow to define the amount of data that should be fetched 'at once' when interacting with the mailbox. This is
+needed as IMAP can generate some potentially large requests.</p>
+</div>
+<div class="paragraph">
+<p>Increasing these values tend to fasten individual requests, at the cost of enabling potential higher load.</p>
+</div>
+<div class="paragraph">
+<p>Consult this <a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/batchsizes.properties">example</a>
+to get some examples and hints.</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 1. batchsizes.properties content</caption>
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Property name</th>
+<th class="tableblock halign-left valign-top">explanation</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">fetch.metadata</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional, defaults to 200. How many messages should be read in a batch when using FetchType.MetaData</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">fetch.headers</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional, defaults to 200. How many messages should be read in a batch when using FetchType.Header</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">fetch.body</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional, defaults to 100. How many messages should be read in a batch when using FetchType.Body</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">fetch.full</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional, defaults to 50. How many messages should be read in a batch when using FetchType.Full</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">copy</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional, defaults to 200. How many messages should be copied in a batch.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">move</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional, defaults to 200. How many messages should be moved in a batch.</p></td>
+</tr>
+</tbody>
+</table>
+</article>
+ </div>
+</main>
+</div>
+<footer class="footer">
+ <p>This page was built using the Antora default UI.</p>
+ <p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
+</footer>
+<script id="site-script" src="../../../_/js/site.js" data-ui-root-path="../../../_"></script>
+<script async src="../../../_/js/vendor/highlight.js"></script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/james-distributed-app/3.7.2/configure/blobstore.html b/james-distributed-app/3.7.2/configure/blobstore.html
new file mode 100644
index 000000000..6dceafb5d
--- /dev/null
+++ b/james-distributed-app/3.7.2/configure/blobstore.html
@@ -0,0 +1,771 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <title>Distributed James Server — blobstore.properties :: Apache James</title>
+ <meta name="generator" content="Antora 2.3.4">
+ <link rel="stylesheet" href="../../../_/css/site.css">
+ <script>var uiRootPath = '../../../_'</script>
+ </head>
+ <body class="article">
+<header class="header">
+ <nav class="navbar">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="https://james.apache.org"><img src="/_/img/james.svg" alt="james logo"> Apache James</a>
+ <button class="navbar-burger" data-target="topbar-nav">
+ <span></span>
+ <span></span>
+ <span></span>
+ </button>
+ </div>
+ <div id="topbar-nav" class="navbar-menu">
+ <div class="navbar-end">
+ <a class="navbar-item" href="#">Home</a>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Products</a>
+ <div class="navbar-dropdown">
+ <div class="navbar-item"><strong>James server</strong></div>
+ <a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
+ <a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
+ <hr class="navbar-divider">
+ <a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
+ <a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
+ <a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
+ <a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
+ <a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
+ </div>
+ </div>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Community</a>
+ <div class="navbar-dropdown">
+ <!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
+ <a class="navbar-item" href="/james-project/3.6.0/community/mailing-lists.html">Mailing lists</a>
+ <a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
+ <a class="navbar-item" href="https://twitter.com/ApacheJames">
+ <span class="icon">
+ <svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
+ <path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.1 [...]
+ </svg>
+ </span> Twitter
+ </a>
+ <a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 [...]
+ </div>
+ </div>
+<!-- <div class="navbar-item">
+ <span class="control">
+ <a class="button is-primary" href="#">Download</a>
+ </span>
+ </div> -->
+ </div>
+ </div>
+ </nav>
+</header>
+<div class="body">
+<div class="nav-container" data-component="james-distributed-app" data-version="3.7.2">
+ <aside class="nav">
+ <div class="panels">
+<div class="nav-panel-menu is-active" data-panel="menu">
+ <nav class="nav-menu">
+ <h3 class="title"><a href="../index.html">Apache James Distributed Server</a></h3>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="0">
+<ul class="nav-list">
+ <li class="nav-item" data-depth="1">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../index.html">Distributed James Application</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../objectives.html">Objectives and motivation</a>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../architecture/index.html">Architecture</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/implemented-standards.html">Implemented standards</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/consistency-model.html">Consistency Model</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/specialized-instances.html">Specialized instances</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/index.html">Run</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-java.html">Run with Java</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-docker.html">Run with Docker</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/run-kubernetes.html">Run with Kubernetes</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-checklist.html">Deployment Checklist</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-logsMetrics.html">Logs & Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-values.html">values.yaml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-secrets.html">secrets.yaml</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="index.html">Configuration</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Protocols</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="imap.html">imapserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="jmap.html">jmap.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="jmx.html">jmx.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="smtp.html">smtpserver.xml & lmtpserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="smtp-hooks.html">Packaged SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="pop3.html">pop3server.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="webadmin.html">webadmin.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="ssl.html">SSL & TLS</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="sieve.html">Sieve & ManageSieve</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Storage dependencies</span>
+<ul class="nav-list">
+ <li class="nav-item is-current-page" data-depth="4">
+ <a class="nav-link" href="blobstore.html">blobstore.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="cassandra.html">cassandra.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="opensearch.html">opensearch.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="rabbitmq.html">rabbitmq.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="redis.html">redis.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="tika.html">tika.properties</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Core components</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="batchsizes.html">batchsizes.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="dns.html">dnsservice.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="domainlist.html">domainlist.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="healthcheck.html">healthcheck.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailetcontainer.html">mailetcontainer.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailets.html">Packaged Mailets</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="matchers.html">Packaged Matchers</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailrepositorystore.html">mailrepositorystore.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="recipientrewritetable.html">recipientrewritetable.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="usersrepository.html">usersrepository.xml</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Extensions</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="vault.html">deletedMessageVault.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="extensions.html">extensions.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="listeners.html">listeners.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="spam.html">Anti-Spam setup</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="remote-delivery-error-handling.html">About RemoteDelivery error handling</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="collecting-contacts.html">Contact collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="collecting-events.html">Event collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="dsn.html">ESMTP DSN support</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../operate/index.html">Operate</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/guide.html">Operator guide</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/logging.html">Logging</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/webadmin.html">WebAdmin REST administration API</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/metrics.html">Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/migrating.html">Migrating existing data</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cli.html">Command Line Interface</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cassandra-migration.html">Cassandra migration</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/security.html">Security checklist</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../extending/index.html">Extending server behavior</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mail-processing.html">Custom mail processing components</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mailbox-listeners.html">Custom Mailbox Listeners</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/smtp-hooks.html">Custom SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/webadmin-routes.html">Custom WebAdmin routes</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../benchmark/index.html">Performance benchmark</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/db-benchmark.html">Database benchmarks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/james-benchmark.html">James benchmarks</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </nav>
+</div>
+<div class="nav-panel-explore" data-panel="explore">
+ <div class="context">
+ <span class="title">Apache James Distributed Server</span>
+ <span class="version">3.7.2 SNAPSHOT</span>
+ </div>
+ <ul class="components">
+ <li class="component is-current">
+ <a class="title" href="../index.html">Apache James Distributed Server</a>
+ <ul class="versions">
+ <li class="version is-current is-latest">
+ <a href="../index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-project/3.7.2/index.html">Apache James Server</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-project/3.7.2/index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ <li class="version">
+ <a href="../../../james-project/3.6.0/index.html">3.6.0 Snapshot</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-site/latest/index.html">Apache James Site</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-site/latest/index.html">latest</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+</div>
+ </div>
+ </aside>
+</div>
+<main class="article">
+<div class="toolbar" role="navigation">
+<button class="nav-toggle"></button>
+ <a href="../../../james-site/latest/homepage.html" class="home-link"></a>
+<nav class="breadcrumbs" aria-label="breadcrumbs">
+ <ul>
+ <li><a href="../index.html">Apache James Distributed Server</a></li>
+ <li><a href="../index.html">Distributed James Application</a></li>
+ <li><a href="index.html">Configuration</a></li>
+ <li>Storage dependencies</li>
+ <li><a href="blobstore.html">blobstore.properties</a></li>
+ </ul>
+</nav>
+ <div class="edit-this-page"><a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/configure/blobstore.adoc">Edit this Page</a></div>
+ </div>
+ <div class="content">
+<aside class="toc sidebar" data-title="Contents" data-levels="2">
+ <div class="toc-menu"></div>
+</aside>
+<article class="doc">
+<h1 class="page">Distributed James Server — blobstore.properties</h1>
+<div class="sect1">
+<h2 id="_blobstore"><a class="anchor" href="#_blobstore"></a>BlobStore</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>This file is optional. If omitted, the <strong>cassandra</strong> blob store will be used.</p>
+</div>
+<div class="paragraph">
+<p>BlobStore is the dedicated component to store blobs, non-indexable content.
+James uses the BlobStore for storing blobs which are usually mail contents, attachments, deleted mails…​</p>
+</div>
+<div class="paragraph">
+<p>You can choose the underlying implementation of BlobStore to fit with your James setup.</p>
+</div>
+<div class="paragraph">
+<p>It could be the implementation on top of Cassandra or file storage service S3 compatible like Openstack Swift and AWS S3.</p>
+</div>
+<div class="paragraph">
+<p>Consult <a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/blob.properties">blob.properties</a>
+in GIT to get some examples and hints.</p>
+</div>
+<div class="sect2">
+<h3 id="_implementation_choice"><a class="anchor" href="#_implementation_choice"></a>Implementation choice</h3>
+<div class="paragraph">
+<p><strong>implementation</strong> :</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>cassandra: use cassandra based BlobStore</p>
+</li>
+<li>
+<p>objectstorage: use Swift/AWS S3 based BlobStore</p>
+</li>
+</ul>
+</div>
+<div class="admonitionblock warning">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-warning" title="Warning"></i>
+</td>
+<td class="content">
+JAMES-3591 Cassandra is not made to store large binary content, its use will be suboptimal compared to
+Alternatives (namely S3 compatible BlobStores backed by for instance S3, MinIO or Ozone)
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>The generated startup warning log can be deactivated via the <code>cassandra.blob.store.disable.startup.warning</code> environment
+variable being positioned to <code>false</code>.</p>
+</div>
+<div class="paragraph">
+<p><strong>deduplication.enable</strong>: Mandatory. Supported value: true and false.</p>
+</div>
+<div class="paragraph">
+<p>If you choose to enable deduplication, the mails with the same content will be stored only once.</p>
+</div>
+<div class="admonitionblock warning">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-warning" title="Warning"></i>
+</td>
+<td class="content">
+Once this feature is enabled, there is no turning back as turning it off will lead to the deletion of all
+the mails sharing the same content once one is deleted.
+</td>
+</tr>
+</table>
+</div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+If you are upgrading from James 3.5 or older, the deduplication was enabled.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>Deduplication requires a garbage collector mechanism to effectively drop blobs. A first implementation
+based on bloom filters can be used and triggered using the WebAdmin REST API. See
+<a href="../operate/webadmin.html#_running_blob_garbage_collection" class="page">Running blob garbage collection</a>.</p>
+</div>
+<div class="paragraph">
+<p>In order to avoid concurrency issues upon garbage collection, we slice the blobs in generation, the two more recent
+generations are not garbage collected.</p>
+</div>
+<div class="paragraph">
+<p><strong>deduplication.gc.generation.duration</strong>: Allow controlling the duration of one generation. Longer implies better deduplication
+but deleted blobs will live longer. Duration, defaults on 30 days, the default unit is in days.</p>
+</div>
+<div class="paragraph">
+<p><strong>deduplication.gc.generation.family</strong>: Every time the duration is changed, this integer counter must be incremented to avoid
+conflicts. Defaults to 1.</p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_encryption_choice"><a class="anchor" href="#_encryption_choice"></a>Encryption choice</h3>
+<div class="paragraph">
+<p>Data can be optionally encrypted with a symmetric key using AES before being stored in the blobStore. As many user relies
+on third party for object storage, a compromised third party will not escalate to a data disclosure. Of course, a
+performance price have to be paid, as encryption takes resources.</p>
+</div>
+<div class="paragraph">
+<p><strong>encryption.aes.enable</strong> : Optional boolean, defaults to false.</p>
+</div>
+<div class="paragraph">
+<p>If AES encryption is enabled, then the following properties MUST be present:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>encryption.aes.password</strong> : String</p>
+</li>
+<li>
+<p><strong>encryption.aes.salt</strong> : Hexadecimal string</p>
+</li>
+</ul>
+</div>
+<div class="paragraph">
+<p>The following properties CAN be supplied:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p><strong>encryption.aes.private.key.algorithm</strong> : String, defaulting to PBKDF2WithHmacSHA512. Previously was
+PBKDF2WithHmacSHA1.</p>
+</li>
+</ul>
+</div>
+<div class="admonitionblock warning">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-warning" title="Warning"></i>
+</td>
+<td class="content">
+Once chosen this choice can not be reverted, all the data is either clear or encrypted. Mixed encryption
+is not supported.
+</td>
+</tr>
+</table>
+</div>
+<div class="paragraph">
+<p>Here is an example of how you can generate the above values (be mindful to customize the byte lengths in order to add
+enough entropy.</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre># Password generation
+openssl rand -base64 64
+
+# Salt generation
+generate salt with : openssl rand -hex 16</pre>
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_cassandra_blobstore_cache"><a class="anchor" href="#_cassandra_blobstore_cache"></a>Cassandra BlobStore Cache</h3>
+<div class="paragraph">
+<p>A Cassandra cache can be enabled to reduce latency when reading small blobs frequently.
+A dedicated keyspace with a replication factor of one is then used.
+Cache eviction policy is TTL based.
+Only blobs below a given threshold will be stored.
+To be noted that blobs are stored within a single Cassandra row, hence a low threshold should be used.</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 1. blobstore.properties cache related content</caption>
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Property name</th>
+<th class="tableblock halign-left valign-top">explanation</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">cache.enable</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">DEFAULT: false, optional, must be a boolean. Whether the cache should be enabled.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">cache.cassandra.ttl</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">DEFAULT: 7 days, optional, must be a duration. Cache eviction policy is TTL based.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">cache.sizeThresholdInBytes</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">DEFAULT: 8192, optional, must be a positive integer. Unit: bytes.
+Supported units: bytes, Kib, MiB, GiB, TiB
+Maximum size of stored objects expressed in bytes.</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="sect2">
+<h3 id="_object_storage_configuration"><a class="anchor" href="#_object_storage_configuration"></a>Object storage configuration</h3>
+<div class="sect3">
+<h4 id="_aws_s3_configuration"><a class="anchor" href="#_aws_s3_configuration"></a>AWS S3 Configuration</h4>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 2. blobstore.properties S3 related properties</caption>
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Property name</th>
+<th class="tableblock halign-left valign-top">explanation</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">objectstorage.s3.endPoint</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">S3 service endpoint</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">objectstorage.s3.region</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">S3 region</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">objectstorage.s3.accessKeyId</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys">S3 access key id</a></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">objectstorage.s3.secretKey</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys">S3 access key secret</a></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">objectstorage.s3.http.concurrency</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Allow setting the number of concurrent HTTP requests allowed by the Netty driver.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">objectstorage.s3.truststore.path</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">optional: Verify the S3 server certificate against this trust store file.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">objectstorage.s3.truststore.type</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">optional: Specify the type of the trust store, e.g. JKS, PKCS12</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">objectstorage.s3.truststore.secret</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">optional: Use this secret/password to access the trust store; default none</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">objectstorage.s3.truststore.algorithm</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">optional: Use this specific trust store algorithm; default SunX509</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">objectstorage.s3.read.timeout</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">optional: HTTP read timeout. duration, default value being second. Leaving it empty relies on S3 driver defaults.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">objectstorage.s3.write.timeout</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">optional: HTTP write timeout. duration, default value being second. Leaving it empty relies on S3 driver defaults.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">objectstorage.s3.connection.timeout</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">optional: HTTP connection timeout. duration, default value being second. Leaving it empty relies on S3 driver defaults.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">objectstorage.s3.in.read.limit</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">optional: Object read in memory will be rejected if they exceed the size limit exposed here. Size, exemple <code>100M</code>.
+Supported units: K, M, G, defaults to B if no unit is specified. If unspecified, big object won’t be prevented
+from being loaded in memory. This settings complements protocol limits.</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="sect3">
+<h4 id="_buckets_configuration"><a class="anchor" href="#_buckets_configuration"></a>Buckets Configuration</h4>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 3. Bucket configuration</caption>
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Property name</th>
+<th class="tableblock halign-left valign-top">explanation</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">objectstorage.bucketPrefix</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Bucket is an concept in James and similar to Containers in Swift or Buckets in AWS S3.
+BucketPrefix is the prefix of bucket names in James BlobStore</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">objectstorage.namespace</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">BlobStore default bucket name. Most of blobs storing in BlobStore are inside the default bucket.
+Unless a special case like storing blobs of deleted messages.</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_blob_export"><a class="anchor" href="#_blob_export"></a>Blob Export</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Blob Exporting is the mechanism to help James to export a blob from an user to another user.
+It is commonly used to export deleted messages (consult <a href="/server/config-vault">configuring deleted messages vault</a>).
+The deleted messages are transformed into a blob and James will export that blob to the target user.</p>
+</div>
+<div class="paragraph">
+<p>This configuration helps you choose the blob exporting mechanism fit with your James setup and it is only applicable with Guice products.</p>
+</div>
+<div class="paragraph">
+<p>Consult <a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/blob.properties">blob.properties</a>
+in GIT to get some examples and hints.</p>
+</div>
+<div class="paragraph">
+<p>Configuration for exporting blob content:</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 4. blobstore.properties content</caption>
+<colgroup>
+<col style="width: 100%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">blob.export.implementation</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">localFile: Local File Exporting Mechanism (explained below). Default: localFile</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">linshare: LinShare Exporting Mechanism (explained below)</p></td>
+</tr>
+</tbody>
+</table>
+<div class="sect2">
+<h3 id="_local_file_blob_export_configuration"><a class="anchor" href="#_local_file_blob_export_configuration"></a>Local File Blob Export Configuration</h3>
+<div class="paragraph">
+<p>For each request, this mechanism retrieves the content of a blob and save it to a distinct local file, then send an email containing the absolute path of that file to the target mail address.</p>
+</div>
+<div class="paragraph">
+<p>Note: that absolute file path is the file location on James server. Therefore, if there are two or more James servers connected, it should not be considered an option.</p>
+</div>
+<div class="paragraph">
+<p><strong>blob.export.localFile.directory</strong>: The directory URL to store exported blob data in files, and the URL following
+<a href="http://james.apache.org/server/3/apidocs/org/apache/james/filesystem/api/FileSystem.html">James File System scheme</a>.
+Default: <a href="file://var/blobExporting" class="bare">file://var/blobExporting</a></p>
+</div>
+</div>
+<div class="sect2">
+<h3 id="_linshare_blob_export_configuration"><a class="anchor" href="#_linshare_blob_export_configuration"></a>LinShare Blob Export Configuration</h3>
+<div class="paragraph">
+<p>Instead of exporting blobs in local file system, using <a href="https://www.linshare.org/en/index.html">LinShare</a>
+helps you upload your blobs and people you have been shared to can access those blobs by accessing to
+LinShare server and download them.</p>
+</div>
+<div class="paragraph">
+<p>This way helps you to share via whole network as long as they can access to LinShare server.</p>
+</div>
+<div class="paragraph">
+<p>To get an example or details explained, visit <a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/blob.properties">blob.properties</a></p>
+</div>
+<div class="paragraph">
+<p><strong>blob.export.linshare.url</strong>: The URL to connect to LinShare</p>
+</div>
+<div class="paragraph">
+<p><strong>blob.export.linshare.token</strong>: The authentication token to connect to LinShare</p>
+</div>
+</div>
+</div>
+</div>
+</article>
+ </div>
+</main>
+</div>
+<footer class="footer">
+ <p>This page was built using the Antora default UI.</p>
+ <p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
+</footer>
+<script id="site-script" src="../../../_/js/site.js" data-ui-root-path="../../../_"></script>
+<script async src="../../../_/js/vendor/highlight.js"></script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/james-distributed-app/3.7.2/configure/cassandra.html b/james-distributed-app/3.7.2/configure/cassandra.html
new file mode 100644
index 000000000..b41938a71
--- /dev/null
+++ b/james-distributed-app/3.7.2/configure/cassandra.html
@@ -0,0 +1,598 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <title>Distributed James Server — cassandra.properties :: Apache James</title>
+ <meta name="generator" content="Antora 2.3.4">
+ <link rel="stylesheet" href="../../../_/css/site.css">
+ <script>var uiRootPath = '../../../_'</script>
+ </head>
+ <body class="article">
+<header class="header">
+ <nav class="navbar">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="https://james.apache.org"><img src="/_/img/james.svg" alt="james logo"> Apache James</a>
+ <button class="navbar-burger" data-target="topbar-nav">
+ <span></span>
+ <span></span>
+ <span></span>
+ </button>
+ </div>
+ <div id="topbar-nav" class="navbar-menu">
+ <div class="navbar-end">
+ <a class="navbar-item" href="#">Home</a>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Products</a>
+ <div class="navbar-dropdown">
+ <div class="navbar-item"><strong>James server</strong></div>
+ <a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
+ <a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
+ <hr class="navbar-divider">
+ <a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
+ <a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
+ <a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
+ <a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
+ <a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
+ </div>
+ </div>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Community</a>
+ <div class="navbar-dropdown">
+ <!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
+ <a class="navbar-item" href="/james-project/3.6.0/community/mailing-lists.html">Mailing lists</a>
+ <a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
+ <a class="navbar-item" href="https://twitter.com/ApacheJames">
+ <span class="icon">
+ <svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
+ <path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.1 [...]
+ </svg>
+ </span> Twitter
+ </a>
+ <a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 [...]
+ </div>
+ </div>
+<!-- <div class="navbar-item">
+ <span class="control">
+ <a class="button is-primary" href="#">Download</a>
+ </span>
+ </div> -->
+ </div>
+ </div>
+ </nav>
+</header>
+<div class="body">
+<div class="nav-container" data-component="james-distributed-app" data-version="3.7.2">
+ <aside class="nav">
+ <div class="panels">
+<div class="nav-panel-menu is-active" data-panel="menu">
+ <nav class="nav-menu">
+ <h3 class="title"><a href="../index.html">Apache James Distributed Server</a></h3>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="0">
+<ul class="nav-list">
+ <li class="nav-item" data-depth="1">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../index.html">Distributed James Application</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../objectives.html">Objectives and motivation</a>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../architecture/index.html">Architecture</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/implemented-standards.html">Implemented standards</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/consistency-model.html">Consistency Model</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/specialized-instances.html">Specialized instances</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/index.html">Run</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-java.html">Run with Java</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-docker.html">Run with Docker</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/run-kubernetes.html">Run with Kubernetes</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-checklist.html">Deployment Checklist</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-logsMetrics.html">Logs & Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-values.html">values.yaml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-secrets.html">secrets.yaml</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="index.html">Configuration</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Protocols</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="imap.html">imapserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="jmap.html">jmap.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="jmx.html">jmx.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="smtp.html">smtpserver.xml & lmtpserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="smtp-hooks.html">Packaged SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="pop3.html">pop3server.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="webadmin.html">webadmin.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="ssl.html">SSL & TLS</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="sieve.html">Sieve & ManageSieve</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Storage dependencies</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="blobstore.html">blobstore.properties</a>
+ </li>
+ <li class="nav-item is-current-page" data-depth="4">
+ <a class="nav-link" href="cassandra.html">cassandra.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="opensearch.html">opensearch.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="rabbitmq.html">rabbitmq.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="redis.html">redis.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="tika.html">tika.properties</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Core components</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="batchsizes.html">batchsizes.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="dns.html">dnsservice.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="domainlist.html">domainlist.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="healthcheck.html">healthcheck.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailetcontainer.html">mailetcontainer.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailets.html">Packaged Mailets</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="matchers.html">Packaged Matchers</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailrepositorystore.html">mailrepositorystore.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="recipientrewritetable.html">recipientrewritetable.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="usersrepository.html">usersrepository.xml</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Extensions</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="vault.html">deletedMessageVault.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="extensions.html">extensions.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="listeners.html">listeners.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="spam.html">Anti-Spam setup</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="remote-delivery-error-handling.html">About RemoteDelivery error handling</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="collecting-contacts.html">Contact collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="collecting-events.html">Event collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="dsn.html">ESMTP DSN support</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../operate/index.html">Operate</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/guide.html">Operator guide</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/logging.html">Logging</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/webadmin.html">WebAdmin REST administration API</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/metrics.html">Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/migrating.html">Migrating existing data</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cli.html">Command Line Interface</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cassandra-migration.html">Cassandra migration</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/security.html">Security checklist</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../extending/index.html">Extending server behavior</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mail-processing.html">Custom mail processing components</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mailbox-listeners.html">Custom Mailbox Listeners</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/smtp-hooks.html">Custom SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/webadmin-routes.html">Custom WebAdmin routes</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../benchmark/index.html">Performance benchmark</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/db-benchmark.html">Database benchmarks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/james-benchmark.html">James benchmarks</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </nav>
+</div>
+<div class="nav-panel-explore" data-panel="explore">
+ <div class="context">
+ <span class="title">Apache James Distributed Server</span>
+ <span class="version">3.7.2 SNAPSHOT</span>
+ </div>
+ <ul class="components">
+ <li class="component is-current">
+ <a class="title" href="../index.html">Apache James Distributed Server</a>
+ <ul class="versions">
+ <li class="version is-current is-latest">
+ <a href="../index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-project/3.7.2/index.html">Apache James Server</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-project/3.7.2/index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ <li class="version">
+ <a href="../../../james-project/3.6.0/index.html">3.6.0 Snapshot</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-site/latest/index.html">Apache James Site</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-site/latest/index.html">latest</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+</div>
+ </div>
+ </aside>
+</div>
+<main class="article">
+<div class="toolbar" role="navigation">
+<button class="nav-toggle"></button>
+ <a href="../../../james-site/latest/homepage.html" class="home-link"></a>
+<nav class="breadcrumbs" aria-label="breadcrumbs">
+ <ul>
+ <li><a href="../index.html">Apache James Distributed Server</a></li>
+ <li><a href="../index.html">Distributed James Application</a></li>
+ <li><a href="index.html">Configuration</a></li>
+ <li>Storage dependencies</li>
+ <li><a href="cassandra.html">cassandra.properties</a></li>
+ </ul>
+</nav>
+ <div class="edit-this-page"><a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/configure/cassandra.adoc">Edit this Page</a></div>
+ </div>
+ <div class="content">
+<aside class="toc sidebar" data-title="Contents" data-levels="2">
+ <div class="toc-menu"></div>
+</aside>
+<article class="doc">
+<h1 class="page">Distributed James Server — cassandra.properties</h1>
+<div id="preamble">
+<div class="sectionbody">
+<div class="paragraph">
+<p>This configuration file allow setting some configuration properties in conjunction to
+Cassandra driver native configuration.</p>
+</div>
+<div class="paragraph">
+<p>Consult this <a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/cassandra.properties">example</a>
+to get some examples and hints.</p>
+</div>
+<div class="paragraph">
+<p>Consult this <a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/cassandra-driver.conf">example</a>
+to get some examples and hints for Cassandra driver native configuration.</p>
+</div>
+<div class="paragraph">
+<p>Cassandra native configuration allows configuring SSL, timeouts, logs and metrics as well as execution profiles.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_configuration"><a class="anchor" href="#_configuration"></a>Configuration</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Here are generic properties:</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 1. cassandra.properties content</caption>
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Property name</th>
+<th class="tableblock halign-left valign-top">explanation</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">cassandra.nodes</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">List of some nodes of the cassandra’s cluster in following format host:port or host, if the port is not specified we use 9042</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">cassandra.keyspace.create</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Indicate if the keyspace should be created by James. Optional, default value: <strong>false</strong>
+If set to true James will attempt to create the keyspace when starting up.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">cassandra.keyspace</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Is the name of the keyspace used by James. Optional, default value: <strong>apache_james</strong></p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">cassandra.user</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Username used as a credential for contacting Cassandra cluster. Optional, default is absent,
+required if <strong>cassandra.password</strong> is supplied</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">cassandra.password</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Password used as a credential for contacting Cassandra cluster. Optional, default is absent,
+required if <strong>cassandra.user</strong> is supplied</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">cassandra.replication.factor</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Is the replication factor used upon keyspace creation. Modifying this property while the keyspace already exists
+will have no effect. Optional. Default value 1.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">cassandra.local.dc</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional. Allows specifying the local DC as part of the load balancing policy. Specifying it
+would result in the use of <code>new TokenAwarePolicy(DCAwareRoundRobinPolicy.builder().withLocalDc(value).build())</code> as a LoadBalancingPolicy.
+This value is useful in a multi-DC Cassandra setup. Be aware of <a href="#../architecture/consistency-model.html#_about_multi_data_center_setups" class="page unresolved">limitation of multi-DC setups for James</a>
+Not specifying this value results in the driver’s default load balancing policy to be used.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">optimistic.consistency.level.enabled</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional. Allows specifying consistency level ONE for reads in Cassandra BlobStore.
+Falls back to default read consistency level if the blob is missing. Defaults to false.</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_cassandra_mailbox_configuration"><a class="anchor" href="#_cassandra_mailbox_configuration"></a>Cassandra Mailbox Configuration</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p><strong>cassandra.properties</strong> file furthermore expose some options to tune the Cassandra Mailbox behaviour.</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 2. cassandra.properties content</caption>
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Property name</th>
+<th class="tableblock halign-left valign-top">explanation</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">mailbox.read.repair.chance</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional. Defaults to 0.1 (10% chance).
+Must be between 0 and 1 (inclusive). Controls the probability of doing a read-repair upon mailbox read.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">mailbox.read.repair.chance</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional. Defaults to 0.1 (10% chance).
+Must be between 0 and 1 (inclusive). Controls the probability of doing a read-repair upon mailbox read.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">mailbox.counters.read.repair.chance.max</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional. Defaults to 0.1 (10% chance).
+Must be between 0 and 1 (inclusive). Controls the probability of doing a read-repair upon mailbox counters read.
+Formula: read_repair_chance = min(mailbox.counters.read.repair.chance.max, (100/unseens)*mailbox.counters.read.repair.chance.one.hundred)</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">mailbox.counters.read.repair.chance.one.hundred</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional. Defaults to 0.01 (1% chance).
+Must be between 0 and 1 (inclusive). Controls the probability of doing a read-repair upon mailbox counters read.
+Formula: read_repair_chance = min(mailbox.counters.read.repair.chance.max, (100/unseens)*mailbox.counters.read.repair.chance.one.hundred)</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">mailbox.max.retry.acl</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional. Defaults to 1000.
+Controls the number of retries upon Cassandra ACL updates.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">mailbox.max.retry.modseq</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional. Defaults to 100000.
+Controls the number of retries upon Cassandra ModSeq generation.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">mailbox.max.retry.uid</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional. Defaults to 100000.
+Controls the number of retries upon Cassandra Uid generation.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">mailbox.max.retry.message.flags.update</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional. Defaults to 1000.
+Controls the number of retries upon Cassandra flags update, in MessageMapper.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">mailbox.max.retry.message.id.flags.update</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional. Defaults to 1000.
+Controls the number of retries upon Cassandra flags update, in MessageIdMapper.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">chunk.size.message.read</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional. Defaults to 100.
+Controls the number of messages to be retrieved in parallel.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">mailbox.blob.part.size</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional. Defaults to 102400 (100KB).
+Controls the size of blob parts used to store messages in the Cassandra blobStore.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">mailbox.read.strong.consistency</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional. Boolean, defaults to true. Disabling should be considered experimental.
+If enabled, regular consistency level is used for read transactions for mailbox. Not doing so might result
+in stale reads as the system.paxos table will not be checked for latest updates. Better performance are expected
+by turning it off. Note that reads performed as part of write transactions are always performed with a strong
+consistency.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">uid.read.strong.consistency.unsafe</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional. Boolean, defaults to true. Disabling should be considered experimental.
+If enabled, regular consistency level is used for read transactions for uid upon read oepration (eg IMAP status, select).
+Not doing so might result in stale reads as the system.paxos table will not be checked for latest updates.
+Better performance are expected by turning it off.
+Note that reads performed as part of write transactions are always performed with a strong consistency.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">modseq.read.strong.consistency.unsafe</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional. Boolean, defaults to true. Disabling should be considered experimental.
+If enabled, regular consistency level is used for read transactions for modseq upon read operation (eg IMAP status, select).
+Not doing so might result in stale reads as the system.paxos table will not be checked for latest updates.
+Better performance are expected by turning it off.
+Note that reads performed as part of write transactions are always performed with a strong consistency.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">message.read.strong.consistency</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional. Boolean, defaults to true. Disabling should be considered experimental.
+If enabled, regular consistency level is used for read transactions for message. Not doing so might result
+in stale reads as the system.paxos table will not be checked for latest updates. Better performance are expected
+by turning it off. Note that reads performed as part of write transactions are always performed with a strong
+consistency.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">message.write.strong.consistency.unsafe</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional. Boolean, defaults to true. Disabling should be considered experimental and unsafe.
+If disabled, Lightweight transactions will no longer be used upon messages operation (table <code>imapUidTable</code>).
+As message flags updates relies so far on a read-before-write model, it exposes yourself to data races leading to
+potentially update loss. Better performance are expected
+by turning it off. Reads performed as part of write transaction are also performed with a relaxed consistency.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">mailrepository.strong.consistency</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Optional. Boolean, defaults to true. Allows not to use lightweight transactions in CassandraMailRepository.</p></td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+</article>
+ </div>
+</main>
+</div>
+<footer class="footer">
+ <p>This page was built using the Antora default UI.</p>
+ <p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
+</footer>
+<script id="site-script" src="../../../_/js/site.js" data-ui-root-path="../../../_"></script>
+<script async src="../../../_/js/vendor/highlight.js"></script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/james-distributed-app/3.7.2/configure/collecting-contacts.html b/james-distributed-app/3.7.2/configure/collecting-contacts.html
new file mode 100644
index 000000000..74e50887b
--- /dev/null
+++ b/james-distributed-app/3.7.2/configure/collecting-contacts.html
@@ -0,0 +1,446 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <title>Contact collection :: Apache James</title>
+ <meta name="generator" content="Antora 2.3.4">
+ <link rel="stylesheet" href="../../../_/css/site.css">
+ <script>var uiRootPath = '../../../_'</script>
+ </head>
+ <body class="article">
+<header class="header">
+ <nav class="navbar">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="https://james.apache.org"><img src="/_/img/james.svg" alt="james logo"> Apache James</a>
+ <button class="navbar-burger" data-target="topbar-nav">
+ <span></span>
+ <span></span>
+ <span></span>
+ </button>
+ </div>
+ <div id="topbar-nav" class="navbar-menu">
+ <div class="navbar-end">
+ <a class="navbar-item" href="#">Home</a>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Products</a>
+ <div class="navbar-dropdown">
+ <div class="navbar-item"><strong>James server</strong></div>
+ <a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
+ <a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
+ <hr class="navbar-divider">
+ <a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
+ <a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
+ <a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
+ <a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
+ <a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
+ </div>
+ </div>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Community</a>
+ <div class="navbar-dropdown">
+ <!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
+ <a class="navbar-item" href="/james-project/3.6.0/community/mailing-lists.html">Mailing lists</a>
+ <a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
+ <a class="navbar-item" href="https://twitter.com/ApacheJames">
+ <span class="icon">
+ <svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
+ <path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.1 [...]
+ </svg>
+ </span> Twitter
+ </a>
+ <a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 [...]
+ </div>
+ </div>
+<!-- <div class="navbar-item">
+ <span class="control">
+ <a class="button is-primary" href="#">Download</a>
+ </span>
+ </div> -->
+ </div>
+ </div>
+ </nav>
+</header>
+<div class="body">
+<div class="nav-container" data-component="james-distributed-app" data-version="3.7.2">
+ <aside class="nav">
+ <div class="panels">
+<div class="nav-panel-menu is-active" data-panel="menu">
+ <nav class="nav-menu">
+ <h3 class="title"><a href="../index.html">Apache James Distributed Server</a></h3>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="0">
+<ul class="nav-list">
+ <li class="nav-item" data-depth="1">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../index.html">Distributed James Application</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../objectives.html">Objectives and motivation</a>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../architecture/index.html">Architecture</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/implemented-standards.html">Implemented standards</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/consistency-model.html">Consistency Model</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/specialized-instances.html">Specialized instances</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/index.html">Run</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-java.html">Run with Java</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-docker.html">Run with Docker</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/run-kubernetes.html">Run with Kubernetes</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-checklist.html">Deployment Checklist</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-logsMetrics.html">Logs & Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-values.html">values.yaml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-secrets.html">secrets.yaml</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="index.html">Configuration</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Protocols</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="imap.html">imapserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="jmap.html">jmap.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="jmx.html">jmx.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="smtp.html">smtpserver.xml & lmtpserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="smtp-hooks.html">Packaged SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="pop3.html">pop3server.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="webadmin.html">webadmin.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="ssl.html">SSL & TLS</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="sieve.html">Sieve & ManageSieve</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Storage dependencies</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="blobstore.html">blobstore.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="cassandra.html">cassandra.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="opensearch.html">opensearch.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="rabbitmq.html">rabbitmq.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="redis.html">redis.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="tika.html">tika.properties</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Core components</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="batchsizes.html">batchsizes.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="dns.html">dnsservice.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="domainlist.html">domainlist.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="healthcheck.html">healthcheck.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailetcontainer.html">mailetcontainer.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailets.html">Packaged Mailets</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="matchers.html">Packaged Matchers</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailrepositorystore.html">mailrepositorystore.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="recipientrewritetable.html">recipientrewritetable.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="usersrepository.html">usersrepository.xml</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Extensions</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="vault.html">deletedMessageVault.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="extensions.html">extensions.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="listeners.html">listeners.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="spam.html">Anti-Spam setup</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="remote-delivery-error-handling.html">About RemoteDelivery error handling</a>
+ </li>
+ <li class="nav-item is-current-page" data-depth="4">
+ <a class="nav-link" href="collecting-contacts.html">Contact collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="collecting-events.html">Event collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="dsn.html">ESMTP DSN support</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../operate/index.html">Operate</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/guide.html">Operator guide</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/logging.html">Logging</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/webadmin.html">WebAdmin REST administration API</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/metrics.html">Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/migrating.html">Migrating existing data</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cli.html">Command Line Interface</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cassandra-migration.html">Cassandra migration</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/security.html">Security checklist</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../extending/index.html">Extending server behavior</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mail-processing.html">Custom mail processing components</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mailbox-listeners.html">Custom Mailbox Listeners</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/smtp-hooks.html">Custom SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/webadmin-routes.html">Custom WebAdmin routes</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../benchmark/index.html">Performance benchmark</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/db-benchmark.html">Database benchmarks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/james-benchmark.html">James benchmarks</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </nav>
+</div>
+<div class="nav-panel-explore" data-panel="explore">
+ <div class="context">
+ <span class="title">Apache James Distributed Server</span>
+ <span class="version">3.7.2 SNAPSHOT</span>
+ </div>
+ <ul class="components">
+ <li class="component is-current">
+ <a class="title" href="../index.html">Apache James Distributed Server</a>
+ <ul class="versions">
+ <li class="version is-current is-latest">
+ <a href="../index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-project/3.7.2/index.html">Apache James Server</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-project/3.7.2/index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ <li class="version">
+ <a href="../../../james-project/3.6.0/index.html">3.6.0 Snapshot</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-site/latest/index.html">Apache James Site</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-site/latest/index.html">latest</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+</div>
+ </div>
+ </aside>
+</div>
+<main class="article">
+<div class="toolbar" role="navigation">
+<button class="nav-toggle"></button>
+ <a href="../../../james-site/latest/homepage.html" class="home-link"></a>
+<nav class="breadcrumbs" aria-label="breadcrumbs">
+ <ul>
+ <li><a href="../index.html">Apache James Distributed Server</a></li>
+ <li><a href="../index.html">Distributed James Application</a></li>
+ <li><a href="index.html">Configuration</a></li>
+ <li>Extensions</li>
+ <li><a href="collecting-contacts.html">Contact collection</a></li>
+ </ul>
+</nav>
+ <div class="edit-this-page"><a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/configure/collecting-contacts.adoc">Edit this Page</a></div>
+ </div>
+ <div class="content">
+<aside class="toc sidebar" data-title="Contents" data-levels="2">
+ <div class="toc-menu"></div>
+</aside>
+<article class="doc">
+<h1 class="page">Contact collection</h1>
+<div class="sect1">
+<h2 id="_motivation"><a class="anchor" href="#_motivation"></a>Motivation</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Many modern applications combines email and contacts.</p>
+</div>
+<div class="paragraph">
+<p>We want recipients of emails sent by a user to automatically be added to this user contacts, for convenience. This
+should even be performed when a user sends emails via SMTP for example using thunderbird.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_design"><a class="anchor" href="#_design"></a>Design</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The idea is to send AMQP messages holding information about mail envelope for a traitment via a tierce application.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_configuration"><a class="anchor" href="#_configuration"></a>Configuration</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>We can achieve this goal by combining simple mailets building blocks.</p>
+</div>
+<div class="paragraph">
+<p>Here is a sample pipeline achieving aforementioned objectives :</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre><mailet match="SenderIsLocal" class="ContactExtractor">
+ <attribute>extractedContacts</attribute>
+</mailet>
+<mailet match="All" class="AmqpForwardAttribute">
+ <uri>amqp://${env:JAMES_AMQP_USERNAME}:${env:JAMES_AMQP_PASSWORD}@${env:JAMES_AMQP_HOST}:${env:JAMES_AMQP_PORT}</uri>
+ <exchange>collector:email</exchange>
+ <attribute>extractedContacts</attribute>
+</mailet></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>A sample message looks like:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>{
+ "userEmail": "sender@james.org",
+ "emails": ["to@james.org"]
+}</pre>
+</div>
+</div>
+</div>
+</div>
+</article>
+ </div>
+</main>
+</div>
+<footer class="footer">
+ <p>This page was built using the Antora default UI.</p>
+ <p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
+</footer>
+<script id="site-script" src="../../../_/js/site.js" data-ui-root-path="../../../_"></script>
+<script async src="../../../_/js/vendor/highlight.js"></script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/james-distributed-app/3.7.2/configure/collecting-events.html b/james-distributed-app/3.7.2/configure/collecting-events.html
new file mode 100644
index 000000000..5435a882d
--- /dev/null
+++ b/james-distributed-app/3.7.2/configure/collecting-events.html
@@ -0,0 +1,480 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <title>Event collection :: Apache James</title>
+ <meta name="generator" content="Antora 2.3.4">
+ <link rel="stylesheet" href="../../../_/css/site.css">
+ <script>var uiRootPath = '../../../_'</script>
+ </head>
+ <body class="article">
+<header class="header">
+ <nav class="navbar">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="https://james.apache.org"><img src="/_/img/james.svg" alt="james logo"> Apache James</a>
+ <button class="navbar-burger" data-target="topbar-nav">
+ <span></span>
+ <span></span>
+ <span></span>
+ </button>
+ </div>
+ <div id="topbar-nav" class="navbar-menu">
+ <div class="navbar-end">
+ <a class="navbar-item" href="#">Home</a>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Products</a>
+ <div class="navbar-dropdown">
+ <div class="navbar-item"><strong>James server</strong></div>
+ <a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
+ <a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
+ <hr class="navbar-divider">
+ <a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
+ <a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
+ <a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
+ <a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
+ <a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
+ </div>
+ </div>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Community</a>
+ <div class="navbar-dropdown">
+ <!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
+ <a class="navbar-item" href="/james-project/3.6.0/community/mailing-lists.html">Mailing lists</a>
+ <a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
+ <a class="navbar-item" href="https://twitter.com/ApacheJames">
+ <span class="icon">
+ <svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
+ <path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.1 [...]
+ </svg>
+ </span> Twitter
+ </a>
+ <a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 [...]
+ </div>
+ </div>
+<!-- <div class="navbar-item">
+ <span class="control">
+ <a class="button is-primary" href="#">Download</a>
+ </span>
+ </div> -->
+ </div>
+ </div>
+ </nav>
+</header>
+<div class="body">
+<div class="nav-container" data-component="james-distributed-app" data-version="3.7.2">
+ <aside class="nav">
+ <div class="panels">
+<div class="nav-panel-menu is-active" data-panel="menu">
+ <nav class="nav-menu">
+ <h3 class="title"><a href="../index.html">Apache James Distributed Server</a></h3>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="0">
+<ul class="nav-list">
+ <li class="nav-item" data-depth="1">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../index.html">Distributed James Application</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../objectives.html">Objectives and motivation</a>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../architecture/index.html">Architecture</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/implemented-standards.html">Implemented standards</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/consistency-model.html">Consistency Model</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/specialized-instances.html">Specialized instances</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/index.html">Run</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-java.html">Run with Java</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-docker.html">Run with Docker</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/run-kubernetes.html">Run with Kubernetes</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-checklist.html">Deployment Checklist</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-logsMetrics.html">Logs & Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-values.html">values.yaml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-secrets.html">secrets.yaml</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="index.html">Configuration</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Protocols</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="imap.html">imapserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="jmap.html">jmap.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="jmx.html">jmx.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="smtp.html">smtpserver.xml & lmtpserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="smtp-hooks.html">Packaged SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="pop3.html">pop3server.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="webadmin.html">webadmin.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="ssl.html">SSL & TLS</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="sieve.html">Sieve & ManageSieve</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Storage dependencies</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="blobstore.html">blobstore.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="cassandra.html">cassandra.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="opensearch.html">opensearch.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="rabbitmq.html">rabbitmq.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="redis.html">redis.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="tika.html">tika.properties</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Core components</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="batchsizes.html">batchsizes.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="dns.html">dnsservice.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="domainlist.html">domainlist.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="healthcheck.html">healthcheck.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailetcontainer.html">mailetcontainer.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailets.html">Packaged Mailets</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="matchers.html">Packaged Matchers</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailrepositorystore.html">mailrepositorystore.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="recipientrewritetable.html">recipientrewritetable.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="usersrepository.html">usersrepository.xml</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Extensions</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="vault.html">deletedMessageVault.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="extensions.html">extensions.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="listeners.html">listeners.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="spam.html">Anti-Spam setup</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="remote-delivery-error-handling.html">About RemoteDelivery error handling</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="collecting-contacts.html">Contact collection</a>
+ </li>
+ <li class="nav-item is-current-page" data-depth="4">
+ <a class="nav-link" href="collecting-events.html">Event collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="dsn.html">ESMTP DSN support</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../operate/index.html">Operate</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/guide.html">Operator guide</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/logging.html">Logging</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/webadmin.html">WebAdmin REST administration API</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/metrics.html">Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/migrating.html">Migrating existing data</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cli.html">Command Line Interface</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cassandra-migration.html">Cassandra migration</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/security.html">Security checklist</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../extending/index.html">Extending server behavior</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mail-processing.html">Custom mail processing components</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mailbox-listeners.html">Custom Mailbox Listeners</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/smtp-hooks.html">Custom SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/webadmin-routes.html">Custom WebAdmin routes</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../benchmark/index.html">Performance benchmark</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/db-benchmark.html">Database benchmarks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/james-benchmark.html">James benchmarks</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </nav>
+</div>
+<div class="nav-panel-explore" data-panel="explore">
+ <div class="context">
+ <span class="title">Apache James Distributed Server</span>
+ <span class="version">3.7.2 SNAPSHOT</span>
+ </div>
+ <ul class="components">
+ <li class="component is-current">
+ <a class="title" href="../index.html">Apache James Distributed Server</a>
+ <ul class="versions">
+ <li class="version is-current is-latest">
+ <a href="../index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-project/3.7.2/index.html">Apache James Server</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-project/3.7.2/index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ <li class="version">
+ <a href="../../../james-project/3.6.0/index.html">3.6.0 Snapshot</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-site/latest/index.html">Apache James Site</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-site/latest/index.html">latest</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+</div>
+ </div>
+ </aside>
+</div>
+<main class="article">
+<div class="toolbar" role="navigation">
+<button class="nav-toggle"></button>
+ <a href="../../../james-site/latest/homepage.html" class="home-link"></a>
+<nav class="breadcrumbs" aria-label="breadcrumbs">
+ <ul>
+ <li><a href="../index.html">Apache James Distributed Server</a></li>
+ <li><a href="../index.html">Distributed James Application</a></li>
+ <li><a href="index.html">Configuration</a></li>
+ <li>Extensions</li>
+ <li><a href="collecting-events.html">Event collection</a></li>
+ </ul>
+</nav>
+ <div class="edit-this-page"><a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/configure/collecting-events.adoc">Edit this Page</a></div>
+ </div>
+ <div class="content">
+<aside class="toc sidebar" data-title="Contents" data-levels="2">
+ <div class="toc-menu"></div>
+</aside>
+<article class="doc">
+<h1 class="page">Event collection</h1>
+<div class="sect1">
+<h2 id="_motivation"><a class="anchor" href="#_motivation"></a>Motivation</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>Many calendar application do add events invitation received by email directly in ones calendar.</p>
+</div>
+<div class="paragraph">
+<p>Such behaviours requires the calendar application to be aware of the ICalendar related emails a user received.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_design"><a class="anchor" href="#_design"></a>Design</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The idea is to write a portion of mailet pipeline extracting Icalendar attachments and to hold them as attachments that
+can later be sent to other applications over AMQP to be treated in an asynchronous, decoupled fashion.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_configuration"><a class="anchor" href="#_configuration"></a>Configuration</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>We can achieve this goal by combining simple mailets building blocks.</p>
+</div>
+<div class="paragraph">
+<p>Here is a sample pipeline achieving aforementioned objectives :</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre><!-- ICAL pipeline -->
+<mailet match="All" class="StripAttachment">
+ <mimeType>text/calendar</mimeType>
+ <attribute>rawIcalendar</attribute>
+</mailet>
+<mailet match="All" class="MimeDecodingMailet">
+ <attribute>rawIcalendar</attribute>
+</mailet>
+<mailet match="All" class="ICalendarParser">
+ <sourceAttribute>rawIcalendar</sourceAttribute>
+ <destinationAttribute>icalendar</destinationAttribute>
+</mailet>
+<mailet match="All" class="ICALToHeader">
+ <attribute>icalendar</attribute>
+</mailet>
+<mailet match="All" class="ICALToJsonAttribute">
+ <source>icalendar</source>
+ <destination>icalendarAsJson</destination>
+ <rawSource>rawIcalendar</rawSource>
+</mailet>
+<mailet match="All" class="AmqpForwardAttribute">
+ <uri>amqp://${env:JAMES_AMQP_USERNAME}:${env:JAMES_AMQP_PASSWORD}@${env:JAMES_AMQP_HOST}:${env:JAMES_AMQP_PORT}</uri>
+ <exchange>james:events</exchange>
+ <attribute>icalendarAsJson</attribute>
+</mailet>
+<!-- End of ICAL pipeline --></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>A sample message looks like:</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>{
+ "ical": "RAW_DATA_AS_TEXT_FOLLOWING_ICS_FORMAT",
+ "sender": "other@james.apache.org",
+ "recipient": "any@james2.apache.org",
+ "replyTo": "other@james.apache.org",
+ "uid": "f1514f44bf39311568d640727cff54e819573448d09d2e5677987ff29caa01a9e047feb2aab16e43439a608f28671ab7c10e754ce92be513f8e04ae9ff15e65a9819cf285a6962bc",
+ "dtstamp": "20170106T115036Z",
+ "method": "REQUEST",
+ "sequence": "0",
+ "recurrence-id": null
+}</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The following pipeline positions the X-MEETING-UID in the Header in order for mail user agent to correlate events with this mail.
+The sample look like:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="highlightjs highlight"><code>X-MEETING-UID: f1514f44bf39311568d640727cff54e819573448d09d2e5677987ff29caa01a9e047feb2aab16e43439a608f28671ab7c10e754ce92be513f8e04ae9ff15e65a9819cf285a6962bc</code></pre>
+</div>
+</div>
+</div>
+</div>
+</article>
+ </div>
+</main>
+</div>
+<footer class="footer">
+ <p>This page was built using the Antora default UI.</p>
+ <p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
+</footer>
+<script id="site-script" src="../../../_/js/site.js" data-ui-root-path="../../../_"></script>
+<script async src="../../../_/js/vendor/highlight.js"></script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/james-distributed-app/3.7.2/configure/dns.html b/james-distributed-app/3.7.2/configure/dns.html
new file mode 100644
index 000000000..46b74a7e9
--- /dev/null
+++ b/james-distributed-app/3.7.2/configure/dns.html
@@ -0,0 +1,466 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <title>Distributed James Server — dnsservice.xml :: Apache James</title>
+ <meta name="generator" content="Antora 2.3.4">
+ <link rel="stylesheet" href="../../../_/css/site.css">
+ <script>var uiRootPath = '../../../_'</script>
+ </head>
+ <body class="article">
+<header class="header">
+ <nav class="navbar">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="https://james.apache.org"><img src="/_/img/james.svg" alt="james logo"> Apache James</a>
+ <button class="navbar-burger" data-target="topbar-nav">
+ <span></span>
+ <span></span>
+ <span></span>
+ </button>
+ </div>
+ <div id="topbar-nav" class="navbar-menu">
+ <div class="navbar-end">
+ <a class="navbar-item" href="#">Home</a>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Products</a>
+ <div class="navbar-dropdown">
+ <div class="navbar-item"><strong>James server</strong></div>
+ <a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
+ <a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
+ <hr class="navbar-divider">
+ <a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
+ <a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
+ <a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
+ <a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
+ <a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
+ </div>
+ </div>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Community</a>
+ <div class="navbar-dropdown">
+ <!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
+ <a class="navbar-item" href="/james-project/3.6.0/community/mailing-lists.html">Mailing lists</a>
+ <a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
+ <a class="navbar-item" href="https://twitter.com/ApacheJames">
+ <span class="icon">
+ <svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
+ <path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.1 [...]
+ </svg>
+ </span> Twitter
+ </a>
+ <a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 [...]
+ </div>
+ </div>
+<!-- <div class="navbar-item">
+ <span class="control">
+ <a class="button is-primary" href="#">Download</a>
+ </span>
+ </div> -->
+ </div>
+ </div>
+ </nav>
+</header>
+<div class="body">
+<div class="nav-container" data-component="james-distributed-app" data-version="3.7.2">
+ <aside class="nav">
+ <div class="panels">
+<div class="nav-panel-menu is-active" data-panel="menu">
+ <nav class="nav-menu">
+ <h3 class="title"><a href="../index.html">Apache James Distributed Server</a></h3>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="0">
+<ul class="nav-list">
+ <li class="nav-item" data-depth="1">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../index.html">Distributed James Application</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../objectives.html">Objectives and motivation</a>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../architecture/index.html">Architecture</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/implemented-standards.html">Implemented standards</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/consistency-model.html">Consistency Model</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/specialized-instances.html">Specialized instances</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/index.html">Run</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-java.html">Run with Java</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-docker.html">Run with Docker</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/run-kubernetes.html">Run with Kubernetes</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-checklist.html">Deployment Checklist</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-logsMetrics.html">Logs & Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-values.html">values.yaml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-secrets.html">secrets.yaml</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="index.html">Configuration</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Protocols</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="imap.html">imapserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="jmap.html">jmap.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="jmx.html">jmx.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="smtp.html">smtpserver.xml & lmtpserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="smtp-hooks.html">Packaged SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="pop3.html">pop3server.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="webadmin.html">webadmin.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="ssl.html">SSL & TLS</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="sieve.html">Sieve & ManageSieve</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Storage dependencies</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="blobstore.html">blobstore.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="cassandra.html">cassandra.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="opensearch.html">opensearch.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="rabbitmq.html">rabbitmq.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="redis.html">redis.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="tika.html">tika.properties</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Core components</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="batchsizes.html">batchsizes.properties</a>
+ </li>
+ <li class="nav-item is-current-page" data-depth="4">
+ <a class="nav-link" href="dns.html">dnsservice.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="domainlist.html">domainlist.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="healthcheck.html">healthcheck.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailetcontainer.html">mailetcontainer.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailets.html">Packaged Mailets</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="matchers.html">Packaged Matchers</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailrepositorystore.html">mailrepositorystore.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="recipientrewritetable.html">recipientrewritetable.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="usersrepository.html">usersrepository.xml</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Extensions</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="vault.html">deletedMessageVault.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="extensions.html">extensions.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="listeners.html">listeners.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="spam.html">Anti-Spam setup</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="remote-delivery-error-handling.html">About RemoteDelivery error handling</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="collecting-contacts.html">Contact collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="collecting-events.html">Event collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="dsn.html">ESMTP DSN support</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../operate/index.html">Operate</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/guide.html">Operator guide</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/logging.html">Logging</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/webadmin.html">WebAdmin REST administration API</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/metrics.html">Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/migrating.html">Migrating existing data</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cli.html">Command Line Interface</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cassandra-migration.html">Cassandra migration</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/security.html">Security checklist</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../extending/index.html">Extending server behavior</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mail-processing.html">Custom mail processing components</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mailbox-listeners.html">Custom Mailbox Listeners</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/smtp-hooks.html">Custom SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/webadmin-routes.html">Custom WebAdmin routes</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../benchmark/index.html">Performance benchmark</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/db-benchmark.html">Database benchmarks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/james-benchmark.html">James benchmarks</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </nav>
+</div>
+<div class="nav-panel-explore" data-panel="explore">
+ <div class="context">
+ <span class="title">Apache James Distributed Server</span>
+ <span class="version">3.7.2 SNAPSHOT</span>
+ </div>
+ <ul class="components">
+ <li class="component is-current">
+ <a class="title" href="../index.html">Apache James Distributed Server</a>
+ <ul class="versions">
+ <li class="version is-current is-latest">
+ <a href="../index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-project/3.7.2/index.html">Apache James Server</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-project/3.7.2/index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ <li class="version">
+ <a href="../../../james-project/3.6.0/index.html">3.6.0 Snapshot</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-site/latest/index.html">Apache James Site</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-site/latest/index.html">latest</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+</div>
+ </div>
+ </aside>
+</div>
+<main class="article">
+<div class="toolbar" role="navigation">
+<button class="nav-toggle"></button>
+ <a href="../../../james-site/latest/homepage.html" class="home-link"></a>
+<nav class="breadcrumbs" aria-label="breadcrumbs">
+ <ul>
+ <li><a href="../index.html">Apache James Distributed Server</a></li>
+ <li><a href="../index.html">Distributed James Application</a></li>
+ <li><a href="index.html">Configuration</a></li>
+ <li>Core components</li>
+ <li><a href="dns.html">dnsservice.xml</a></li>
+ </ul>
+</nav>
+ <div class="edit-this-page"><a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/configure/dns.adoc">Edit this Page</a></div>
+ </div>
+ <div class="content">
+<aside class="toc sidebar" data-title="Contents" data-levels="2">
+ <div class="toc-menu"></div>
+</aside>
+<article class="doc">
+<h1 class="page">Distributed James Server — dnsservice.xml</h1>
+<div class="paragraph">
+<p>Consult this <a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/dnsservice.xml">example</a>
+to get some examples and hints.</p>
+</div>
+<div class="paragraph">
+<p>Specifies DNS Server information for use by various components inside Apache James Server.</p>
+</div>
+<div class="paragraph">
+<p>DNS Transport services are controlled by a configuration block in
+the dnsservice.xml. This block affects SMTP remote delivery.</p>
+</div>
+<div class="paragraph">
+<p>The dnsservice tag defines the boundaries of the configuration
+block. It encloses all the relevant configuration for the DNS server.
+The behavior of the DNS service is controlled by the attributes and
+children of this tag.</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 1. dnsservice.xml content</caption>
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Property name</th>
+<th class="tableblock halign-left valign-top">explanation</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">servers</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Information includes a list of DNS Servers to be used by James. These are
+specified by the server elements, each of which is a child element of the
+servers element. Each server element is the IP address of a single DNS server.
+The server elements can have multiple server children. Enter ip address of your DNS server, one IP address per server
+element. If no DNS servers are found and you have not specified any below, 127.0.0.1 will be used</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">autodiscover</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">true or false - If you use autodiscover and add DNS servers manually a combination of all the DNS servers will be used.
+If autodiscover is true, James will attempt to autodiscover the DNS servers configured on your underlying system.
+Currently, this works if the OS has a unix-like /etc/resolv.xml,
+or the system is Windows based with ipconfig or winipcfg. Change autodiscover to false if you would like to turn off autodiscovery
+and set the DNS servers manually in the servers section</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">authoritative</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock"><strong>true/false</strong> - This tag specifies whether or not
+to require authoritative (non-cached) DNS records; to only accept DNS responses that are
+authoritative for the domain. It is primarily useful in an intranet/extranet environment.
+This should always be <strong>false</strong> unless you understand the implications.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">maxcachesize</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Maximum number of entries to maintain in the DNS cache (typically 50000)</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">negativeCacheTTL</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Sets the maximum length of time that negative records will be stored in the DNS negative cache in
+seconds (a negative record means the name has not been found in the DNS). Values for this cache
+can be positive meaning the time in seconds before retrying to resolve the name, zero meaning no
+cache or a negative value meaning infinite caching.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">singleIPperMX</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">true or false (default) - Specifies if Apache James Server must try a single server for each multihomed mx host</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">verbose</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Turn on general debugging statements</p></td>
+</tr>
+</tbody>
+</table>
+</article>
+ </div>
+</main>
+</div>
+<footer class="footer">
+ <p>This page was built using the Antora default UI.</p>
+ <p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
+</footer>
+<script id="site-script" src="../../../_/js/site.js" data-ui-root-path="../../../_"></script>
+<script async src="../../../_/js/vendor/highlight.js"></script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/james-distributed-app/3.7.2/configure/domainlist.html b/james-distributed-app/3.7.2/configure/domainlist.html
new file mode 100644
index 000000000..cb7c67021
--- /dev/null
+++ b/james-distributed-app/3.7.2/configure/domainlist.html
@@ -0,0 +1,452 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <title>Distributed James Server — domainlist.xml :: Apache James</title>
+ <meta name="generator" content="Antora 2.3.4">
+ <link rel="stylesheet" href="../../../_/css/site.css">
+ <script>var uiRootPath = '../../../_'</script>
+ </head>
+ <body class="article">
+<header class="header">
+ <nav class="navbar">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="https://james.apache.org"><img src="/_/img/james.svg" alt="james logo"> Apache James</a>
+ <button class="navbar-burger" data-target="topbar-nav">
+ <span></span>
+ <span></span>
+ <span></span>
+ </button>
+ </div>
+ <div id="topbar-nav" class="navbar-menu">
+ <div class="navbar-end">
+ <a class="navbar-item" href="#">Home</a>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Products</a>
+ <div class="navbar-dropdown">
+ <div class="navbar-item"><strong>James server</strong></div>
+ <a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
+ <a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
+ <hr class="navbar-divider">
+ <a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
+ <a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
+ <a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
+ <a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
+ <a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
+ </div>
+ </div>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Community</a>
+ <div class="navbar-dropdown">
+ <!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
+ <a class="navbar-item" href="/james-project/3.6.0/community/mailing-lists.html">Mailing lists</a>
+ <a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
+ <a class="navbar-item" href="https://twitter.com/ApacheJames">
+ <span class="icon">
+ <svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
+ <path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.1 [...]
+ </svg>
+ </span> Twitter
+ </a>
+ <a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 [...]
+ </div>
+ </div>
+<!-- <div class="navbar-item">
+ <span class="control">
+ <a class="button is-primary" href="#">Download</a>
+ </span>
+ </div> -->
+ </div>
+ </div>
+ </nav>
+</header>
+<div class="body">
+<div class="nav-container" data-component="james-distributed-app" data-version="3.7.2">
+ <aside class="nav">
+ <div class="panels">
+<div class="nav-panel-menu is-active" data-panel="menu">
+ <nav class="nav-menu">
+ <h3 class="title"><a href="../index.html">Apache James Distributed Server</a></h3>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="0">
+<ul class="nav-list">
+ <li class="nav-item" data-depth="1">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../index.html">Distributed James Application</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../objectives.html">Objectives and motivation</a>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../architecture/index.html">Architecture</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/implemented-standards.html">Implemented standards</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/consistency-model.html">Consistency Model</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/specialized-instances.html">Specialized instances</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/index.html">Run</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-java.html">Run with Java</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-docker.html">Run with Docker</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/run-kubernetes.html">Run with Kubernetes</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-checklist.html">Deployment Checklist</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-logsMetrics.html">Logs & Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-values.html">values.yaml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-secrets.html">secrets.yaml</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="index.html">Configuration</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Protocols</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="imap.html">imapserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="jmap.html">jmap.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="jmx.html">jmx.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="smtp.html">smtpserver.xml & lmtpserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="smtp-hooks.html">Packaged SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="pop3.html">pop3server.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="webadmin.html">webadmin.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="ssl.html">SSL & TLS</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="sieve.html">Sieve & ManageSieve</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Storage dependencies</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="blobstore.html">blobstore.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="cassandra.html">cassandra.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="opensearch.html">opensearch.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="rabbitmq.html">rabbitmq.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="redis.html">redis.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="tika.html">tika.properties</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Core components</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="batchsizes.html">batchsizes.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="dns.html">dnsservice.xml</a>
+ </li>
+ <li class="nav-item is-current-page" data-depth="4">
+ <a class="nav-link" href="domainlist.html">domainlist.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="healthcheck.html">healthcheck.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailetcontainer.html">mailetcontainer.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailets.html">Packaged Mailets</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="matchers.html">Packaged Matchers</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailrepositorystore.html">mailrepositorystore.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="recipientrewritetable.html">recipientrewritetable.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="usersrepository.html">usersrepository.xml</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Extensions</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="vault.html">deletedMessageVault.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="extensions.html">extensions.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="listeners.html">listeners.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="spam.html">Anti-Spam setup</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="remote-delivery-error-handling.html">About RemoteDelivery error handling</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="collecting-contacts.html">Contact collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="collecting-events.html">Event collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="dsn.html">ESMTP DSN support</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../operate/index.html">Operate</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/guide.html">Operator guide</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/logging.html">Logging</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/webadmin.html">WebAdmin REST administration API</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/metrics.html">Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/migrating.html">Migrating existing data</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cli.html">Command Line Interface</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cassandra-migration.html">Cassandra migration</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/security.html">Security checklist</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../extending/index.html">Extending server behavior</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mail-processing.html">Custom mail processing components</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mailbox-listeners.html">Custom Mailbox Listeners</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/smtp-hooks.html">Custom SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/webadmin-routes.html">Custom WebAdmin routes</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../benchmark/index.html">Performance benchmark</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/db-benchmark.html">Database benchmarks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/james-benchmark.html">James benchmarks</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </nav>
+</div>
+<div class="nav-panel-explore" data-panel="explore">
+ <div class="context">
+ <span class="title">Apache James Distributed Server</span>
+ <span class="version">3.7.2 SNAPSHOT</span>
+ </div>
+ <ul class="components">
+ <li class="component is-current">
+ <a class="title" href="../index.html">Apache James Distributed Server</a>
+ <ul class="versions">
+ <li class="version is-current is-latest">
+ <a href="../index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-project/3.7.2/index.html">Apache James Server</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-project/3.7.2/index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ <li class="version">
+ <a href="../../../james-project/3.6.0/index.html">3.6.0 Snapshot</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-site/latest/index.html">Apache James Site</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-site/latest/index.html">latest</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+</div>
+ </div>
+ </aside>
+</div>
+<main class="article">
+<div class="toolbar" role="navigation">
+<button class="nav-toggle"></button>
+ <a href="../../../james-site/latest/homepage.html" class="home-link"></a>
+<nav class="breadcrumbs" aria-label="breadcrumbs">
+ <ul>
+ <li><a href="../index.html">Apache James Distributed Server</a></li>
+ <li><a href="../index.html">Distributed James Application</a></li>
+ <li><a href="index.html">Configuration</a></li>
+ <li>Core components</li>
+ <li><a href="domainlist.html">domainlist.xml</a></li>
+ </ul>
+</nav>
+ <div class="edit-this-page"><a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/configure/domainlist.adoc">Edit this Page</a></div>
+ </div>
+ <div class="content">
+<aside class="toc sidebar" data-title="Contents" data-levels="2">
+ <div class="toc-menu"></div>
+</aside>
+<article class="doc">
+<h1 class="page">Distributed James Server — domainlist.xml</h1>
+<div class="paragraph">
+<p>Consult this <a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/domainlist.xml">example</a>
+to get some examples and hints.</p>
+</div>
+<div class="paragraph">
+<p>This configuration block is defined by the <strong>domainlist</strong> tag.</p>
+</div>
+<table class="tableblock frame-all grid-all stretch">
+<caption class="title">Table 1. domainlist.xml content</caption>
+<colgroup>
+<col style="width: 50%;">
+<col style="width: 50%;">
+</colgroup>
+<thead>
+<tr>
+<th class="tableblock halign-left valign-top">Property name</th>
+<th class="tableblock halign-left valign-top">explanation</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">domainnames</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Domainnames identifies the DNS namespace served by this instance of James.
+These domainnames are used for both matcher/mailet processing and SMTP auth
+to determine when a mail is intended for local delivery - Only applicable for XMLDomainList. The entries mentionned here will be created upon start.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">autodetect</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">true or false - If autodetect is true, James wil attempt to discover its own host name AND
+use any explicitly specified servernames.
+If autodetect is false, James will use only the specified domainnames. Defaults to false.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">autodetectIP</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">true or false - If autodetectIP is not false, James will also allow add the IP address for each servername.
+The automatic IP detection is to support RFC 2821, Sec 4.1.3, address literals. Defaults to false.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">defaultDomain</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Set the default domain which will be used if an email is send to a recipient without a domain part.
+If no defaultdomain is set the first domain of the DomainList gets used. If the default is not yet contained by the Domain List, the domain will be created upon start.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">read.cache.enable</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Experimental. Boolean, defaults to false.
+Whether or not to cache domainlist.contains calls. Enable a faster execution however writes will take time
+to propagate.</p></td>
+</tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">read.cache.expiracy</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Experimental. String (duration), defaults to 10 seconds (10s). Supported units are ms, s, m, h, d, w, month, y.
+Expiracy of the cache. Longer means less reads are performed to the backend but writes will take longer to propagate.
+Low values (a few seconds) are advised.</p></td>
+</tr>
+</tbody>
+</table>
+<div class="paragraph">
+<p>To override autodetected domainnames simply add explicit domainname elements.
+In most cases this will be necessary. By default, the domainname 'localhost' is specified. This can be removed, if required.</p>
+</div>
+</article>
+ </div>
+</main>
+</div>
+<footer class="footer">
+ <p>This page was built using the Antora default UI.</p>
+ <p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
+</footer>
+<script id="site-script" src="../../../_/js/site.js" data-ui-root-path="../../../_"></script>
+<script async src="../../../_/js/vendor/highlight.js"></script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/james-distributed-app/3.7.2/configure/dsn.html b/james-distributed-app/3.7.2/configure/dsn.html
new file mode 100644
index 000000000..563dbafae
--- /dev/null
+++ b/james-distributed-app/3.7.2/configure/dsn.html
@@ -0,0 +1,654 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <title>Distributed James Server — Delivery Submission Notifications :: Apache James</title>
+ <meta name="generator" content="Antora 2.3.4">
+ <link rel="stylesheet" href="../../../_/css/site.css">
+ <script>var uiRootPath = '../../../_'</script>
+ </head>
+ <body class="article">
+<header class="header">
+ <nav class="navbar">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="https://james.apache.org"><img src="/_/img/james.svg" alt="james logo"> Apache James</a>
+ <button class="navbar-burger" data-target="topbar-nav">
+ <span></span>
+ <span></span>
+ <span></span>
+ </button>
+ </div>
+ <div id="topbar-nav" class="navbar-menu">
+ <div class="navbar-end">
+ <a class="navbar-item" href="#">Home</a>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Products</a>
+ <div class="navbar-dropdown">
+ <div class="navbar-item"><strong>James server</strong></div>
+ <a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
+ <a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
+ <hr class="navbar-divider">
+ <a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
+ <a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
+ <a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
+ <a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
+ <a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
+ </div>
+ </div>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Community</a>
+ <div class="navbar-dropdown">
+ <!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
+ <a class="navbar-item" href="/james-project/3.6.0/community/mailing-lists.html">Mailing lists</a>
+ <a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
+ <a class="navbar-item" href="https://twitter.com/ApacheJames">
+ <span class="icon">
+ <svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
+ <path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.1 [...]
+ </svg>
+ </span> Twitter
+ </a>
+ <a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 [...]
+ </div>
+ </div>
+<!-- <div class="navbar-item">
+ <span class="control">
+ <a class="button is-primary" href="#">Download</a>
+ </span>
+ </div> -->
+ </div>
+ </div>
+ </nav>
+</header>
+<div class="body">
+<div class="nav-container" data-component="james-distributed-app" data-version="3.7.2">
+ <aside class="nav">
+ <div class="panels">
+<div class="nav-panel-menu is-active" data-panel="menu">
+ <nav class="nav-menu">
+ <h3 class="title"><a href="../index.html">Apache James Distributed Server</a></h3>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="0">
+<ul class="nav-list">
+ <li class="nav-item" data-depth="1">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../index.html">Distributed James Application</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../objectives.html">Objectives and motivation</a>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../architecture/index.html">Architecture</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/implemented-standards.html">Implemented standards</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/consistency-model.html">Consistency Model</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/specialized-instances.html">Specialized instances</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/index.html">Run</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-java.html">Run with Java</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-docker.html">Run with Docker</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/run-kubernetes.html">Run with Kubernetes</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-checklist.html">Deployment Checklist</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-logsMetrics.html">Logs & Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-values.html">values.yaml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-secrets.html">secrets.yaml</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="index.html">Configuration</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Protocols</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="imap.html">imapserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="jmap.html">jmap.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="jmx.html">jmx.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="smtp.html">smtpserver.xml & lmtpserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="smtp-hooks.html">Packaged SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="pop3.html">pop3server.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="webadmin.html">webadmin.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="ssl.html">SSL & TLS</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="sieve.html">Sieve & ManageSieve</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Storage dependencies</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="blobstore.html">blobstore.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="cassandra.html">cassandra.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="opensearch.html">opensearch.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="rabbitmq.html">rabbitmq.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="redis.html">redis.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="tika.html">tika.properties</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Core components</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="batchsizes.html">batchsizes.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="dns.html">dnsservice.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="domainlist.html">domainlist.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="healthcheck.html">healthcheck.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailetcontainer.html">mailetcontainer.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailets.html">Packaged Mailets</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="matchers.html">Packaged Matchers</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailrepositorystore.html">mailrepositorystore.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="recipientrewritetable.html">recipientrewritetable.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="usersrepository.html">usersrepository.xml</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Extensions</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="vault.html">deletedMessageVault.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="extensions.html">extensions.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="listeners.html">listeners.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="spam.html">Anti-Spam setup</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="remote-delivery-error-handling.html">About RemoteDelivery error handling</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="collecting-contacts.html">Contact collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="collecting-events.html">Event collection</a>
+ </li>
+ <li class="nav-item is-current-page" data-depth="4">
+ <a class="nav-link" href="dsn.html">ESMTP DSN support</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../operate/index.html">Operate</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/guide.html">Operator guide</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/logging.html">Logging</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/webadmin.html">WebAdmin REST administration API</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/metrics.html">Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/migrating.html">Migrating existing data</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cli.html">Command Line Interface</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cassandra-migration.html">Cassandra migration</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/security.html">Security checklist</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../extending/index.html">Extending server behavior</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mail-processing.html">Custom mail processing components</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mailbox-listeners.html">Custom Mailbox Listeners</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/smtp-hooks.html">Custom SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/webadmin-routes.html">Custom WebAdmin routes</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../benchmark/index.html">Performance benchmark</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/db-benchmark.html">Database benchmarks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/james-benchmark.html">James benchmarks</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </nav>
+</div>
+<div class="nav-panel-explore" data-panel="explore">
+ <div class="context">
+ <span class="title">Apache James Distributed Server</span>
+ <span class="version">3.7.2 SNAPSHOT</span>
+ </div>
+ <ul class="components">
+ <li class="component is-current">
+ <a class="title" href="../index.html">Apache James Distributed Server</a>
+ <ul class="versions">
+ <li class="version is-current is-latest">
+ <a href="../index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-project/3.7.2/index.html">Apache James Server</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-project/3.7.2/index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ <li class="version">
+ <a href="../../../james-project/3.6.0/index.html">3.6.0 Snapshot</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-site/latest/index.html">Apache James Site</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-site/latest/index.html">latest</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+</div>
+ </div>
+ </aside>
+</div>
+<main class="article">
+<div class="toolbar" role="navigation">
+<button class="nav-toggle"></button>
+ <a href="../../../james-site/latest/homepage.html" class="home-link"></a>
+<nav class="breadcrumbs" aria-label="breadcrumbs">
+ <ul>
+ <li><a href="../index.html">Apache James Distributed Server</a></li>
+ <li><a href="../index.html">Distributed James Application</a></li>
+ <li><a href="index.html">Configuration</a></li>
+ <li>Extensions</li>
+ <li><a href="dsn.html">ESMTP DSN support</a></li>
+ </ul>
+</nav>
+ <div class="edit-this-page"><a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/configure/dsn.adoc">Edit this Page</a></div>
+ </div>
+ <div class="content">
+<aside class="toc sidebar" data-title="Contents" data-levels="2">
+ <div class="toc-menu"></div>
+</aside>
+<article class="doc">
+<h1 class="page">Distributed James Server — Delivery Submission Notifications</h1>
+<div id="preamble">
+<div class="sectionbody">
+<div class="paragraph">
+<p>DSN introduced in <a href="https://tools.ietf.org/html/rfc3461">RFC-3461</a> allows a SMTP sender to demand status messages,
+defined in <a href="https://tools.ietf.org/html/rfc3464">RFC-3464</a> to be sent back to the <code>Return-Path</code> upon delivery
+progress.</p>
+</div>
+<div class="paragraph">
+<p>DSN support is not enabled by default, as it needs specific configuration of the
+<a href="mailetcontainer.html" class="page">mailetcontainer.xml</a> to be specification compliant.</p>
+</div>
+<div class="paragraph">
+<p>To enable it you need to:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Add DSN SMTP hooks as part of the SMTP server stack</p>
+</li>
+<li>
+<p>Configure <a href="mailetcontainer.html" class="page">mailetcontainer.xml</a> to generate DSN bounces when needed</p>
+</li>
+</ul>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_enabling_dsn_in_smtp_server_stack"><a class="anchor" href="#_enabling_dsn_in_smtp_server_stack"></a>Enabling DSN in SMTP server stack</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>For this simply add the <code>DSN hooks</code> in the handler chain in <code>smtpserver.xml</code> :</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre><smtpserver enabled="true">
+ <...> <!-- The rest of your SMTP configuration, unchanged -->
+ <handlerchain>
+ <handler class="org.apache.james.smtpserver.dsn.DSNEhloHook"/>
+ <handler class="org.apache.james.smtpserver.dsn.DSNMailParameterHook"/>
+ <handler class="org.apache.james.smtpserver.dsn.DSNRcptParameterHook"/>
+ <handler class="org.apache.james.smtpserver.dsn.DSNMessageHook"/>
+ <...> <!-- other handlers, like: -->
+ <handler class="org.apache.james.smtpserver.CoreCmdHandlerLoader"/> <!-- for instance -->
+ </handlerchain>
+</smtpserver></pre>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_enabling_dsn_generation_as_part_of_mail_processing"><a class="anchor" href="#_enabling_dsn_generation_as_part_of_mail_processing"></a>Enabling DSN generation as part of mail processing</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>For the below conditions to be matched we assume you follow
+<a href="remote-delivery-error-handling.html" class="page">RemoteDelivery error handling for MXs</a>, which is a
+requirement for detailed RemoteDelivery error and delay handling on top of the Distributed server.</p>
+</div>
+<div class="paragraph">
+<p>Here is a sample <a href="mailetcontainer.html" class="page">mailetcontainer.xml</a> achieving the following DSN generation:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>Generate a generic <code>delivered</code> notification if LocalDelivery succeeded, if requested</p>
+</li>
+<li>
+<p>Generate a generic <code>failed</code> notification in case of local errors, if requested</p>
+</li>
+<li>
+<p>Generate a specific <code>failed</code> notification in case of a non existing local user, if requested</p>
+</li>
+<li>
+<p>Generate a specific <code>failed</code> notification in case of an address rewriting loop, if requested</p>
+</li>
+<li>
+<p>Generate a <code>failed</code> notification in case of remote permanent errors, if requested. We blame the remote server…​</p>
+</li>
+<li>
+<p>Generate a <code>delayed</code> notification in case of temporary remote errors we are about to retry, if requested. We blame the remote server…​</p>
+</li>
+<li>
+<p>Generate a <code>failed</code> notification in case of temporary remote errors we are not going to retry (failed too many time), if requested. We blame the remote server…​</p>
+</li>
+</ul>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre><mailetcontainer enableJmx="true">
+ <!-- Common processing settings are unchanged -->
+
+ <processors>
+ <processor state="root" enableJmx="true">\
+ <!-- Content of root processor is unchanged -->
+ </processor>
+
+ <processor state="transport" enableJmx="true">
+ <!-- transport processor unchanged -->
+ </processor>
+
+ <processor state="error" enableJmx="true">
+ <mailet match="DSNFailureRequested" class="DSNBounce">
+ <prefix>[FAILED]</prefix>
+ <passThrough>true</passThrough>
+ <messageString>Hi. This is the James mail server at [machine].
+I'm afraid I wasn't able to deliver your message to the following addresses.
+This is a permanent error; I've given up. Sorry it didn't work out. Below
+I include the list of recipients, and the reason why I was unable to deliver
+your message.</messageString>
+ <action>failed</action>
+ <defaultStatus>5.0.0</defaultStatus>
+ </mailet>
+ <mailet match="All" class="ToRepository">
+ <repositoryPath>cassandra://var/mail/error/</repositoryPath>
+ </mailet>
+ </processor>
+
+ <processor state="local-delivery" enableJmx="true">
+ <!-- Your local-delivery pipeline -->
+ <mailet match="All" class="LocalDelivery">
+ <!-- Do not abort the pipeline yet -->
+ <consume>false</consume>
+ </mailet>
+ <!-- Tell the world we succeeded -->
+ <mailet match="DSNSuccessRequested" class="DSNBounce">
+ <prefix>[SUCCESS]</prefix>
+ <passThrough>true</passThrough>
+ <messageString>Hi. This is the James mail server at [machine].
+I successfully delivered your message to the following addresses.
+Note that it indicates your recipients received the message but do
+not imply they read it.</messageString>
+ <action>delivered</action>
+ <defaultStatus>2.0.0</defaultStatus>
+ </mailet>
+ <mailet match="All" class="Null"/> <!-- ignore people not having requesting a dsn success bounce -->
+ </processor>
+
+ <processor state="relay" enableJmx="true">
+ <!-- Perform at most 5 RemoteDelivery attempts -->
+ <mailet match="AtMost=5" class="RemoteDelivery">
+ <outgoingQueue>outgoing</outgoingQueue>
+ <maxRetries>0</maxRetries>
+ <maxDnsProblemRetries>0</maxDnsProblemRetries>
+ <deliveryThreads>10</deliveryThreads>
+ <sendpartial>true</sendpartial>
+ <!-- Use a custom processor for error handling -->
+ <bounceProcessor>remote-delivery-error</bounceProcessor>
+ </mailet>
+ <!-- When retries are exceeded, consider the mail as a permanent failure -->
+ <mailet match="DSNFailureRequested" class="DSNBounce">
+ <prefix>[FAILED]</prefix>
+ <passThrough>true</passThrough>
+ <messageString>Hi. This is the James mail server at [machine].
+I'm afraid I wasn't able to deliver your message to the following addresses.
+This is a permanent error; I've given up. Sorry it didn't work out.
+The remote server we should relay this mail to keep on failing.
+Below I include the list of recipients, and the reason why I was unable to deliver
+your message.</messageString>
+ <action>failed</action>
+ <defaultStatus>5.0.0</defaultStatus>
+ </mailet>
+ <mailet match="All" class="ToRepository">
+ <repositoryPath>cassandra://var/mail/error/remote-delivery/permanent/</repositoryPath>
+ </mailet>
+ </processor>
+
+ <processor state="remote-delivery-error" enableJmx="true">
+ <matcher name="dsn-permanent" match="org.apache.james.mailetcontainer.impl.matchers.And">
+ <matcher match="IsRemoteDeliveryPermanentError"/>
+ <matcher match="DSNFailureRequested"/>
+ </matcher>
+ <matcher name="dsn-temporary" match="org.apache.james.mailetcontainer.impl.matchers.And">
+ <matcher match="IsRemoteDeliveryTemporaryError"/>
+ <matcher match="DSNDelayRequested"/>
+ </matcher>
+
+ <mailet match="dsn-permanent" class="DSNBounce">
+ <prefix>[FAILED]</prefix>
+ <passThrough>true</passThrough>
+ <messageString>Hi. This is the James mail server at [machine].
+I'm afraid I wasn't able to deliver your message to the following addresses.
+This is a permanent error; I've given up. Sorry it didn't work out.
+The remote server we should relay this mail to returns a permanent error.
+Below I include the list of recipients, and the reason why I was unable to deliver
+your message.</messageString>
+ <action>failed</action>
+ <defaultStatus>5.0.0</defaultStatus>
+ </mailet>
+
+ <mailet match="dsn-temporary" class="DSNBounce">
+ <prefix>[DELAYED]</prefix>
+ <passThrough>true</passThrough>
+ <messageString>Hi. This is the James mail server at [machine].
+I'm afraid I wasn't able to deliver your message to the following addresses yet.
+This is a temporary error: I will keep on trying.
+Below I include the list of recipients, and the reason why I was unable to deliver
+your message.</messageString>
+ <action>delayed</action>
+ <defaultStatus>4.0.0</defaultStatus>
+ </mailet>
+
+ <!-- Error management for remote delivery error handling as described in remote-delivery-error-handling.adoc -->
+ </processor>
+
+ <processor state="local-address-error" enableJmx="true">
+ <mailet match="DSNFailureRequested" class="DSNBounce">
+ <prefix>[FAILED]</prefix>
+ <passThrough>true</passThrough>
+ <messageString>Hi. This is the James mail server at [machine].
+I'm afraid I wasn't able to deliver your message to the following addresses.
+This is a permanent error; I've given up. Sorry it didn't work out.
+The following addresses do not exist here. Sorry.</messageString>
+ <action>failed</action>
+ <defaultStatus>5.0.0</defaultStatus>
+ </mailet>
+ <mailet match="All" class="ToRepository">
+ <repositoryPath>cassandra://var/mail/address-error/</repositoryPath>
+ </mailet>
+ </processor>
+
+ <processor state="relay-denied" enableJmx="true">
+ <!-- This is an abuse, you likely do not want to be polite with these people. we just keep a copy for later audit & replay -->
+ <mailet match="All" class="ToRepository">
+ <repositoryPath>cassandra://var/mail/relay-denied/</repositoryPath>
+ <notice>Warning: You are sending an e-mail to a remote server. You must be authenticated to perform such an operation</notice>
+ </mailet>
+ </processor>
+
+ <processor state="rrt-error" enableJmx="false">
+ <mailet match="All" class="ToRepository">
+ <repositoryPath>cassandra://var/mail/rrt-error/</repositoryPath>
+ <passThrough>true</passThrough>
+ </mailet>
+ <mailet match="IsSenderInRRTLoop" class="Null"/>
+ <mailet match="DSNFailureRequested" class="DSNBounce">
+ <prefix>[FAILED]</prefix>
+ <passThrough>true</passThrough>
+ <messageString>Hi. This is the James mail server at [machine].
+I'm afraid I wasn't able to deliver your message to the following addresses.
+This is a permanent error; I've given up. Sorry it didn't work out.
+The following addresses is caught in a rewriting loop. An admin should come and fix it (you likely want to report it).
+Once resolved the admin should be able to resume the processing of your email.
+Below I include the list of recipients, and the reason why I was unable to deliver
+your message.</messageString>
+ <action>failed</action>
+ <defaultStatus>5.1.6/defaultStatus>
+ </mailet>
+ </processor>
+ </processors>
+</mailetcontainer></pre>
+</div>
+</div>
+</div>
+</div>
+<div class="sect1">
+<h2 id="_limitations"><a class="anchor" href="#_limitations"></a>Limitations</h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>The out of the box tooling do not allow generating <code>relayed</code> DSN notification as RemoteDelivery misses a success
+callback.</p>
+</div>
+</div>
+</div>
+</article>
+ </div>
+</main>
+</div>
+<footer class="footer">
+ <p>This page was built using the Antora default UI.</p>
+ <p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
+</footer>
+<script id="site-script" src="../../../_/js/site.js" data-ui-root-path="../../../_"></script>
+<script async src="../../../_/js/vendor/highlight.js"></script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/james-distributed-app/3.7.2/configure/extensions.html b/james-distributed-app/3.7.2/configure/extensions.html
new file mode 100644
index 000000000..3d268d4e5
--- /dev/null
+++ b/james-distributed-app/3.7.2/configure/extensions.html
@@ -0,0 +1,464 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <title>Distributed James Server — extensions.properties :: Apache James</title>
+ <meta name="generator" content="Antora 2.3.4">
+ <link rel="stylesheet" href="../../../_/css/site.css">
+ <script>var uiRootPath = '../../../_'</script>
+ </head>
+ <body class="article">
+<header class="header">
+ <nav class="navbar">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="https://james.apache.org"><img src="/_/img/james.svg" alt="james logo"> Apache James</a>
+ <button class="navbar-burger" data-target="topbar-nav">
+ <span></span>
+ <span></span>
+ <span></span>
+ </button>
+ </div>
+ <div id="topbar-nav" class="navbar-menu">
+ <div class="navbar-end">
+ <a class="navbar-item" href="#">Home</a>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Products</a>
+ <div class="navbar-dropdown">
+ <div class="navbar-item"><strong>James server</strong></div>
+ <a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
+ <a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
+ <hr class="navbar-divider">
+ <a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
+ <a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
+ <a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
+ <a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
+ <a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
+ </div>
+ </div>
+ <div class="navbar-item has-dropdown is-hoverable">
+ <a class="navbar-link" href="#">Community</a>
+ <div class="navbar-dropdown">
+ <!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
+ <a class="navbar-item" href="/james-project/3.6.0/community/mailing-lists.html">Mailing lists</a>
+ <a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
+ <a class="navbar-item" href="https://twitter.com/ApacheJames">
+ <span class="icon">
+ <svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
+ <path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.1 [...]
+ </svg>
+ </span> Twitter
+ </a>
+ <a class="navbar-item" href="#"> <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 [...]
+ </div>
+ </div>
+<!-- <div class="navbar-item">
+ <span class="control">
+ <a class="button is-primary" href="#">Download</a>
+ </span>
+ </div> -->
+ </div>
+ </div>
+ </nav>
+</header>
+<div class="body">
+<div class="nav-container" data-component="james-distributed-app" data-version="3.7.2">
+ <aside class="nav">
+ <div class="panels">
+<div class="nav-panel-menu is-active" data-panel="menu">
+ <nav class="nav-menu">
+ <h3 class="title"><a href="../index.html">Apache James Distributed Server</a></h3>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="0">
+<ul class="nav-list">
+ <li class="nav-item" data-depth="1">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../index.html">Distributed James Application</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="2">
+ <a class="nav-link" href="../objectives.html">Objectives and motivation</a>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../architecture/index.html">Architecture</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/implemented-standards.html">Implemented standards</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/consistency-model.html">Consistency Model</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../architecture/specialized-instances.html">Specialized instances</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/index.html">Run</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-java.html">Run with Java</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../run/run-docker.html">Run with Docker</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../run/run-kubernetes.html">Run with Kubernetes</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-checklist.html">Deployment Checklist</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-logsMetrics.html">Logs & Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-values.html">values.yaml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="../run/k8s-secrets.html">secrets.yaml</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="index.html">Configuration</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Protocols</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="imap.html">imapserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="jmap.html">jmap.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="jmx.html">jmx.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="smtp.html">smtpserver.xml & lmtpserver.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="smtp-hooks.html">Packaged SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="pop3.html">pop3server.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="webadmin.html">webadmin.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="ssl.html">SSL & TLS</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="sieve.html">Sieve & ManageSieve</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Storage dependencies</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="blobstore.html">blobstore.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="cassandra.html">cassandra.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="opensearch.html">opensearch.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="rabbitmq.html">rabbitmq.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="redis.html">redis.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="tika.html">tika.properties</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Core components</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="batchsizes.html">batchsizes.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="dns.html">dnsservice.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="domainlist.html">domainlist.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="healthcheck.html">healthcheck.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailetcontainer.html">mailetcontainer.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailets.html">Packaged Mailets</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="matchers.html">Packaged Matchers</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="mailrepositorystore.html">mailrepositorystore.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="recipientrewritetable.html">recipientrewritetable.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="usersrepository.html">usersrepository.xml</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <button class="nav-item-toggle"></button>
+ <span class="nav-text">Extensions</span>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="vault.html">deletedMessageVault.properties</a>
+ </li>
+ <li class="nav-item is-current-page" data-depth="4">
+ <a class="nav-link" href="extensions.html">extensions.properties</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="listeners.html">listeners.xml</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="spam.html">Anti-Spam setup</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="remote-delivery-error-handling.html">About RemoteDelivery error handling</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="collecting-contacts.html">Contact collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="collecting-events.html">Event collection</a>
+ </li>
+ <li class="nav-item" data-depth="4">
+ <a class="nav-link" href="dsn.html">ESMTP DSN support</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../operate/index.html">Operate</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/guide.html">Operator guide</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/logging.html">Logging</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/webadmin.html">WebAdmin REST administration API</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/metrics.html">Metrics</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/migrating.html">Migrating existing data</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cli.html">Command Line Interface</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/cassandra-migration.html">Cassandra migration</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../operate/security.html">Security checklist</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../extending/index.html">Extending server behavior</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mail-processing.html">Custom mail processing components</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/mailbox-listeners.html">Custom Mailbox Listeners</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/smtp-hooks.html">Custom SMTP hooks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../extending/webadmin-routes.html">Custom WebAdmin routes</a>
+ </li>
+</ul>
+ </li>
+ <li class="nav-item" data-depth="2">
+ <button class="nav-item-toggle"></button>
+ <a class="nav-link" href="../benchmark/index.html">Performance benchmark</a>
+<ul class="nav-list">
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/db-benchmark.html">Database benchmarks</a>
+ </li>
+ <li class="nav-item" data-depth="3">
+ <a class="nav-link" href="../benchmark/james-benchmark.html">James benchmarks</a>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </li>
+</ul>
+ </nav>
+</div>
+<div class="nav-panel-explore" data-panel="explore">
+ <div class="context">
+ <span class="title">Apache James Distributed Server</span>
+ <span class="version">3.7.2 SNAPSHOT</span>
+ </div>
+ <ul class="components">
+ <li class="component is-current">
+ <a class="title" href="../index.html">Apache James Distributed Server</a>
+ <ul class="versions">
+ <li class="version is-current is-latest">
+ <a href="../index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-project/3.7.2/index.html">Apache James Server</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-project/3.7.2/index.html">3.7.2 SNAPSHOT</a>
+ </li>
+ <li class="version">
+ <a href="../../../james-project/3.6.0/index.html">3.6.0 Snapshot</a>
+ </li>
+ </ul>
+ </li>
+ <li class="component">
+ <a class="title" href="../../../james-site/latest/index.html">Apache James Site</a>
+ <ul class="versions">
+ <li class="version is-latest">
+ <a href="../../../james-site/latest/index.html">latest</a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+</div>
+ </div>
+ </aside>
+</div>
+<main class="article">
+<div class="toolbar" role="navigation">
+<button class="nav-toggle"></button>
+ <a href="../../../james-site/latest/homepage.html" class="home-link"></a>
+<nav class="breadcrumbs" aria-label="breadcrumbs">
+ <ul>
+ <li><a href="../index.html">Apache James Distributed Server</a></li>
+ <li><a href="../index.html">Distributed James Application</a></li>
+ <li><a href="index.html">Configuration</a></li>
+ <li>Extensions</li>
+ <li><a href="extensions.html">extensions.properties</a></li>
+ </ul>
+</nav>
+ <div class="edit-this-page"><a href="https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/configure/extensions.adoc">Edit this Page</a></div>
+ </div>
+ <div class="content">
+<aside class="toc sidebar" data-title="Contents" data-levels="2">
+ <div class="toc-menu"></div>
+</aside>
+<article class="doc">
+<h1 class="page">Distributed James Server — extensions.properties</h1>
+<div class="paragraph">
+<p>This files enables an operator to define additional bindings used to instantiate others extensions</p>
+</div>
+<div class="paragraph">
+<p><strong>guice.extension.module</strong>: come separated list of fully qualified class name. These classes need to implement Guice modules.</p>
+</div>
+<div class="paragraph">
+<p>Here is an example of such a class :</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>public class MyServiceModule extends AbstractModule {
+ @Override
+ protected void configure() {
+ bind(MyServiceImpl.class).in(Scopes.SINGLETON);
+ bind(MyService.class).to(MyServiceImpl.class);
+ }
+}</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Recording it in extensions.properties :</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>guice.extension.module=com.project.MyServiceModule</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Enables to inject MyService into your extensions.</p>
+</div>
+<div class="paragraph">
+<p><strong>guice.extension.tasks</strong>: come separated list of fully qualified class name.</p>
+</div>
+<div class="paragraph">
+<p>The extension can rely on the Task manager to supervise long-running task execution (progress, await, cancellation, scheduling…​).
+These extensions need to implement Task extension modules.</p>
+</div>
+<div class="paragraph">
+<p>Here is an example of such a class :</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>public class RspamdTaskExtensionModule implements TaskExtensionModule {
+
+ @Inject
+ public RspamdTaskExtensionModule() {
+ }
+
+ @Override
+ public Set<TaskDTOModule<? extends Task, ? extends TaskDTO>> taskDTOModules() {
+ return Set.of(...);
+ }
+
+ @Override
+ public Set<AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends AdditionalInformationDTO>> taskAdditionalInformationDTOModules() {
+ return Set.of(...);
+ }
+}</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Recording it in extensions.properties :</p>
+</div>
+<div class="literalblock">
+<div class="content">
+<pre>guice.extension.tasks=com.project.RspamdTaskExtensionModule</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>Read <a href="../extending/index.html#_defining_custom_injections_for_your_extensions" class="page">this page</a> for more details.</p>
+</div>
+</article>
+ </div>
+</main>
+</div>
+<footer class="footer">
+ <p>This page was built using the Antora default UI.</p>
+ <p>The source code for this UI is licensed under the terms of the MPL-2.0 license.</p>
+</footer>
+<script id="site-script" src="../../../_/js/site.js" data-ui-root-path="../../../_"></script>
+<script async src="../../../_/js/vendor/highlight.js"></script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/james-distributed-app/3.7.2/configure/healthcheck.html b/james-distributed-app/3.7.2/configure/healthcheck.html
new file mode 100644
index 000000000..8c365395e
--- /dev/null
+++ b/james-distributed-app/3.7.2/configure/healthcheck.html
@@ -0,0 +1,431 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <title>Distributed James Server — healthcheck.properties :: Apache James</title>
+ <meta name="generator" content="Antora 2.3.4">
+ <link rel="stylesheet" href="../../../_/css/site.css">
+ <script>var uiRootPath = '../../../_'</script>
+ </head>
+ <body class="article">
+<header class="header">
+ <nav class="navbar">
... 133951 lines suppressed ...
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org