public RollUpStructure build() { if (specs.size() < 1) { throw new IllegalStateException("Attempted to build a structure with < 1 layer"); } if (specs.size() == 1) { return new RollUpStructure(Arrays.asList(makeSingleLayerFromSpec(specs.get(0)))); } sort(specs); massageFinestSpecToAlignOnParentGranularity(); massageSpecsWithAutoEndTimes(); massageSpecsToAlignOnParentGranularities(); massageLargestSpecToContainChildGranularity(); List<GranularityLayer> layers = new ArrayList<GranularityLayer>(); for (int i=0; i<specs.size(); i++) { GranularitySpec spec = specs.get(i); Granularity gran = spec.gran; Granularity parentGran = spec.gran; if (i != specs.size() - 1) { parentGran = specs.get(i+1).gran; } layers.add(new GranularityLayer(gran, parentGran, spec.includeStart.divideBy(gran), spec.excludeStart.divideBy(gran))); } return new RollUpStructure(layers); }
public static StorageConfig getDefaultConfig(Granularity maxStoredGran) { RollUpStructureBuilder builder = new RollUpStructureBuilder(); builder.add(MetricConstants.getCollectionGranularity(), Time.inMinutes(-30), Time.inMinutes(10)); // last 15 min builder.discardGranularitiesGreaterThan(maxStoredGran); builder.add(Granularity.inSeconds(30), Time.inMinutes(-60)); // last 30 min builder.add(Granularity.inMinutes(1), Time.inHours(-2)); // last hour builder.add(Granularity.inMinutes(4), Time.inHours(-8)); // last 4 hours builder.add(Granularity.inMinutes(8), Time.inHours(-20)); // last 8 hours builder.add(Granularity.inMinutes(16), Time.inHours(-40)); // 12 hour builder.add(Granularity.inMinutes(32), Time.inDays(-2)); // last day builder.add(Granularity.inMinutes(64), Time.inDays(-6)); // last 3 days builder.add(Granularity.inMinutes(128), Time.inDays(-8)); // last 7 days builder.add(Granularity.inMinutes(256), Time.inDays(-8)); builder.add(Granularity.inMinutes(512), Time.inDays(-8)); builder.add(Granularity.inMinutes(1024), Time.inDays(-16)); // Extend out so we have sufficient entries per page builder.add(Granularity.inMinutes(2048), Time.inDays(-30)); // Extend out so we have sufficient entries per page RollUpStructure struct = builder.build(); int numPagesPerLayer = PAGES_PER_LAYER; PageDefinitions pageDefs = new PageDefinitions(); for (GranularityLayer layer : struct.getLayers()) { pageDefs.addDefinition(makeDefinitionForLayer(layer, numPagesPerLayer)); } return new StorageConfig(struct, pageDefs, numPagesPerLayer); }