public void setEntityDefinition(EntityDefinition ed) { this.entityClass = ed.getEntityClass(); this.table = ed.getTable(); this.columnFamily = ed.getColumnFamily(); this.prefix = ed.getPrefix(); this.service = ed.getService(); this.partitions = ed.getPartitions(); this.displayNameMap = ed.getDisplayNameMap(); this.qualifierGetterMap = ed.getQualifierGetterMap(); this.qualifierNameMap = ed.getQualifierNameMap(); this.isTimeSeries = ed.isTimeSeries(); this.metricDefinition = ed.metricDefinition; this.indexes = ed.getIndexes(); }
public static EntityDefinition fromPBEntityDefinition(AggregateProtos.EntityDefinition entityDefinition) throws IOException { ByteArrayDataInput byteArrayDataInput = ByteStreams.newDataInput(entityDefinition.getByteArray().toByteArray()); ; EntityDefinition result = new EntityDefinition(); result.readFields(byteArrayDataInput); return result; }
private JsonNode entityDefationitionAsJson(EntityDefinition def) { ObjectNode node = JsonNodeFactory.instance.objectNode(); node.put("service",def.getService()); node.put("entityClass",def.getEntityClass().getName()); node.put("table",def.getTable()); node.put("columnFamily",def.getColumnFamily()); node.put("prefix",def.getPrefix()); if(def.getPartitions()!=null){ node.put("partitions",arrayNode(def.getPartitions())); node.put("isTimeSeries",def.isTimeSeries()); MetricDefinition mdf = def.getMetricDefinition(); if(mdf!=null){ node.put("interval", mdf.getInterval()); IndexDefinition[] indexDef = def.getIndexes(); if(indexDef!=null){ ArrayNode indexDefArray = JsonNodeFactory.instance.arrayNode();
public GenericDeleter(EntityDefinition ed) { this(ed.getTable(), ed.getColumnFamily()); }
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); }
final EntityDefinition ed = new EntityDefinition(); ed.setEntityClass(cls); ed.setTable(tableName); ed.setColumnFamily(family.value()); ed.setPrefix(prefix.value()); ed.setTimeSeries(ts.value()); ed.setService(cls.getSimpleName()); } else { ed.setService(service.value()); ed.setMetricDefinition(md); checkFieldTypeForMetric(ed.getMetricDefinition(), f.getName(), fldCls, dynamicFieldTypes); Qualifier q = new Qualifier(); q.setDisplayName(f.getName()); ed.getQualifierNameMap().put(q.getQualifierName(), q); ed.getDisplayNameMap().put(q.getDisplayName(), q); try { Method method = cls.getMethod(getterName); ed.getQualifierGetterMap().put(f.getName(), method); } catch (Exception e) {
private static void checkPrefix(EntityDefinition entityDef) { final Integer entityPrefixHashcode = entityDef.getPrefix().hashCode(); if (entityPrefixMap.containsKey(entityDef.getTable())) { final Map<Integer, EntityDefinition> entityHashMap = entityPrefixMap.get(entityDef.getTable()); if (entityHashMap.containsKey(entityPrefixHashcode) && (!entityDef.equals(entityHashMap.get(entityPrefixHashcode)))) { throw new IllegalArgumentException("Failed to register entity " + entityDef.getClass().getName() + ", because of the prefix hash code conflict! The entity prefix " + entityDef.getPrefix() + " has already been registered by entity service " + entityHashMap.get(entityPrefixHashcode).getService()); } final IndexDefinition[] indexes = entityDef.getIndexes(); if (indexes != null) { for (IndexDefinition index : indexes) { final Integer indexPrefixHashcode = index.getIndexPrefix().hashCode(); if (entityHashMap.containsKey(indexPrefixHashcode)) { throw new IllegalArgumentException("Failed to register entity " + entityDef.getClass().getName() + ", because of the prefix hash code conflict! The index prefix " + index.getIndexPrefix() + " has already been registered by entity " + entityHashMap.get(indexPrefixHashcode).getService()); } final Map<Integer, IndexDefinition> indexHashMap = indexPrefixMap.get(entityDef.getTable()); if (indexHashMap != null && indexHashMap.containsKey(indexPrefixHashcode) && (!index.equals(indexHashMap.get(indexPrefixHashcode)))) { throw new IllegalArgumentException("Failed to register entity " + entityDef.getClass().getName() + ", because of the prefix hash code conflict! The index prefix " + index.getIndexPrefix() + " has already been registered by entity " + indexHashMap.get(indexPrefixHashcode).getEntityDefinition().getService()); } } } } }
/** * it is allowed that user can register their own entity definition * * @param entityDef entity definition * @throws IllegalArgumentException */ public static void registerEntity(EntityDefinition entityDef) { registerEntity(entityDef.getService(), entityDef); }
@BeforeClass public static void initialize() throws IllegalAccessException, InstantiationException, IOException, IllegalDataStorageTypeException { entityDefinition = EntityDefinitionManager.getEntityDefinitionByEntityClass(TestTimeSeriesAPIEntity.class); entityDefinition.setTags(new String[] {"cluster", "datacenter", "random"});; hbase.createTable(entityDefinition.getTable(), entityDefinition.getColumnFamily()); storage = DataStorageManager.getDataStorageByEagleConfig(); storage.init(); }
@Before public void setUp() throws IllegalAccessException, InstantiationException, IOException { EntityDefinition entityDefinition = EntityDefinitionManager .getEntityDefinitionByEntityClass(TestLogAPIEntity.class); hbase.createTable(entityDefinition.getTable(), entityDefinition.getColumnFamily()); EntityDefinitionManager.registerEntity(TestLogAPIEntity.class); try { ed = EntityDefinitionManager.getEntityDefinitionByEntityClass(TestLogAPIEntity.class); ed.setTimeSeries(true); } catch (InstantiationException | IllegalAccessException e) { Assert.fail(e.getMessage()); } }
if(entityDef.isTimeSeries()){ log.setTimestamp(entity.getTimestamp()); }else{ log.setPrefix(entity.getPrefix()); }else{ log.setPrefix(entityDef.getPrefix()); log.setPartitions(entityDef.getPartitions()); EntitySerDeserializer des = new EntitySerDeserializer(); log.setQualifierValues(des.writeValue(entity, entityDef)); final IndexDefinition[] indexDefs = entityDef.getIndexes(); if (indexDefs != null) { final List<byte[]> indexRowkeys = new ArrayList<byte[]>();
public IndexDefinition(EntityDefinition entityDef, Index index) { this.entityDef = entityDef; this.index = index; this.indexPrefix = entityDef.getPrefix() + "_" + index.name(); final String[] indexColumns = index.columns(); this.columns = new IndexColumn[indexColumns.length]; for (int i = 0; i < indexColumns.length; ++i) { final String name = indexColumns[i]; final boolean isTag = entityDef.isTag(name); final Qualifier qualifier = isTag ? null : entityDef.getDisplayNameMap().get(name); columns[i] = new IndexColumn(name, isTag, qualifier); } LOG.info("Created index " + index.name() + " for " + entityDef.getEntityClass().getSimpleName()); }
/** * TODO: Optimize with hashmap */ public String getJavaEntityFieldName(String jdbcColumnName){ for(String javaEntityFieldName:this.internal.getDisplayNameMap().keySet()){ if(javaEntityFieldName.equalsIgnoreCase(jdbcColumnName)){ return javaEntityFieldName; } } throw new IllegalArgumentException("Can't map jdbc column '"+jdbcColumnName+"' with entity: "+this.getInternal().getEntityClass()); }
public byte[] generateIndexRowkey(TaggedLogAPIEntity entity) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { if (entity.getClass() != entityDef.getEntityClass()) { throw new IllegalArgumentException("Expected entity class: " + entityDef.getEntityClass().getName() + ", but got class " + entity.getClass().getName()); } final byte[][] indexValues = generateIndexValues(entity); final int[] partitionHashCodes = generatePartitionHashCodes(entity); SortedMap<Integer, Integer> tagMap = null; if (!index.unique()) { // non cluster index tagMap = RowkeyBuilder.generateSortedTagMap(entityDef.getPartitions(), entity.getTags()); } return generateUniqueIndexRowkey(indexValues, partitionHashCodes, tagMap); }
public boolean isGenericMetric(){ return this.internal.getEntityClass().equals(GenericMetricEntity.class); }
/** * As to GenericMetricEntity, return "${tableName}", else return "${tableName}_${prefix}" * * @return jdbc table name in lowercase */ public String getJdbcTableName(){ if(isGenericMetric()){ return this.internal.getTable().toLowerCase(); }else { return String.format("%s_%s", this.internal.getTable(),this.internal.getPrefix()).toLowerCase(); } }
@Override public void open() throws IOException { if (isOpen) { return; // silently return } try { tbl = EagleConfigFactory.load().getHTable(indexDef.getEntityDefinition().getTable()); } catch (RuntimeException ex) { throw new IOException(ex); } currentScanIndex = 0; openNewScan(); fillResults(); }
private void checkIsTimeSeries(String serviceName) throws Exception { EntityDefinition ed = EntityDefinitionManager.getEntityByServiceName(serviceName); if (!ed.isTimeSeries()) { throw new IllegalArgumentException("Multi-threading stream reader must be applied to time series table"); } }
final byte[] row = r.getRow(); final int offset = (ed.getPartitions() == null) ? (4) : (4 + ed.getPartitions().length * 4); long timestamp = ByteUtil.bytesToLong(row, offset); final byte[] family = ed.getColumnFamily().getBytes(); final Map<String, byte[]> allQualifierValues = new HashMap<String, byte[]>();
ed = EntityDefinitionManager.getEntityDefinitionByEntityClass(TestLogAPIEntity.class); ed.setTimeSeries(true); for (int i = 0; i < count; i++) { TestLogAPIEntity e = new TestLogAPIEntity(); list.add(e); GenericEntityWriter writer = new GenericEntityWriter(ed.getService()); LOG.info("Writing {} TestLogAPIEntity entities", list.size()); List<String> result = writer.write(list);