50
50
51
51
/* Returns true in case the entry's value is not embedded in the entry.
52
52
* Returns false otherwise. */
53
- bool entryHasValuePtr (const entry * entry ) {
53
+ static inline bool entryHasValuePtr (const entry * entry ) {
54
54
return sdsGetAuxBit (entry , FIELD_SDS_AUX_BIT_ENTRY_HAS_VALUE_PTR );
55
55
}
56
56
@@ -81,8 +81,6 @@ sds entryGetValue(const entry *entry) {
81
81
} else {
82
82
/* Skip field content, field null terminator and value sds8 hdr. */
83
83
size_t offset = sdslen (entry ) + 1 + sdsHdrSize (SDS_TYPE_8 );
84
- serverAssert ((char * )entry + offset );
85
-
86
84
return (char * )entry + offset ;
87
85
}
88
86
}
@@ -117,8 +115,9 @@ long long entryGetExpiry(const entry *entry) {
117
115
long long expiry = EXPIRY_NONE ;
118
116
if (entryHasExpiry (entry )) {
119
117
char * buf = sdsAllocPtr (entry );
118
+ debugServerAssert ((((uintptr_t )buf & 0x7 ) == 0 ));
120
119
if (entryHasValuePtr (entry )) buf -= sizeof (sds * );
121
- buf -= sizeof (expiry );
120
+ buf -= sizeof (long long );
122
121
expiry = * (long long * )buf ;
123
122
}
124
123
return expiry ;
@@ -138,26 +137,21 @@ entry *entrySetExpiry(entry *e, long long expiry) {
138
137
}
139
138
140
139
/* Return true in case the entry has assigned expiration or false otherwise. */
141
- int entryIsExpired (entry * entry ) {
142
- /* Don't expire anything while loading. It will be done later. */
143
- if (server .loading ) return 0 ;
144
- if (!timestampIsExpired (entryGetExpiry (entry ))) return 0 ;
145
- if (server .primary_host == NULL && server .import_mode ) {
146
- if (server .current_client && server .current_client -> flag .import_source ) return 0 ;
147
- }
148
- return 1 ;
140
+ bool entryIsExpired (entry * entry ) {
141
+ if (!timestampIsExpired (entryGetExpiry (entry ))) return false;
142
+ return true;
149
143
}
150
144
/**************************************** Entry Expiry API - End *****************************************/
151
145
152
146
void entryFree (entry * entry ) {
153
147
if (entryHasValuePtr (entry )) {
154
- sdsfree (* entryGetValueRef (entry ));
148
+ sdsfree (entryGetValue (entry ));
155
149
}
156
150
zfree (entryAllocPtr (entry ));
157
151
}
158
152
159
153
/* Takes ownership of value. does not take ownership of field */
160
- entry * entryCreate (sds field , sds value , long long expiry ) {
154
+ entry * entryCreate (const_sds field , sds value , long long expiry ) {
161
155
sds embedded_field_sds ;
162
156
size_t expiry_size = (expiry == EXPIRY_NONE ) ? 0 : sizeof (long long );
163
157
size_t field_len = sdslen (field );
@@ -192,7 +186,7 @@ entry *entryCreate(sds field, sds value, long long expiry) {
192
186
* +------+-------+---------------+
193
187
*/
194
188
embed_value = false;
195
- alloc_size += sizeof (sds * );
189
+ alloc_size += sizeof (sds );
196
190
if (field_sds_type == SDS_TYPE_5 ) {
197
191
field_sds_type = SDS_TYPE_8 ;
198
192
alloc_size -= field_size ;
@@ -214,8 +208,8 @@ entry *entryCreate(sds field, sds value, long long expiry) {
214
208
if (value ) {
215
209
if (!embed_value ) {
216
210
* (sds * )buf = value ;
217
- buf += sizeof (sds * );
218
- buf_size -= sizeof (sds * );
211
+ buf += sizeof (sds );
212
+ buf_size -= sizeof (sds );
219
213
} else {
220
214
sdswrite (buf + field_size , buf_size - field_size , SDS_TYPE_8 , value , value_len );
221
215
sdsfree (value );
@@ -237,13 +231,13 @@ entry *entryUpdate(entry *e, sds value, long long expiry) {
237
231
sds field = (sds )e ;
238
232
239
233
bool update_value = value ? true : false;
240
- long long ttl = entryGetExpiry (e );
241
- bool update_expiry = (expiry != ttl ) ? true : false;
234
+ long long expiration_time = entryGetExpiry (e );
235
+ bool update_expiry = (expiry != expiration_time ) ? true : false;
242
236
if (!update_value && !update_expiry )
243
237
return e ;
244
- ttl = expiry ;
238
+ expiration_time = expiry ;
245
239
value = update_value ? value : entryGetValue (e );
246
- size_t expiry_size = ttl != EXPIRY_NONE ? sizeof (ttl ) : 0 ;
240
+ size_t expiry_size = ( expiration_time != EXPIRY_NONE ) ? sizeof (expiration_time ) : 0 ;
247
241
int field_sds_type = sdsReqType (sdslen (field ));
248
242
if (field_sds_type == SDS_TYPE_5 && (expiry_size > 0 )) {
249
243
field_sds_type = SDS_TYPE_8 ;
@@ -257,7 +251,7 @@ entry *entryUpdate(entry *e, sds value, long long expiry) {
257
251
/* // We will create a new entry in the following cases:
258
252
* 1. In the case were we add or remove expiration.
259
253
* 2. in the case were we are NOT migrating from an embedded entry to an embedded entry with ~the same size. */
260
- bool create_new_entry = (update_expiry && (entryGetExpiry (e ) == EXPIRY_NONE || ttl == EXPIRY_NONE )) ||
254
+ bool create_new_entry = (update_expiry && (entryGetExpiry (e ) == EXPIRY_NONE || expiration_time == EXPIRY_NONE )) ||
261
255
!(update_value && !entryHasValuePtr (e ) &&
262
256
required_embedded_size <= EMBED_VALUE_MAX_ALLOC_SIZE &&
263
257
required_embedded_size <= current_embedded_allocation_size &&
@@ -307,7 +301,7 @@ entry *entryUpdate(entry *e, sds value, long long expiry) {
307
301
}
308
302
}
309
303
310
- entry * new_entry = entryCreate (entryGetField (e ), value , ttl );
304
+ entry * new_entry = entryCreate (entryGetField (e ), value , expiration_time );
311
305
if (new_entry != e )
312
306
entryFree (e );
313
307
return new_entry ;
@@ -355,7 +349,7 @@ entry *entryDefrag(entry *entry, void *(*defragfn)(void *), sds (*sdsdefragfn)(s
355
349
356
350
/* Used for releasing memory to OS to avoid unnecessary CoW. Called when we've
357
351
* forked and memory won't be used again. See zmadvise_dontneed() */
358
- void dismissEntry (entry * entry ) {
352
+ void entryDismissMemory (entry * entry ) {
359
353
/* Only dismiss values memory since the field size usually is small. */
360
354
if (entryHasValuePtr (entry )) {
361
355
dismissSds (* entryGetValueRef (entry ));
0 commit comments