This document shows you how to commit a schema revision for Pub/Sub topics.
Before you begin
- Understand how Pub/Sub schemas work .
- Create a schema .
Required roles and permissions
To get the permissions that
      you need to commit a schema revision and manage schemas,
    
      ask your administrator to grant you the Pub/Sub Editor 
( roles/pubsub.editor 
)
     IAM role on your project.
  
  
  
  
  For more information about granting roles, see Manage access to projects, folders, and organizations 
.
This predefined role contains the permissions required to commit a schema revision and manage schemas. To see the exact permissions that are required, expand the Required permissionssection:
Required permissions
The following permissions are required to commit a schema revision and manage schemas:
- Create schema: pubsub.schemas.create
- Attach schema to topic: pubsub.schemas.attach
- Commit a schema revision: pubsub.schemas.commit
- Delete a schema or a schema revision: pubsub.schemas.delete
- Get a schema or schema revisions: pubsub.schemas.get
- List schemas: pubsub.schemas.list
- List schema revisions: pubsub.schemas.listRevisions
- Rollback a schema: pubsub.schemas.rollback
- Validate a message: pubsub.schemas.validate
- Get the IAM policy for a schema: pubsub.schemas.getIamPolicy
- Configure the IAM policy 
for a schema: pubsub.schemas.setIamPolicy
You might also be able to get these permissions with custom roles or other predefined roles .
You can grant roles and permissions to principals such as users, groups, domains, or service accounts. You can create a schema in one project and attach it to a topic located in a different project. Ensure that you have the required permissions for each project.
Revise a schema
You can commit a schema revision using the Google Cloud console, the gcloud CLI, the Pub/Sub API, or the Cloud Client Libraries.
The following are some guidelines to commit a schema revision:
-  You can revise a schema within specific constraints: -  For Protocol Buffer schemas, you can add or remove optional fields. You cannot add or delete other fields. You also cannot edit any existing field. 
-  For Avro schemas, refer to the Avro documentation for rules about schema resolution. A new revision must follow the rules as though it is both the reader schema and the writer schema. 
-  A schema can have a maximum of 20 revisions at one time. If you exceed the limit, delete a schema revision before creating another. 
 
-  
-  Each revision has a unique revision ID associated with it. The revision ID is an auto-generated eight-character UUID. 
-  When you update the revision range or the revision of a schema used for topic validation, it might take a few minutes for the changes to take effect. 
Console
To create a schema revision, follow these steps:
-  In the Google Cloud console, go to the Pub/Sub schemaspage. 
-  Click the Schema IDof an existing schema. The Schema detailspage for the schema opens. 
-  Click Create revision. The Create schema revisionpage opens. 
-  Make changes as required. For example, for the sample schema in Avro that you created in Create a schema , you can add an additional optional field called Priceas follows:{ "type" : "record" , "name" : "Avro" , "fields" : [ { "name" : "ProductName" , "type" : "string" , "default" : "" }, { "name" : "SKU" , "type" : "int" , "default" : 0 }, { "name" : "InStock" , "type" : "boolean" , "default" : false }, { "name" : "Price" , "type" : "double" , "default" : "0.0" } ] }
-  Click Validate definitionto check if the schema definition is correct. 
-  You can also validate the messages for the schema. -  Click Test messageto test a sample message. 
-  In the Test messagewindow, select a type of Message encoding. 
-  In the Message body, enter a test message. For example, here's a sample message for the test schema. In this example, select the Message encodingas JSON.{ "ProductName" : "GreenOnions" , "SKU" : 34543 , "Price" : 12 , "InStock" : true }
-  Click Test. 
 
-  
-  Click Committo save the schema. 
gcloud
gcloud pubsub schemas commit SCHEMA_ID \ --type = SCHEMA_TYPE \ --definition = SCHEMA_DEFINITION
Where:
-  SCHEMA_TYPE 
is either avroorprotocol-buffer.
-  SCHEMA_DEFINITION 
is a stringcontaining the definition of the schema, formatted according to the chosen schema type .
You can also specify the schema definition in file:
gcloud pubsub schemas commit SCHEMA_ID \ --type = SCHEMA_TYPE \ --definition-file = SCHEMA_DEFINITION_FILE
Where:
-  SCHEMA_TYPE 
is either avroorprotocol-buffer.
-  SCHEMA_DEFINITION_FILE 
is a stringcontaining the path to the file with the definition of the schema, formatted according to the chosen schema type .
REST
To commit a schema revision, send a POST request like the following:
POST https://pubsub.googleapis.com/v1/projects/ PROJECT_ID /schemas/ SCHEMA_ID :commit Authorization: Bearer $(gcloud auth application-default print-access-token) Content-Type: application/json --data @response-body.json
Specify the following fields in the request body:
{ "definition" : SCHEMA_DEFINITION "type" : SCHEMA_TYPE "name" : SCHEMA_NAME }
Where:
-  SCHEMA_TYPE 
is either AVROorPROTOCOL_BUFFER.
- SCHEMA_DEFINITION is a string containing the definition of the schema, formatted according to the chosen schema type .
- SCHEMA_NAME is the name of an existing schema.
The response body should contain a JSON representation of a schema resource . For example:
{ "name": SCHEMA_NAME , "type": SCHEMA_TYPE , "definition": SCHEMA_DEFINITION "revisionId": REVISION_ID "revisionCreateTime": REVISION_CREATE_TIME }
Where:
- REVISION_ID is the server-generated ID for the revision.
- REVISION_CREATE_TIME is the ISO 8601 timestamp at which the revision was created.
Go
The following sample uses the major version of the Go Pub/Sub client library (v2). If you are still using the v1 library, see the migration guide to v2 . To see a list of v1 code samples, see the deprecated code samples .
Before trying this sample, follow the Go setup instructions in Quickstart: Using Client Libraries . For more information, see the Pub/Sub Go API reference documentation .
Avro
Proto
C++
Before trying this sample, follow the C++ setup instructions in Quickstart: Using Client Libraries . For more information, see the Pub/Sub C++ API reference documentation .
Avro
Proto
Java
Before trying this sample, follow the Java setup instructions in Quickstart: Using Client Libraries . For more information, see the Pub/Sub Java API reference documentation .
Avro
Proto
Python
Before trying this sample, follow the Python setup instructions in Quickstart: Using Client Libraries . For more information, see the Pub/Sub Python API reference documentation .
Avro
Proto
Node.js
Before trying this sample, follow the Node.js setup instructions in Quickstart: Using Client Libraries . For more information, see the Pub/Sub Node.js API reference documentation .
Avro
Proto
Node.js
Before trying this sample, follow the Node.js setup instructions in Quickstart: Using Client Libraries . For more information, see the Pub/Sub Node.js API reference documentation .
Avro
Proto
After you commit a schema revision, you can see the details of the new revision in the Schemaspage.

