code: public CreateSnapshotResponse createSnapshot(CreateSnapshotRequest request) {
          checkNotNull(request, "request should not be null.");
          if (Strings.isNullOrEmpty(request.getClientToken())) {
              request.setClientToken(this.generateClientToken());
          }
          checkStringNotEmpty(request.getVolumeId(), "request volumeId should not be empty.");
          checkStringNotEmpty(request.getSnapshotName(), "request snapshotName should not be empty.");
          InternalRequest internalRequest = this.createRequest(request, HttpMethodName.POST, SNAPSHOT_PREFIX);
          internalRequest.addParameter("clientToken", request.getClientToken());
          fillPayload(internalRequest, request);
          return invokeHttpClient(internalRequest, CreateSnapshotResponse.class);
      }
docs: Creating snapshot from specified volume.
  
  You can create snapshot from system volume and CDS volume.
  While creating snapshot from system volume,the instance must be Running or Stopped,
  otherwise,it's will get <code>409</code> errorCode.
  While creating snapshot from CDS volume,,the volume must be InUs or Available,
  otherwise,it's will get <code>409</code> errorCode.
  
  This is an asynchronous interface,
  you can get the latest status by invoke {@link #getSnapshot(GetSnapshotRequest)}
  
  @param request The request containing all options for creating a new snapshot.
  @return The response with the id of snapshot created.