1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19 package org.apache.hadoop.chukwa; 20 21 22 import java.io.DataOutput; 23 import java.io.IOException; 24 import org.apache.hadoop.chukwa.datacollection.adaptor.*; 25 26 /** 27 * A chunk is a sequence of bytes at a particular logical offset in a stream, 28 * and containing one or more "records". Chunks have various metadata, such as 29 * source, format, and pointers to record boundaries within the chunk. 30 * 31 */ 32 public interface Chunk { 33 34 // these conceptually are really network addresses 35 public String getSource(); 36 37 public void setSource(String logSource); 38 39 /** 40 * Get the name of the stream that this Chunk is a chunk of 41 * 42 * @return the name of this stream; e.g. file name 43 */ 44 public String getStreamName(); 45 46 public void setStreamName(String streamName); 47 48 // These describe the format of the data buffer 49 public String getDataType(); 50 51 public void setDataType(String t); 52 53 /** 54 * @return the user data in the chunk 55 */ 56 public byte[] getData(); 57 58 /** 59 * @param logEvent the user data in the chunk 60 */ 61 public void setData(byte[] logEvent); 62 63 /** 64 * get/set the <b>end</b> offsets of records in the buffer. 65 * 66 * We use end, rather than start offsets, since the first start offset is 67 * always 0, but the last end offset specifies how much of the buffer is 68 * valid. 69 * 70 * More precisely, offsets[i] is the offset in the Chunk of the last byte of 71 * record i in this chunk. 72 * 73 * @return a list of record end offsets 74 */ 75 public int[] getRecordOffsets(); 76 77 public void setRecordOffsets(int[] offsets); 78 79 /** 80 * @return the byte offset of the first byte not in this chunk. 81 * 82 * We pick this convention so that subtracting sequence IDs yields 83 * length. 84 * 85 * Furthermore, seqID - length = first byte pos. 86 */ 87 public long getSeqID(); 88 89 public void setSeqID(long l); 90 91 /** 92 * Retrieve a reference to the adaptor that sent this event. Used by 93 * LocalAgent and Connectors to deliver acks to the appropriate place. 94 */ 95 public Adaptor getInitiator(); 96 97 /** 98 * Estimate the size of this Chunk on the wire, assuming each char of metadata 99 * takes two bytes to serialize. This is pessimistic. 100 * 101 * @return size in bytes that this Chunk might take once serialized. 102 */ 103 public int getSerializedSizeEstimate(); 104 105 /** 106 * @return tags. 107 * 108 */ 109 public String getTags(); 110 111 /** 112 * Add tag. 113 * 114 */ 115 public void addTag(String tag); 116 117 /** 118 * Returns the value of a single tag, assuming tags are of the form 119 * tagname="val" 120 * @param tagName the tag to return 121 * @return null if not matched. 122 */ 123 public String getTag(String tagName); 124 125 public void write(DataOutput data) throws IOException; 126 }