package com.linkedin.databus.core; /* * * Copyright 2013 LinkedIn Corp. All rights reserved * * 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. * */ import java.nio.ByteBuffer; import java.util.Arrays; public class DbusEventInfo { private DbusOpcode _opCode; private long _sequenceId; private short _pPartitionId; private short _lPartitionId; private long _timeStampInNanos; private short _srcId; private byte[] _payloadSchemaMd5; private ByteBuffer _payloadBuffer; private boolean _enableTracing; // auto-commit is not a setting within the event. Instead, this boolean is used as an indication to // DbusEventVx implementations during serialization that the event payload CRC needs to be computed and inserted at // the right place. The header CRC is still done in another call. private boolean _autocommit; private byte _eventSerializationVersion; private short _payloadSchemaVersion; /** Flag to determine if the event is replicated into the source DB **/ private boolean _isReplicated; private DbusEventPart _metadata; public DbusEventInfo(DbusOpcode opCode, long sequenceId, short pPartitionId, short lPartitionId, long timeStampInNanos, short srcId, byte[] payloadSchemaMd5, byte[] payload, boolean enableTracing, boolean autocommit, byte eventSerializationVersion, short payloadSchemaVersion, DbusEventPart metadata) { this(opCode, sequenceId, pPartitionId, lPartitionId, timeStampInNanos, srcId, payloadSchemaMd5, payload, enableTracing, autocommit); _eventSerializationVersion = eventSerializationVersion; _payloadSchemaVersion = payloadSchemaVersion; _metadata = metadata; } public DbusEventInfo(DbusOpcode opCode, long sequenceId, short pPartitionId, short lPartitionId, long timeStampInNanos, short srcId, byte[] payloadSchemaMd5, byte[] payload, boolean enableTracing, boolean autocommit) { super(); _opCode = opCode; _sequenceId = sequenceId; _pPartitionId = pPartitionId; _lPartitionId = lPartitionId; _timeStampInNanos = timeStampInNanos; _srcId = srcId; _payloadSchemaMd5 = payloadSchemaMd5; _enableTracing = enableTracing; _autocommit = autocommit; _eventSerializationVersion = DbusEventFactory.DBUS_EVENT_V1; _payloadSchemaVersion = 0; // An invalid value _payloadBuffer = null; if(payload != null) _payloadBuffer = ByteBuffer.wrap(payload); _metadata = null; } /** if opCode value is null - it means use default */ public DbusOpcode getOpCode() { return _opCode; } public void setOpCode(DbusOpcode opCode) { _opCode = opCode; } public long getSequenceId() { return _sequenceId; } public void setSequenceId(long sequenceId) { _sequenceId = sequenceId; } public short getpPartitionId() { return _pPartitionId; } public void setpPartitionId(short pPartitionId) { _pPartitionId = pPartitionId; } public short getlPartitionId() { return _lPartitionId; } public void setlPartitionId(short lPartitionId) { _lPartitionId = lPartitionId; } public long getTimeStampInNanos() { return _timeStampInNanos; } public void setTimeStampInNanos(long timeStampInNanos) { _timeStampInNanos = timeStampInNanos; } public short getSrcId() { return _srcId; } public void setSrcId(short srcId) { _srcId = srcId; } public byte[] getSchemaId() { return _payloadSchemaMd5; } public void setSchemaId(byte[] schemaId) { _payloadSchemaMd5 = schemaId; } /** makes a copy in case of read-only ByteBuffer */ public byte[] getValueBytes() { if(_payloadBuffer == null) return null; if(_payloadBuffer.isReadOnly() || ! _payloadBuffer.hasArray()) { //allocate new array byte[] val = new byte[_payloadBuffer.remaining()]; _payloadBuffer.get(val); return val; } // else return _payloadBuffer.array(); } public int getValueLength() { if(_payloadBuffer == null) return 0; return _payloadBuffer.remaining(); } public boolean isEnableTracing() { return _enableTracing; } public void setEnableTracing(boolean enableTracing) { _enableTracing = enableTracing; } public boolean isAutocommit() { return _autocommit; } public void setAutocommit(boolean autocommit) { _autocommit = autocommit; } public byte getEventSerializationVersion() { return _eventSerializationVersion; } public void setEventSerializationVersion(byte eventSerializationVersion) { _eventSerializationVersion = eventSerializationVersion; } public short getPayloadSchemaVersion() { return _payloadSchemaVersion; } public void setPayloadSchemaVersion(short payloadSchemaVersion) { _payloadSchemaVersion = payloadSchemaVersion; } public void setValueByteBuffer(ByteBuffer bb) { if(bb != null) { _payloadBuffer = bb.asReadOnlyBuffer(); } else { _payloadBuffer = null; } } public ByteBuffer getValueByteBuffer() { return _payloadBuffer; } public boolean isReplicated() { return _isReplicated; } public void setReplicated(boolean replicated) { _isReplicated = replicated; } public DbusEventPart getMetadata() { return _metadata; } @Override public String toString() { return "DbusEventInfo{" + "_opCode=" + _opCode + ", _sequenceId=" + _sequenceId + ", _pPartitionId=" + _pPartitionId + ", _lPartitionId=" + _lPartitionId + ", _timeStampInNanos=" + _timeStampInNanos + ", _srcId=" + _srcId + ", _payloadSchemaMd5=" + Arrays.toString(_payloadSchemaMd5) + ", _payloadBuffer=" + _payloadBuffer + ", _enableTracing=" + _enableTracing + ", _autocommit=" + _autocommit + ", _eventSerializationVersion=" + _eventSerializationVersion + ", _payloadSchemaVersion=" + _payloadSchemaVersion + ", _isReplicated=" + _isReplicated + ", _metadata=" + _metadata + '}'; } }