Package voldemort.rest

Source Code of voldemort.rest.PutResponseSender

package voldemort.rest;

import static org.jboss.netty.handler.codec.http.HttpHeaders.Names.CONTENT_LENGTH;
import static org.jboss.netty.handler.codec.http.HttpResponseStatus.CREATED;
import static org.jboss.netty.handler.codec.http.HttpVersion.HTTP_1_1;

import org.apache.log4j.Logger;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.handler.codec.http.DefaultHttpResponse;
import org.jboss.netty.handler.codec.http.HttpResponse;

import voldemort.store.stats.StoreStats;
import voldemort.store.stats.Tracked;
import voldemort.utils.ByteArray;
import voldemort.versioning.VectorClock;

public class PutResponseSender extends RestResponseSender {

    private final VectorClock successfulPutVC;
    private final static Logger logger = Logger.getLogger(PutResponseSender.class);

    // Storing keyname storename for logging purposes
    private ByteArray key;
    private String storeName;

    public PutResponseSender(MessageEvent messageEvent) {
        this(messageEvent, null);
    }

    public PutResponseSender(MessageEvent messageEvent, VectorClock successfulPutVC) {
        super(messageEvent);
        this.successfulPutVC = successfulPutVC;
    }

    /**
     * Constructor called by Coordinator worker thread
     *
     * @param messageEvent
     * @param successfulPutVC
     * @param storeName
     * @param key
     */
    public PutResponseSender(MessageEvent messageEvent,
                             VectorClock successfulPutVC,
                             String storeName,
                             ByteArray key) {
        super(messageEvent);
        this.successfulPutVC = successfulPutVC;
        this.key = key;
        this.storeName = storeName;
    }

    @Override
    public void sendResponse(StoreStats performanceStats,
                             boolean isFromLocalZone,
                             long startTimeInMs) {
        // Create the Response object
        HttpResponse response = new DefaultHttpResponse(HTTP_1_1, CREATED);

        // Set the right headers
        response.setHeader(CONTENT_LENGTH, 0);

        if(this.successfulPutVC != null) {
            numVectorClockEntries += successfulPutVC.getVersionMap().size();
            String serializedVC = RestUtils.getSerializedVectorClock(successfulPutVC);
            response.setHeader(RestMessageHeaders.X_VOLD_VECTOR_CLOCK, serializedVC);
        }

        // Write the response to the Netty Channel
        if(logger.isDebugEnabled()) {
            String keyStr = RestUtils.getKeyHexString(key);
            debugLog("PUT",
                     this.storeName,
                     keyStr,
                     startTimeInMs,
                     System.currentTimeMillis(),
                     numVectorClockEntries);
        }
        this.messageEvent.getChannel().write(response);

        if(performanceStats != null && isFromLocalZone) {
            recordStats(performanceStats, startTimeInMs, Tracked.PUT);
        }
    }
}
TOP

Related Classes of voldemort.rest.PutResponseSender

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.