Skip to content

Conversation

@ghalliday
Copy link
Member

@ghalliday ghalliday commented Dec 23, 2025

Type of change:

  • This change is a bug fix (non-breaking change which fixes an issue).
  • This change is a new feature (non-breaking change which adds functionality).
  • This change improves the code (refactor or other change that does not change the functionality)
  • This change fixes warnings (the fix does not alter the functionality or the generated code)
  • This change is a breaking change (fix or feature that will cause existing behavior to change).
  • This change alters the query API (existing queries will have to be recompiled)

Checklist:

  • My code follows the code style of this project.
    • My code does not create any new warnings from compiler, build system, or lint.
  • The commit message is properly formatted and free of typos.
    • The commit message title makes sense in a changelog, by itself.
    • The commit is signed.
  • My change requires a change to the documentation.
    • I have updated the documentation accordingly, or...
    • I have created a JIRA ticket to update the documentation.
    • Any new interfaces or exported functions are appropriately commented.
  • I have read the CONTRIBUTORS document.
  • The change has been fully tested:
    • I have added tests to cover my changes.
    • All new and existing tests passed.
    • I have checked that this change does not introduce memory leaks.
    • I have used Valgrind or similar tools to check for potential issues.
  • I have given due consideration to all of the following potential concerns:
    • Scalability
    • Performance
    • Security
    • Thread-safety
    • Cloud-compatibility
    • Premature optimization
    • Existing deployed queries will not be broken
    • This change fixes the problem, not just the symptom
    • The target branch of this pull request is appropriate for such a change.
  • There are no similar instances of the same problem that should be addressed
    • I have addressed them here
    • I have raised JIRA issues to address them separately
  • This is a user interface / front-end modification
    • I have tested my changes in multiple modern browsers
    • The component(s) render as expected

Smoketest:

  • Send notifications about my Pull Request position in Smoketest queue.
  • Test my draft Pull Request.

Testing:

@ghalliday ghalliday requested review from Copilot and jpmcmu and removed request for Copilot December 23, 2025 09:33
@github-actions
Copy link

Jira Issue: https://hpccsystems.atlassian.net//browse/HPCC-35514

Jirabot Action Result:
Assigning user: gavin.halliday@lexisnexisrisk.com
Workflow Transition To: Merge Pending
Updated PR

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request refactors the index compression code by merging the BlockCompressedIndexCompressor class logic directly into the HybridIndexCompressor class, eliminating code duplication and simplifying the compression architecture.

Key changes:

  • Consolidated two separate compressor implementations into a single, more maintainable class
  • Moved HybridIndexCompressor from keybuild.cpp to jhblockcompressed.cpp/hpp for better code organization
  • Replaced indirect delegation through BlockCompressedIndexCompressor with direct use of CBlockCompressedBuildContext for leaf nodes

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

File Description
system/jhtree/keybuild.cpp Removed the old HybridIndexCompressor class implementation (65 lines) that was duplicating functionality
system/jhtree/jhblockcompressed.hpp Removed BlockCompressedIndexCompressor class declaration and updated HybridIndexCompressor declaration with new implementation
system/jhtree/jhblockcompressed.cpp Implemented the merged HybridIndexCompressor that directly manages leaf compression context instead of delegating to a separate compressor class

leafContext.compressionMethod = COMPRESS_METHOD_ZSTDS6;

auto processOption = [this] (const char * option, const char * value)
auto processOption = [this, &isTLK, &helper](const char * option, const char * value)
Copy link

Copilot AI Jan 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The lambda captures 'isTLK' and 'helper' by reference but does not use them. These variables are only used outside the lambda on lines 445-446 and 448. The lambda only modifies member variables of 'this', so the capture list should be simplified to '[this]' instead of '[this, &isTLK, &helper]'.

Suggested change
auto processOption = [this, &isTLK, &helper](const char * option, const char * value)
auto processOption = [this](const char * option, const char * value)

Copilot uses AI. Check for mistakes.
Copy link
Contributor

@jpmcmu jpmcmu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ghalliday A question, but otherwise looks good to me.


if (options)
const char * colon = strchr(compression, ':');
if (colon)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will the compression always have a colon?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It will always have a colon if options are specified. Previous conditional code was because the block compressor was stripping the colon prefix.

Signed-off-by: Gavin Halliday <gavin.halliday@lexisnexis.com>
@ghalliday ghalliday merged commit ff6eae3 into hpcc-systems:candidate-10.0.x Jan 5, 2026
21 checks passed
@github-actions
Copy link

github-actions bot commented Jan 5, 2026

Jirabot Action Result:
Added fix version: 10.0.22
Workflow Transition: 'Resolve issue'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants