Commit 485b72ad authored by chiaming2000's avatar chiaming2000
Browse files

1. Sync to protocol version 3.0.5

2. Update Java API and simulator to use media scan and media optimize
message types (previous defined as background operation message
construct). 
parent 32ab4547
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ BASE_DIR=`cd "$BASE_DIR"; pwd`
PROTO_REPO_URL=https://github.com/Seagate/Kinetic-Protocol.git
PROTO_FILE=$BASE_DIR/kinetic-common/src/main/java/com/seagate/kinetic/proto/kinetic.proto
CLONE_DIR=$BASE_DIR/bin/Kinetic-Protocol
PROTO_RELEASE_VERSION=3.0.0
PROTO_RELEASE_VERSION=3.0.5

function syncFromProtoRepo(){
    if [ -d "$CLONE_DIR" ]; then
+49 −12
Original line number Diff line number Diff line
@@ -40,8 +40,7 @@ import com.seagate.kinetic.client.internal.p2p.DefaultKineticP2pClient;
import com.seagate.kinetic.common.lib.HMACAlgorithmUtil;
import com.seagate.kinetic.common.lib.KineticMessage;
import com.seagate.kinetic.proto.Kinetic.Command;
import com.seagate.kinetic.proto.Kinetic.Command.BackgroundOperation;
import com.seagate.kinetic.proto.Kinetic.Command.BackgroundOperation.BackOpType;

import com.seagate.kinetic.proto.Kinetic.Command.GetLog;
import com.seagate.kinetic.proto.Kinetic.Command.GetLog.Type;
import com.seagate.kinetic.proto.Kinetic.Command.Header;
@@ -777,9 +776,10 @@ public class DefaultAdminClient extends DefaultKineticP2pClient implements Kinet
        
    }


    @Override
    public KineticMessage backgroundOperation(BackOpType backopType,
            Range range, Priority priority) throws KineticException {
    public KineticMessage mediaScan(Range range, Priority priority)
            throws KineticException {
        
        // create request message
        KineticMessage kmreq = MessageFactory.createKineticMessageWithBuilder();
@@ -789,24 +789,59 @@ public class DefaultAdminClient extends DefaultKineticP2pClient implements Kinet
        Header.Builder header = commandBuilder.getHeaderBuilder();
        
        // set message type
        header.setMessageType(MessageType.BACKOP);
        header.setMessageType(MessageType.MEDIASCAN);

        // set priority
        header.setPriority(priority);
        
        // get back ground op builder
        BackgroundOperation.Builder backop = 
                commandBuilder.getBodyBuilder().getBackgroundOperationBuilder();
        // set range
        commandBuilder.getBodyBuilder().setRange(range);
        
        KineticMessage kmresp = request (kmreq);

        if (kmresp.getCommand().getHeader().getMessageType() != MessageType.MEDIASCAN_RESPONSE) {
            throw new KineticException("received wrong message type.");
        }

        if (kmresp.getCommand().getStatus().getCode() == Status.StatusCode.NOT_AUTHORIZED) {

        // set back up type
        backop.setBackOpType(backopType);
            throw new KineticException("Authorized Exception: "
                    + kmresp.getCommand().getStatus().getCode() + ": "
                    + kmresp.getCommand().getStatus().getStatusMessage());
        }

        if (kmresp.getCommand().getStatus().getCode() != Status.StatusCode.SUCCESS) {
            throw new KineticException("Unknown Error: "
                    + kmresp.getCommand().getStatus().getCode() + ": "
                    + kmresp.getCommand().getStatus().getStatusMessage());
        }
        
        return kmresp;
    }

    @Override
    public KineticMessage mediaOptimize(Range range, Priority priority)
            throws KineticException {
        
        // create request message
        KineticMessage kmreq = MessageFactory.createKineticMessageWithBuilder();
        
        Command.Builder commandBuilder = (Command.Builder) kmreq.getCommand(); 
        
        Header.Builder header = commandBuilder.getHeaderBuilder();
        
        // set message type
        header.setMessageType(MessageType.MEDIAOPTIMIZE);

        // set priority
        header.setPriority(priority);
        
        // set range
        backop.setRange(range);
        commandBuilder.getBodyBuilder().setRange(range);
        
        KineticMessage kmresp = request (kmreq);

        if (kmresp.getCommand().getHeader().getMessageType() != MessageType.BACKOP_RESPONSE) {
        if (kmresp.getCommand().getHeader().getMessageType() != MessageType.MEDIAOPTIMIZE_RESPONSE) {
            throw new KineticException("received wrong message type.");
        }

@@ -826,4 +861,6 @@ public class DefaultAdminClient extends DefaultKineticP2pClient implements Kinet
        return kmresp;
    }
    
    
    
}
+12 −4
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ package kinetic.admin;
import java.util.List;

import com.seagate.kinetic.common.lib.KineticMessage;
import com.seagate.kinetic.proto.Kinetic.Command.BackgroundOperation.BackOpType;

import com.seagate.kinetic.proto.Kinetic.Command.Priority;
import com.seagate.kinetic.proto.Kinetic.Command.Range;

@@ -278,10 +278,9 @@ public interface KineticAdminClient extends KineticP2pClient {
    public void setClusterVersion (long newClusterVersion) throws KineticException;
    
    /**
     * Performs Background operation to the Kinetic drive.
     * Performs media scan operation to the Kinetic drive.
     * <p>
     * 
     * @param backupType type of background op
     * @param range range of background op
     * @param priority priority of background op
     * @return kinetic response message.
@@ -290,5 +289,14 @@ public interface KineticAdminClient extends KineticP2pClient {
     * @see BackOpType
     * @see Priority
     */
    public KineticMessage backgroundOperation (BackOpType backupType, Range range, Priority priority) throws KineticException;
    public KineticMessage mediaScan (Range range, Priority priority) throws KineticException;
    
    /**
     * 
     * @param range
     * @param priority
     * @return
     * @throws KineticException
     */
    public KineticMessage mediaOptimize(Range range, Priority priority) throws KineticException;
}
+322 −1302

File changed.

Preview size limit exceeded, changes collapsed.

+57 −20
Original line number Diff line number Diff line
@@ -25,8 +25,6 @@ import kinetic.client.KineticException;

import com.seagate.kinetic.common.lib.KineticMessage;
import com.seagate.kinetic.proto.Kinetic.Command;
import com.seagate.kinetic.proto.Kinetic.Command.BackgroundOperation;
import com.seagate.kinetic.proto.Kinetic.Command.BackgroundOperation.BackOpType;

import com.seagate.kinetic.proto.Kinetic.Command.MessageType;

@@ -45,10 +43,10 @@ import com.seagate.kinetic.proto.Kinetic.Command.Status.StatusCode;
 */
public abstract class BackGroundOpHandler {
    
    private final static Logger logger = Logger.getLogger(BackgroundOperation.class
    private final static Logger logger = Logger.getLogger(BackGroundOpHandler.class
            .getName());
    
    public static void handleOperation(KineticMessage request,
    public static void mediaScan(KineticMessage request,
            KineticMessage respond, SimulatorEngine engine)
            throws KVStoreException, KineticException {

@@ -56,7 +54,7 @@ public abstract class BackGroundOpHandler {

        // set reply type
        commandBuilder.getHeaderBuilder().setMessageType(
                MessageType.BACKOP_RESPONSE);
                MessageType.MEDIASCAN_RESPONSE);

        // set ack sequence
        commandBuilder.getHeaderBuilder().setAckSequence(
@@ -64,7 +62,6 @@ public abstract class BackGroundOpHandler {

        try {
            
            //check if message is valid
            checkIsMessageValid (request);
            
            // check permission
@@ -79,29 +76,70 @@ public abstract class BackGroundOpHandler {
             *  The following statements are for testing purpose only
             */
            
            // set response back op type
            // set endkey in response
            commandBuilder
                    .getBodyBuilder()
                    .getBackgroundOperationBuilder()
                    .setBackOpType(
                            request.getCommand().getBody()
                                    .getBackgroundOperation().getBackOpType());
                    .getRangeBuilder()
                    .setEndKey(
                            request.getCommand().getBody().getRange()
                                    .getEndKey());

        } catch (KVSecurityException se) {
            commandBuilder.getStatusBuilder()
                    .setCode(StatusCode.NOT_AUTHORIZED);
            commandBuilder.getStatusBuilder().setStatusMessage(se.getMessage());
            logger.warning("unauthorized media scan opeartion request");
        } catch (InvalidRequestException ire) {
            commandBuilder.getStatusBuilder().setCode(
                    StatusCode.INVALID_REQUEST);
            commandBuilder.getStatusBuilder()
                    .setStatusMessage(ire.getMessage());
        }
    }
    
    public static void mediaOptimize(KineticMessage request,
            KineticMessage respond, SimulatorEngine engine)
            throws KVStoreException, KineticException {

        Command.Builder commandBuilder = (Command.Builder) respond.getCommand();

        // set reply type
        commandBuilder.getHeaderBuilder().setMessageType(
                MessageType.MEDIAOPTIMIZE_RESPONSE);

        // set ack sequence
        commandBuilder.getHeaderBuilder().setAckSequence(
                request.getCommand().getHeader().getSequence());

        try {
            
            checkIsMessageValid (request);
            
            // check permission
            checkPermission (request, engine);  
            
            /**
             *  XXX 09/11/2014 chiaming:
             *  framework to start media optimize op
             *  the job should be stoppable by a higher priority received
             *  before/after the long running bg ops.
             *  
             *  The following statements are for testing purpose only
             */
            
            // set endkey in response
            commandBuilder
                    .getBodyBuilder()
                    .getBackgroundOperationBuilder()
                    .getRangeBuilder()
                    .setEndKey(
                            request.getCommand().getBody()
                                    .getBackgroundOperation().getRange()
                            request.getCommand().getBody().getRange()
                                    .getEndKey());

        } catch (KVSecurityException se) {
            commandBuilder.getStatusBuilder()
                    .setCode(StatusCode.NOT_AUTHORIZED);
            commandBuilder.getStatusBuilder().setStatusMessage(se.getMessage());
            logger.warning("unauthorized pin opeartion request");
            logger.warning("unauthorized media optimize opeartion request");
        } catch (InvalidRequestException ire) {
            commandBuilder.getStatusBuilder().setCode(
                    StatusCode.INVALID_REQUEST);
@@ -112,16 +150,15 @@ public abstract class BackGroundOpHandler {
    
    private static void checkIsMessageValid (KineticMessage request) throws InvalidRequestException {
        
        BackgroundOperation bgo = request.getCommand().getBody().getBackgroundOperation();
        BackOpType boType = bgo.getBackOpType();
        MessageType mtype = request.getCommand().getHeader().getMessageType();
        
        switch (boType) {
        switch (mtype) {
        case MEDIASCAN:
        case MEDIAOPTIMIZE:
            // XXX: more request message validation here
            return;
        default:
            throw new InvalidRequestException ("not a valid back ground op type: " + boType.name());
            throw new InvalidRequestException ("not a valid back ground op type: " + mtype.name());
        }
        
    }
Loading