as_ldt_init初始化失败 - C ++客户端

时间:2016-04-19 07:39:21

标签: c++ aerospike

在我开始使用aerospike前一天。使用LDT(大数据类型 - 大列表)编写一个示例时遇到问题。我想创建一个带有currdate的键,并附加为键(20160419_2000_List),稍后我将添加原始数据(字节数组)作为列表值。 为此,我能够正确连接数据库,但我无法创建列表的密钥。你能指导我吗? 您可以参考以下代码来了解我正在做的事情。

 m_sTFPKeyStr.assign(datevalue);  //datavalue consists datatime string
        m_sTFPListStr.assign("List_");
        m_sTFPListStr.append(datevalue);
        as_key_init_str(&m_sTFPKey, m_sInputNameSpace.c_str(), m_sInputSetName.c_str(), m_sTFPKeyStr.c_str());

        if (!as_ldt_init(m_sTFPListKey, m_sTFPListStr.c_str(), AS_LDT_LLIST, NULL))
        {
            memset(logmessage, 0x0, sizeof(logmessage));
            sprintf(logmessage, "CDataBaseManager::SaveTFP Fails to initialize tfplist key %s", m_sTFPListStr.c_str());
            m_pCaptureManager->m_pLogMgr->LogMsg(logmessage);
            return;
        }

1 个答案:

答案 0 :(得分:2)

检查代码中m_sTFPListStr的长度。

将检查参数的函数as_ldt_init的代码:

as_ldt * as_ldt_init(as_ldt * ldt, const as_bin_name name, const as_ldt_type type, const as_udf_module_name module)
{
  if (!name || name[0] == '\0' || strlen(name) > AS_BIN_NAME_MAX_LEN
     || (module && strlen(module) > AS_UDF_MODULE_MAX_LEN) )
  {
    return NULL;
  }
  ...
}

作为AS_BIN_NAME_MAX_LEN的值:

#define AS_BIN_NAME_MAX_LEN (AS_BIN_NAME_MAX_SIZE - 1)
#define AS_BIN_NAME_MAX_SIZE 15