Optorsim网格模拟软件是欧洲粒子物理研究中心于 2002 年开始用 Java 编写的软件,是模拟真实的数据网格结构而开发的,目的是研究在某一特定环境下副本优化算法的有效性。OptorSim 是一种可扩展、易配置和编程的网格模拟工具,而且是一个源代码公开的、免费的软件模拟平台,具有开放的结构和良好的可扩充性。
在运行optorsim自带例子的过程中,出现以下报错:
============= O P T O R S I M =============
OptorSimMain> using default parameters file examples/parameters.conf
GridConfFileReader> reading file examples/simple_grid.conf
JobConfFileReader> reading file examples/simple_job.conf
Assigning master files to specified sites
Exception in thread "main" java.lang.NullPointerException at org.edg.data.replication.optorsim.infrastructure.JobConfFileReader.assignFilesToSites(JobConfFileReader.java:391)
at org.edg.data.replication.optorsim.OptorSimMain.initStorageElements(OptorSimMain.java:110)
at org.edg.data.replication.optorsim.OptorSimMain.init(OptorSimMain.java:67)
at org.edg.data.replication.optorsim.OptorSimMain.main(OptorSimMain.java:51)
在这个问题上纠结了好久,下午经过刘老师的亲自调试,终于有一些突破,现把调试的过程总结如下:
- 从报错上可知,这是一个空指针造成的问题,对应到JobConfFileReader.java:391。
- 在391上设置断点(run-toggle breakpoint),进行调试(debug(F11)),从Variables表中发现gsite的值为null。查看gsite的声明和引用(右键-Reference/Declarations-workspace),对应到gsite的声明行390。
- 在390上增加断点,重新进行调试(Terminate-Debug),查看代码和变量表可以知道findGridSiteByID( siteIndex)中的siteIndex的值为14导致了gsite的值为空。
- 进入findGridSiteByID函数进行调试(F5),可以看出if(gsite.iAm( id))这个语句没有执行,看了iAm的代码知道14并不是在所设置的节点范围内的值。从id的值是14知道,findGridSiteByID( siteIndex)中siteIndex的传递值为14。再看389行中的stite[i]是14,找到358行stites的声明,查看getFileDisribution函数。
- 进入getFileDisribution函数的声明,由String distribution = _table.getProperty("initial.file.distribution"),在配置文件parameters.conf中找到initial.file.distribution的赋值为14,从此项的说明可知是设置初始文件在各节点上的分布情况,现设置为0,1,3,4,5,6,8,9,则程序可以正常运行,显示图形化界面。