Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

allow enabling async metadata propagation #789

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions charts/ocis/docs/values-desc-table.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -3774,6 +3774,12 @@ a| [subs=-attributes]
a| [subs=-attributes]
`{}`
| Affinity settings for the storageusers service. See the documentation of this setting in approvider for examples.
| services.storageusers.asyncPropagation
a| [subs=-attributes]
+object+
a| [subs=-attributes]
`{"delay":"5s","enabled":false}`
| Enable asynchronous metadata propagation
| services.storageusers.autoscaling
a| [subs=-attributes]
+object+
Expand Down
5 changes: 5 additions & 0 deletions charts/ocis/docs/values.adoc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1882,6 +1882,11 @@ services:
# -- Number of event consumers to be started that concurrently consume events (eg. postprocessing related events)
concurrency: 10

# -- Enable asynchronous metadata propagation
asyncPropagation:
enabled: false
delay: "5s"

storageBackend:
# -- Configures the storage driver. Possible values are "ocis" and "s3ng".
# The oCIS driver stores all data in the persistent volume if persistence is enabled.
Expand Down
8 changes: 8 additions & 0 deletions charts/ocis/templates/storageusers/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,14 @@ spec:
- name: STORAGE_USERS_DATA_SERVER_URL
value: "http://{{ .appName }}:9158/data"

# propagation strategy
{{- if .Values.services.storageusers.asyncPropagation.enabled }}
- name: OCIS_DECOMPOSEDFS_PROPAGATOR
value: "async"
Comment on lines +80 to +81
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

owncloud.dev says:

The propagator used for decomposedfs. At the moment, only ‘sync’ is fully supported, ‘async’ is available as an experimental option.

(from https://owncloud.dev/services/storage-users/)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

During load tests we saw that uploading 1000 files into a folder caused a third of them to fail because the propagatien ran into stale NFS file handles. By delaying the propagation we can aggregate the updates to the root metadata to one write every 5sec (configurable). This takes a lot of pressure of the parent node.

It was never productized this because we never had the time to test this in kubernetes. We did that yesterday and it allowed all 1000 files to be uploaded without error.

That being said I saw several Missing parent ID on node as mentioned in https://github.com/owncloud/enterprise/issues/6690#issuecomment-2459106891

Looking into that right now.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It was never productized this because we never had the time to test this in kubernetes. We did that yesterday and it allowed all 1000 files to be uploaded without error.

Understood. Can we change the value for the oCIS product / oCIS Chart to hardcoded async in this case now? I'd like to keep the number of configurations permutations low. Same story as the async postprocessing back then...

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@micbar do you have an opinion on this?

- name: STORAGE_USERS_ASYNC_PROPAGATOR_PROPAGATION_DELAY
value: {{ .Values.services.storageusers.asyncPropagation.delay | quote }}
{{- end }}

# oCIS storage driver (decomposed filesystem)
{{- if eq .Values.services.storageusers.storageBackend.driver "ocis" }}
- name: STORAGE_USERS_DRIVER
Expand Down
5 changes: 5 additions & 0 deletions charts/ocis/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1881,6 +1881,11 @@ services:
# -- Number of event consumers to be started that concurrently consume events (eg. postprocessing related events)
concurrency: 10

# -- Enable asynchronous metadata propagation
asyncPropagation:
enabled: false
delay: "5s"

storageBackend:
# -- Configures the storage driver. Possible values are "ocis" and "s3ng".
# The oCIS driver stores all data in the persistent volume if persistence is enabled.
Expand Down