Revision 821afb13 lib/cmdlib.py

b/lib/cmdlib.py
1181 1181
    return output
1182 1182

  
1183 1183

  
1184
def _CheckNodesDirs(node_list, paths):
1185
  """Verify if the given nodes have the same files.
1186

  
1187
  Args:
1188
    node_list: the list of node names to check
1189
    paths: the list of directories to checksum and compare
1190

  
1191
  Returns:
1192
    list of (node, different_file, message); if empty, the files are in sync
1193

  
1194
  """
1195
  file_names = []
1196
  for dir_name in paths:
1197
    flist = [os.path.join(dir_name, name) for name in os.listdir(dir_name)]
1198
    flist = [name for name in flist if os.path.isfile(name)]
1199
    file_names.extend(flist)
1200

  
1201
  local_checksums = utils.FingerprintFiles(file_names)
1202

  
1203
  results = []
1204
  verify_params = {'filelist': file_names}
1205
  all_node_results = rpc.call_node_verify(node_list, verify_params)
1206
  for node_name in node_list:
1207
    node_result = all_node_results.get(node_name, False)
1208
    if not node_result or 'filelist' not in node_result:
1209
      results.append((node_name, "'all files'", "node communication error"))
1210
      continue
1211
    remote_checksums = node_result['filelist']
1212
    for fname in local_checksums:
1213
      if fname not in remote_checksums:
1214
        results.append((node_name, fname, "missing file"))
1215
      elif remote_checksums[fname] != local_checksums[fname]:
1216
        results.append((node_name, fname, "wrong checksum"))
1217
  return results
1218

  
1219

  
1220 1184
class LUAddNode(LogicalUnit):
1221 1185
  """Logical unit for adding node to the cluster.
1222 1186

  

Also available in: Unified diff