code: public void purchaseReservedInstance(PurchaseReservedInstanceRequeset request) {
          checkNotNull(request, "request should not be null.");
          if (Strings.isNullOrEmpty(request.getClientToken())) {
              request.setClientToken(this.generateClientToken());
          }
          if (null == request.getBilling()) {
              request.setBilling(generateDefaultBillingWithReservation());
          }
          checkStringNotEmpty(request.getInstanceId(), "request instanceId should not be empty.");
          InternalRequest internalRequest = this.createRequest(
                  request, HttpMethodName.PUT, INSTANCE_PREFIX, request.getInstanceId());
          internalRequest.addParameter(InstanceAction.purchaseReserved.name(), null);
          internalRequest.addParameter("clientToken", request.getClientToken());
          fillPayload(internalRequest, request);
          this.invokeHttpClient(internalRequest, AbstractBceResponse.class);
      }
docs: Renewing the instance with fixed duration.
  
  You can not renew the instance which is resizing.
  
  This is an asynchronous interface,
  you can get the latest status by invoke {@link #getInstance(GetInstanceRequest)}
  
  @param request The request containing all options for renewing the instance with fixed duration.