-
Notifications
You must be signed in to change notification settings - Fork 38
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
Blobstor may "lose" objects on config changes #1707
Comments
|
… of config Re-configuration of Blobovnicza's object size limit must not affect already stored objects. In previous implementation `Blobovnicza` didn't see objects stored in buckets which became too big after size limit re-configuration. For example, lets consider 1st configuration with 64KB size limit for stored objects. Lets assume that we stored object of 64KB size, and re-configured `Blobovnicza` with 32KB limit. After reboot object should be still available, but actually it isn't. This is caused by `Get` operation algorithm which iterates over configured size ranges only, and doesn't process any other existing size bucket. By the way, increasing of the object size limit didn't lead to the problem even in previous implementation. Make `Blobovnicza.Get` method to iterate over all size buckets regardless of current configuration. This covers the described scenario. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
Re-configuration of Blobovnicza's object size limit must not affect already stored objects. In previous implementation `Blobovnicza` didn't see objects stored in buckets which became too big after size limit re-configuration. For example, lets consider 1st configuration with 64KB size limit for stored objects. Lets assume that we stored object of 64KB size, and re-configured `Blobovnicza` with 32KB limit. After reboot object should be still available, but actually it isn't. This is caused by `Get` operation algorithm which iterates over configured size ranges only, and doesn't process any other existing size bucket. By the way, increasing of the object size limit didn't lead to the problem even in previous implementation. Make `Blobovnicza.Get` method to iterate over all size buckets regardless of current configuration. This covers the described scenario. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
|
… of config Re-configuration of Blobovnicza's object size limit must not affect already stored objects. In previous implementation `Blobovnicza` didn't see objects stored in buckets which became too big after size limit re-configuration. For example, lets consider 1st configuration with 64KB size limit for stored objects. Lets assume that we stored object of 64KB size, and re-configured `Blobovnicza` with 32KB limit. After reboot object should be still available, but actually it isn't. This is caused by `Get` operation algorithm which iterates over configured size ranges only, and doesn't process any other existing size bucket. By the way, increasing of the object size limit didn't lead to the problem even in previous implementation. Make `Blobovnicza.Get` method to iterate over all size buckets regardless of current configuration. This covers the described scenario. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
Context
blobovnicza
stores objects in its buckets according to object sizes: it chooses the minimum number (the power of 2) that satisfies the object limit. It creates buckets for objects starting from32<<10
= 32kb, e.g. if the size limit is100kb
, tree buckets gonna be created: [0:32kb), [32kb:64kb), [64kb:128kb). That buckets will be used for storing and searching objects. Searching will try to iterate buckets according to the current configuration of the blobovnicza.Problem
Consider situation:
size<=N
,N%2==0
N/2 < size <= N
and stores them in the last of the supported bucketssize<=N/2
Get
with the object from2.
and could not return it since it does not know about the last bucket it hasProblems:
Ideas
The text was updated successfully, but these errors were encountered: