@Override
 public RespDto findFileMdAttr(FileMdAttrPosList fileMdAttrPosList) {
   List<ClusterNodeInfo> clusterNodeInfos = fileMdAttrPosList.getClusterNodeInfos();
   RespDto respDto = new RespDto();
   String fileCode = fileMdAttrPosList.getFileCode();
   for (ClusterNodeInfo nodeInfo : clusterNodeInfos) {
     BackendClient client = new BackendClient(nodeInfo.getIp(), nodeInfo.getPort());
     client.connectAndHandle(new FindFileMdAttrHandler(fileCode, respDto));
     if (respDto.getSuccess()) {
       break;
     }
   }
   return respDto;
 }
 @Override
 public List<MdAttr> findDirMdAttr(DirMdAttrPosList dirMdAttrPosList) {
   List<ClusterNodeInfo> clusterNodeInfos = dirMdAttrPosList.getClusterNodeInfos();
   RespDto respDto = new RespDto();
   List<MdAttr> mdAttrs = new ArrayList<MdAttr>();
   for (ClusterNodeInfo nodeInfo : clusterNodeInfos) {
     BackendClient client = new BackendClient(nodeInfo.getIp(), nodeInfo.getPort());
     client.connectAndHandle(new FindDirMdAttrHandler(nodeInfo.getDistrCode(), respDto));
     if (!respDto.getSuccess()) {
       logger.error(String.format("Get mdAttr from Node: %s err. resp is:%s", nodeInfo, respDto));
     }
     MdAttrListDto partMdAttrs = JSON.parseObject(respDto.getObjStr(), MdAttrListDto.class);
     for (MdAttr mdAttr : partMdAttrs.getMdAttrList()) {
       mdAttrs.add(mdAttr);
     }
   }
   return mdAttrs;
 }