如何在主要使用 C++ 绑定时提供 AffinityFunction.BackupFilter
How do I provide AffinityFunction.BackupFilter when mainly using C++ bindings
我正在使用C++绑定在我的应用程序中实现冗余。除了主C++节点外,我还通过ignite.sh
运行一个普通的Java节点作为另一个节点上的备份。我想指定这个普通的 Java 节点始终保持备份节点,而不是主节点,只要有一个正在运行的C++节点。另外,我需要C++节点始终保持为主节点。使用PRIMARY_SYNC
同步时,少量数据丢失是可以接受的。
我的研究使我找到了AffinityFunction.BackupFilter
属性来过滤C++节点作为主节点。似乎还有一些函数可以为节点提供属性。所以我想我可以在C++节点上设置一个特定的属性,并过滤它们以始终保持为主节点。
但是,C++绑定显然既不提供设置备份筛选器的方法,也不允许在启动的节点上设置属性。我注意到有些模块通过ignite-dir/libs
插入,但没有关于添加AffinityFunction
的方法的教程。我怎样才能实现我需要的?我需要插入一个自定义亲和函数,同时使用 C++ 作为主要节点和区分C++节点的方法。
这在Apache Ignite用户论坛上讨论过:http://apache-ignite-users.70518.x6.nabble.com/How-do-I-provide-AffinityFunction-BackupFilter-when-mainly-using-C-bindings-td11930.html
Ignite 将ignite_dir/libs
中的文件添加到类路径中。根据文档,可以通过ClusterNode.attribute()
方法读取环境变量。所以我把下面的java代码放到libs/
文件夹中:
import java.util.List;
import org.apache.ignite.cluster.ClusterNode;
import org.apache.ignite.lang.IgniteBiPredicate;
import org.apache.ignite.cache.affinity.*;
public class RendezvousAffinityFunction extends org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction {
@Override
public List<List<ClusterNode>> assignPartitions(AffinityFunctionContext affCtx) {
System.out.println("Assigning partitions...");
List<List<ClusterNode>> partitions = super.assignPartitions(affCtx);
for (List<ClusterNode> nodes : partitions) {
for (int i = 0; i < nodes.size(); ++i) {
ClusterNode node = nodes.get(i);
boolean is_primary_instance = ((Object)node.attribute("IGNITE_PRIMARY_NODE") != null);
if (is_primary_instance && i != 0) {
// move to the top of the node list
nodes.remove(i);
nodes.add(0, node);
System.out.println("Putting node " + i + " to the head of the node list.");
}
}
}
return partitions;
}
}
显然,此方法是在拓扑更改时调用的。方法覆盖检查环境变量IGNITE_PRIMARY_NODE
,如果存在,它将节点放在ClusterNode
列表的开头,然后由 Ignite 用作主节点。此覆盖将首选将环境变量设置为主节点IGNITE_PRIMARY_NODE
节点。
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 在基于范围的for循环中使用结构化绑定声明
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 视觉studo 2019中的漫画和静态/动态绑定
- 将自由函数绑定为类成员函数
- 将常量指针引用绑定到非常量指针
- 在派生类中绑定非静态模板化成员函数
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 在 openGL 中多次绑定缓冲区
- 定义有趣的宏和正则表达式在Z3 C++绑定
- 使用结构化绑定'Reflection'
- 为什么 std::绑定错误参数可以成功?
- 如何绑定 C++ gRPC 客户端的网络接口
- 在 openmp 中,omp_get_thread_num是否绑定到物理线程?
- C++绑定(已弃用)
- 运行时错误:引用绑定到类型为"int"的空指针
- 有没有办法将重载的类函数绑定到函数对象?
- OpenGL 在已绑定时绑定