All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Data Structures | Functions
as_buffer_pool.h File Reference
#include <aerospike/as_std.h>
#include <citrusleaf/cf_queue.h>
+ Include dependency graph for as_buffer_pool.h:

Go to the source code of this file.

Data Structures

struct  as_buffer_pool
 
struct  as_buffer_result
 

Functions

void as_buffer_pool_destroy (as_buffer_pool *pool)
 
int as_buffer_pool_drop_buffers (as_buffer_pool *pool, int buffer_count)
 
int as_buffer_pool_init (as_buffer_pool *pool, uint32_t header_size, uint32_t buffer_size)
 
int as_buffer_pool_pop (as_buffer_pool *pool, uint32_t size, as_buffer_result *buffer)
 
int as_buffer_pool_push (as_buffer_pool *pool, void *buffer, uint32_t capacity)
 
int as_buffer_pool_push_limit (as_buffer_pool *pool, void *buffer, uint32_t capacity, uint32_t max_buffers)
 

Function Documentation

void as_buffer_pool_destroy ( as_buffer_pool pool)
private

Empty buffer pool and destroy.

Parameters
poolBuffer pool.
int as_buffer_pool_drop_buffers ( as_buffer_pool pool,
int  buffer_count 
)
private

Delete buffer_count buffers from the buffer pool. This is useful when a large number of buffers are created due to a burst of concurrent buffer usage and pruning is desired.

Parameters
poolBuffer pool.
buffer_countNumber of buffers to delete.

Returns number of buffers deleted.

int as_buffer_pool_init ( as_buffer_pool pool,
uint32_t  header_size,
uint32_t  buffer_size 
)
private

Initialize empty buffer pool. Each buffer in the pool will be a fixed size.

Parameters
poolBuffer pool.
header_sizeSize of buffer header.
buffer_sizeFixed buffer size.

Returns: 0 : Success -1 : Failed to create queue.

int as_buffer_pool_pop ( as_buffer_pool pool,
uint32_t  size,
as_buffer_result buffer 
)
private

If requested buffer size is less than/equal the pool's buffer size, pop buffer from pool. Otherwise allocate memory on heap. If the pool is empty, also create buffer on heap.

Parameters
poolBuffer pool.
sizeRequested size of buffer.
bufferBuffer to be populated.

Returns: 0 : Found in pool. 1 : Pool empty. Allocated new buffer. 2 : Size greater than capacity. Allocated new large buffer. -1 : Memory allocation error. -2 : Queue failure.

int as_buffer_pool_push ( as_buffer_pool pool,
void *  buffer,
uint32_t  capacity 
)
private

If buffer capacity less than/equal the pool's buffer size, push buffer back into pool. Otherwise, free memory and do not put back into pool.

Parameters
poolBuffer pool.
bufferBuffer.
capacityCapacity of buffer.

Returns: 0 : Success -1 : Queue failure. -2 : Detected large buffer of different size. Buffer was destroyed.

int as_buffer_pool_push_limit ( as_buffer_pool pool,
void *  buffer,
uint32_t  capacity,
uint32_t  max_buffers 
)
private

If buffer capacity less than/equal the pool's buffer size and the number of unused buffers is less than/equal than max_buffers, push buffer back into pool. Otherwise, free memory and do not put back into pool.

Parameters
poolBuffer pool.
bufferBuffer.
capacityCapacity of buffer.
max_buffersMaximum number of unused buffers allowed in pool.

Returns: 0 : Success -1 : Too many buffers exist in pool. Buffer was destroyed. -2 : Detected large buffer of different size. Buffer was destroyed.