Skip to content

Conversation

mingri31164
Copy link

@mingri31164 mingri31164 commented Sep 30, 2025

Problem:

  • Protocol rigidity: Field renaming causes continuous invalid refreshes due to MD5 mismatch
  • Poor extensibility: Adding extended parameters triggers unnecessary client refreshes

Solution:

  1. Multi-version protocol support (v1=full MD5, v2+=core MD5)
  2. Segment-level comparison algorithm: separate core and extended parameters
  3. Field adapter pattern for backward compatibility (coreSize/corePoolSize)
  4. Version-aware MD5 comparison on server side

Key Changes:

  • Add IncrementalContentUtil for core content extraction
  • Add IncrementalMd5Util for versioned MD5 generation
  • Add field adapters in ThreadPoolParameterInfo
  • Update ConfigCacheService for version-aware comparison
  • Client sends protocol version via X-Hippo4j-Protocol-Version header

Test Coverage:

  • ProtocolRigidityTest: 6 scenarios for field renaming compatibility
  • ExtensibilityTest: 6 scenarios for extended parameter addition
  • ContentUtilTest: field adapter verification

Copy link

@Copilot 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 PR implements an incremental update protocol with multi-version compatibility to address protocol rigidity and extensibility issues. The solution separates core thread pool parameters from extended monitoring/alarm parameters, preventing unnecessary client refreshes when non-critical fields change or are renamed.

Key Changes:

  • Introduces protocol version 2 with core-only MD5 comparison (v1 remains full MD5 for backward compatibility)
  • Implements field adapters in ThreadPoolParameterInfo to handle coreSize/corePoolSize naming variations
  • Adds utilities for generating versioned MD5 hashes and extracting core vs. extended parameters

Reviewed Changes

Copilot reviewed 10 out of 10 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
Md5ConfigUtil.java Extracts client protocol version from request header and passes to comparison logic
ConfigCacheService.java Adds version-aware MD5 comparison using incremental MD5 for v2+ clients
ClientWorker.java Updates client to use protocol version 2 and incremental content generation
CacheData.java Initializes cache with incremental content based on protocol version
IncrementalMd5Util.java Provides versioned MD5 generation and change type detection utilities
IncrementalContentUtil.java Implements core/extended parameter separation and field adapter integration
ContentUtil.java Integrates field adapters for backward-compatible content generation
ProtocolRigidityTest.java Tests field renaming compatibility across protocol versions
ExtensibilityTest.java Verifies extended parameter additions don't trigger unnecessary refreshes
ContentUtilTest.java Validates field adapter behavior with old and new field names

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

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.

1 participant