public static OMClientRequest createClientRequest()

in hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/ratis/utils/OzoneManagerRatisUtils.java [130:355]


  public static OMClientRequest createClientRequest(OMRequest omRequest,
      OzoneManager ozoneManager) throws IOException {

    // Handling of exception by createClientRequest(OMRequest, OzoneManger):
    // Either the code will take FSO or non FSO path, both classes has a
    // validateAndUpdateCache() function which also contains
    // validateBucketAndVolume() function which validates bucket and volume and
    // throws necessary exceptions if required. validateAndUpdateCache()
    // function has catch block which catches the exception if required and
    // handles it appropriately.
    Type cmdType = omRequest.getCmdType();
    OzoneManagerProtocolProtos.KeyArgs keyArgs;
    BucketLayout bucketLayout = BucketLayout.DEFAULT;
    String volumeName = "";
    String bucketName = "";

    switch (cmdType) {
    case CreateVolume:
      return new OMVolumeCreateRequest(omRequest);
    case SetVolumeProperty:
      boolean hasQuota = omRequest.getSetVolumePropertyRequest()
          .hasQuotaInBytes();
      boolean hasOwner = omRequest.getSetVolumePropertyRequest().hasOwnerName();
      Preconditions.checkState(hasOwner || hasQuota, "Either Quota or owner " +
          "should be set in the SetVolumeProperty request");
      Preconditions.checkState(!(hasOwner && hasQuota), "Either Quota or " +
          "owner should be set in the SetVolumeProperty request. Should not " +
          "set both");
      if (hasQuota) {
        return new OMVolumeSetQuotaRequest(omRequest);
      } else {
        return new OMVolumeSetOwnerRequest(omRequest);
      }
    case DeleteVolume:
      return new OMVolumeDeleteRequest(omRequest);
    case CreateBucket:
      return new OMBucketCreateRequest(omRequest);
    case DeleteBucket:
      return new OMBucketDeleteRequest(omRequest);
    case SetBucketProperty:
      boolean hasBucketOwner = omRequest.getSetBucketPropertyRequest()
          .getBucketArgs().hasOwnerName();
      if (hasBucketOwner) {
        return new OMBucketSetOwnerRequest(omRequest);
      } else {
        return new OMBucketSetPropertyRequest(omRequest);
      }
    case AddAcl:
    case RemoveAcl:
    case SetAcl:
      return getOMAclRequest(omRequest, ozoneManager);
    case GetDelegationToken:
      return new OMGetDelegationTokenRequest(omRequest);
    case CancelDelegationToken:
      return new OMCancelDelegationTokenRequest(omRequest);
    case RenewDelegationToken:
      return new OMRenewDelegationTokenRequest(omRequest);
    case GetS3Secret:
      return new S3GetSecretRequest(omRequest);
    case FinalizeUpgrade:
      return new OMFinalizeUpgradeRequest(omRequest);
    case Prepare:
      return new OMPrepareRequest(omRequest);
    case CancelPrepare:
      return new OMCancelPrepareRequest(omRequest);
    case SetS3Secret:
      return new OMSetSecretRequest(omRequest);
    case RevokeS3Secret:
      return new S3RevokeSecretRequest(omRequest);
    case PurgeKeys:
      return new OMKeyPurgeRequest(omRequest);
    case PurgeDirectories:
      return new OMDirectoriesPurgeRequestWithFSO(omRequest);
    case CreateTenant:
      ozoneManager.checkS3MultiTenancyEnabled();
      return new OMTenantCreateRequest(omRequest);
    case DeleteTenant:
      ozoneManager.checkS3MultiTenancyEnabled();
      return new OMTenantDeleteRequest(omRequest);
    case TenantAssignUserAccessId:
      ozoneManager.checkS3MultiTenancyEnabled();
      return new OMTenantAssignUserAccessIdRequest(omRequest);
    case TenantRevokeUserAccessId:
      ozoneManager.checkS3MultiTenancyEnabled();
      return new OMTenantRevokeUserAccessIdRequest(omRequest);
    case TenantAssignAdmin:
      ozoneManager.checkS3MultiTenancyEnabled();
      return new OMTenantAssignAdminRequest(omRequest);
    case TenantRevokeAdmin:
      ozoneManager.checkS3MultiTenancyEnabled();
      return new OMTenantRevokeAdminRequest(omRequest);
    case SetRangerServiceVersion:
      return new OMSetRangerServiceVersionRequest(omRequest);
    case CreateSnapshot:
      return new OMSnapshotCreateRequest(omRequest);
    case DeleteSnapshot:
      return new OMSnapshotDeleteRequest(omRequest);
    case RenameSnapshot:
      return new OMSnapshotRenameRequest(omRequest);
    case SnapshotMoveDeletedKeys:
      return new OMSnapshotMoveDeletedKeysRequest(omRequest);
    case SnapshotMoveTableKeys:
      return new OMSnapshotMoveTableKeysRequest(omRequest);
    case SnapshotPurge:
      return new OMSnapshotPurgeRequest(omRequest);
    case SetSnapshotProperty:
      return new OMSnapshotSetPropertyRequest(omRequest);
    case DeleteOpenKeys:
      BucketLayout bktLayout = BucketLayout.DEFAULT;
      if (omRequest.getDeleteOpenKeysRequest().hasBucketLayout()) {
        bktLayout = BucketLayout.fromProto(
            omRequest.getDeleteOpenKeysRequest().getBucketLayout());
      }
      return new OMOpenKeysDeleteRequest(omRequest, bktLayout);
    case RecoverLease:
      volumeName = omRequest.getRecoverLeaseRequest().getVolumeName();
      bucketName = omRequest.getRecoverLeaseRequest().getBucketName();
      bucketLayout =
        getBucketLayout(ozoneManager.getMetadataManager(), volumeName,
          bucketName);
      if (bucketLayout != BucketLayout.FILE_SYSTEM_OPTIMIZED) {
        throw new IOException("Bucket " + bucketName + " is not FSO layout. " +
                "It does not support lease recovery");
      }
      return new OMRecoverLeaseRequest(omRequest);
    /*
     * Key requests that can have multiple variants based on the bucket layout
     * should be created using {@link BucketLayoutAwareOMKeyRequestFactory}.
     */
    case CreateDirectory:
      keyArgs = omRequest.getCreateDirectoryRequest().getKeyArgs();
      volumeName = keyArgs.getVolumeName();
      bucketName = keyArgs.getBucketName();
      break;
    case CreateFile:
      keyArgs = omRequest.getCreateFileRequest().getKeyArgs();
      volumeName = keyArgs.getVolumeName();
      bucketName = keyArgs.getBucketName();
      break;
    case CreateKey:
      keyArgs = omRequest.getCreateKeyRequest().getKeyArgs();
      volumeName = keyArgs.getVolumeName();
      bucketName = keyArgs.getBucketName();
      break;
    case AllocateBlock:
      keyArgs = omRequest.getAllocateBlockRequest().getKeyArgs();
      volumeName = keyArgs.getVolumeName();
      bucketName = keyArgs.getBucketName();
      break;
    case CommitKey:
      keyArgs = omRequest.getCommitKeyRequest().getKeyArgs();
      volumeName = keyArgs.getVolumeName();
      bucketName = keyArgs.getBucketName();
      break;
    case DeleteKey:
      keyArgs = omRequest.getDeleteKeyRequest().getKeyArgs();
      volumeName = keyArgs.getVolumeName();
      bucketName = keyArgs.getBucketName();
      break;
    case DeleteKeys:
      OzoneManagerProtocolProtos.DeleteKeyArgs deleteKeyArgs =
          omRequest.getDeleteKeysRequest()
              .getDeleteKeys();
      volumeName = deleteKeyArgs.getVolumeName();
      bucketName = deleteKeyArgs.getBucketName();
      break;
    case RenameKey:
      keyArgs = omRequest.getRenameKeyRequest().getKeyArgs();
      volumeName = keyArgs.getVolumeName();
      bucketName = keyArgs.getBucketName();
      break;
    case RenameKeys:
      OzoneManagerProtocolProtos.RenameKeysArgs renameKeysArgs =
          omRequest.getRenameKeysRequest().getRenameKeysArgs();
      volumeName = renameKeysArgs.getVolumeName();
      bucketName = renameKeysArgs.getBucketName();
      break;
    case InitiateMultiPartUpload:
      keyArgs = omRequest.getInitiateMultiPartUploadRequest().getKeyArgs();
      volumeName = keyArgs.getVolumeName();
      bucketName = keyArgs.getBucketName();
      break;
    case CommitMultiPartUpload:
      keyArgs = omRequest.getCommitMultiPartUploadRequest().getKeyArgs();
      volumeName = keyArgs.getVolumeName();
      bucketName = keyArgs.getBucketName();
      break;
    case AbortMultiPartUpload:
      keyArgs = omRequest.getAbortMultiPartUploadRequest().getKeyArgs();
      volumeName = keyArgs.getVolumeName();
      bucketName = keyArgs.getBucketName();
      break;
    case CompleteMultiPartUpload:
      keyArgs = omRequest.getCompleteMultiPartUploadRequest().getKeyArgs();
      volumeName = keyArgs.getVolumeName();
      bucketName = keyArgs.getBucketName();
      break;
    case SetTimes:
      keyArgs = omRequest.getSetTimesRequest().getKeyArgs();
      volumeName = keyArgs.getVolumeName();
      bucketName = keyArgs.getBucketName();
      break;
    case EchoRPC:
      return new OMEchoRPCWriteRequest(omRequest);
    case AbortExpiredMultiPartUploads:
      return new S3ExpiredMultipartUploadsAbortRequest(omRequest);
    case QuotaRepair:
      return new OMQuotaRepairRequest(omRequest);
    case PutObjectTagging:
      keyArgs = omRequest.getPutObjectTaggingRequest().getKeyArgs();
      volumeName = keyArgs.getVolumeName();
      bucketName = keyArgs.getBucketName();
      break;
    case DeleteObjectTagging:
      keyArgs = omRequest.getDeleteObjectTaggingRequest().getKeyArgs();
      volumeName = keyArgs.getVolumeName();
      bucketName = keyArgs.getBucketName();
      break;
    default:
      throw new OMException("Unrecognized write command type request "
          + cmdType, OMException.ResultCodes.INVALID_REQUEST);
    }

    return BucketLayoutAwareOMKeyRequestFactory.createRequest(
        volumeName, bucketName, omRequest, ozoneManager.getMetadataManager());
  }