blob: 298aaed6e517891e509e9371f7cb04edd84e58f1 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.hadoop.chukwa;
import java.io.DataOutput;
import java.io.IOException;
import org.apache.hadoop.chukwa.datacollection.adaptor.*;
/**
* A chunk is a sequence of bytes at a particular logical offset in a stream,
* and containing one or more "records". Chunks have various metadata, such as
* source, format, and pointers to record boundaries within the chunk.
*
*/
public interface Chunk {
// these conceptually are really network addresses
public String getSource();
public void setSource(String logSource);
/**
* Get the name of the stream that this Chunk is a chunk of
*
* @return the name of this stream; e.g. file name
*/
public String getStreamName();
public void setStreamName(String streamName);
// These describe the format of the data buffer
public String getDataType();
public void setDataType(String t);
/**
* @return the user data in the chunk
*/
public byte[] getData();
/**
* @param logEvent the user data in the chunk
*/
public void setData(byte[] logEvent);
/**
* get/set the <b>end</b> offsets of records in the buffer.
*
* We use end, rather than start offsets, since the first start offset is
* always 0, but the last end offset specifies how much of the buffer is
* valid.
*
* More precisely, offsets[i] is the offset in the Chunk of the last byte of
* record i in this chunk.
*
* @return a list of record end offsets
*/
public int[] getRecordOffsets();
public void setRecordOffsets(int[] offsets);
/**
* @return the byte offset of the first byte not in this chunk.
*
* We pick this convention so that subtracting sequence IDs yields
* length.
*
* Furthermore, seqID - length = first byte pos.
*/
public long getSeqID();
public void setSeqID(long l);
/**
* Retrieve a reference to the adaptor that sent this event. Used by
* LocalAgent and Connectors to deliver acks to the appropriate place.
* @return Adaptor
*/
public Adaptor getInitiator();
/**
* Estimate the size of this Chunk on the wire, assuming each char of metadata
* takes two bytes to serialize. This is pessimistic.
*
* @return size in bytes that this Chunk might take once serialized.
*/
public int getSerializedSizeEstimate();
/**
* @return tags.
*
*/
public String getTags();
/**
* Add tag.
* @param tag is a comma separated list
*
*/
public void addTag(String tag);
/**
* Returns the value of a single tag, assuming tags are of the form
* tagname="val"
* @param tagName the tag to return
* @return null if not matched.
*/
public String getTag(String tagName);
public void write(DataOutput data) throws IOException;
}