You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#5655 introduced a new database API endpoint: /{db}/_auto_purge which is a /{db}/_security-like JSON structure with a single key deleted_document_ttl.
With other features on the horizon that need per-db configuration, I suggest we formalise an extensible API for database config modelled after the server _config API and move the _auto_purge functionality into that. In addition, this allows us to consolidate a few other things like _revs_limit and _purged_infos_limit into that API as well.
The general idea is to model the behaviour on how /_config works. I’ll skip the /_node/{name-or_local} prefix for brevity.
To recap how /_config works:
GET /_config -> returns all config in a JSON object, top level keys are config sections, second level keys are config settings and their values are the config value.
GET /_config/section -> returns a JSON response of all config keys and their values for a particular section.
GET /_config/section/key -> returns just the config value for a given section and key.
PUT /_config/section/key value -> updates the value of section/key to the provided value and returns the old value.
DELETE /_config/section/key -> removes a configuration option, this means the source-default is assumed.
I propose /db/_config to behave exactly the same:
GET /{db}/_config -> returns all config in a JSON object, top level keys are config sections, second level keys are config settings and their values are the config value.
GET /{db}/_config/section -> returns a JSON response of all config keys and their values for a particular section.
GET /{db}/_config/section/key -> returns just the config value for a given section and key.
PUT /{db}/_config/section/key value -> updates the value of section/key to the provided value and returns the old value.
DELETE /{db}/_config/section/key -> removes a configuration option, this means the source-default is assumed. TBD: behaviour as we do not want to actually remove the key entry, just reset its value
To get started, we should implement the following sections and config options:
sectionkeydefault value
revslimit1000
purgeslimit1000
auto_purgedeleted_document_ttlTBD // also TBD about the unit, which is currently seconds and a bit unwieldy. We want to suggest long timeframes, so maybe days or months?
Bob suggested to move the _security object here as well, which I don’t object to, but it does not fit the data structure without some awkwardness about the value being a JSON structure where everything else is a scalar. I’m open to other suggestions, but it’d be awkward to invent something that does not behave like server _changes already.
#5655 introduced a new database API endpoint:
/{db}/_auto_purgewhich is a/{db}/_security-like JSON structure with a single keydeleted_document_ttl.With other features on the horizon that need per-db configuration, I suggest we formalise an extensible API for database config modelled after the server
_configAPI and move the_auto_purgefunctionality into that. In addition, this allows us to consolidate a few other things like_revs_limitand_purged_infos_limitinto that API as well.The general idea is to model the behaviour on how
/_configworks. I’ll skip the/_node/{name-or_local}prefix for brevity.To recap how
/_configworks:GET /_config-> returns all config in a JSON object, top level keys are config sections, second level keys are config settings and their values are the config value.GET /_config/section-> returns a JSON response of all config keys and their values for a particular section.GET /_config/section/key-> returns just the config value for a given section and key.PUT /_config/section/key value-> updates the value of section/key to the provided value and returns the old value.DELETE /_config/section/key-> removes a configuration option, this means the source-default is assumed.I propose
/db/_configto behave exactly the same:GET /{db}/_config-> returns all config in a JSON object, top level keys are config sections, second level keys are config settings and their values are the config value.GET /{db}/_config/section-> returns a JSON response of all config keys and their values for a particular section.GET /{db}/_config/section/key-> returns just the config value for a given section and key.PUT /{db}/_config/section/key value-> updates the value of section/key to the provided value and returns the old value.DELETE /{db}/_config/section/key-> removes a configuration option, this means the source-default is assumed. TBD: behaviour as we do not want to actually remove the key entry, just reset its valueTo get started, we should implement the following sections and config options:
sectionkeydefault valuerevslimit1000purgeslimit1000auto_purgedeleted_document_ttlTBD// also TBD about the unit, which is currently seconds and a bit unwieldy. We want to suggest long timeframes, so maybe days or months?compactiongenerations0(for Generational compaction #5583 when it lands)Optional:
Bob suggested to move the
_securityobject here as well, which I don’t object to, but it does not fit the data structure without some awkwardness about the value being a JSON structure where everything else is a scalar. I’m open to other suggestions, but it’d be awkward to invent something that does not behave like server_changesalready.securityadmins{names: [], roles: ["_admin"]}securitymembers{names: [], roles: ["_admin"]}