blob: e1174a285a6bfb46fcff09e58c01590db1187013 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
<?php
/**
* SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-FileCopyrightText: 2016 ownCloud, Inc.
* SPDX-License-Identifier: AGPL-3.0-only
*/
namespace OC\Files\ObjectStore;
use OCP\IConfig;
use OCP\IUser;
/**
* Class Mapper
*
* @package OC\Files\ObjectStore
*
* Map a user to a bucket.
*/
class Mapper {
/** @var IUser */
private $user;
/** @var IConfig */
private $config;
/**
* Mapper constructor.
*
* @param IUser $user
* @param IConfig $config
*/
public function __construct(IUser $user, IConfig $config) {
$this->user = $user;
$this->config = $config;
}
/**
* @param int $numBuckets
* @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 - $minBucket)) + $minBucket);
}
}
|