static void dc_local_add_history_empty(zbx_uint64_t itemid, unsigned char item_value_type, const zbx_timespec_t *ts,
#include "zbxcachehistory.h"
#include "zbxcachevalue.h"
#include "zbxavailability.h"
#include "zbxconnector.h"
#include "zbx_host_constants.h"
#include "zbx_trigger_constants.h"
#include "zbx_item_constants.h"
#include "zbxtagfilter.h"
static zbx_shmem_info_t *hc_index_mem = NULL;
static zbx_shmem_info_t *hc_mem = NULL;
static zbx_shmem_info_t *trend_mem = NULL;
#define LOCK_CACHE zbx_mutex_lock(cache_lock)
#define UNLOCK_CACHE zbx_mutex_unlock(cache_lock)
#define LOCK_TRENDS zbx_mutex_lock(trends_lock)
#define UNLOCK_TRENDS zbx_mutex_unlock(trends_lock)
#define LOCK_CACHE_IDS zbx_mutex_lock(cache_ids_lock)
#define UNLOCK_CACHE_IDS zbx_mutex_unlock(cache_ids_lock)
static zbx_mutex_t cache_lock = ZBX_MUTEX_NULL;
static zbx_mutex_t trends_lock = ZBX_MUTEX_NULL;
static zbx_mutex_t cache_ids_lock = ZBX_MUTEX_NULL;
static size_t sql_alloc = 4 * ZBX_KIBIBYTE;
extern unsigned char program_type;
extern int CONFIG_DOUBLE_PRECISION;
#define ZBX_HC_ITEMS_INIT_SIZE 1000
#define ZBX_TRENDS_CLEANUP_TIME (SEC_PER_MIN * 55)
#define ZBX_HC_SYNC_TIME_MAX 10
#define ZBX_HC_SYNC_MAX 1000
#define ZBX_HC_TIMER_MAX (ZBX_HC_SYNC_MAX / 2)
#define ZBX_HC_TIMER_SOFT_MAX (ZBX_HC_TIMER_MAX - 10)
#define ZBX_HC_SYNC_MIN_PCNT 10
#define ZBX_HISTORY_VALUE_LEN (1024 * 64)
#define ZBX_DC_FLAGS_NOT_FOR_HISTORY (ZBX_DC_FLAG_NOVALUE | ZBX_DC_FLAG_UNDEF | ZBX_DC_FLAG_NOHISTORY)
#define ZBX_DC_FLAGS_NOT_FOR_TRENDS (ZBX_DC_FLAG_NOVALUE | ZBX_DC_FLAG_UNDEF | ZBX_DC_FLAG_NOTRENDS)
#define ZBX_DC_FLAGS_NOT_FOR_MODULES (ZBX_DC_FLAGS_NOT_FOR_HISTORY | ZBX_DC_FLAG_LLD)
#define ZBX_DC_FLAGS_NOT_FOR_EXPORT (ZBX_DC_FLAG_NOVALUE | ZBX_DC_FLAG_UNDEF)
#define ZBX_HC_PROXYQUEUE_STATE_NORMAL 0
#define ZBX_HC_PROXYQUEUE_STATE_WAIT 1