随便写一句,以免有跟我一样的人遇到这个问题。

驱动版本:MongoDB C# Driver 1.7.0

当在Master/Slave集群上使用Eval的时候,Eval操作只会在Master结点上运行,无论你设置的readPreference是secondaryPreferred还是secondary。理由很简单,Eval中的JS并不是在客户端(即驱动中)解释执行,而是在MongoDB中。所以当驱动收到一条Eval命令的时候并不知道具体是要干什么,所以无法判断应该把这个请求发给master还是slave去执行。为了保证执行顺利,驱动总是把这样的命令发给Master执行。这点我个人认为值得商榷。至少应该给我个机会指定使用Master还是Slave,否则所有Eval都会跑到Master上,增加了Master的压力,违背了做Master/Slave的初衷。

明白这点以后,如果在程序中发现"not master"的错误,就不会无法理解了。这是因为Eval发送到了Master上,而Master因为压力过大无法接受新的请求导致不能接受请求,因此请求可能被转发到Slave节点上,导致报了Not Master错误(一说是Master正在进行角色转换变成Slave,不过据我观察应该我说的原因可能性比较大)。这里极有可能是驱动的Bug,但还未确认。因为既然会把请求转到Slave节点上,那readPreference=secondary/secondaryPreferred配置就应该起作用。

最新文章

  1. 获取driver网络路径名称
  2. Java web 学习之旅
  3. Wordpress添加关键词和描述
  4. sqlcmd 登录和执行语句。
  5. some knowledge of maven {maven实战}
  6. delphi 窗口最大化后控件的大小变化怎么设置
  7. aix lvm_lv_vg
  8. Unix/Linux环境C编程入门教程(9) unbntu CCPP开发环境搭建
  9. 图解:Activity生命周期
  10. hadoop调度程序时出现“Error opening job jar”错误
  11. Debian安装 ss-qt5
  12. 【Java并发系列03】ThreadLocal详解
  13. PHP调用外部命令
  14. DensityUtil【尺寸转换工具类(px、dp互相转换)】
  15. [linux]为阿里云ECS(CentOS7)配置IPv6地址
  16. JavaScript入门(基础)
  17. layui 笔记
  18. QPushButton 控制两种状态
  19. 学习笔记之Microsoft Office 365
  20. tomcat管理员在远程(不同)机器上访问管理页面

热门文章

  1. freemarker空值的多种处理方法
  2. php中检查文件或目录是否存在的代码小结
  3. Ubuntu Qt arm-linux-androideabi-gcc: Command not found
  4. Android——Handler总结
  5. socket学习笔记——select与epoll函数的使用(linux)
  6. 学习记录 java随机数的产生机制
  7. noip2008 火柴棒等式
  8. webview渲染流程
  9. UTC格式转换 & 十六进制换算为十进制
  10. Socket连接