com.tesora.dve.mysqlapi.repl.messages.MyQueryLogEvent.java Source code

Java tutorial

Introduction

Here is the source code for com.tesora.dve.mysqlapi.repl.messages.MyQueryLogEvent.java

Source

package com.tesora.dve.mysqlapi.repl.messages;

/*
 * #%L
 * Tesora Inc.
 * Database Virtualization Engine
 * %%
 * Copyright (C) 2011 - 2014 Tesora Inc.
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License, version 3,
 * as published by the Free Software Foundation.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Affero General Public License for more details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 * #L%
 */

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.util.CharsetUtil;

import java.util.Set;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import com.tesora.dve.db.mysql.common.MysqlAPIUtils;
import com.tesora.dve.exceptions.PEException;
import com.tesora.dve.mysqlapi.repl.messages.MyStatusVariables.BaseQueryEvent;

public class MyQueryLogEvent extends MyLogEventPacket {
    static final Logger logger = Logger.getLogger(MyQueryLogEvent.class);

    long slaveProxyId;
    long execTime;
    byte dbNameLen;
    int errorCode;
    int statusVarsLen;
    String dbName;
    ByteBuf query;
    String origQuery;

    String skipErrorMessage;
    MyStatusVariables statusVars = new MyStatusVariables();

    public MyQueryLogEvent(MyReplEventCommonHeader ch) {
        super(ch);
    }

    @Override
    public void accept(ReplicationVisitorTarget visitorTarget) throws PEException {
        visitorTarget.visit((MyQueryLogEvent) this);
    }

    @Override
    public void unmarshallMessage(ByteBuf cb) throws PEException {

        // read event header
        slaveProxyId = cb.readUnsignedInt();
        execTime = cb.readUnsignedInt();
        dbNameLen = cb.readByte();
        errorCode = cb.readUnsignedShort();
        statusVarsLen = cb.readUnsignedShort();

        statusVars.parseStatusVariables(cb, statusVarsLen);

        dbName = MysqlAPIUtils.readBytesAsString(cb, dbNameLen, CharsetUtil.UTF_8);
        cb.skipBytes(1); //for trailing 0
        query = Unpooled.buffer(cb.readableBytes());
        query.writeBytes(cb);
        origQuery = query.toString(CharsetUtil.UTF_8);
    }

    @Override
    public void marshallMessage(ByteBuf cb) {
        cb.writeInt((int) getSlaveProxyId());
        cb.writeInt((int) getExecTime());
        cb.writeByte(getDbNameLen());
        cb.writeShort(getErrorCode());
        cb.writeShort(getStatusVarsLen());

        statusVars.writeStatusVariables(cb);

        cb.writeBytes(getDbName().getBytes(CharsetUtil.UTF_8));
        cb.writeByte(0); //for trailing 0
        cb.writeBytes(getQuery());
    }

    public long getSlaveProxyId() {
        return slaveProxyId;
    }

    public void setSlaveProxyId(long slaveProxyId) {
        this.slaveProxyId = slaveProxyId;
    }

    public long getExecTime() {
        return execTime;
    }

    public void setExecTime(long execTime) {
        this.execTime = execTime;
    }

    public byte getDbNameLen() {
        return dbNameLen;
    }

    public void setDbNameLen(byte dbNameLen) {
        this.dbNameLen = dbNameLen;
    }

    public int getErrorCode() {
        return errorCode;
    }

    public void setErrorCode(int errorCode) {
        this.errorCode = errorCode;
    }

    public int getStatusVarsLen() {
        return statusVarsLen;
    }

    public void setStatusVarsLen(int statusVarsLen) {
        this.statusVarsLen = statusVarsLen;
    }

    public String getDbName() {
        return dbName;
    }

    public void setDbName(String dbName) {
        this.dbName = dbName;
    }

    public ByteBuf getQuery() {
        return query;
    }

    public void setQuery(ByteBuf query) {
        this.query = query;
    }

    protected void setSuppliedEventCodes(Set<BaseQueryEvent> suppliedEventCodes) {
        this.statusVars.setSuppliedEventCodes(suppliedEventCodes);
    }

    @Override
    public String getSkipErrorMessage() {
        if (!StringUtils.isBlank(skipErrorMessage)) {
            return skipErrorMessage;
        }
        return super.getSkipErrorMessage();
    }

    public void setSkipErrors(boolean skip, String message) {
        super.setSkipErrors(skip);
        this.skipErrorMessage = message;
    }

    public String getOrigQuery() {
        return origQuery;
    }
}