use of com.linkedin.pinot.common.metadata.segment.RealtimeSegmentZKMetadata in project pinot by linkedin.
the class RealtimeTableDataManagerTest method getRealtimeSegmentZKMetadata.
private static RealtimeSegmentZKMetadata getRealtimeSegmentZKMetadata() {
RealtimeSegmentZKMetadata realtimeSegmentMetadata = new RealtimeSegmentZKMetadata();
realtimeSegmentMetadata.setSegmentName("testTable_R_1000_groupId0_part0");
realtimeSegmentMetadata.setTableName("testTable");
realtimeSegmentMetadata.setSegmentType(SegmentType.REALTIME);
realtimeSegmentMetadata.setIndexVersion("v1");
realtimeSegmentMetadata.setStartTime(1000);
realtimeSegmentMetadata.setEndTime(-1);
realtimeSegmentMetadata.setTimeUnit(TimeUnit.HOURS);
realtimeSegmentMetadata.setStatus(Status.IN_PROGRESS);
realtimeSegmentMetadata.setTotalRawDocs(-1);
realtimeSegmentMetadata.setCrc(-1);
realtimeSegmentMetadata.setCreationTime(1000);
return realtimeSegmentMetadata;
}
use of com.linkedin.pinot.common.metadata.segment.RealtimeSegmentZKMetadata in project pinot by linkedin.
the class SegmentZKMetadataTest method getTestInProgressRealtimeSegmentMetadata.
private RealtimeSegmentZKMetadata getTestInProgressRealtimeSegmentMetadata() {
RealtimeSegmentZKMetadata realtimeSegmentMetadata = new RealtimeSegmentZKMetadata();
realtimeSegmentMetadata.setSegmentName("testTable_R_1000_groupId0_part0");
realtimeSegmentMetadata.setTableName("testTable");
realtimeSegmentMetadata.setSegmentType(SegmentType.REALTIME);
realtimeSegmentMetadata.setIndexVersion("v1");
realtimeSegmentMetadata.setStartTime(1000);
realtimeSegmentMetadata.setEndTime(-1);
realtimeSegmentMetadata.setTimeUnit(TimeUnit.HOURS);
realtimeSegmentMetadata.setStatus(Status.IN_PROGRESS);
realtimeSegmentMetadata.setTotalRawDocs(-1);
realtimeSegmentMetadata.setCrc(-1);
realtimeSegmentMetadata.setCreationTime(1000);
realtimeSegmentMetadata.setSizeThresholdToFlushSegment(1234);
return realtimeSegmentMetadata;
}
use of com.linkedin.pinot.common.metadata.segment.RealtimeSegmentZKMetadata in project pinot by linkedin.
the class SegmentZKMetadataTest method realtimeSegmentZKMetadataConvertionTest.
@Test
public void realtimeSegmentZKMetadataConvertionTest() {
ZNRecord inProgressZnRecord = getTestInProgressRealtimeSegmentZNRecord();
ZNRecord doneZnRecord = getTestDoneRealtimeSegmentZNRecord();
RealtimeSegmentZKMetadata inProgressSegmentMetadata = getTestInProgressRealtimeSegmentMetadata();
RealtimeSegmentZKMetadata doneSegmentMetadata = getTestDoneRealtimeSegmentMetadata();
Assert.assertTrue(MetadataUtils.comparisonZNRecords(inProgressZnRecord, inProgressSegmentMetadata.toZNRecord()));
Assert.assertTrue(MetadataUtils.comparisonZNRecords(doneZnRecord, doneSegmentMetadata.toZNRecord()));
Assert.assertTrue(inProgressSegmentMetadata.equals(new RealtimeSegmentZKMetadata(inProgressZnRecord)));
Assert.assertTrue(doneSegmentMetadata.equals(new RealtimeSegmentZKMetadata(doneZnRecord)));
Assert.assertTrue(MetadataUtils.comparisonZNRecords(inProgressZnRecord, new RealtimeSegmentZKMetadata(inProgressZnRecord).toZNRecord()));
Assert.assertTrue(MetadataUtils.comparisonZNRecords(doneZnRecord, new RealtimeSegmentZKMetadata(doneZnRecord).toZNRecord()));
Assert.assertTrue(inProgressSegmentMetadata.equals(new RealtimeSegmentZKMetadata(inProgressSegmentMetadata.toZNRecord())));
Assert.assertTrue(doneSegmentMetadata.equals(new RealtimeSegmentZKMetadata(doneSegmentMetadata.toZNRecord())));
}
use of com.linkedin.pinot.common.metadata.segment.RealtimeSegmentZKMetadata in project pinot by linkedin.
the class SegmentZKMetadataTest method getTestDoneRealtimeSegmentMetadata.
private RealtimeSegmentZKMetadata getTestDoneRealtimeSegmentMetadata() {
RealtimeSegmentZKMetadata realtimeSegmentMetadata = new RealtimeSegmentZKMetadata();
realtimeSegmentMetadata.setSegmentName("testTable_R_1000_2000_groupId0_part0");
realtimeSegmentMetadata.setTableName("testTable");
realtimeSegmentMetadata.setSegmentType(SegmentType.REALTIME);
realtimeSegmentMetadata.setIndexVersion("v1");
realtimeSegmentMetadata.setStartTime(1000);
realtimeSegmentMetadata.setEndTime(2000);
realtimeSegmentMetadata.setTimeUnit(TimeUnit.HOURS);
realtimeSegmentMetadata.setStatus(Status.DONE);
realtimeSegmentMetadata.setTotalRawDocs(10000);
realtimeSegmentMetadata.setCrc(1234);
realtimeSegmentMetadata.setCreationTime(3000);
realtimeSegmentMetadata.setSizeThresholdToFlushSegment(1234);
return realtimeSegmentMetadata;
}
use of com.linkedin.pinot.common.metadata.segment.RealtimeSegmentZKMetadata in project pinot by linkedin.
the class RealtimeTableDataManager method addSegment.
/*
* This call comes in one of two ways:
* For HL Segments:
* - We are being directed by helix to own up all the segments that we committed and are still in retention. In this case
* we treat it exactly like how OfflineTableDataManager would -- wrap it into an OfflineSegmentDataManager, and put it
* in the map.
* - We are being asked to own up a new realtime segment. In this case, we wrap the segment with a RealTimeSegmentDataManager
* (that kicks off Kafka consumption). When the segment is committed we get notified via the notifySegmentCommitted call, at
* which time we replace the segment with the OfflineSegmentDataManager
* For LL Segments:
* - We are being asked to start consuming from a kafka partition.
* - We did not know about the segment and are being asked to download and own the segment (re-balancing, or
* replacing a realtime server with a fresh one, maybe). We need to look at segment metadata and decide whether
* to start consuming or download the segment.
*/
@Override
public void addSegment(ZkHelixPropertyStore<ZNRecord> propertyStore, AbstractTableConfig tableConfig, InstanceZKMetadata instanceZKMetadata, SegmentZKMetadata inputSegmentZKMetadata) throws Exception {
// TODO FIXME
// Hack. We get the _helixPropertyStore here and save it, knowing that we will get this addSegment call
// before the notifyCommitted call (that uses _helixPropertyStore)
this._helixPropertyStore = propertyStore;
final String segmentId = inputSegmentZKMetadata.getSegmentName();
final String tableName = inputSegmentZKMetadata.getTableName();
if (!(inputSegmentZKMetadata instanceof RealtimeSegmentZKMetadata)) {
LOGGER.warn("Got called with an unexpected instance object:{},table {}, segment {}", inputSegmentZKMetadata.getClass().getSimpleName(), tableName, segmentId);
return;
}
RealtimeSegmentZKMetadata segmentZKMetadata = (RealtimeSegmentZKMetadata) inputSegmentZKMetadata;
LOGGER.info("Attempting to add realtime segment {} for table {}", segmentId, tableName);
if (new File(_indexDir, segmentId).exists() && (segmentZKMetadata).getStatus() == Status.DONE) {
// segment already exists on file, and we have committed the realtime segment in ZK. Treat it like an offline segment
if (_segmentsMap.containsKey(segmentId)) {
LOGGER.warn("Got reload for segment already on disk {} table {}, have {}", segmentId, tableName, _segmentsMap.get(segmentId).getClass().getSimpleName());
return;
}
IndexSegment segment = ColumnarSegmentLoader.load(new File(_indexDir, segmentId), _readMode, _indexLoadingConfigMetadata);
addSegment(segment);
markSegmentAsLoaded(segmentId);
} else {
// on-disk segment next time
if (_segmentsMap.containsKey(segmentId)) {
LOGGER.warn("Got reload for segment not on disk {} table {}, have {}", segmentId, tableName, _segmentsMap.get(segmentId).getClass().getSimpleName());
return;
}
PinotHelixPropertyStoreZnRecordProvider propertyStoreHelper = PinotHelixPropertyStoreZnRecordProvider.forSchema(propertyStore);
ZNRecord record = propertyStoreHelper.get(tableConfig.getValidationConfig().getSchemaName());
LOGGER.info("Found schema {} ", tableConfig.getValidationConfig().getSchemaName());
Schema schema = SchemaUtils.fromZNRecord(record);
if (!isValid(schema, tableConfig.getIndexingConfig())) {
LOGGER.error("Not adding segment {}", segmentId);
throw new RuntimeException("Mismatching schema/table config for " + _tableName);
}
SegmentDataManager manager;
if (SegmentName.isHighLevelConsumerSegmentName(segmentId)) {
manager = new HLRealtimeSegmentDataManager(segmentZKMetadata, tableConfig, instanceZKMetadata, this, _indexDir.getAbsolutePath(), _readMode, SchemaUtils.fromZNRecord(record), _serverMetrics);
} else {
LLCRealtimeSegmentZKMetadata llcSegmentMetadata = (LLCRealtimeSegmentZKMetadata) segmentZKMetadata;
if (segmentZKMetadata.getStatus().equals(Status.DONE)) {
// TODO Remove code duplication here and in LLRealtimeSegmentDataManager
downloadAndReplaceSegment(segmentId, llcSegmentMetadata);
return;
}
manager = new LLRealtimeSegmentDataManager(segmentZKMetadata, tableConfig, instanceZKMetadata, this, _indexDir.getAbsolutePath(), SchemaUtils.fromZNRecord(record), _serverMetrics);
}
LOGGER.info("Initialize RealtimeSegmentDataManager - " + segmentId);
try {
_rwLock.writeLock().lock();
_segmentsMap.put(segmentId, manager);
} finally {
_rwLock.writeLock().unlock();
}
_loadingSegments.add(segmentId);
}
}
Aggregations