oknosoft / windowbuilder

Окнософт:Заказ дилера
http://www.oknosoft.ru/zd/
Other
10 stars 19 forks source link

Ревизии couchdb #588

Open unpete opened 3 years ago

unpete commented 3 years ago

Похоже, в новой couchdb сделан оптимизатор, который удаляет ревизии в больших базах не обращая внимания на параметр _revs_limit (он равен 1000 в наших базах, но couchdb уничтожает историю)

Надо либо отключить сжатие couchdb, либо реализовать архивирование ревизий в auth-proxy (благо, все запросы проходят через него и технически несложно складывать ответы put-запросов в специальное место)

blackmixer commented 3 years ago

Compaction Daemon

max_size The item must be no larger than this many bytes in length to be enqueued. Defaults to infinity.

unpete commented 3 years ago

@blackmixer, я не понял из описания, как должен выглядеть текст в config-файле, чтобы история не обрезалась

blackmixer commented 3 years ago

default.ini

[smoosh]
;
; More documentation on these is in the Automatic Compaction
; section of the documentation.
;
db_channels = ratio_dbs,slack_dbs
view_channels = upgrade_views,ratio_views,slack_views
;
[smoosh.ratio_dbs]
priority = ratio
min_priority = 2.0
max_size = 100
;
[smoosh.ratio_views]
priority = ratio
min_priority = 2.0

;
[smoosh.slack_dbs]
priority = slack
min_priority = 16777216
max_size = 100
;
[smoosh.slack_views]
priority = slack
min_priority = 16777216
unpete commented 3 years ago

Наверное, я совсем тупой и читать не умею, но обсуждаемая проблема в том, что в больших базах куда-то деваются старые ревизии. При том, что _revs_limit установлен в 1000, имеем 1-2 ревизии, а остальные missing

max_size и прочие настройки автоматического сжатия - они про то, как часто, в какое время и с каким приоритетом это сжатие будет выполняться, но проблема не в расписании, а в том, что сжатие делает не то, что я ожидаю.

unpete commented 3 years ago

imho, вне зависимости от того, запущен _compact smoosh-ом или руками, результат должен быть одинаков, а именно, цитата: "_Removes old revision history beyond the limit specified by the revslimit database parameter "

blackmixer commented 3 years ago

When you compact a database, the bodies of all the non-leaf documents are discarded. However, the list of historical _revs is retained, for the benefit of later conflict resolution in case you meet any old replicas of the database at some time in future. There is “revision pruning” to stop this getting arbitrarily large.

Database compaction compresses the database file by removing unused file sections created during updates. Old documents revisions are replaced with small amount of metadata called tombstone which are used for conflicts resolution during replication. The number of stored revisions (and their tombstones) can be configured by using the _revs_limit URL endpoint.

unpete commented 3 years ago

can be configured by using the _revs_limit URL endpoint.

Ну так, специально для этого и выполнялся POST /db/_revs_limit 1000 А система ведёт себя так, будто _revs_limit = 1

unpete commented 3 years ago

А система ведёт себя так, будто _revs_limit = 1

При этом, поведение на небольших базах (до 100Mb) в 3.1 полностью соответствует ожиданиям. Ничего лишнего не откусывается. Версия 2.0 - 2.2 так же, вела себя предсказуемо на на базах любого размера, а в 3.1 - фокусы.

ermouth commented 4 months ago
[smoosh.ignore]
%shard_name1% = true
%shard_name2% = true

Перечислять надо именно шарды, не просто имена баз. Официально не документировано, код вот тут https://github.com/apache/couchdb/blob/ea3e05fa93c288332c0b321530b13830870baf6d/src/smoosh/src/smoosh_utils.erl#L58