This project has retired. For details please refer to its Attic page.
Chunk xref
View Javadoc

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 }