code: public static void validate_basic(StormTopology topology, Map<Object, Object> totalStormConf,
                                        String topologyId) throws InvalidTopologyException {
          validate_ids(topology, topologyId);
  
          for (StormTopology._Fields field : Thrift.SPOUT_FIELDS) {
              Object value = topology.getFieldValue(field);
              if (value != null) {
                  Map<String, Object> obj_map = (Map<String, Object>) value;
                  for (Object obj : obj_map.values()) {
                      validate_component_inputs(obj);
                  }
              }
          }
  
          Integer workerNum = JStormUtils.parseInt(totalStormConf.get(Config.TOPOLOGY_WORKERS));
          if (workerNum == null || workerNum <= 0) {
              String errMsg = "There is no Config.TOPOLOGY_WORKERS in configuration of " + topologyId;
              throw new InvalidParameterException(errMsg);
          }
  
          Integer ackerNum = JStormUtils.parseInt(totalStormConf.get(Config.TOPOLOGY_ACKER_EXECUTORS));
          if (ackerNum != null && ackerNum < 0) {
              String errMsg = "Invalid Config.TOPOLOGY_ACKERS in configuration of " + topologyId;
              throw new InvalidParameterException(errMsg);
          }
  
      }
docs: Validate the topology 1. component id name is valid or not 2. check some spout's input is empty or not
  
  @throws InvalidTopologyException