Skip to content

Instantly share code, notes, and snippets.

@anuchandy
Created February 9, 2021 19:27
Show Gist options
  • Save anuchandy/f5339a661912d766214fc37570de8c7a to your computer and use it in GitHub Desktop.
Save anuchandy/f5339a661912d766214fc37570de8c7a to your computer and use it in GitHub Desktop.

Pipeline execution callstack and Chains

final HttpPipelineBuilder pipelineBuilder = new HttpPipelineBuilder();
// Set Policies
pipelineBuilder.policies(
    new HttpPipelinePolicy() { // policy0
         @Override
         public void process(HttpPipelinePolicyChain chain0) {
            chain0.processNextPolicy(chain0.getRequest(), new HttpCallback() {
                @Override
                public void onSuccess(HttpResponse response) {
                    chain0.finishedProcessing(response);
                }

                @Override
                public void onError(Throwable error) {
                    chain0.finishedProcessing(error);
                }
            });
         }
    },
    new HttpPipelinePolicy() { // policy1
        @Override
        public void process(HttpPipelinePolicyChain chain1) {
            chain1.processNextPolicy(chain1.getRequest(), new HttpCallback() {
                @Override
                public void onSuccess(HttpResponse response) {
                    chain1.finishedProcessing(response);
                }

                @Override
                public void onError(Throwable error) {
                    chain1.finishedProcessing(error);
                }
            });
        }
    },
    new HttpPipelinePolicy() { // // policy2
        @Override
        public void process(HttpPipelinePolicyChain chain2) {
            chain2.processNextPolicy(chain2.getRequest(), new HttpCallback() {
                @Override
                public void onSuccess(HttpResponse response) {
                    chain2.finishedProcessing(response);
                }

                @Override
                public void onError(Throwable error) {
                    chain2.finishedProcessing(error);
                }
            });
        }
    });

// Set Http client
pipelineBuilder.httpClient(okHttpClient);

// Build pipeline
HttpPipeline pipeline = pipelineBuilder.build();

pipeline.send(httpRequest, new HttpCallback() {
    @Override
    public void onSuccess(HttpResponse response) {

    }

    @Override
    public void onError(Throwable error) {

    }
});


PipelineFlow0

Chains (after callstack rewind)



PipelineFlow1

The root callback (delegating and housekeeping)



PipelineRootCB

The esacped errors



PipelineEscapedError

Pipelines sharing HttpClient



PipelineShareHttpClient

Async Pipeline execution



PipelineHttpDispatcher



public interface HttpClient {

    HttpCallDispatcher getHttpCallDispatcher();

    void send(HttpRequest httpRequest, HttpCallback httpCallback);

    static HttpClient createDefault() {
        return HttpClientProviders.createInstance();
    }
}


OkHttp and Azure Pipeline

OkHttp_Dispatcher_ShareES



HttpUrlConnection and Azure Pipeline

HttpUrlCon_Use_Dispatcher



public final class HttpCallDispatcher {

    public HttpCallDispatcher() {..}
    
    public HttpCallDispatcher(ExecutorService executorService) {...}
    
    public HttpCallDispatcher(ExecutorService executorService,
                              ScheduledExecutorService scheduledExecutorService) {..}
    
    
    public void enqueue(HttpCallFunction httpCallFunction,
                        HttpRequest httpRequest,
                        HttpCallback httpCallback) { .. }
                        
     // Package Private                   
     void scheduleChainProceed(HttpPipelinePolicyChainImpl chain,
                               HttpRequest httpRequest,
                               HttpCallback httpCallback,
                               long delay,
                               TimeUnit timeUnit) { ..}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment