public synchronized void execute()

in aws-android-sdk-appsync-runtime/src/main/java/com/apollographql/apollo/internal/RealAppSyncSubscriptionCall.java [60:118]


    public synchronized void execute(@Nonnull final Callback<T> callback) {
        if ( callback == null ) {
            logger.w("Subscription Infrastructure: Callback passed into subscription [" + subscription +"] was null. Will not subscribe.");
            return;
        }
        new Thread(new Runnable() {
            @Override
            public void run() {
                userCallback = callback;
                subscriptionManager.addListener(subscription, callback);

                switch (state.get()) {
                    case IDLE: {
                        state.set(ACTIVE);
                        break;
                    }

                    case CANCELED:
                        callback.onFailure(new ApolloCanceledException("Call is cancelled."));
                        break;

                    case ACTIVE:
                        callback.onFailure(new ApolloException("Already Executed"));
                        break;

                    default:
                        callback.onFailure(new ApolloException("Unknown state"));
                }

                try {
                    if (subscriptionSemaphore.tryAcquire(MAX_WAIT_TIME, TimeUnit.SECONDS)) {
                        logger.d("Subscription Infrastructure: Acquired subscription Semaphore. Continuing");
                    } else {
                        logger.d("Subscription Infrastructure: Did not acquire subscription Semaphore after waiting for [" + MAX_WAIT_TIME + "] seconds. Will continue");

                    }
                } catch (InterruptedException e) {
                    logger.e(e, "Subscription Infrastructure:Got exception while waiting to acquire subscription Semaphore. Will continue without waiting");
                }


                logger.d("Subscription Infrastructure: Making request to server to get Subscription Meta Data");
                subscriptionMetadataRequest.enqueue(new GraphQLCall.Callback<T>() {
                    @Override
                    public void onResponse(@Nonnull Response<T> response) {
                        subscriptionSemaphore.release();
                        // Do nothing. Internal code has been kicked off.
                    }

                    @Override
                    public void onFailure(@Nonnull ApolloException e) {
                        subscriptionSemaphore.release();
                        reportFailureToSubscriptionManager();
                        callback.onFailure(e);
                    }
                });
            }
        }).start();
    }