aboutsummaryrefslogtreecommitdiffstats
path: root/includes/Storage/BlobStore.php
blob: 41ed558bd8cab1c1345712418c347a868e7938c7 (plain) (blame)
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
<?php
/**
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 * http://www.gnu.org/copyleft/gpl.html
 *
 * @file
 */

namespace MediaWiki\Storage;

use StatusValue;

/**
 * Service for loading and storing data blobs.
 *
 * @note This was written to act as a drop-in replacement for the corresponding
 *       static methods in the old Revision class (which was later removed in 1.37).
 *
 * @since 1.31
 */
interface BlobStore {

	/**
	 * Hint key for use with storeBlob, indicating the general role the block
	 * takes in the application. For instance, it should be "page-content" if
	 * the blob represents a Content object.
	 */
	public const DESIGNATION_HINT = 'designation';

	/**
	 * Hint key for use with storeBlob, indicating the page the blob is associated with.
	 * This may be used for sharding.
	 */
	public const PAGE_HINT = 'page_id';

	/**
	 * Hint key for use with storeBlob, indicating the slot the blob is associated with.
	 * May be relevant for reference counting.
	 */
	public const ROLE_HINT = 'role_name';

	/**
	 * Hint key for use with storeBlob, indicating the revision the blob is associated with.
	 * This may be used for differential storage and reference counting.
	 */
	public const REVISION_HINT = 'rev_id';

	/**
	 * Hint key for use with storeBlob, indicating the parent revision of the revision
	 * the blob is associated with. This may be used for differential storage.
	 */
	public const PARENT_HINT = 'rev_parent_id';

	/**
	 * Hint key for use with storeBlob, providing the SHA1 hash of the blob as passed to the
	 * method. This can be used to avoid re-calculating the hash if it is needed by the BlobStore.
	 */
	public const SHA1_HINT = 'cont_sha1';

	/**
	 * Hint key for use with storeBlob, indicating the model of the content encoded in the
	 * given blob. May be used to implement optimized storage for some well known models.
	 */
	public const MODEL_HINT = 'cont_model';

	/**
	 * Hint key for use with storeBlob, indicating the serialization format used to create
	 * the blob, as a MIME type. May be used for optimized storage in the underlying database.
	 */
	public const FORMAT_HINT = 'cont_format';

	/**
	 * Hint key for an image name.
	 */
	public const IMAGE_HINT = 'img_name';

	/**
	 * Retrieve a blob, given an address.
	 *
	 * MCR migration note: this replaced Revision::loadText
	 *
	 * @param string $blobAddress The blob address as returned by storeBlob(),
	 *        such as "tt:12345" or "ex:DB://s16/456/9876".
	 * @param int $queryFlags See IDBAccessObject.
	 *
	 * @throws BlobAccessException
	 * @return string binary blob data
	 */
	public function getBlob( $blobAddress, $queryFlags = 0 );

	/**
	 * A batched version of BlobStore::getBlob.
	 *
	 * @param string[] $blobAddresses An array of blob addresses.
	 * @param int $queryFlags See IDBAccessObject.
	 * @throws BlobAccessException
	 * @return StatusValue A status with a map of blobAddress => binary blob data or null
	 *         if fetching the blob has failed. Fetch failures errors are the
	 *         warnings in the status object.
	 * @since 1.34
	 */
	public function getBlobBatch( $blobAddresses, $queryFlags = 0 );

	/**
	 * Stores an arbitrary blob of data and returns an address that can be used with
	 * getBlob() to retrieve the same blob of data,
	 *
	 * @param string $data raw binary data
	 * @param array $hints An array of hints. Implementations may use the hints to optimize storage.
	 * All hints are optional, supported hints depend on the implementation. Hint names by
	 * convention correspond to the names of fields in the database. Callers are encouraged to
	 * provide the well known hints as defined by the XXX_HINT constants.
	 *
	 * @throws BlobAccessException
	 * @return string an address that can be used with getBlob() to retrieve the data.
	 */
	public function storeBlob( $data, $hints = [] );

	/**
	 * Check if the blob metadata or backing blob data store is read-only
	 *
	 * @return bool
	 */
	public function isReadOnly();
}