Yes, it has been changed in 20.07.0 and will remain the same for the foreseeable future.
We had switched to auto creating a node for storing GraphQL schema for some time in between, but later we discovered some issues which forced us to rethink how GraphQL schema should be stored. Now, the GraphQL schema node is created only when someone sends a GraphQL schema update, and not in advance.
Thanks for clarification. Is there a way to create that empty graphql schema via API call as it exists for 20.03.3 and 20.03.4? When I try to create an empty schema I get an exception:
$ curl "localhost:8080/admin/schema" -XPOST -d ''
{"errors":[{"message":"resolving updateGQLSchema failed because input: No schema specified (Locations: [{Line: 3, Column: 4}])","extensions":{"code":"Error"}}]}
So it looks like it is impossible to create this from outside:
Huh, you could do that.
You can first send a valid GraphQL schema, then do a drop_all. That will set <dgraph.graphql.schema> to "". That should work.
But, there is no guarantee that the uid assigned to this node would be <0x1>. You will have to update the GraphQL schema as the first operation after you start dgraph cluster, to get that exact uid.
This is how you can do drop_all:
$ curl -X POST localhost:8080/alter -d '{"drop_all": true}'
This will remove all the data from the dgraph cluster, and set the <dgraph.graphql.schema> to "".
Great, I can confirm that drop_all produces the dgraph.graphql node with dgraph.graphql.schema = "" in 20.07.0, so I can get that version into the same state as 20.03.3 and 20.03.4, though it does not work before 20.03.3, but that is fine. It works with a fresh started Shuri cluster, so no need to add a GraphQL schema in the first place. I hope this behaviour stays over the next versions.
The unpredictable uid for that node is fine, I am already working around that.