docs: protected Deferred<Object> importDataPoint(final TSDB tsdb, 
                                               final String[] words) {
      words[0] = null; // Ditch the "put".
      if (words.length < 5) {  // Need at least: metric timestamp value tag
        //               ^ 5 and not 4 because words[0] is "put".
        throw new IllegalArgumentException("not enough arguments"
                                           + " (need least 4, got " 
                                           + (words.length - 1) + ')');
      }
      final String metric = words[1];
      if (metric.length() <= 0) {
        throw new IllegalArgumentException("empty metric name");
      }
      final long timestamp;
      if (words[2].contains(".")) {
        timestamp = Tags.parseLong(words[2].replace(".", "")); 
      } else {
        timestamp = Tags.parseLong(words[2]);
      }
      if (timestamp <= 0) {
        throw new IllegalArgumentException("invalid timestamp: " + timestamp);
      }
      final String value = words[3];
      if (value.length() <= 0) {
        throw new IllegalArgumentException("empty value");
      }
      final HashMap<String, String> tags = new HashMap<String, String>();
      for (int i = 4; i < words.length; i++) {
        if (!words[i].isEmpty()) {
          Tags.parse(tags, words[i]);
        }
      }
      if (Tags.looksLikeInteger(value)) {
        return tsdb.addPoint(metric, timestamp, Tags.parseLong(value), tags);
      } else if (Tags.fitsInFloat(value)) {  // floating point value
        return tsdb.addPoint(metric, timestamp, Float.parseFloat(value), tags);
      } else {
        return tsdb.addPoint(metric, timestamp, Double.parseDouble(value), tags);
      }
    }