http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/ListQueryAPIResponseEntity.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/ListQueryAPIResponseEntity.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/ListQueryAPIResponseEntity.java index 3f748d6..93e714b 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/ListQueryAPIResponseEntity.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/ListQueryAPIResponseEntity.java @@ -20,59 +20,77 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.databind.annotation.JsonSerialize; /** - * TODO: (hchen9) currently we disable firstTimestamp in response avoid breaking older client implementation, but we may need to remove "firstTimestamp" from @JsonIgnoreProperties(ignoreUnknown = true,value={"firstTimestamp"}) to enable the feature later + * TODO: (hchen9) currently we disable firstTimestamp in response avoid breaking older client implementation, + * but we may need to remove "firstTimestamp" from @JsonIgnoreProperties(ignoreUnknown = + * true,value={"firstTimestamp"}) to enable the feature later */ -@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) -@JsonIgnoreProperties(ignoreUnknown = true,value={"firstTimestamp"}) +@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true, value = { + "firstTimestamp" + }) public class ListQueryAPIResponseEntity { - private boolean success; - private String exception; - private int totalResults; - private long elapsedms; - private long lastTimestamp; - private long firstTimestamp; - public long getFirstTimestamp() { - return firstTimestamp; - } - public void setFirstTimestamp(long firstTimestamp) { - this.firstTimestamp = firstTimestamp; - } - private Object obj; - - public long getElapsedms() { - return elapsedms; - } - public void setElapsedms(long elapsedms) { - this.elapsedms = elapsedms; - } - public boolean isSuccess() { - return success; - } - public void setSuccess(boolean success) { - this.success = success; - } - public String getException() { - return exception; - } - public void setException(String exception) { - this.exception = exception; - } - public int getTotalResults() { - return totalResults; - } - public void setTotalResults(int totalResults) { - this.totalResults = totalResults; - } - public long getLastTimestamp() { - return lastTimestamp; - } - public void setLastTimestamp(long lastTimestamp) { - this.lastTimestamp = lastTimestamp; - } - public Object getObj() { - return obj; - } - public void setObj(Object obj) { - this.obj = obj; - } -} \ No newline at end of file + private boolean success; + private String exception; + private int totalResults; + private long elapsedms; + private long lastTimestamp; + private long firstTimestamp; + + public long getFirstTimestamp() { + return firstTimestamp; + } + + public void setFirstTimestamp(long firstTimestamp) { + this.firstTimestamp = firstTimestamp; + } + + private Object obj; + + public long getElapsedms() { + return elapsedms; + } + + public void setElapsedms(long elapsedms) { + this.elapsedms = elapsedms; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public String getException() { + return exception; + } + + public void setException(String exception) { + this.exception = exception; + } + + public int getTotalResults() { + return totalResults; + } + + public void setTotalResults(int totalResults) { + this.totalResults = totalResults; + } + + public long getLastTimestamp() { + return lastTimestamp; + } + + public void setLastTimestamp(long lastTimestamp) { + this.lastTimestamp = lastTimestamp; + } + + public Object getObj() { + return obj; + } + + public void setObj(Object obj) { + this.obj = obj; + } +}
http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/LogReader.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/LogReader.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/LogReader.java index da1e1ab..a0dd29a 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/LogReader.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/LogReader.java @@ -19,10 +19,11 @@ package org.apache.eagle.log.entity; import java.io.Closeable; import java.io.IOException; -public interface LogReader<T> extends Closeable{ - public void open() throws IOException; +public interface LogReader<T> extends Closeable { + public void open() throws IOException; - public void close() throws IOException; - - public T read() throws IOException; + @Override + public void close() throws IOException; + + public T read() throws IOException; } http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/LogWriter.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/LogWriter.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/LogWriter.java index 6ef4ee3..9c10cd4 100644 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/LogWriter.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/LogWriter.java @@ -19,14 +19,15 @@ package org.apache.eagle.log.entity; import java.io.Closeable; import java.io.IOException; -public interface LogWriter extends Closeable{ - public void flush() throws IOException; +public interface LogWriter extends Closeable { + public void flush() throws IOException; - public void open() throws IOException; + public void open() throws IOException; - public void close() throws IOException; + @Override + public void close() throws IOException; - public byte[] write(InternalLog log) throws IOException; - - public void updateByRowkey(byte[] rowkey, InternalLog log) throws IOException; -} \ No newline at end of file + public byte[] write(InternalLog log) throws IOException; + + public void updateByRowkey(byte[] rowkey, InternalLog log) throws IOException; +} http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/MetricMetadataEntity.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/MetricMetadataEntity.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/MetricMetadataEntity.java index a430393..4bf82e6 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/MetricMetadataEntity.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/MetricMetadataEntity.java @@ -28,90 +28,106 @@ import org.apache.eagle.log.entity.meta.Prefix; import org.apache.eagle.log.entity.meta.Table; import org.apache.eagle.log.entity.meta.TimeSeries; - -@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) +@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) @Table("eagle_metric") @ColumnFamily("f") @Prefix("dmeta") @Service("MetricMetadataService") @TimeSeries(false) @Indexes({ - @Index(name="Index_1_name", columns = { "name" }, unique = true) - }) + @Index(name = "Index_1_name", columns = { + "name" + }, unique = true) + }) public class MetricMetadataEntity extends TaggedLogAPIEntity { - - @Column("a") - private String storeType; - @Column("b") - private String displayName; - @Column("c") - private String defaultDownSamplingFunction; - @Column("d") - private String defaultAggregateFunction; - @Column("e") - private String aggFunctions; - @Column("f") - private String downSamplingFunctions; - @Column("g") - private String resolutions; - @Column("h") - private String drillDownPaths; - - public String getStoreType() { - return storeType; - } - public void setStoreType(String storeType) { - this.storeType = storeType; - pcs.firePropertyChange("storeType", null, null); - } - public String getDisplayName() { - return displayName; - } - public void setDisplayName(String displayName) { - this.displayName = displayName; - pcs.firePropertyChange("displayName", null, null); - } - public String getDefaultDownSamplingFunction() { - return defaultDownSamplingFunction; - } - public void setDefaultDownSamplingFunction(String defaultDownSamplingFunction) { - this.defaultDownSamplingFunction = defaultDownSamplingFunction; - pcs.firePropertyChange("defaultDownSamplingFunction", null, null); - } - public String getDefaultAggregateFunction() { - return defaultAggregateFunction; - } - public void setDefaultAggregateFunction(String defaultAggregateFunction) { - this.defaultAggregateFunction = defaultAggregateFunction; - pcs.firePropertyChange("defaultAggregateFunction", null, null); - } - public String getAggFunctions() { - return aggFunctions; - } - public void setAggFunctions(String aggFunctions) { - this.aggFunctions = aggFunctions; - pcs.firePropertyChange("aggFunctions", null, null); - } - public String getDownSamplingFunctions() { - return downSamplingFunctions; - } - public void setDownSamplingFunctions(String downSamplingFunctions) { - this.downSamplingFunctions = downSamplingFunctions; - pcs.firePropertyChange("downSamplingFunctions", null, null); - } - public String getResolutions() { - return resolutions; - } - public void setResolutions(String resolutions) { - this.resolutions = resolutions; - pcs.firePropertyChange("resolutions", null, null); - } - public String getDrillDownPaths() { - return drillDownPaths; - } - public void setDrillDownPaths(String drillDownPaths) { - this.drillDownPaths = drillDownPaths; - pcs.firePropertyChange("drillDownPaths", null, null); - } - + + @Column("a") + private String storeType; + @Column("b") + private String displayName; + @Column("c") + private String defaultDownSamplingFunction; + @Column("d") + private String defaultAggregateFunction; + @Column("e") + private String aggFunctions; + @Column("f") + private String downSamplingFunctions; + @Column("g") + private String resolutions; + @Column("h") + private String drillDownPaths; + + public String getStoreType() { + return storeType; + } + + public void setStoreType(String storeType) { + this.storeType = storeType; + pcs.firePropertyChange("storeType", null, null); + } + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + pcs.firePropertyChange("displayName", null, null); + } + + public String getDefaultDownSamplingFunction() { + return defaultDownSamplingFunction; + } + + public void setDefaultDownSamplingFunction(String defaultDownSamplingFunction) { + this.defaultDownSamplingFunction = defaultDownSamplingFunction; + pcs.firePropertyChange("defaultDownSamplingFunction", null, null); + } + + public String getDefaultAggregateFunction() { + return defaultAggregateFunction; + } + + public void setDefaultAggregateFunction(String defaultAggregateFunction) { + this.defaultAggregateFunction = defaultAggregateFunction; + pcs.firePropertyChange("defaultAggregateFunction", null, null); + } + + public String getAggFunctions() { + return aggFunctions; + } + + public void setAggFunctions(String aggFunctions) { + this.aggFunctions = aggFunctions; + pcs.firePropertyChange("aggFunctions", null, null); + } + + public String getDownSamplingFunctions() { + return downSamplingFunctions; + } + + public void setDownSamplingFunctions(String downSamplingFunctions) { + this.downSamplingFunctions = downSamplingFunctions; + pcs.firePropertyChange("downSamplingFunctions", null, null); + } + + public String getResolutions() { + return resolutions; + } + + public void setResolutions(String resolutions) { + this.resolutions = resolutions; + pcs.firePropertyChange("resolutions", null, null); + } + + public String getDrillDownPaths() { + return drillDownPaths; + } + + public void setDrillDownPaths(String drillDownPaths) { + this.drillDownPaths = drillDownPaths; + pcs.firePropertyChange("drillDownPaths", null, null); + } + } http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/QualifierCreationListener.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/QualifierCreationListener.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/QualifierCreationListener.java index b0eeaed..890540d 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/QualifierCreationListener.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/QualifierCreationListener.java @@ -19,10 +19,10 @@ package org.apache.eagle.log.entity; import java.util.Map; public interface QualifierCreationListener { - /** - * Qualifier <b>display name</b> mapped to qualifier value in bytes[] - * - * @param qualifiers - */ - public void qualifierCreated(Map<String, byte[]> qualifiers); + /** + * Qualifier <b>display name</b> mapped to qualifier value in bytes[] + * + * @param qualifiers + */ + public void qualifierCreated(Map<String, byte[]> qualifiers); } http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/QualifierNotDefinedException.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/QualifierNotDefinedException.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/QualifierNotDefinedException.java index 88135bb..1225ba7 100644 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/QualifierNotDefinedException.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/QualifierNotDefinedException.java @@ -16,13 +16,13 @@ */ package org.apache.eagle.log.entity; -public class QualifierNotDefinedException extends Exception{ - /** - * - */ - private static final long serialVersionUID = 1L; +public class QualifierNotDefinedException extends Exception { + /** + * + */ + private static final long serialVersionUID = 1L; - public QualifierNotDefinedException(String message){ - super(message); - } + public QualifierNotDefinedException(String message) { + super(message); + } } http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/RowkeyBuilder.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/RowkeyBuilder.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/RowkeyBuilder.java index 5154cc4..2ef0680 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/RowkeyBuilder.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/RowkeyBuilder.java @@ -27,114 +27,122 @@ import org.apache.eagle.log.entity.meta.EntityDefinition; import org.apache.eagle.common.ByteUtil; public class RowkeyBuilder { - - public static final int EMPTY_PARTITION_DEFAULT_HASH_CODE = 0; - - /** - * Generate the internal sorted hashmap for tags. Please note the partition tags should not be included in the result map. - * @param partitions array of partition tags in order - * @param tags tags of the entity - * @return the sorted hash map of the tags - */ - public static SortedMap<Integer, Integer> generateSortedTagMap(String[] partitions, Map<String, String> tags) { - final SortedMap<Integer, Integer> tagHashMap = new TreeMap<Integer, Integer>(); - for (Map.Entry<String, String> entry: tags.entrySet()) { - final String tagName = entry.getKey(); - final String tagValue = entry.getValue(); - // If it's a partition tag, we need to remove it from tag hash list. It need to - // put to the fix partition hash slot in rowkey. - if (tagValue == null || isPartitionTag(partitions, tagName)) - continue; - tagHashMap.put(tagName.hashCode(), tagValue.hashCode()); - } - return tagHashMap; - } - - /** - * build rowkey from InternalLog object - * @param log internal log entity to write - * @return the rowkey of the entity - */ - public static byte[] buildRowkey(InternalLog log) { - final String[] partitions = log.getPartitions(); - final Map<String, String> tags = log.getTags(); - final SortedMap<Integer, Integer> tagHashMap = generateSortedTagMap(partitions, tags); - - // reverse timestamp - long ts = Long.MAX_VALUE - log.getTimestamp(); - - List<Integer> partitionHashValues = new ArrayList<Integer>(); - if (partitions != null) { - for (String partition : partitions) { - final String tagValue = tags.get(partition); - if (tagValue != null) { - partitionHashValues.add(tagValue.hashCode()); - } else { - partitionHashValues.add(EMPTY_PARTITION_DEFAULT_HASH_CODE); - } - } - } - return buildRowkey(log.getPrefix().hashCode(), partitionHashValues, ts, tagHashMap); - } - - public static long getTimestamp(byte[] rowkey, EntityDefinition ed) { - if (!ed.isTimeSeries()) { - return EntityConstants.FIXED_WRITE_TIMESTAMP; - } - final int offset = (ed.getPartitions() == null) ? 4 : (4 + ed.getPartitions().length * 4); - return Long.MAX_VALUE - ByteUtil.bytesToLong(rowkey, offset); - } - - /** - * Check if the tagName is one of the partition tags - * @param partitions paritition tags of the entity - * @param tagName the tag name that needs to check - * @return - */ - private static boolean isPartitionTag(String[] partitions, String tagName) { - if (partitions != null) { - for (String partition : partitions) { - if (partition.equals(tagName)) { - return true; - } - } - } - return false; - } - - /** - * rowkey is: prefixHash:4 + (partitionValueHash:4)* + timestamp:8 + (tagnameHash:4 + tagvalueHash:4)* - * partition fields are sorted by partition definition order, while tag fields are sorted by tag name's - * hash code values. - */ - private static byte[] buildRowkey(int prefixHash, List<Integer> partitionHashValues, long timestamp, SortedMap<Integer, Integer> tags){ - // allocate byte array for rowkey - final int len = 4 + 8 + tags.size() * (4 + 4) + (partitionHashValues.size() * 4); - final byte[] rowkey = new byte[len]; - int offset = 0; - - // 1. set prefix - ByteUtil.intToBytes(prefixHash, rowkey, offset); - offset += 4; - - // 2. set partition - for (Integer partHash : partitionHashValues) { - ByteUtil.intToBytes(partHash, rowkey, offset); - offset += 4; - } - - // 3. set timestamp - ByteUtil.longToBytes(timestamp, rowkey, offset); - offset += 8; - - // 4. set tag key/value hashes - for (Map.Entry<Integer, Integer> entry : tags.entrySet()) { - ByteUtil.intToBytes(entry.getKey(), rowkey, offset); - offset += 4; - ByteUtil.intToBytes(entry.getValue(), rowkey, offset); - offset += 4; - } - - return rowkey; - } + + public static final int EMPTY_PARTITION_DEFAULT_HASH_CODE = 0; + + /** + * Generate the internal sorted hashmap for tags. Please note the partition tags should not be included in + * the result map. + * + * @param partitions array of partition tags in order + * @param tags tags of the entity + * @return the sorted hash map of the tags + */ + public static SortedMap<Integer, Integer> generateSortedTagMap(String[] partitions, + Map<String, String> tags) { + final SortedMap<Integer, Integer> tagHashMap = new TreeMap<Integer, Integer>(); + for (Map.Entry<String, String> entry : tags.entrySet()) { + final String tagName = entry.getKey(); + final String tagValue = entry.getValue(); + // If it's a partition tag, we need to remove it from tag hash list. It need to + // put to the fix partition hash slot in rowkey. + if (tagValue == null || isPartitionTag(partitions, tagName)) { + continue; + } + tagHashMap.put(tagName.hashCode(), tagValue.hashCode()); + } + return tagHashMap; + } + + /** + * build rowkey from InternalLog object + * + * @param log internal log entity to write + * @return the rowkey of the entity + */ + public static byte[] buildRowkey(InternalLog log) { + final String[] partitions = log.getPartitions(); + final Map<String, String> tags = log.getTags(); + final SortedMap<Integer, Integer> tagHashMap = generateSortedTagMap(partitions, tags); + + // reverse timestamp + long ts = Long.MAX_VALUE - log.getTimestamp(); + + List<Integer> partitionHashValues = new ArrayList<Integer>(); + if (partitions != null) { + for (String partition : partitions) { + final String tagValue = tags.get(partition); + if (tagValue != null) { + partitionHashValues.add(tagValue.hashCode()); + } else { + partitionHashValues.add(EMPTY_PARTITION_DEFAULT_HASH_CODE); + } + } + } + return buildRowkey(log.getPrefix().hashCode(), partitionHashValues, ts, tagHashMap); + } + + /** + * rowkey is: prefixHash:4 + (partitionValueHash:4)* + timestamp:8 + (tagnameHash:4 + tagvalueHash:4)* + * partition fields are sorted by partition definition order, while tag fields are sorted by tag name's + * hash code values. + */ + private static byte[] buildRowkey(int prefixHash, List<Integer> partitionHashValues, long timestamp, + SortedMap<Integer, Integer> tags) { + // allocate byte array for rowkey + final int len = 4 + 8 + tags.size() * (4 + 4) + (partitionHashValues.size() * 4); + final byte[] rowkey = new byte[len]; + int offset = 0; + + // 1. set prefix + ByteUtil.intToBytes(prefixHash, rowkey, offset); + offset += 4; + + // 2. set partition + for (Integer partHash : partitionHashValues) { + ByteUtil.intToBytes(partHash, rowkey, offset); + offset += 4; + } + + // 3. set timestamp + ByteUtil.longToBytes(timestamp, rowkey, offset); + offset += 8; + + // 4. set tag key/value hashes + for (Map.Entry<Integer, Integer> entry : tags.entrySet()) { + ByteUtil.intToBytes(entry.getKey(), rowkey, offset); + offset += 4; + ByteUtil.intToBytes(entry.getValue(), rowkey, offset); + offset += 4; + } + + return rowkey; + } + + public static long getTimestamp(byte[] rowkey, EntityDefinition ed) { + if (!ed.isTimeSeries()) { + return EntityConstants.FIXED_WRITE_TIMESTAMP; + } + final int offset = (ed.getPartitions() == null) ? 4 : (4 + ed.getPartitions().length * 4); + return Long.MAX_VALUE - ByteUtil.bytesToLong(rowkey, offset); + } + + /** + * Check if the tagName is one of the partition tags + * + * @param partitions paritition tags of the entity + * @param tagName the tag name that needs to check + * @return + */ + private static boolean isPartitionTag(String[] partitions, String tagName) { + if (partitions != null) { + for (String partition : partitions) { + if (partition.equals(tagName)) { + return true; + } + } + } + return false; + } + } http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/RowkeyQueryAPIResponseEntity.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/RowkeyQueryAPIResponseEntity.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/RowkeyQueryAPIResponseEntity.java index 953d12b..6189983 100644 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/RowkeyQueryAPIResponseEntity.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/RowkeyQueryAPIResponseEntity.java @@ -18,28 +18,33 @@ package org.apache.eagle.log.entity; import com.fasterxml.jackson.databind.annotation.JsonSerialize; -@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) +@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL) public class RowkeyQueryAPIResponseEntity { - private boolean success; - private String exception; - private Object obj; - - public boolean isSuccess() { - return success; - } - public void setSuccess(boolean success) { - this.success = success; - } - public String getException() { - return exception; - } - public void setException(String exception) { - this.exception = exception; - } - public Object getObj() { - return obj; - } - public void setObj(Object obj) { - this.obj = obj; - } -} \ No newline at end of file + private boolean success; + private String exception; + private Object obj; + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public String getException() { + return exception; + } + + public void setException(String exception) { + this.exception = exception; + } + + public Object getObj() { + return obj; + } + + public void setObj(Object obj) { + this.obj = obj; + } +} http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/SearchCondition.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/SearchCondition.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/SearchCondition.java index 68db2c4..e9c0dca 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/SearchCondition.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/SearchCondition.java @@ -23,126 +23,138 @@ import java.util.List; import java.util.Map; /** - * search condition includes the following: - * 1. prefix - part of rowkey - * 2. startTime,endTime - timestamp, part of rowkey - * 3. hbase filter converted from query - * 4. aggregate parameters - * 4. sort options - * 5. output fields and tags - * 6. entityName - * 7. pagination: pageSize and startRowkey + * search condition includes the following: 1. prefix - part of rowkey 2. startTime,endTime - timestamp, part + * of rowkey 3. hbase filter converted from query 4. aggregate parameters 4. sort options 5. output fields and + * tags 6. entityName 7. pagination: pageSize and startRowkey */ -public class SearchCondition{ - private long startTime; - private long endTime; - private Filter filter; - private List<String> outputFields; - private boolean outputAll; - private long pageSize; - private String startRowkey; - private String entityName; - private List<String> partitionValues; - private ORExpression queryExpression; - - public boolean isOutputVerbose() { - return outputVerbose; - } - - public void setOutputVerbose(boolean outputVerbose) { - this.outputVerbose = outputVerbose; - } - - public Map<String, String> getOutputAlias() { - return outputAlias; - } - - public void setOutputAlias(Map<String, String> outputAlias) { - this.outputAlias = outputAlias; - } - - private boolean outputVerbose; - private Map<String,String> outputAlias; - - /** - * copy constructor - * @param sc - */ - public SearchCondition(SearchCondition sc){ - this.startTime = sc.startTime; - this.endTime = sc.endTime; - this.filter = sc.filter; - this.outputFields = sc.outputFields; - this.pageSize = sc.pageSize; - this.startRowkey = sc.startRowkey; - this.entityName = sc.entityName; - this.partitionValues = sc.partitionValues; - this.queryExpression = sc.queryExpression; - } - - public SearchCondition(){ - } - - public Filter getFilter() { - return filter; - } - public void setFilter(Filter filter) { - this.filter = filter; - } - public long getPageSize() { - return pageSize; - } - public void setPageSize(long pageSize) { - this.pageSize = pageSize; - } - public String getStartRowkey() { - return startRowkey; - } - public void setStartRowkey(String startRowkey) { - this.startRowkey = startRowkey; - } - public String getEntityName() { - return entityName; - } - public void setEntityName(String entityName) { - this.entityName = entityName; - } - public List<String> getOutputFields() { - return outputFields; - } - public void setOutputFields(List<String> outputFields) { - this.outputFields = outputFields; - } - public long getStartTime() { - return startTime; - } - public void setStartTime(long startTime) { - this.startTime = startTime; - } - public long getEndTime() { - return endTime; - } - public void setEndTime(long endTime) { - this.endTime = endTime; - } - public List<String> getPartitionValues() { - return partitionValues; - } - public void setPartitionValues(List<String> partitionValues) { - this.partitionValues = partitionValues; - } - public ORExpression getQueryExpression() { - return queryExpression; - } - public void setQueryExpression(ORExpression queryExpression) { - this.queryExpression = queryExpression; - } - - public boolean isOutputAll() { - return outputAll; - } - - public void setOutputAll(boolean outputAll) { - this.outputAll = outputAll; - } +public class SearchCondition { + private long startTime; + private long endTime; + private Filter filter; + private List<String> outputFields; + private boolean outputAll; + private long pageSize; + private String startRowkey; + private String entityName; + private List<String> partitionValues; + private ORExpression queryExpression; + + public boolean isOutputVerbose() { + return outputVerbose; + } + + public void setOutputVerbose(boolean outputVerbose) { + this.outputVerbose = outputVerbose; + } + + public Map<String, String> getOutputAlias() { + return outputAlias; + } + + public void setOutputAlias(Map<String, String> outputAlias) { + this.outputAlias = outputAlias; + } + + private boolean outputVerbose; + private Map<String, String> outputAlias; + + /** + * copy constructor + * + * @param sc + */ + public SearchCondition(SearchCondition sc) { + this.startTime = sc.startTime; + this.endTime = sc.endTime; + this.filter = sc.filter; + this.outputFields = sc.outputFields; + this.pageSize = sc.pageSize; + this.startRowkey = sc.startRowkey; + this.entityName = sc.entityName; + this.partitionValues = sc.partitionValues; + this.queryExpression = sc.queryExpression; + } + + public SearchCondition() { + } + + public Filter getFilter() { + return filter; + } + + public void setFilter(Filter filter) { + this.filter = filter; + } + + public long getPageSize() { + return pageSize; + } + + public void setPageSize(long pageSize) { + this.pageSize = pageSize; + } + + public String getStartRowkey() { + return startRowkey; + } + + public void setStartRowkey(String startRowkey) { + this.startRowkey = startRowkey; + } + + public String getEntityName() { + return entityName; + } + + public void setEntityName(String entityName) { + this.entityName = entityName; + } + + public List<String> getOutputFields() { + return outputFields; + } + + public void setOutputFields(List<String> outputFields) { + this.outputFields = outputFields; + } + + public long getStartTime() { + return startTime; + } + + public void setStartTime(long startTime) { + this.startTime = startTime; + } + + public long getEndTime() { + return endTime; + } + + public void setEndTime(long endTime) { + this.endTime = endTime; + } + + public List<String> getPartitionValues() { + return partitionValues; + } + + public void setPartitionValues(List<String> partitionValues) { + this.partitionValues = partitionValues; + } + + public ORExpression getQueryExpression() { + return queryExpression; + } + + public void setQueryExpression(ORExpression queryExpression) { + this.queryExpression = queryExpression; + } + + public boolean isOutputAll() { + return outputAll; + } + + public void setOutputAll(boolean outputAll) { + this.outputAll = outputAll; + } } http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/StreamReader.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/StreamReader.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/StreamReader.java index 005a2e2..36aa0b6 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/StreamReader.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/StreamReader.java @@ -20,36 +20,39 @@ import java.util.ArrayList; import java.util.List; public abstract class StreamReader { - protected List<EntityCreationListener> _listeners = new ArrayList<EntityCreationListener>(); + protected List<EntityCreationListener> listeners = new ArrayList<EntityCreationListener>(); - /** - * Listener can be only notified after it is added to listener list - * @param listener - */ - public synchronized void register(EntityCreationListener listener){ - _listeners.add(listener); - } - - /** - * Listener can not get notification once after it is removed from listener list - * @param listener - */ - public synchronized void unregister(EntityCreationListener listener){ - _listeners.remove(listener); - } - - public abstract void readAsStream() throws Exception; - - /** - * Get scanned last entity timestamp - * - * @return - */ - public abstract long getLastTimestamp(); - - /** - * Get scanned first entity timestamp - * @return - */ - public abstract long getFirstTimestamp(); -} \ No newline at end of file + /** + * Listener can be only notified after it is added to listener list + * + * @param listener + */ + public synchronized void register(EntityCreationListener listener) { + listeners.add(listener); + } + + /** + * Listener can not get notification once after it is removed from listener list + * + * @param listener + */ + public synchronized void unregister(EntityCreationListener listener) { + listeners.remove(listener); + } + + public abstract void readAsStream() throws Exception; + + /** + * Get scanned last entity timestamp + * + * @return + */ + public abstract long getLastTimestamp(); + + /** + * Get scanned first entity timestamp + * + * @return + */ + public abstract long getFirstTimestamp(); +} http://git-wip-us.apache.org/repos/asf/eagle/blob/6e919c2e/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/filter/BooleanExpressionComparator.java ---------------------------------------------------------------------- diff --git a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/filter/BooleanExpressionComparator.java b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/filter/BooleanExpressionComparator.java index 0d71e10..6ecf93c 100755 --- a/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/filter/BooleanExpressionComparator.java +++ b/eagle-core/eagle-query/eagle-entity-base/src/main/java/org/apache/eagle/log/entity/filter/BooleanExpressionComparator.java @@ -37,15 +37,11 @@ import java.io.IOException; import java.util.*; /** - * BooleanExpressionComparator - * - * Currently support double expression only. - * - * TODO: 1) thread-safe? 2) Rewrite filter expression to evaluate once - * + * BooleanExpressionComparator Currently support double expression only. TODO: 1) thread-safe? 2) Rewrite + * filter expression to evaluate once */ public class BooleanExpressionComparator implements WritableComparable<List<KeyValue>> { - private final static Logger LOG = LoggerFactory.getLogger(BooleanExpressionComparator.class); + private static final Logger LOG = LoggerFactory.getLogger(BooleanExpressionComparator.class); // Should be Writable private QualifierFilterEntity filterEntity; @@ -62,22 +58,23 @@ public class BooleanExpressionComparator implements WritableComparable<List<KeyV private Set<String> requiredFields = new HashSet<String>(); - public BooleanExpressionComparator(){} + public BooleanExpressionComparator() { + } - public BooleanExpressionComparator(QualifierFilterEntity entity,EntityDefinition ed){ - this.filterEntity = entity; + public BooleanExpressionComparator(QualifierFilterEntity entity, EntityDefinition ed) { + this.filterEntity = entity; this.ed = ed; try { this.init(); } catch (Exception ex) { // Client side expression validation to fast fail if having error - LOG.error("Got exception: "+ex.getMessage(),ex); - throw new ExpressionEvaluationException(ex.getMessage(),ex); + LOG.error("Got exception: " + ex.getMessage(), ex); + throw new ExpressionEvaluationException(ex.getMessage(), ex); } } private void init() throws ParsiiInvalidException, ParseException { - LOG.info("Filter expression: "+filterEntity.toString()); + LOG.info("Filter expression: " + filterEntity.toString()); if (filterEntity.getKey() != null) { if (filterEntity.getKeyType() == TokenType.NUMBER) { leftValue = Double.parseDouble(filterEntity.getKey()); @@ -100,11 +97,14 @@ public class BooleanExpressionComparator implements WritableComparable<List<KeyV throw new IllegalStateException("QualifierFilterEntity value is null"); } - if (this.filterEntity.getOp() == null) + if (this.filterEntity.getOp() == null) { throw new IllegalStateException("QualifierFilterEntity op is null"); + } this.func = _opExprFuncMap.get(this.filterEntity.getOp()); - if (this.func == null) - throw new IllegalStateException("No boolean evaluation function found for operation: " + this.filterEntity.getOp()); + if (this.func == null) { + throw new IllegalStateException("No boolean evaluation function found for operation: " + + this.filterEntity.getOp()); + } } /** @@ -114,24 +114,26 @@ public class BooleanExpressionComparator implements WritableComparable<List<KeyV * @return evaluation result as true (1) or false (0) * @throws Exception */ - private boolean eval(Map<String,Double> context) throws Exception { - if(filterEntity.getKeyType() != TokenType.NUMBER){ - leftValue = eval(filterEntity.getKey(),context); + private boolean eval(Map<String, Double> context) throws Exception { + if (filterEntity.getKeyType() != TokenType.NUMBER) { + leftValue = eval(filterEntity.getKey(), context); } - if(filterEntity.getValueType() != TokenType.NUMBER){ - rightValue = eval(filterEntity.getValue(),context); + if (filterEntity.getValueType() != TokenType.NUMBER) { + rightValue = eval(filterEntity.getValue(), context); } - if(Double.isInfinite(leftValue) || Double.isInfinite(rightValue)){ -// if(LOG.isDebugEnabled()) { + if (Double.isInfinite(leftValue) || Double.isInfinite(rightValue)) { + // if(LOG.isDebugEnabled()) { if (Double.isInfinite(leftValue)) { - LOG.warn("Evaluation result of key: " + this.filterEntity.getKey() + " is " + leftValue + " (Infinite), ignore"); + LOG.warn("Evaluation result of key: " + this.filterEntity.getKey() + " is " + leftValue + + " (Infinite), ignore"); } else { - LOG.warn("Evaluation result of value: "+this.filterEntity.getValue()+" is "+rightValue+" (Infinite), ignore"); + LOG.warn("Evaluation result of value: " + this.filterEntity.getValue() + " is " + rightValue + + " (Infinite), ignore"); } -// } + // } return false; } - return func.eval(leftValue,rightValue); + return func.eval(leftValue, rightValue); } /** @@ -142,38 +144,40 @@ public class BooleanExpressionComparator implements WritableComparable<List<KeyV * @return * @throws Exception */ - private double eval(String expr,Map<String,Double> context) throws Exception { + private double eval(String expr, Map<String, Double> context) throws Exception { return ExpressionParser.parse(expr).eval(context); } /** - * * @param row List[KeyValue] All key values in a row - * * @return 0 to filter out row [false], otherwise to include row into scanner [true] */ @Override public int compareTo(List<KeyValue> row) { - Map<String,Double> context = new HashMap<String, Double>(); - for(KeyValue kv:row){ + Map<String, Double> context = new HashMap<String, Double>(); + for (KeyValue kv : row) { String qualifierName = new String(kv.getQualifier()); // Because assume just handle about double value // so ignore tag whose value is String - if(!this.ed.isTag(qualifierName)){ + if (!this.ed.isTag(qualifierName)) { Qualifier qualifier = this.ed.getQualifierNameMap().get(qualifierName); String displayName = qualifier.getDisplayName(); - if(displayName == null) displayName = qualifierName; + if (displayName == null) { + displayName = qualifierName; + } try { - if(this.requiredFields.contains(displayName)) { + if (this.requiredFields.contains(displayName)) { EntitySerDeser serDeser = qualifier.getSerDeser(); - double value = EntityQualifierUtils.convertObjToDouble(serDeser.deserialize(kv.getValue())); + double value = EntityQualifierUtils + .convertObjToDouble(serDeser.deserialize(kv.getValue())); if (Double.isNaN(value)) { context.put(displayName, value); } } - }catch (Exception ex){ - LOG.warn("Failed to parse value of field "+displayName+" as double, ignore: "+ex.getMessage(),ex); + } catch (Exception ex) { + LOG.warn("Failed to parse value of field " + displayName + " as double, ignore: " + + ex.getMessage(), ex); } } } @@ -182,22 +186,22 @@ public class BooleanExpressionComparator implements WritableComparable<List<KeyV /** * @param context Map[String,Double] - * * @return context.keySet().containsAll(this.requiredFields) && eval(context) ? 1:0; */ - int compareTo(Map<String,Double> context){ + int compareTo(Map<String, Double> context) { try { - if(context.keySet().containsAll(this.requiredFields)){ - return eval(context)? 1:0; - }else{ - if(LOG.isDebugEnabled()) { - LOG.debug("Require variables: [" + StringUtils.join(this.requiredFields, ",") + "], but just given: [" + StringUtils.join(context.keySet(), ",") + "]"); + if (context.keySet().containsAll(this.requiredFields)) { + return eval(context) ? 1 : 0; + } else { + if (LOG.isDebugEnabled()) { + LOG.debug("Require variables: [" + StringUtils.join(this.requiredFields, ",") + + "], but just given: [" + StringUtils.join(context.keySet(), ",") + "]"); } return 0; } } catch (Exception e) { - LOG.error(e.getMessage(),e); - throw new ExpressionEvaluationException(e.getMessage(),e); + LOG.error(e.getMessage(), e); + throw new ExpressionEvaluationException(e.getMessage(), e); } } @@ -216,31 +220,31 @@ public class BooleanExpressionComparator implements WritableComparable<List<KeyV try { this.init(); - } catch (Exception ex){ - LOG.error("Got exception: "+ex.getMessage(),ex); - throw new IOException(ex.getMessage(),ex); + } catch (Exception ex) { + LOG.error("Got exception: " + ex.getMessage(), ex); + throw new IOException(ex.getMessage(), ex); } } - private static Map<ComparisonOperator,BooleanExprFunc> _opExprFuncMap = new HashMap<ComparisonOperator, BooleanExprFunc>(); + private static Map<ComparisonOperator, BooleanExprFunc> _opExprFuncMap = new HashMap<ComparisonOperator, BooleanExprFunc>(); static { - _opExprFuncMap.put(ComparisonOperator.EQUAL,new EqualExprFunc()); - _opExprFuncMap.put(ComparisonOperator.IS,new EqualExprFunc()); + _opExprFuncMap.put(ComparisonOperator.EQUAL, new EqualExprFunc()); + _opExprFuncMap.put(ComparisonOperator.IS, new EqualExprFunc()); - _opExprFuncMap.put(ComparisonOperator.NOT_EQUAL,new NotEqualExprFunc()); - _opExprFuncMap.put(ComparisonOperator.IS_NOT,new NotEqualExprFunc()); + _opExprFuncMap.put(ComparisonOperator.NOT_EQUAL, new NotEqualExprFunc()); + _opExprFuncMap.put(ComparisonOperator.IS_NOT, new NotEqualExprFunc()); - _opExprFuncMap.put(ComparisonOperator.LESS,new LessExprFunc()); - _opExprFuncMap.put(ComparisonOperator.LESS_OR_EQUAL,new LessOrEqualExprFunc()); - _opExprFuncMap.put(ComparisonOperator.GREATER,new GreaterExprFunc()); - _opExprFuncMap.put(ComparisonOperator.GREATER_OR_EQUAL,new GreaterOrEqualExprFunc()); + _opExprFuncMap.put(ComparisonOperator.LESS, new LessExprFunc()); + _opExprFuncMap.put(ComparisonOperator.LESS_OR_EQUAL, new LessOrEqualExprFunc()); + _opExprFuncMap.put(ComparisonOperator.GREATER, new GreaterExprFunc()); + _opExprFuncMap.put(ComparisonOperator.GREATER_OR_EQUAL, new GreaterOrEqualExprFunc()); // "Life should be much better with functional programming language" - Hao Chen Nov 18th, 2014 } private static interface BooleanExprFunc { - boolean eval(double val1,double val2); + boolean eval(double val1, double val2); } private static class EqualExprFunc implements BooleanExprFunc { @@ -249,6 +253,7 @@ public class BooleanExpressionComparator implements WritableComparable<List<KeyV return val1 == val2; } } + private static class NotEqualExprFunc implements BooleanExprFunc { @Override public boolean eval(double val1, double val2) { @@ -262,18 +267,21 @@ public class BooleanExpressionComparator implements WritableComparable<List<KeyV return val1 < val2; } } + private static class LessOrEqualExprFunc implements BooleanExprFunc { @Override public boolean eval(double val1, double val2) { return val1 <= val2; } } + private static class GreaterExprFunc implements BooleanExprFunc { @Override public boolean eval(double val1, double val2) { return val1 > val2; } } + private static class GreaterOrEqualExprFunc implements BooleanExprFunc { @Override public boolean eval(double val1, double val2) { @@ -281,13 +289,15 @@ public class BooleanExpressionComparator implements WritableComparable<List<KeyV } } - public static class ExpressionEvaluationException extends RuntimeException{ + public static class ExpressionEvaluationException extends RuntimeException { public ExpressionEvaluationException(String message, Throwable cause) { super(message, cause); } + public ExpressionEvaluationException(String message) { super(message); } + public ExpressionEvaluationException(Throwable cause) { super(cause); } @@ -295,6 +305,6 @@ public class BooleanExpressionComparator implements WritableComparable<List<KeyV @Override public String toString() { - return this.getClass().getSimpleName()+" ("+this.filterEntity.toString()+")"; + return this.getClass().getSimpleName() + " (" + this.filterEntity.toString() + ")"; } -} \ No newline at end of file +}
