From 3d12979dd1efaa5eb8c373c87917532d0bf61e04 Mon Sep 17 00:00:00 2001 From: mmattel Date: Mon, 24 Apr 2023 12:13:44 +0200 Subject: [PATCH 1/3] Add caching/storing info to services where missing --- services/frontend/README.md | 18 +++++++++++++++++- services/gateway/README.md | 5 +++++ services/storage-users/README.md | 4 ++-- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/services/frontend/README.md b/services/frontend/README.md index bb6383f94..e020941db 100644 --- a/services/frontend/README.md +++ b/services/frontend/README.md @@ -32,10 +32,26 @@ Setting `FRONTEND_OCS_RESOURCE_INFO_CACHE_TTL=60` would cache the stat info for ## Scalability -While the frontend service does not persist any data it does cache `Stat()` responses and user information. Therefore, multiple instances of this service can be spawned in a bigger deployment like when using container orchestration with Kubernetes, when configuring `FRONTEND_OCS_RESOURCE_INFO_CACHE_TYPE=redis` and the related config options. +While the frontend service does not persist any data, it does cache information about files and filesystem (`Stat()`) responses and user information. Therefore, multiple instances of this service can be spawned in a bigger deployment like when using container orchestration with Kubernetes, when configuring `FRONTEND_OCS_RESOURCE_INFO_CACHE_STORE` and the related config options. ## Define Read-Only Attributes A lot of user management is made via the standardized libregraph API. Depending on how the system is configured, there might be some user attributes that an ocis instance admin can't change because of properties coming from an external LDAP server, or similar. This can be the case when the ocis admin is not the LDAP admin. To ease life for admins, there are hints as capabilites telling the frontend which attributes are read-only to enable a different optical representation like being grayed out. To configure these hints, use the environment variable `FRONTEND_READONLY_USER_ATTRIBUTES`, which takes a comma separated list of attributes, see the envvar for supported values. You can find more details regarding available attributes at the [libre-graph-api openapi-spec](https://github.com/owncloud/libre-graph-api/blob/main/api/openapi-spec/v1.0.yaml) and on [owncloud.dev](https://owncloud.dev/libre-graph-api/). + +## Caching + +The `frontend` service can use a configured store via `FRONTEND_OCS_RESOURCE_INFO_CACHE_STORE`. Possible stores are: + - `memory`: Basic in-memory store and the default. + - `ocmem`: Advanced in-memory store allowing max size. + - `redis`: Stores data in a configured redis cluster. + - `redis-sentinel`: Stores data in a configured redis sentinel cluster. + - `etcd`: Stores data in a configured etcd cluster. + - `nats-js`: Stores data using key-value-store feature of [nats jetstream](https://docs.nats.io/nats-concepts/jetstream/key-value-store) + - `noop`: Stores nothing. Useful for testing. Not recommended in production environments. + +1. Note that in-memory stores are by nature not reboot persistent. +2. Though usually not necessary, a database name and a database table can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`. These settings are blank by default which means that the standard settings of the configured store applies. +3. The frontend service can be scaled if not using `in-memory` stores and the stores are configured identically over all instances. +4. When using `redis-sentinel`, the Redis master to use is configured via `FRONTEND_OCS_RESOURCE_INFO_CACHE_STORE_NODES` in the form of `:/` like `10.10.0.200:26379/mymaster`. diff --git a/services/gateway/README.md b/services/gateway/README.md index e0a197ab9..8a4e58117 100644 --- a/services/gateway/README.md +++ b/services/gateway/README.md @@ -6,9 +6,14 @@ The gateway service is an ... The `gateway` service can use a configured store via `GATEWAY_CACHE_STORE`. Possible stores are: - `memory`: Basic in-memory store and the default. + - `ocmem`: Advanced in-memory store allowing max size. - `redis`: Stores data in a configured redis cluster. + - `redis-sentinel`: Stores data in a configured redis sentinel cluster. - `etcd`: Stores data in a configured etcd cluster. + - `nats-js`: Stores data using key-value-store feature of [nats jetstream](https://docs.nats.io/nats-concepts/jetstream/key-value-store) + - `noop`: Stores nothing. Useful for testing. Not recommended in production environments. 1. Note that in-memory stores are by nature not reboot persistent. 2. Though usually not necessary, a database name and a database table can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`. These settings are blank by default which means that the standard settings of the configured store applies. 3. The gateway service can be scaled if not using `in-memory` stores and the stores are configured identically over all instances. +4. When using `redis-sentinel`, the Redis master to use is configured via `GATEWAY_CACHE_STORE_NODES` in the form of `:/` like `10.10.0.200:26379/mymaster`. diff --git a/services/storage-users/README.md b/services/storage-users/README.md index 4896e210f..f99445fad 100644 --- a/services/storage-users/README.md +++ b/services/storage-users/README.md @@ -83,7 +83,7 @@ The configuration for the `purge-expired` command is done by using the following ## Caching -The `storage-users` service caches file metadata via the configured store in `STORAGE_USERS_CACHE_STORE`. Possible stores are: +The `storage-users` service caches stat and metadata via the configured store in `STORAGE_USERS_STAT_CACHE_STORE` and `STORAGE_USERS_FILEMETADATA_CACHE_STORE`. Possible stores are: - `memory`: Basic in-memory store and the default. - `redis`: Stores metadata in a configured Redis cluster. - `redis-sentinel`: Stores metadata in a configured Redis Sentinel cluster. @@ -94,4 +94,4 @@ The `storage-users` service caches file metadata via the configured store in `ST 1. Note that in-memory stores are by nature not reboot persistent. 2. Though usually not necessary, a database name can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`, `redis` and `redis-sentinel`. These settings are blank by default which means that the standard settings of the configured store applies. 3. The `storage-users` service can be scaled if not using `in-memory` stores and the stores are configured identically over all instances. -4. When using `redis-sentinel`, the Redis master to use is configured via `STORAGE_SYSTEM_CACHE_NODES` in the form of `:/` like `10.10.0.200:26379/mymaster`. +4. When using `redis-sentinel`, the Redis master to use is configured via `STORAGE_USERS_STAT_CACHE_STORE_NODES` and `STORAGE_USERS_FILEMETADATA_CACHE_STORE_NODES` in the form of `:/` like `10.10.0.200:26379/mymaster`. From 6d7b13c7a58c1fa66c7e05882cbead336c938deb Mon Sep 17 00:00:00 2001 From: Edith Parzefall Date: Mon, 24 Apr 2023 12:33:37 +0200 Subject: [PATCH 2/3] Apply suggestions from code review language review --- services/frontend/README.md | 8 ++++---- services/gateway/README.md | 6 +++--- services/storage-users/README.md | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/services/frontend/README.md b/services/frontend/README.md index e020941db..c74ba3fae 100644 --- a/services/frontend/README.md +++ b/services/frontend/README.md @@ -45,13 +45,13 @@ You can find more details regarding available attributes at the [libre-graph-api The `frontend` service can use a configured store via `FRONTEND_OCS_RESOURCE_INFO_CACHE_STORE`. Possible stores are: - `memory`: Basic in-memory store and the default. - `ocmem`: Advanced in-memory store allowing max size. - - `redis`: Stores data in a configured redis cluster. - - `redis-sentinel`: Stores data in a configured redis sentinel cluster. + - `redis`: Stores data in a configured Redis cluster. + - `redis-sentinel`: Stores data in a configured Redis Sentinel cluster. - `etcd`: Stores data in a configured etcd cluster. - `nats-js`: Stores data using key-value-store feature of [nats jetstream](https://docs.nats.io/nats-concepts/jetstream/key-value-store) - `noop`: Stores nothing. Useful for testing. Not recommended in production environments. -1. Note that in-memory stores are by nature not reboot persistent. -2. Though usually not necessary, a database name and a database table can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`. These settings are blank by default which means that the standard settings of the configured store applies. +1. Note that in-memory stores are by nature not reboot-persistent. +2. Though usually not necessary, a database name and a database table can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`. These settings are blank by default which means that the standard settings of the configured store apply. 3. The frontend service can be scaled if not using `in-memory` stores and the stores are configured identically over all instances. 4. When using `redis-sentinel`, the Redis master to use is configured via `FRONTEND_OCS_RESOURCE_INFO_CACHE_STORE_NODES` in the form of `:/` like `10.10.0.200:26379/mymaster`. diff --git a/services/gateway/README.md b/services/gateway/README.md index 8a4e58117..a2db7d311 100644 --- a/services/gateway/README.md +++ b/services/gateway/README.md @@ -7,13 +7,13 @@ The gateway service is an ... The `gateway` service can use a configured store via `GATEWAY_CACHE_STORE`. Possible stores are: - `memory`: Basic in-memory store and the default. - `ocmem`: Advanced in-memory store allowing max size. - - `redis`: Stores data in a configured redis cluster. - - `redis-sentinel`: Stores data in a configured redis sentinel cluster. + - `redis`: Stores data in a configured Redis cluster. + - `redis-sentinel`: Stores data in a configured Redis Sentinel cluster. - `etcd`: Stores data in a configured etcd cluster. - `nats-js`: Stores data using key-value-store feature of [nats jetstream](https://docs.nats.io/nats-concepts/jetstream/key-value-store) - `noop`: Stores nothing. Useful for testing. Not recommended in production environments. 1. Note that in-memory stores are by nature not reboot persistent. -2. Though usually not necessary, a database name and a database table can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`. These settings are blank by default which means that the standard settings of the configured store applies. +2. Though usually not necessary, a database name and a database table can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`. These settings are blank by default which means that the standard settings of the configured store apply. 3. The gateway service can be scaled if not using `in-memory` stores and the stores are configured identically over all instances. 4. When using `redis-sentinel`, the Redis master to use is configured via `GATEWAY_CACHE_STORE_NODES` in the form of `:/` like `10.10.0.200:26379/mymaster`. diff --git a/services/storage-users/README.md b/services/storage-users/README.md index f99445fad..e5aac82e7 100644 --- a/services/storage-users/README.md +++ b/services/storage-users/README.md @@ -92,6 +92,6 @@ The `storage-users` service caches stat and metadata via the configured store in - `noop`: Stores nothing. Useful for testing. Not recommended in production environments. 1. Note that in-memory stores are by nature not reboot persistent. -2. Though usually not necessary, a database name can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`, `redis` and `redis-sentinel`. These settings are blank by default which means that the standard settings of the configured store applies. +2. Though usually not necessary, a database name can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`, `redis` and `redis-sentinel`. These settings are blank by default which means that the standard settings of the configured store apply. 3. The `storage-users` service can be scaled if not using `in-memory` stores and the stores are configured identically over all instances. 4. When using `redis-sentinel`, the Redis master to use is configured via `STORAGE_USERS_STAT_CACHE_STORE_NODES` and `STORAGE_USERS_FILEMETADATA_CACHE_STORE_NODES` in the form of `:/` like `10.10.0.200:26379/mymaster`. From e2686f90b9bde0643e58449f1bc92b1552edf8ee Mon Sep 17 00:00:00 2001 From: EParzefall Date: Mon, 24 Apr 2023 13:55:10 +0200 Subject: [PATCH 3/3] spelling fixes --- services/eventhistory/README.md | 12 ++++++------ services/frontend/README.md | 2 +- services/gateway/README.md | 2 +- services/graph/README.md | 8 ++++---- services/ocs/README.md | 8 ++++---- services/proxy/README.md | 8 ++++---- services/storage-system/README.md | 4 ++-- services/storage-users/README.md | 2 +- services/userlog/README.md | 8 ++++---- 9 files changed, 27 insertions(+), 27 deletions(-) diff --git a/services/eventhistory/README.md b/services/eventhistory/README.md index 31bdd610e..0eac0968a 100644 --- a/services/eventhistory/README.md +++ b/services/eventhistory/README.md @@ -1,6 +1,6 @@ # Eventhistory -The `eventhistory` consumes all events from the configured event system like NATS, stores them and allows other services to retrieve them via an eventid. +The `eventhistory` consumes all events from the configured event system like NATS, stores them and allows other services to retrieve them via an event ID. ## Prerequisites @@ -15,18 +15,18 @@ The `eventhistory` services consumes all events from the configured event system The `eventhistory` service stores each consumed event via the configured store in `EVENTHISTORY_STORE_TYPE`. Possible stores are: - `memory`: Basic in-memory store and the default. - `ocmem`: Advanced in-memory store allowing max size. - - `redis`: Stores data in a configured redis cluster. - - `redis-sentinel`: Stores data in a configured redis sentinel cluster. + - `redis`: Stores data in a configured Redis cluster. + - `redis-sentinel`: Stores data in a configured Redis Sentinel cluster. - `etcd`: Stores data in a configured etcd cluster. - `nats-js`: Stores data using key-value-store feature of [nats jetstream](https://docs.nats.io/nats-concepts/jetstream/key-value-store) - `noop`: Stores nothing. Useful for testing. Not recommended in production environments. -1. Note that in-memory stores are by nature not reboot persistent. -2. Though usually not necessary, a database name and a database table can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`. These settings are blank by default which means that the standard settings of the configured store applies. +1. Note that in-memory stores are by nature not reboot-persistent. +2. Though usually not necessary, a database name and a database table can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`. These settings are blank by default which means that the standard settings of the configured store apply. 3. Events stay in the store for 2 weeks by default. Use `EVENTHISTORY_RECORD_EXPIRY` to adjust this value. 4. The eventhistory service can be scaled if not using `in-memory` stores and the stores are configured identically over all instances. 5. When using `redis-sentinel`, the Redis master to use is configured via `EVENTHISTORY_STORE_NODES` in the form of `:/` like `10.10.0.200:26379/mymaster`. ## Retrieving -Other services can call the `eventhistory` service via a grpc call to retrieve events. The request must contain the eventid that should be retrieved. +Other services can call the `eventhistory` service via a gRPC call to retrieve events. The request must contain the event ID that should be retrieved. diff --git a/services/frontend/README.md b/services/frontend/README.md index c74ba3fae..a7667d426 100644 --- a/services/frontend/README.md +++ b/services/frontend/README.md @@ -26,7 +26,7 @@ The ocs endpoint, by default `/ocs`, implements the ownCloud 10 Open Collaborati Aggregating share information is one of the most time consuming operations in OCIS. The service fetches a list of either received or created shares and has to stat every resource individually. While stats are fast, the default behavior scales linearly with the number of shares. -To save network trips the sharing implementation can cache the stat requests with an in memory cache or in redis. It will shorten the response time by the network round-trip overhead at the cost of the API only eventually being updated. +To save network trips the sharing implementation can cache the stat requests with an in memory cache or in Redis. It will shorten the response time by the network round-trip overhead at the cost of the API only eventually being updated. Setting `FRONTEND_OCS_RESOURCE_INFO_CACHE_TTL=60` would cache the stat info for 60 seconds. Increasing this value makes sense for large deployments with thousands of active users that keep the cache up to date. Low frequency usage scenarios should not expect a noticeable improvement. diff --git a/services/gateway/README.md b/services/gateway/README.md index a2db7d311..e718e9a44 100644 --- a/services/gateway/README.md +++ b/services/gateway/README.md @@ -13,7 +13,7 @@ The `gateway` service can use a configured store via `GATEWAY_CACHE_STORE`. Poss - `nats-js`: Stores data using key-value-store feature of [nats jetstream](https://docs.nats.io/nats-concepts/jetstream/key-value-store) - `noop`: Stores nothing. Useful for testing. Not recommended in production environments. -1. Note that in-memory stores are by nature not reboot persistent. +1. Note that in-memory stores are by nature not reboot-persistent. 2. Though usually not necessary, a database name and a database table can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`. These settings are blank by default which means that the standard settings of the configured store apply. 3. The gateway service can be scaled if not using `in-memory` stores and the stores are configured identically over all instances. 4. When using `redis-sentinel`, the Redis master to use is configured via `GATEWAY_CACHE_STORE_NODES` in the form of `:/` like `10.10.0.200:26379/mymaster`. diff --git a/services/graph/README.md b/services/graph/README.md index 84b3aab67..ad2b3d8b4 100644 --- a/services/graph/README.md +++ b/services/graph/README.md @@ -20,14 +20,14 @@ The following image gives an overview of the scenario when a client requests to The `graph` service can use a configured store via `GRAPH_STORE_TYPE`. Possible stores are: - `memory`: Basic in-memory store and the default. - `ocmem`: Advanced in-memory store allowing max size. - - `redis`: Stores data in a configured redis cluster. - - `redis-sentinel`: Stores data in a configured redis sentinel cluster. + - `redis`: Stores data in a configured Redis cluster. + - `redis-sentinel`: Stores data in a configured Redis Sentinel cluster. - `etcd`: Stores data in a configured etcd cluster. - `nats-js`: Stores data using key-value-store feature of [nats jetstream](https://docs.nats.io/nats-concepts/jetstream/key-value-store) - `noop`: Stores nothing. Useful for testing. Not recommended in production environments. -1. Note that in-memory stores are by nature not reboot persistent. -2. Though usually not necessary, a database name and a database table can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`. These settings are blank by default which means that the standard settings of the configured store applies. +1. Note that in-memory stores are by nature not reboot-persistent. +2. Though usually not necessary, a database name and a database table can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`. These settings are blank by default which means that the standard settings of the configured store apply. 3. The graph service can be scaled if not using `in-memory` stores and the stores are configured identically over all instances. 4. When using `redis-sentinel`, the Redis master to use is configured via `GRAPH_CACHE_STORE_NODES` in the form of `:/` like `10.10.0.200:26379/mymaster`. diff --git a/services/ocs/README.md b/services/ocs/README.md index 5e2135ab4..ca1e16943 100644 --- a/services/ocs/README.md +++ b/services/ocs/README.md @@ -7,13 +7,13 @@ The ocs service is an ... The `ocs` service can use a configured store via `OCS_STORE_TYPE`. Possible stores are: - `memory`: Basic in-memory store and the default. - `ocmem`: Advanced in-memory store allowing max size. - - `redis`: Stores data in a configured redis cluster. - - `redis-sentinel`: Stores data in a configured redis sentinel cluster. + - `redis`: Stores data in a configured Redis cluster. + - `redis-sentinel`: Stores data in a configured Redis Sentinel cluster. - `etcd`: Stores data in a configured etcd cluster. - `nats-js`: Stores data using key-value-store feature of [nats jetstream](https://docs.nats.io/nats-concepts/jetstream/key-value-store) - `noop`: Stores nothing. Useful for testing. Not recommended in production environments. -1. Note that in-memory stores are by nature not reboot persistent. -2. Though usually not necessary, a database name and a database table can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`. These settings are blank by default which means that the standard settings of the configured store applies. +1. Note that in-memory stores are by nature not reboot-persistent. +2. Though usually not necessary, a database name and a database table can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`. These settings are blank by default which means that the standard settings of the configured store apply. 3. The ocs service can be scaled if not using `in-memory` stores and the stores are configured identically over all instances. 4. When using `redis-sentinel`, the Redis master to use is configured via `OCS_CACHE_STORE_NODES` in the form of `:/` like `10.10.0.200:26379/mymaster`. diff --git a/services/proxy/README.md b/services/proxy/README.md index 09c34ed43..8d27bc07e 100644 --- a/services/proxy/README.md +++ b/services/proxy/README.md @@ -98,13 +98,13 @@ In a production deployment, you want to have basic authentication (`PROXY_ENABLE The `proxy` service can use a configured store via `PROXY_STORE_TYPE`. Possible stores are: - `memory`: Basic in-memory store and the default. - `ocmem`: Advanced in-memory store allowing max size. - - `redis`: Stores data in a configured redis cluster. - - `redis-sentinel`: Stores data in a configured redis sentinel cluster. + - `redis`: Stores data in a configured Redis cluster. + - `redis-sentinel`: Stores data in a configured Redis Sentinel cluster. - `etcd`: Stores data in a configured etcd cluster. - `nats-js`: Stores data using key-value-store feature of [nats jetstream](https://docs.nats.io/nats-concepts/jetstream/key-value-store) - `noop`: Stores nothing. Useful for testing. Not recommended in production environments. -1. Note that in-memory stores are by nature not reboot persistent. -2. Though usually not necessary, a database name and a database table can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`. These settings are blank by default which means that the standard settings of the configured store applies. +1. Note that in-memory stores are by nature not reboot-persistent. +2. Though usually not necessary, a database name and a database table can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`. These settings are blank by default which means that the standard settings of the configured store apply. 3. The proxy service can be scaled if not using `in-memory` stores and the stores are configured identically over all instances. 4. When using `redis-sentinel`, the Redis master to use is configured via `PROXY_OIDC_USERINFO_CACHE_NODES` in the form of `:/` like `10.10.0.200:26379/mymaster`. diff --git a/services/storage-system/README.md b/services/storage-system/README.md index 9bf2cc6d0..d425acee5 100644 --- a/services/storage-system/README.md +++ b/services/storage-system/README.md @@ -12,7 +12,7 @@ The `storage-system` service caches file metadata via the configured store in `S - `nats-js`: Stores metadata using the key-value-store feature of [nats jetstream](https://docs.nats.io/nats-concepts/jetstream/key-value-store) - `noop`: Stores nothing. Useful for testing. Not recommended in production environments. -1. Note that in-memory stores are by nature not reboot persistent. -2. Though usually not necessary, a database name can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`, `redis` and `redis-sentinel`. These settings are blank by default which means that the standard settings of the configured store applies. +1. Note that in-memory stores are by nature not reboot-persistent. +2. Though usually not necessary, a database name can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`, `redis` and `redis-sentinel`. These settings are blank by default which means that the standard settings of the configured store apply. 3. The `storage-system` service can be scaled if not using `in-memory` stores and the stores are configured identically over all instances. 4. When using `redis-sentinel`, the Redis master to use is configured via `STORAGE_SYSTEM_CACHE_NODES` in the form of `:/` like `10.10.0.200:26379/mymaster`. diff --git a/services/storage-users/README.md b/services/storage-users/README.md index e5aac82e7..8952368ce 100644 --- a/services/storage-users/README.md +++ b/services/storage-users/README.md @@ -91,7 +91,7 @@ The `storage-users` service caches stat and metadata via the configured store in - `nats-js`: Stores metadata using the key-value-store feature of [nats jetstream](https://docs.nats.io/nats-concepts/jetstream/key-value-store) - `noop`: Stores nothing. Useful for testing. Not recommended in production environments. -1. Note that in-memory stores are by nature not reboot persistent. +1. Note that in-memory stores are by nature not reboot-persistent. 2. Though usually not necessary, a database name can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`, `redis` and `redis-sentinel`. These settings are blank by default which means that the standard settings of the configured store apply. 3. The `storage-users` service can be scaled if not using `in-memory` stores and the stores are configured identically over all instances. 4. When using `redis-sentinel`, the Redis master to use is configured via `STORAGE_USERS_STAT_CACHE_STORE_NODES` and `STORAGE_USERS_FILEMETADATA_CACHE_STORE_NODES` in the form of `:/` like `10.10.0.200:26379/mymaster`. diff --git a/services/userlog/README.md b/services/userlog/README.md index 83548538a..c509163df 100644 --- a/services/userlog/README.md +++ b/services/userlog/README.md @@ -11,14 +11,14 @@ Running the `userlog` service without running the `eventhistory` service is not The `userlog` service persists information via the configured store in `USERLOG_STORE_TYPE`. Possible stores are: - `memory`: Basic in-memory store and the default. - `ocmem`: Advanced in-memory store allowing max size. - - `redis`: Stores data in a configured redis cluster. - - `redis-sentinel`: Stores data in a configured redis sentinel cluster. + - `redis`: Stores data in a configured Redis cluster. + - `redis-sentinel`: Stores data in a configured Redis Sentinel cluster. - `etcd`: Stores data in a configured etcd cluster. - `nats-js`: Stores data using key-value-store feature of [nats jetstream](https://docs.nats.io/nats-concepts/jetstream/key-value-store) - `noop`: Stores nothing. Useful for testing. Not recommended in production environments. -1. Note that in-memory stores are by nature not reboot persistent. -2. Though usually not necessary, a database name and a database table can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`. These settings are blank by default which means that the standard settings of the configured store applies. +1. Note that in-memory stores are by nature not reboot-persistent. +2. Though usually not necessary, a database name and a database table can be configured for event stores if the event store supports this. Generally not applicable for stores of type `in-memory`. These settings are blank by default which means that the standard settings of the configured store apply. 3. The userlog service can be scaled if not using `in-memory` stores and the stores are configured identically over all instances. 4. When using `redis-sentinel`, the Redis master to use is configured via `USERLOG_STORE_NODES` in the form of `:/` like `10.10.0.200:26379/mymaster`.