Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-53934

Refuse to start shards and config servers with setParameter requireApiVersion=true

    • Type: Icon: Task Task
    • Resolution: Fixed
    • Priority: Icon: Major - P3 Major - P3
    • 4.9.0
    • Affects Version/s: None
    • Component/s: Replication
    • None
    • Fully Compatible
    • Repl 2021-02-22

      In SERVER-49887 we introduced the requireApiVersion parameter which can be enabled at startup with --requireApiVersion, or at runtime with "setParameter". A server with this parameter enabled rejects all commands that lack an "apiVersion" field. This is intended to force external applications to configure their API version.

      xuerui.fa and I realized, while discussing SERVER-53555, that shard or config servers must require apiVersion. Connections internal to the sharded cluster should be marked as "internal client" and be excused from the requireApiVersion rule (once we fix SERVER-53555); however, it seems a likely source of obscure bugs if some connections aren't marked internal and all their commands are rejected.

      Let's update mongod so it refuses to start with -requireApiVersion plus either --shardSvr or --configSvr. And at runtime, if mongod was started with -shardSvr or --configSvr (but not --requireApiVersion), then "setParameter" should refuse to enable requireApiVersion. Let's document that config servers and shards shouldn't be started with requireApiVersion. The intention of requireApiVersion is enforce a rule on external clients, and config servers and shards only talk with internal clients, so they shouldn't be started with requireApiVersion.

            Assignee:
            huayu.ouyang@mongodb.com Huayu Ouyang
            Reporter:
            jesse@mongodb.com A. Jesse Jiryu Davis
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: