jackjlli commented on code in PR #8584: URL: https://github.com/apache/pinot/pull/8584#discussion_r858106591
########## pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/LLCRealtimeClusterIntegrationTest.java: ########## @@ -103,6 +112,84 @@ protected void overrideServerConf(PinotConfiguration configuration) { } } + @Override + protected void createSegmentsAndUpload(List<File> avroFiles, Schema schema, TableConfig tableConfig) + throws Exception { + if (!_tarDir.exists()) { + _tarDir.mkdir(); + } + if (!_segmentDir.exists()) { + _segmentDir.mkdir(); + } + + // create segments out of the avro files (segments will be placed in _tarDir) + List<File> copyOfAvroFiles = new ArrayList<>(avroFiles); + ClusterIntegrationTestUtils.buildSegmentsFromAvro(copyOfAvroFiles, tableConfig, schema, 0, _segmentDir, _tarDir); + + // upload segments to controller + uploadSegmentsToController(getTableName(), _tarDir, false, false); + + // upload the first segment again to verify refresh + uploadSegmentsToController(getTableName(), _tarDir, true, false); + + // upload the first segment again to verify refresh with different segment crc + uploadSegmentsToController(getTableName(), _tarDir, true, true); + + // add avro files to the original list so H2 will have the uploaded data as well + avroFiles.addAll(copyOfAvroFiles); + } + + private void uploadSegmentsToController(String tableName, File tarDir, boolean onlyFirstSegment, boolean changeCrc) + throws Exception { + File[] segmentTarFiles = tarDir.listFiles(); + assertNotNull(segmentTarFiles); + int numSegments = segmentTarFiles.length; + assertTrue(numSegments > 0); + if (onlyFirstSegment) { + numSegments = 1; + } + URI uploadSegmentHttpURI = FileUploadDownloadClient.getUploadSegmentHttpURI(LOCAL_HOST, _controllerPort); + try (FileUploadDownloadClient fileUploadDownloadClient = new FileUploadDownloadClient()) { + if (numSegments == 1) { + File segmentTarFile = segmentTarFiles[0]; + if (changeCrc) { + changeCrcInSegmentZKMetadata(tableName, segmentTarFile.toString()); + } + assertEquals(fileUploadDownloadClient + .uploadSegment(uploadSegmentHttpURI, segmentTarFile.getName(), segmentTarFile, tableName, + TableType.REALTIME).getStatusCode(), HttpStatus.SC_OK); + } else { + // Upload segments in parallel + ExecutorService executorService = Executors.newFixedThreadPool(numSegments); + List<Future<Integer>> futures = new ArrayList<>(numSegments); + for (File segmentTarFile : segmentTarFiles) { + futures.add(executorService.submit(() -> fileUploadDownloadClient + .uploadSegment(uploadSegmentHttpURI, segmentTarFile.getName(), segmentTarFile, tableName, + TableType.REALTIME).getStatusCode())); + } + executorService.shutdown(); + for (Future<Integer> future : futures) { + assertEquals((int) future.get(), HttpStatus.SC_OK); + } + } + } + } + + private void changeCrcInSegmentZKMetadata(String tableName, String segmentFilePath) { + int startIdx = segmentFilePath.indexOf("mytable_"); + int endIdx = segmentFilePath.indexOf(".tar.gz"); + String segmentName = segmentFilePath.substring(startIdx, endIdx); + String tableNameWithType = TableNameBuilder.forType(TableType.REALTIME).tableNameWithType(tableName); + SegmentZKMetadata segmentZKMetadata = _helixResourceManager.getSegmentZKMetadata(tableNameWithType, segmentName); + segmentZKMetadata.setCrc(111L); + _helixResourceManager.updateZkMetadata(tableNameWithType, segmentZKMetadata); + } + + @Override + protected long getCountStarResult() { + return super.getCountStarResult() * 2; Review Comment: Probably need some comments on why the count star result needs to be double? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org