@java.lang.Override
    public Builder mergeFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            case 10:
              {
                input.readMessage(getCreateTimeFieldBuilder().getBuilder(), extensionRegistry);
                bitField0_ |= 0x00000002;
                break;
              } // case 10
            case 26:
              {
                name_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000008;
                break;
              } // case 26
            case 96:
              {
                state_ = input.readEnum();
                bitField0_ |= 0x00000010;
                break;
              } // case 96
            case 114:
              {
                input.readMessage(getStateTimeFieldBuilder().getBuilder(), extensionRegistry);
                bitField0_ |= 0x00000020;
                break;
              } // case 114
            case 138:
              {
                input.readMessage(getErrorFieldBuilder().getBuilder(), extensionRegistry);
                bitField0_ |= 0x00000040;
                break;
              } // case 138
            case 162:
              {
                input.readMessage(
                    getComputeEngineTargetDetailsFieldBuilder().getBuilder(), extensionRegistry);
                targetVmDetailsCase_ = 20;
                break;
              } // case 162
            case 178:
              {
                input.readMessage(getEndTimeFieldBuilder().getBuilder(), extensionRegistry);
                bitField0_ |= 0x00000004;
                break;
              } // case 178
            case 186:
              {
                com.google.cloud.vmmigration.v1.CloneStep m =
                    input.readMessage(
                        com.google.cloud.vmmigration.v1.CloneStep.parser(), extensionRegistry);
                if (stepsBuilder_ == null) {
                  ensureStepsIsMutable();
                  steps_.add(m);
                } else {
                  stepsBuilder_.addMessage(m);
                }
                break;
              } // case 186
            default:
              {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
          } // switch (tag)
        } // while (!done)
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.unwrapIOException();
      } finally {
        onChanged();
      } // finally
      return this;
    }
<pre>
CloneJob describes the process of creating a clone of a
[MigratingVM][google.cloud.vmmigration.v1.MigratingVm] to the
requested target based on the latest successful uploaded snapshots.
While the migration cycles of a MigratingVm take place, it is possible to
verify the uploaded VM can be started in the cloud, by creating a clone. The
clone can be created without any downtime, and it is created using the latest
snapshots which are already in the cloud. The cloneJob is only responsible
for its work, not its products, which means once it is finished, it will
never touch the instance it created. It will only delete it in case of the
CloneJob being cancelled or upon failure to clone.
</pre>

Protobuf type {@code google.cloud.vmmigration.v1.CloneJob}
java-vmmigration/proto-google-cloud-vmmigration-v1/src/main/java/com/google/cloud/vmmigration/v1/CloneJob.java