XROAD
xroad_storage.h File Reference
#include "xroad_storage_fwd.h"
#include <common/xroad_common_fwd.h>
#include <common/xroad_common_types.h>
#include <common/xroad_string.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
Include dependency graph for xroad_storage.h:

Go to the source code of this file.

Macros

#define xroad_storage_heap_alloc(storage, sz, data, ...)    xroad_storage_heap_alloc_va(storage, sz, data, ##__VA_ARGS__ , 0)
 
#define xroad_storage_heap_realloc(storage, ref, sz, data, ...)    xroad_storage_heap_realloc_va(storage, ref, sz, data, ##__VA_ARGS__ ,0)
 

Enumerations

enum  xroad_storage_flags_t { xroad_storage_flags_zero_space = 1 , xroad_storage_flags_memory_locked = 2 , xroad_storage_flags_debug = 4 , xroad_storage_flags_clear = 8 }
 

Functions

xroad_errno_t xroad_storage_create (uint32_t id, xroad_str_t path, uint32_t row_size, size_t rows_at_page, size_t heap_page_size, uint32_t flags)
 
void xroad_storage_destroy (xroad_storage_t *storage)
 
const xroad_storage_info_txroad_storage_get_info (xroad_storage_t *storage)
 
xroad_storage_stat_t xroad_storage_get_stat (xroad_storage_t *storage)
 
xroad_str_t xroad_storage_get_err ()
 
xroad_str_t xroad_storage_get_name (xroad_storage_t *storage)
 
xroad_storage_txroad_storage_open (xroad_str_t path, uint32_t row_size)
 
xroad_errno_t xroad_storage_resize (xroad_storage_t *storage, uint32_t row_size)
 
xroad_errno_t xroad_storage_drop (xroad_str_t path)
 
xroad_errno_t xroad_storage_clear (xroad_storage_t *storage, bool force)
 
void * xroad_storage_create_row (xroad_storage_t *storage, xroad_row_id_t *id)
 
void * xroad_storage_get_row (xroad_storage_t *storage, xroad_row_id_t row_id)
 
xroad_cursor_t * xroad_storage_create_cursor (xroad_storage_t *storage)
 
void xroad_storage_destroy_cursor (xroad_cursor_t *cursor)
 
void * xroad_storage_cursor_get_next (xroad_cursor_t *cursor)
 
void * xroad_storage_cursor_get_prev (xroad_cursor_t *cursor)
 
void * xroad_storage_cursor_get_first (xroad_cursor_t *cursor)
 
void * xroad_storage_cursor_get_last (xroad_cursor_t *cursor)
 
void * xroad_storage_cursor_offset (xroad_cursor_t *cursor, int64_t offset)
 
void * xroad_storage_copy_row (xroad_storage_t *storage, xroad_row_id_t from, xroad_row_id_t to)
 
storage_heap_ref_t xroad_storage_heap_alloc_va (xroad_storage_t *storage, uint32_t sz, storage_heap_data_t *data,...) __nonnull((1))
 
xroad_errno_t xroad_storage_heap_free (xroad_storage_t *storage, storage_heap_ref_t ref)
 
storage_heap_ref_t xroad_storage_heap_realloc_va (xroad_storage_t *storage, uint64_t ref, uint32_t sz, storage_heap_data_t *data,...) __nonnull((1))
 
storage_heap_data_t xroad_storage_heap_get (xroad_storage_t *storage, storage_heap_ref_t ref) __nonnull((1))
 
xroad_errno_t xroad_storage_check_deadlock (xroad_storage_t *storage, bool force_unlock)
 
xroad_errno_t xroad_storage_verify (xroad_str_t path, bool dump_heap)
 
xroad_errno_t xroad_storage_add_page (xroad_storage_t *storage, xroad_storage_page_type_t ptype)
 

Detailed Description

Macro Definition Documentation

◆ xroad_storage_heap_alloc

#define xroad_storage_heap_alloc (   storage,
  sz,
  data,
  ... 
)     xroad_storage_heap_alloc_va(storage, sz, data, ##__VA_ARGS__ , 0)

save data to storage storage

Parameters
[in]storage- storage to store
[in]sz- data size. Up to 2^31 size
[out]data- pointer to allocated space
[in]flags- storage flags (optional)
Returns
saved data reference, else 0

◆ xroad_storage_heap_realloc

#define xroad_storage_heap_realloc (   storage,
  ref,
  sz,
  data,
  ... 
)     xroad_storage_heap_realloc_va(storage, ref, sz, data, ##__VA_ARGS__ ,0)

realloc saved data

Parameters
[in]storage- storage to store
[in]ref- saved data reference
[in]sz- data size
[in]flags- storage flags (optional)
[out]data- pointer to allocated space
Returns
saved data reference. May be different from ref

Enumeration Type Documentation

◆ xroad_storage_flags_t

xroad_storage_flags

Enumerator
xroad_storage_flags_zero_space 

zero allocated space

xroad_storage_flags_memory_locked 

lock strorage in memory

xroad_storage_flags_debug 

write storage log into <working_dir>/<pid>.<storage_name>.log file

xroad_storage_flags_clear 

clear storage

Function Documentation

◆ xroad_storage_add_page()

xroad_errno_t xroad_storage_add_page ( xroad_storage_t storage,
xroad_storage_page_type_t  ptype 
)

add new page to storage

Parameters
[in]storage- storage to add page
[in]ptype- page type
Returns
XROAD_OK - page added, else error (call xroad_storage_get_err for details)

◆ xroad_storage_check_deadlock()

xroad_errno_t xroad_storage_check_deadlock ( xroad_storage_t storage,
bool  force_unlock 
)

check for deadlocks

Parameters
[in]storage- storage to check @apram[in] froce_unlock - force unlock storage
Returns
XROAD_OK - no deadlock found, else deadlock detected call xroad_storage_get_err for deatils

◆ xroad_storage_clear()

xroad_errno_t xroad_storage_clear ( xroad_storage_t storage,
bool  force 
)

clear storage

Parameters
[in]storage- storage to clear
[in]force- force clear
Returns
XROAD_OK - success, else failed

◆ xroad_storage_copy_row()

void* xroad_storage_copy_row ( xroad_storage_t storage,
xroad_row_id_t  from,
xroad_row_id_t  to 
)

copy row

Parameters
[in]storage- storage handler
[in]from- copied row id
[in]to- new row placement. Can not be greater than storage size

◆ xroad_storage_create()

xroad_errno_t xroad_storage_create ( uint32_t  id,
xroad_str_t  path,
uint32_t  row_size,
size_t  rows_at_page,
size_t  heap_page_size,
uint32_t  flags 
)

create new storage

Parameters
[in]id- storage id
[in]path- path of new storage
[in]row_size- size of row (sizeof(data) + sizeof(xroad_row_header_t)). If size == 0, no row subsystem will be initialized
[in]rows_at_page- estimated count of rows at page. It can be adjusted accoording to OS memory page size. Skipped if row_size == 0
[in]heap_page_size- size of heap page
[in]flags- storage flags
Returns
- XROAD_OK - storage created, else failed

◆ xroad_storage_create_cursor()

xroad_cursor_t* xroad_storage_create_cursor ( xroad_storage_t storage)

create new storage cursor for rows traversal. Don't forget to call storage_free_cursor after

Parameters
[in]storage- storage handler
Returns
cursor handler, NULL - something goes wrong

◆ xroad_storage_create_row()

void* xroad_storage_create_row ( xroad_storage_t storage,
xroad_row_id_t *  id 
)

allocate new row in storage

Parameters
[in]storage- storage handler
[in]id- id of created row
Returns
pointer to new allocated row, NULL - error happened

◆ xroad_storage_cursor_get_next()

void* xroad_storage_cursor_get_next ( xroad_cursor_t *  cursor)

return next, previous, first, last row from storage

Parameters
[in]cursor- cursor of storage
Returns
row, NULL - cursor reached end, begin of storage or storage of empty or something goes wrong

◆ xroad_storage_cursor_offset()

void* xroad_storage_cursor_offset ( xroad_cursor_t *  cursor,
int64_t  offset 
)

offset cursor by number of rows

Parameters
[in]cursor- cursor to offset
[in]offset- cursor offset value. Can be negative
Returns
row, NULL - cursor reached end, begin of storage or storage of empty or something goes wrong

◆ xroad_storage_destroy()

void xroad_storage_destroy ( xroad_storage_t storage)

destroy storage

Parameters
[in]storage- storage to destroy

◆ xroad_storage_destroy_cursor()

void xroad_storage_destroy_cursor ( xroad_cursor_t *  cursor)

free cursor

Parameters
[in]cursor- cursor to be freeing

◆ xroad_storage_drop()

xroad_errno_t xroad_storage_drop ( xroad_str_t  path)

drop storage

Parameters
[in]path- storage path
Returns
XROAD_OK - dropped, else failed

◆ xroad_storage_get_err()

xroad_str_t xroad_storage_get_err ( )

return error description, if any

Returns
error description

◆ xroad_storage_get_info()

const xroad_storage_info_t* xroad_storage_get_info ( xroad_storage_t storage)

return storage information @paran[in] storage - storage pointer

Returns
storage meta, NULL - failed

◆ xroad_storage_get_name()

xroad_str_t xroad_storage_get_name ( xroad_storage_t storage)

get storage name

Returns
storage name

◆ xroad_storage_get_row()

void* xroad_storage_get_row ( xroad_storage_t storage,
xroad_row_id_t  row_id 
)

return row by its ID

Parameters
[in]storage- storage handler
[in]row_id- ID of row (started from 1)
Returns
pointer ro row, NULL - something goes wrong

◆ xroad_storage_get_stat()

xroad_storage_stat_t xroad_storage_get_stat ( xroad_storage_t storage)

return storage statistics @paran[in] storage - storage pointer

Parameters
[in]allocs- get allocation statistics
Returns
storage meta, NULL - failed

◆ xroad_storage_heap_free()

xroad_errno_t xroad_storage_heap_free ( xroad_storage_t storage,
storage_heap_ref_t  ref 
)

free saved data

Parameters
[in]storage- storage with saved data
[in]ref- saved data ref
Returns
XROAD_OK - freed, else error

◆ xroad_storage_heap_get()

storage_heap_data_t xroad_storage_heap_get ( xroad_storage_t storage,
storage_heap_ref_t  ref 
)

gets payload data

Parameters
[in]storage- storage with data
[in]ref- saved data reference
Returns
pointer to saved data

◆ xroad_storage_open()

xroad_storage_t* xroad_storage_open ( xroad_str_t  path,
uint32_t  row_size 
)

open storage

Parameters
[in]path- storage path
[in]row_size- just for checking storage for correct row size
Returns
- pointer to created storage, NULL - open failed, call xroad_storage_get_err for details

◆ xroad_storage_resize()

xroad_errno_t xroad_storage_resize ( xroad_storage_t storage,
uint32_t  row_size 
)

resize storage

Parameters
[in]storage- storage to resize
[in]row_size- new row size
Returns
XROAD_OK - resized, else failed. call xroad_storage_get_err for details

◆ xroad_storage_verify()

xroad_errno_t xroad_storage_verify ( xroad_str_t  path,
bool  dump_heap 
)

verify storage structure

Parameters
[in]path- path to storage file @patam[in] dump_heap - dump heap records