code: public void validate(ClientState state) throws RequestValidationException
      {
          ThriftValidation.validateKeyspaceNotSystem(name);
  
          // keyspace name
          if (!name.matches("\\w+"))
              throw new InvalidRequestException(String.format("\"%s\" is not a valid keyspace name", name));
          if (name.length() > Schema.NAME_LENGTH)
              throw new InvalidRequestException(String.format("Keyspace names shouldn't be more than %s characters long (got \"%s\")", Schema.NAME_LENGTH, name));
  
          attrs.validate();
  
          if (attrs.getReplicationStrategyClass() == null)
              throw new ConfigurationException("Missing mandatory replication strategy class");
  
          // The strategy is validated through KSMetaData.validate() in announceNewKeyspace below.
          // However, for backward compatibility with thrift, this doesn't validate unexpected options yet,
          // so doing proper validation here.
          AbstractReplicationStrategy.validateReplicationStrategy(name,
                                                                  AbstractReplicationStrategy.getClass(attrs.getReplicationStrategyClass()),
                                                                  StorageService.instance.getTokenMetadata(),
                                                                  DatabaseDescriptor.getEndpointSnitch(),
                                                                  attrs.getReplicationOptions());
      }
docs: The <code>CqlParser</code> only goes as far as extracting the keyword arguments
  from these statements, so this method is responsible for processing and
  validating.
  
  @throws InvalidRequestException if arguments are missing or unacceptable