public ResponseEntity receiveMessage()

in services/snapshoter-gcs-app/src/main/java/com/google/cloud/pso/bq_snapshot_manager/snapshoter_gcs/GCSSnapshoterController.java [69:148]


    public ResponseEntity receiveMessage(@RequestBody PubSubEvent requestBody) {

        String trackingId = TrackingHelper.MIN_RUN_ID;

        // These values will be updated based on the execution flow and logged at the end
        ResponseEntity responseEntity;
        SnapshoterRequest snapshoterRequest = null;
        GCSSnapshoterResponse snapshoterResponse = null;
        boolean isSuccess;
        Exception error = null;
        boolean isRetryableError= false;

        try {

            if (requestBody == null || requestBody.getMessage() == null) {
                String msg = "Bad Request: invalid message format";
                logger.logSevereWithTracker(trackingId, null, msg);
                throw new NonRetryableApplicationException("Request body or message is Null.");
            }

            String requestJsonString = requestBody.getMessage().dataToUtf8String();

            // remove any escape characters (e.g. from Terraform
            requestJsonString = requestJsonString.replace("\\", "");

            logger.logInfoWithTracker(trackingId, null, String.format("Received payload: %s", requestJsonString));

            snapshoterRequest = gson.fromJson(requestJsonString, SnapshoterRequest.class);

            trackingId = snapshoterRequest.getTrackingId();

            logger.logInfoWithTracker(snapshoterRequest.isDryRun(), trackingId, snapshoterRequest.getTargetTable(), String.format("Parsed Request: %s", snapshoterRequest.toString()));

            GCSSnapshoter snapshoter = new GCSSnapshoter(
                    environment.toConfig(),
                    new BigQueryServiceImpl(snapshoterRequest.computeBackupOperationProject()),
                    new PubSubServiceImpl(),
                    new GCSPersistentSetImpl(environment.getGcsFlagsBucket()),
                    "snapshoter-gcs-flags",
                    new GcsPersistentMapImpl(environment.getGcsFlagsBucket()),
                    "snapshoter-gcs-tagger-requests",
                    functionNumber
            );

            snapshoterResponse = snapshoter.execute(
                    snapshoterRequest,
                    Timestamp.now(),
                    requestBody.getMessage().getMessageId());

            responseEntity = new ResponseEntity("Process completed successfully.", HttpStatus.OK);
            isSuccess = true;

        } catch (Exception e) {
            Tuple<ResponseEntity, Boolean> handlingResults  = ControllerExceptionHelper.handleException(
                    e,
                    logger,
                    trackingId,
                    snapshoterRequest == null? null: snapshoterRequest.getTargetTable()
            );
            isSuccess = false;
            responseEntity = handlingResults.x();
            isRetryableError = handlingResults.y();
            error = e;
        }

        logger.logUnified(
                snapshoterRequest == null? null: snapshoterRequest.isDryRun(),
                functionNumber.toString(),
                snapshoterRequest == null? null: snapshoterRequest.getRunId(),
                snapshoterRequest == null? null: snapshoterRequest.getTrackingId(),
                snapshoterRequest == null? null : snapshoterRequest.getTargetTable(),
                snapshoterRequest,
                snapshoterResponse,
                isSuccess,
                error,
                isRetryableError
        );

        return responseEntity;
    }