@@ -2234,7 +2234,7 @@ static ENGINE_ERROR_CODE do_set_elem_get(struct default_engine *engine,
22342234
22352235static ENGINE_ERROR_CODE do_set_elem_insert (struct default_engine * engine ,
22362236 hash_item * it , set_elem_item * elem ,
2237- const void * cookie )
2237+ const void * cookie , bool force )
22382238{
22392239 set_meta_info * info = (set_meta_info * )item_get_meta (it );
22402240 int32_t real_mcnt = (info -> mcnt == -1 ? max_set_size : info -> mcnt );
@@ -2251,7 +2251,10 @@ static ENGINE_ERROR_CODE do_set_elem_insert(struct default_engine *engine,
22512251 /* overflow check */
22522252 assert (info -> ovflact == OVFL_ERROR );
22532253 if (info -> ccnt >= real_mcnt ) {
2254- return ENGINE_EOVERFLOW ;
2254+ if (!force || info -> ccnt >= max_set_size ) {
2255+ return ENGINE_EOVERFLOW ;
2256+ }
2257+ info -> mcnt = info -> ccnt + 1 ;
22552258 }
22562259
22572260 /* create the root hash node if it does not exist */
@@ -6675,7 +6678,8 @@ void set_elem_release(struct default_engine *engine, set_elem_item **elem_array,
66756678}
66766679
66776680ENGINE_ERROR_CODE set_elem_insert (struct default_engine * engine , const char * key , const size_t nkey ,
6678- set_elem_item * elem , item_attr * attrp , bool * created , const void * cookie )
6681+ set_elem_item * elem , item_attr * attrp , bool * created , const void * cookie ,
6682+ bool force )
66796683{
66806684 hash_item * it = NULL ;
66816685 ENGINE_ERROR_CODE ret ;
@@ -6698,7 +6702,7 @@ ENGINE_ERROR_CODE set_elem_insert(struct default_engine *engine, const char *key
66986702 }
66996703 }
67006704 if (ret == ENGINE_SUCCESS ) {
6701- ret = do_set_elem_insert (engine , it , elem , cookie );
6705+ ret = do_set_elem_insert (engine , it , elem , cookie , force );
67026706 if (ret != ENGINE_SUCCESS && * created ) {
67036707 do_item_unlink (engine , it , ITEM_UNLINK_NORMAL );
67046708 }
0 commit comments