- 论坛徽章:
- 0
|
Fastdfs 版本 4.0.6
使用Fastdfs Java api 先通过 TrackerListGroupsHandler 获取组信息, 再通过 TrackerListStoragesHandler 遍历获取每个组 StorageState 信息.
在通过api 获取每个组 StorageState 信息时, 有一定概率 tracker 会挂掉. 如果重复尝试超过5次, 几乎必然会挂.
java代码如下. 请问各位有知道原因的吗?
public class FastdfsClient implements Runnable{
public static void main(String[] args) throws IOException {
// for (int i = 0; i < 1; i++) {
// Thread thread = new Thread(new FastdfsClient());
// thread.run();
// }
FastdfsClient client = new FastdfsClient();
client.run();
}
@Override
public void run() {
Socket socket = null;
try {
socket = new Socket("10.1.1.1", 22122);
TrackerListGroupsHandler trackerListGroupsHandler =
new TrackerListGroupsHandler(Charset.defaultCharset());
trackerListGroupsHandler.send(socket);
System.out.println("节点名\t可读状态\t总空间\t剩余空间\tip\t已上传\t剩余可上传\t实际可用");
if (trackerListGroupsHandler.receive(socket)) {
GroupState[] groupStates = trackerListGroupsHandler.getResult();
for (GroupState state : groupStates) {
System.out.println(state.getGroupName() + "\t"
+ Boolean.valueOf(state.getActiveCount() > 0).toString() + "\t"
+ state.getTotalMB() + "\t"
+ state.getFreeMB() + "\t");
TrackerListStoragesHandler trackerListStoragesHandler =
new TrackerListStoragesHandler(Charset.defaultCharset(), state.getGroupName(), null);
trackerListStoragesHandler.send(socket);
// try {
// Thread.sleep(300);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
if (trackerListStoragesHandler.receive(socket)) {
for (StorageState storageState : trackerListStoragesHandler.getResult()) {
System.out.println("\t\t\t\t"
+ storageState.getIpAddr() + "\t"
+ storageState.getTotalUploadBytes()/(1024*1024) + "\t"
+ storageState.getFreeMB() + "\t");
}
}
}
} else {
System.out.println("failed");
}
} catch (IOException e){
e.printStackTrace();
} finally {
if (socket != null){
if(!socket.isClosed())
try {
socket.close();
} catch (IOException e){
e.printStackTrace();
}
}
}
}
}
|
|