在Cassandra中使用回调功能

Using Callback function in Cassandra

本文关键字:回调 功能 Cassandra      更新时间:2023-10-16

我想获得有关在Cassandra中实现回调功能的正确方法的建议。

我使用Cassandra的C 驱动程序制作了一些API。下面给出的是我如何使用回调函数执行我的查询(l_stmt是准备好的语句,rtinsertcallback是回调函数(:

            CassFuture * l_query_future = cass_session_execute(RtConnectionObj::ms_session, l_stmt);
            CassError l_returnCode = cass_future_set_callback(l_query_future,rtInsertCallback,NULL);
            if(l_returnCode != CASS_OK)
            {
                    printf("n [ %s::%d ] Error n",__FILE__,__LINE__);
            }

            cass_future_free(l_query_future);

假设上面的代码是在线程1中执行的,根据我当前的理解,在设置未来时将执行回调函数,并且在单独的线程中也将执行(线程2(。回调功能是这样的:

void rtInsertCallback(CassFuture* l_csp_future, void *data)
{
        CassError l_returnCode = cass_future_error_code(l_csp_future);
        if (l_returnCode != CASS_OK)
        {
                printf("n[%s::%d] %s ",__FILE__,__LINE__,cass_error_desc(l_returnCode));
        }
        else
        {
                printf("n [%s::%d] Data Inserted successfully ...",__FILE__,__LINE__);
        }
}

我想知道,是否有可能在设置未来或在CassError l_returnCode = cass_future_error_code(l_csp_future);语句在线程2中执行之前,未来将被线程1释放,因为该线程2中的上述语句将在A上进行操作。释放了未来?如果是,那么处理这种情况应该是什么?如果这个问题没有任何意义(由于我对任何概念的误解(,请解释。谢谢!

您可以在回调语句之后自由发布"线程1"中的未来。回调将拥有自己的未来副本。

卡桑德拉回调功能也将在处理后处理资源清理。因此,我们不必明确释放未来。

可以在此处找到代码样本

https://github.com/datastax/cpp-driver/blob/master/master/examples/callbacks/callbacks/callbacks.c