Package voldemort.server.protocol.admin

Source Code of voldemort.server.protocol.admin.FullScanFetchKeysRequestHandler

/*
* Copyright 2013 LinkedIn, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/

package voldemort.server.protocol.admin;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

import voldemort.client.protocol.pb.ProtoUtils;
import voldemort.client.protocol.pb.VAdminProto;
import voldemort.client.protocol.pb.VAdminProto.FetchPartitionEntriesRequest;
import voldemort.server.StoreRepository;
import voldemort.server.VoldemortConfig;
import voldemort.store.ErrorCodeMapper;
import voldemort.store.metadata.MetadataStore;
import voldemort.store.stats.StreamingStats.Operation;
import voldemort.utils.ByteArray;
import voldemort.utils.NetworkClassLoader;

import com.google.protobuf.Message;

/**
* Fetches keys by scanning entire storage engine in storage-order.
*
*/
public class FullScanFetchKeysRequestHandler extends FullScanFetchStreamRequestHandler {

    public FullScanFetchKeysRequestHandler(FetchPartitionEntriesRequest request,
                                           MetadataStore metadataStore,
                                           ErrorCodeMapper errorCodeMapper,
                                           VoldemortConfig voldemortConfig,
                                           StoreRepository storeRepository,
                                           NetworkClassLoader networkClassLoader) {
        super(request,
              metadataStore,
              errorCodeMapper,
              voldemortConfig,
              storeRepository,
              networkClassLoader,
              Operation.FETCH_KEYS);
        logger.info("Starting fetch keys for store '" + storageEngine.getName()
                    + "' partitions " + partitionIds);
    }

    @Override
    public StreamRequestHandlerState handleRequest(DataInputStream inputStream,
                                                   DataOutputStream outputStream)
            throws IOException {
        if(!keyIterator.hasNext()) {
            return StreamRequestHandlerState.COMPLETE;
        }

        // NOTE: Storage time is accounted for somewhat incorrectly because
        // .hasNext() is invoked at end of method for the common case.
        long startNs = System.nanoTime();
        ByteArray key = keyIterator.next();
        reportStorageOpTime(startNs);

        throttler.maybeThrottle(key.length());

        if(isItemAccepted(key.get())) {
            if(filter.accept(key, null)) {
                accountForFetchedKey(key.get());

                VAdminProto.FetchPartitionEntriesResponse.Builder response = VAdminProto.FetchPartitionEntriesResponse.newBuilder();
                response.setKey(ProtoUtils.encodeBytes(key));
                Message message = response.build();

                sendMessage(outputStream, message);
            }
        }

        accountForScanProgress("keys");

        return determineRequestHandlerState("keys");
    }
}
TOP

Related Classes of voldemort.server.protocol.admin.FullScanFetchKeysRequestHandler

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.