diff options
Diffstat (limited to 'lib/private/Files/ObjectStore/Mapper.php')
-rw-r--r-- | lib/private/Files/ObjectStore/Mapper.php | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/lib/private/Files/ObjectStore/Mapper.php b/lib/private/Files/ObjectStore/Mapper.php index 74d65454b12..ef3c6878d81 100644 --- a/lib/private/Files/ObjectStore/Mapper.php +++ b/lib/private/Files/ObjectStore/Mapper.php @@ -22,6 +22,7 @@ */ namespace OC\Files\ObjectStore; +use OCP\IConfig; use OCP\IUser; /** @@ -35,13 +36,18 @@ class Mapper { /** @var IUser */ private $user; + /** @var IConfig */ + private $config; + /** * Mapper constructor. * * @param IUser $user + * @param IConfig $config */ - public function __construct(IUser $user) { + public function __construct(IUser $user, IConfig $config) { $this->user = $user; + $this->config = $config; } /** @@ -49,8 +55,15 @@ class Mapper { * @return string */ public function getBucket($numBuckets = 64) { + // Get the bucket config and shift if provided. + // Allow us to prevent writing in old filled buckets + $config = $this->config->getSystemValue('objectstore_multibucket'); + $minBucket = is_array($config) && isset($config['arguments']['min_bucket']) + ? (int)$config['arguments']['min_bucket'] + : 0; + $hash = md5($this->user->getUID()); $num = hexdec(substr($hash, 0, 4)); - return (string)($num % $numBuckets); + return (string)(($num % ($numBuckets - $minBucket)) + $minBucket); } } |