30210 add record support - #813
Draft
sakerl wants to merge 144 commits into
Draft
Conversation
- Created AGENTS.md with comprehensive guidelines for AI agents - Documented YASF and ROFL mechanisms - Documented yoko.verbose logging system - References source code as source of truth - Created CONTRIBUTING.md for Yoko (based on Open Liberty structure) - Open Liberty CLA requirements - Java 8 compatibility for production code - Checkstyle and testing requirements - Note that reviewers may modify PRs - Added GENAI_GUIDELINES.md linking to Open Liberty GenAI guidelines Co-authored-by-AI: IBM Bob 1.0.1
Removed requirement for AI-generated content commit messages.
…ibutions docs: add AI agent guidelines and contribution docs
Refactor the test framework to remove the unused Summoner abstraction and consolidate steward and PartRunner lookup around direct helper methods. Framework changes: - remove Summoner and SummonerImpl as unnecessary indirection - replace PartRunnerSteward with PartRunners utility methods - simplify ConfigurePartRunner plus logging, ORB, and server extension wiring - tighten ORB and server steward lifecycle and state handling - adjust ORBInitInfo_impl interactions required by the updated test flow Test fixes: - update testify-iiop and yoko-verify tests to match the new runner/steward model - fix timeout-sensitive and interceptor-related failures caused by context scoping - align PartRunner usage across codeset, value, POA, RMI, OCI, and interceptor tests Diffstat: - 28 files changed - 605 insertions(+) - 626 deletions(-) Co-authored-by-AI: IBM Bob 1.0.1
- Use @RemoteImpl with lambda implementation for Thrower interface - Move interceptors to static nested classes with @UseWithOrb annotations - Simplify exception handling (create exceptions inline) - Remove manual ORB/POA setup and IOR handling - Enable automatic stub injection via test method parameters - Remove obsolete artifact files (now defined inline in test) - All tests passing (2 tests, 2 successes) 11 files changed, 51 insertions(+), 676 deletions(-) Co-authored-by-AI: IBM Bob 1.0.1
…ption-handling-test-to-testify test: port RMIExceptionHandlingTest to testify
test: simplify steward lookup and fix runner-scoped test failures
Add a new Gradle task that creates symbolic links to jar files in the libs directory for easier access to built artifacts. The task: - Creates symlinks for core Yoko modules (yoko-core, yoko-spec-corba, yoko-rmi-impl, yoko-rmi-spec, yoko-util, yoko-osgi) - Automatically cleans existing symlinks before creating new ones - Uses relative paths for portability - Depends on jar tasks to ensure artifacts are built first
Add validation to ensure .sdkmanrc and gradle-wrapper.properties maintain matching Gradle versions: - Add pre-commit hook to check version consistency - Add build-time validation that fails on version mismatch - Provide clear error messages when versions don't match Co-authored-by: IBM Bob 1.0.1
- Renamed task from createLibsSymlinks to createBuildLibSymlinks - Changed symlink directory from libs/ to build/lib/ - Applied base plugin to enable root-level clean task - Registered build/lib as task output for proper cleanup - Added external dependencies (org.osgi.core, bcel, commons-lang3) - Dependencies copied to build/lib/deps/ with version-free symlinks in build/lib/ The symlinks are now properly managed as build outputs and are automatically cleaned up by gradle clean. All Yoko JARs and their runtime dependencies are available in build/lib/ with simple names. Co-authored-by-AI: IBM Bob 1.0.1
…dle-version-consistency build: add Gradle version consistency validation
…task build: add createLibsSymlinks task for jar file management
…on-free symlinks - Create build/lib/deps/ directory for external dependency JARs - Copy yoko-core runtime classpath dependencies to deps/ - Generate version-free symlinks in lib/ pointing to deps/ - Enhanced cleanup to remove both symlinks and regular JAR files - Maintains existing project JAR symlink functionality Co-authored-by-AI: IBM Bob 1.0.1
…links-task build: organize external dependencies in deps subdirectory with version-free symlinks
Reverse engineered and modernized legacy multi-process IIOP plugin test to use modern testify framework with annotation-based configuration. Changes: - Replaced 9 separate legacy test files with single testify test class - Converted Client/Server main classes to @test and @BeforeServer methods - Implemented plugins as @UseWithOrb annotated inner classes - Replaced verbose POA policy setup with PolicyValue utilities - Updated CodecObjectReferenceTest to not depend on deleted TestORBInitializer - Removed legacy multi-process orchestration infrastructure Benefits: - Single JVM execution for easier debugging - Declarative configuration via annotations - Cleaner, more maintainable code structure - Reduced complexity with inline components Test Coverage: - Plugin lifecycle (construction, initialization) - Socket creation interception - Codec encoding of object references - Object marshaling via Any parameters - Local vs remote object handling - Transport validation via interceptors Code Reduction: - Deleted: 862 lines across 9 legacy files - Added: 461 lines in modernized testify implementation - Net reduction: 401 lines (46.5% reduction) Files Changed: - Added: IiopPluginTest.java (new testify-based implementation) - Modified: CodecObjectReferenceTest.java (removed TestORBInitializer dependency) - Deleted: IIOPPluginTest.java, Client.java, Server.java, ClientPlugin.java, ServerPlugin.java, Test_impl.java, ServiceContextInterceptor.java, TestORBInitializer.java, runtest script Retained: - All generated IDL files (Test.idl and generated classes) - LocalTest_impl.java (still used by testify test) Co-authored-by: IBM Bob 1.0.1
…gin-test Modernise IIOP plugin tests
Add LazyInitializedField<T> class that provides lock-free lazy initialization using atomic function pointer swapping pattern. Features: - Thread-safe initialization with exactly-once guarantee - Lock-free implementation using AtomicReference and CAS operations - Automatic retry on initialization failure - Per-waiter CountDownLatch for proper thread coordination - Closure-based value caching (no separate value field) - Supplier-based logging for performance Implementation uses three-state pattern: 1. Initialization function (initial state) 2. Waiter function with latch (during initialization) 3. Getter function with cached value (after initialization) Includes comprehensive test suite with 18 tests covering: - Basic initialization and caching - Concurrent access (10 threads) - High contention scenarios (50 threads) - Exception handling and retry - Null value support - Complex object handling Co-authored-by-AI: IBM Bob 1.0.3
… maintainability - Add null check for initializer parameter using requireNonNull with static import to fail fast with clear error message instead of confusing NPE during initialization - Change exception handling from catching Exception to Throwable to properly handle all error conditions including JVM errors - Extract all magic numbers in tests to named constants for better readability and maintainability: * INITIALIZATION_DELAY_MS = 50 * EXPENSIVE_INITIALIZATION_DELAY_MS = 10 * CONCURRENT_THREAD_COUNT = 10 * HIGH_CONTENTION_THREAD_COUNT = 50 * TEST_TIMEOUT_SECONDS = 10 * EXECUTOR_SHUTDOWN_TIMEOUT_SECONDS = 5 * SEQUENTIAL_ACCESS_COUNT = 100 These changes improve code quality without altering functionality. Co-authored-by-AI: IBM Bob 1.0.1
feat(yoko-util): add thread-safe lazy initialization utility
…ation Add early check in initializationFunction() to detect if initialization is already in progress before allocating a Waiter object. This reduces memory allocation overhead in high-contention scenarios. The check verifies functionPointer is still set to initializationFunctionRef before creating the Waiter, avoiding unnecessary object allocation when another thread has already started initialization. Co-authored-by-AI: IBM Bob 1.0.3
Add boolean allowRetry parameter to LazyInitializedField constructor to control retry behavior on initialization failure. When false (default), failed initialization sets a permanent error state that throws the original exception on subsequent access attempts. When true, allows retry by resetting to initialization state. Exception handling distinguishes between Error and Exception types, wrapping them appropriately in the permanent error getter. Use custom InitializationException that creates new instances on each call. This ensures accurate stack traces for all threads accessing a failed lazy initialization, not just the first thread. When allowRetry is false, each get() call now creates a fresh InitializationException wrapping the original cause, providing proper call site information for debugging. Rename LazyInitializedField.isInitialized() to isCompleted() to better reflect that the method returns true for both successful initialization and permanent error states (when allowRetry=false). Update documentation to clarify isCompleted() returns true when initialization has completed (success or permanent error) and false when not yet attempted or when retry is allowed after failure. Co-authored-by-AI: IBM Bob 1.0.3
Replace generic RuntimeException with InitializationInterruptedException when a thread is interrupted while waiting for lazy initialization. Update LazyInitializedField.get() documentation to reflect this change. Co-authored-by-AI: IBM Bob 1.0.3
Rename class and test file to better reflect the purpose as a lazy reference holder rather than just an initialized field. This naming is more concise and aligns with common patterns in concurrent utilities. All references updated: - LazyInitializedField -> LazyReference - LazyInitializedFieldTest -> LazyReferenceTest - All test assertions and exception references updated Rename all test variables from field/field1/field2 to ref/ref1/ref2 to align with the LazyReference class name. Update assertion messages to use 'reference' terminology instead of 'field'. Update class and constructor javadoc to consistently use 'reference' terminology instead of 'field' to align with the class name. Co-authored-by-AI: IBM Bob 1.0.3
- Clarify error message to indicate failure occurred elsewhere - Improve javadoc grammar: 'if' -> 'whether' Co-authored-by-AI: IBM Bob 1.0.3
Tests should verify exception types and causes, not specific message text. This makes tests more resilient to message wording changes. Co-authored-by-AI: IBM Bob 1.0.3
Prevent deadlock when initializer recursively calls get() on the same LazyReference instance. The Waiter now tracks the initializing thread and throws RecursiveInitializationException (extends IllegalStateException) if that thread attempts to wait on itself. The exception is wrapped in IllegalStateException to preserve call stacks for all threads. - Add RecursiveInitializationException extending IllegalStateException - Store initializing thread in Waiter constructor - Detect recursive call in Waiter.get() and throw exception - Wrap RecursiveInitializationException in IllegalStateException - Update javadoc for get() method to document recursive detection - Add test case verifying exception chain and messages - All 21 tests pass successfully Co-authored-by-AI: IBM Bob 1.0.3
…hods Add Private.invoke() utility method to testify framework for type-safe reflection-based access to package-private methods in tests. This eliminates the need for external dependencies like Apache Commons Lang and provides cleaner syntax with generic return types and automatic primitive/wrapper type conversions. Co-authored-by-AI: IBM Bob 1.0.1
…ty#783 Added parameterized tests to reproduce and verify ThreadLocal pollution issues when interceptors fail to complete their lifecycle. Changes: - Added getStackDepth() methods to CmsfThreadLocal, RoflThreadLocal, and YasfThreadLocal for testing - Created ThreadLocalPollutionTest with 4 test scenario subclasses: * ThreadLocalPollutionTestWithSimpleEcho (interceptor exceptions) * ThreadLocalPollutionTestWithUncheckedException (service exceptions) * ThreadLocalPollutionTestWithRequestTimeout (timeout handling) * ThreadLocalPollutionTestWithShutdown (ORB shutdown during call) Test Coverage: - Parameterized tests run against all interception points (send_poll, send_request, receive_reply, receive_exception, receive_other) - Tests verify ThreadLocal stack depth remains 0 after exceptions - Each test scenario validates different failure conditions - AfterEach hook ensures no ThreadLocal pollution between tests The tests demonstrate that ThreadLocal cleanup works correctly in most scenarios but can fail when interceptors throw unexpected exceptions or when the ORB shuts down during in-flight requests. Related: OpenLiberty#783 Co-authored-by: IBM Bob 1.0.1
…rceptors Added proper exception handling for unexpected exceptions thrown by client request interceptors during send_request() and receive_reply() phases. Changes: - Wrap unexpected exceptions in UnknownException with appropriate completion status - Add suppressed exception tracking when multiple exceptions occur - Set UnknownException cause chain for better diagnostics - Handle exceptions in both send_request() and receive_reply() interceptor phases Exception Handling: - send_request() phase: wrap in UnknownException with COMPLETED_NO - receive_reply() phase: wrap in UnknownException with COMPLETED_YES - When receivedException already exists, add new exception as suppressed - Preserve original exception information through cause chain This ensures interceptor exceptions don't propagate uncaught and maintains proper CORBA exception semantics while preserving diagnostic information. Related: OpenLiberty#783
…ad of Optional - Changed writeObjectMethodRef and readObjectMethodRef from LazyReference<Optional<Method>> to LazyReference<Method> - Modified findWriteObjectMethod() and findReadObjectMethod() to return nullable Method instead of Optional<Method> - Updated getWriteObjectMethod() and getReadObjectMethod() getters to wrap nullable values with Optional.ofNullable() - Replaced static import of Optional.ofNullable with explicit Optional.ofNullable() calls throughout - Lines added: 24, lines removed: 25 This follows the design principle of avoiding Optional in fields (Effective Java Item 55) and applying the Optional wrapper at the API boundary rather than storing it internally, reducing memory overhead and simplifying lazy initialization logic. Co-authored-by-AI: IBM Bob 1.0.4
…llections - Convert operations storage from array to unmodifiable Collection - Add LazyReference pattern for all cached fields (methodMap, reflMethodMap, operations, superDescriptors, ids) - Replace imperative loops with Java 8 streams throughout - Extract getInterfaces to PrivilegedActions utility for reuse - Add private accessor methods for all LazyReference fields - Make all internal collections unmodifiable (Maps, Lists, Sets, Collections) - Public API unchanged: getMethods() and all_interfaces() still return arrays - Simplify genOperations return by wrapping Map.values() directly - Lines added: 201, lines removed: 281 Co-authored-by-AI: IBM Bob 1.0.4
…sts and refactor privileged actions - Convert MethodDescriptor parameterTypesRef and exceptionTypesRef from arrays to immutable Lists - Convert ValueDescriptor valueMembersRef and fieldsRef from arrays to immutable Lists - Add PrivilegedActions utility methods: makeAccessible(), getDeclaredField(), getDeclaredFields(), getField(), exAction() - Refactor all privileged blocks in ValueDescriptor to use PrivilegedActions utility methods with static imports - Move makeCorbaObjectReader() from ArrayDescriptor to ValueDescriptor for code reuse - Simplify exception handling using exAction() wrapper for PrivilegedExceptionAction - Add proper generic types to Map parameters (Map<Integer, Serializable>, Map<Object, Integer>) - Update FVDValueDescriptor to work with List-based fields - Substantive lines added: 233, lines removed: 230 Co-authored-by-AI: IBM Bob 1.0.4
- Added static copyOf() utility method in ValueDescriptor to create defensive copies of FullValueDescription objects - Modified FVDValueDescriptor.getFullValueDescription() to return copyOf(fvd) instead of direct reference - Modified FVDEnumDescriptor.getFullValueDescription() to return copyOf(fvd) instead of direct reference - Modified FVDEnumSubclassDescriptor.getFullValueDescription() to return copyOf(fvd) instead of direct reference - The copyOf() method performs deep copying of all array fields (operations, attributes, members, initializers, supported_interfaces, abstract_base_values) to prevent external modifications - Substantive lines added: 44, lines removed: 3 Co-authored-by-AI: IBM Bob 1.0.4
…n and code cleanup - Added simpleFactoriesRef map using LazyReference pattern for primitive and simple type descriptors - Replaced if-else chain in get() method with factory map lookup via getSimpleFactories() - Changed field storage from Optional<Field> to nullable Field, wrapping only in getField() - Genericized all Map parameters to Map<Object, Integer> for type safety - Inlined get0() method into get() to reduce indirection - Refactored RemoteFieldDescriptor constructor with ternary operator - Extracted interface finding logic to static helper method findInterfaceType() - Removed unnecessary casts and autoboxing calls - Changed empty catch blocks to use 'ignored' variable name - Removed unnecessary throws IOException declarations from methods that don't throw Lines added: ~90, lines removed: ~120 Co-authored-by-AI: IBM Bob 1.0.4
…criptor refactor ModelElement hierarchy
- Introduced Arrays.emptyArray() utility method with thread-safe caching using ClassValue - Replaced manual empty array allocations (new Type[0]) across 64 files in yoko-core, yoko-rmi-impl, testify-iiop, and yoko-verify - Added comprehensive test suite for Arrays.emptyArray() with 16 tests covering thread safety, caching behavior, and ClassValue semantics - Added documentation explaining GC safety of ClassValue-based caching - Substantive lines added: 672, lines removed: 154 Co-authored-by-AI: IBM Bob 1.0.4 (Claude 3.5 Sonnet)
- Add NO_STRINGS constant to Arrays utility class for common empty String array usage - Replace emptyArray(String.class) calls with NO_STRINGS constant across codebase - Update Arrays.emptyArray() to use ClassValue<Object> instead of ClassValue<Object[]> - Add assertion to prevent primitive types in emptyArray() method - Update ArraysTest to verify NO_STRINGS constant behavior - Refactor 21 files across testify-iiop, yoko-core, yoko-rmi-impl, yoko-util, and yoko-verify modules - Lines added: 87, lines removed: 68 (ignoring whitespace) Co-authored-by: Joe Chacko <chackoj@uk.ibm.com> Co-authored-by-AI: IBM Bob 1.0.4
- Add early return for RemoteException detail assignment - Check if cause is already set before attempting initCause - Add try-catch for IllegalStateException from initCause - Fall back to addSuppressed when initCause fails or cause already exists - Substantive lines added: 16, lines removed: 2
…ception-handling refactor(yoko-util): enhance exception cause handling with fallback
…-singletons refactor: use empty array singletons
…t read - Changed DowncallStub.invoke() to return WrappedReplyInputStream instead of calling postUnmarshal() immediately - Created WrappedReplyInputStream wrapper that intercepts first read operation to trigger interceptors - Ensures interceptors are called AFTER stub unmarshals first value, making result available to interceptors - Properly reports unmarshalling exceptions via receive_exception interception point - Updated CmsfTest, RoflTest, and YasfTest to reflect new behavior where thread-local options are set during unmarshalling - Lines added: 192, lines removed: 24 Co-authored-by: Joe Chacko <chackoj@uk.ibm.com> Co-authored-by-AI: IBM Bob 1.0.4
…d-local cleanup - Added ExtendedServerRequestInterceptor.post_marshal() method to clean up thread-local state after response marshalling - Added default implementations for all ExtendedServerRequestInterceptor methods to reduce boilerplate - Updated PIManager.serverPostMarshal() to invoke post_marshal on extended interceptors - Modified PIUpcall.postMarshal() to call piManager_.serverPostMarshal() before super.postMarshal() - Updated ServerRequestInfo_impl._OB_postMarshal() to call post_marshal on extended interceptors with CMSF/YASF override context - Refactored YasfServerInterceptor to use post_marshal for cleanup instead of send_reply/send_exception/send_other - Refactored RoflServerInterceptor to use post_marshal for cleanup instead of send_reply/send_exception/send_other - Refactored CmsfServerInterceptor to use post_marshal for cleanup instead of setupCmsfThreadLocalValue in send methods - Modernized ThreadLocal initialization in CmsfThreadLocal and YasfThreadLocal to use withInitial() - Fixed YasfTest.Echo interface visibility to public - Substantive lines added: 152, lines removed: 65 This fixes the YasfTest failure where YASF thread-local state was not properly available during serialization. The new post_marshal interception point ensures thread-local state is cleaned up after marshalling completes, matching the lifecycle established by pre_unmarshal for setup after context switches. Co-authored-by-AI: IBM Bob 1.0.4
…pattern - Introduced ThreadLocalStack utility class to replace individual ThreadLocal implementations - Removed CmsfThreadLocal, RoflThreadLocal, and YasfThreadLocal in favor of unified ThreadLocalStack approach - Introduced InfoWrangler base class for reading and writing various info types - Created specialized wranglers (CmsfWrangler, YasfWrangler) for managing protocol-specific operations - Deleted CmsfVersion and YasfHelper classes, consolidating functionality into wranglers - Updated all interceptors (CMSF, ROFL, YASF) to use new wrangler pattern with ThreadLocalStack - Modified RMI ObjectWriter and FieldDescriptor to integrate with new thread-local management - Updated ServerRequestInfo_impl and ClientRequestInfo_impl to use YASF_THREAD_LOCAL and CMSF_THREAD_LOCAL constants - Enhanced OrbSteward in testify-iiop to support new pattern - Updated all related tests to use new API - Substantive lines added: 722, lines removed: 774 Co-authored-by-AI: IBM Bob 1.0.4
refactor/fix post unmarshal
…m handling - Created FVDUncustomizableValueDescriptor to handle uncustomizable value types including enums - Removed FVDEnumDescriptor and FVDEnumSubclassDescriptor classes (duplicate logic) - Moved enum-specific value reading logic into EnumSubclassDescriptor.genValueReader() - Refactored FVDValueDescriptor.create() factory method to determine appropriate descriptor type - Simplified TypeRepository.getDescriptor() to use new factory pattern - Changed ValueDescriptor method signatures from Optional<Method> to Method (returning null) - Unified exception handling to use UncheckedIOException consistently - Made several methods package-private that were previously public - Lines added: 150, lines removed: 200
- Refactored TypeRepository.LocalDescriptors.Raw.computeValue to use a Map<Class<?>, Supplier<TypeDescriptor>> for simple type lookups, analogous to FieldDescriptor.simpleFactoriesRef - Added genSimpleFactories() method that populates map with suppliers for primitives, simple reference types (String, Class, ClassDesc, Date, Enum), and static any types (Object, Externalizable, Serializable, Remote) - Removed redundant primitiveDescriptor() method and Enum.class == type check - Modified computeValue() to check map first for exact type matches before performing assignability checks - Fixed triple negation formatting in TypeDescriptor and SearchKey - Changed Key interface visibility from package-private to public - Added generic type parameters and improved type safety in SearchKey - Lines added: 73, lines removed: 87 Co-authored-by-AI: IBM Bob 1.0.4
…tional interfaces - Replaced 9 separate primitive descriptor classes (BooleanDescriptor, ByteDescriptor, CharDescriptor, DoubleDescriptor, FloatDescriptor, IntegerDescriptor, LongDescriptor, ShortDescriptor, VoidDescriptor) with a single PrimitiveDescriptor class - Introduced ReadFn and WriteFn functional interfaces in TypeDescriptor for read/write operations - Made TypeDescriptor.read() and write() final methods that delegate to functional interfaces - Updated TypeRepository to use lambda expressions for primitive type read/write operations - Refactored ValueDescriptor, IDLEntityDescriptor, RemoteDescriptor, and StringDescriptor to use new functional interface pattern - Added unsupportedWrite() method to FVDValueDescriptor to explicitly prevent write operations - Updated TypeDescriptorTest to reference PrimitiveDescriptor instead of individual classes - Fixed missing newline at end of EnumSubclassDescriptor.java - All 58 tests pass successfully - Substantive lines added: 111, lines removed: 491 (net: -380) Co-authored-by-AI: IBM Bob 1.0.4 (Claude 3.5 Sonnet)
…criptors refactor/improve fvd descriptors
- Added RecordComponentInfo class to wrap RecordComponent via reflection for Java 8-15 compatibility - Added RecordSupportUtils class with static detection and instance-specific record handling - Implemented reflection-based isRecord() check for Java 16+ compatibility - Implemented component extraction, canonical constructor lookup, and validation - Added writeComponents() method to serialize record components via accessor methods - Added readAndConstruct() method to deserialize and instantiate records via canonical constructor - Lines added: 326, lines removed: 0 Co-authored-by-AI: IBM Bob 1.0.0
…ptor - Added _recordSupportUtils field to hold record-specific utilities - Added record detection and initialization in constructor using RecordSupportUtils.forClass() - Added validation to ensure records follow serialization rules - Override custom serialization method detection for records (set to null) - Delegate writeValue() to _recordSupportUtils.writeComponents() for records - Delegate readValue() to _recordSupportUtils.readAndConstruct() for records - Handle offset map registration for deserialized record instances - Lines added: 49, lines removed: 6
Records cannot be instantiated without constructor arguments, unlike regular serializable classes. This change ensures genBlankInstanceSupplier() returns null for record types, preventing attempts to create invalid blank instances during deserialization. - Add null check for _recordSupportUtils in genBlankInstanceSupplier() - Return null supplier when processing record types - Lines added: 6, lines removed: 0
…itialization - Replace eager initialization with LazyReference for thread-safe lazy loading - Fix method reference from genRecordSupport to genRecordSupportUtils - Replace direct _recordSupportUtils field access with recordSupportRef.get() - Remove unused UncheckedIOException import - Substantive lines added: 22, lines removed: 17
sakerl
force-pushed
the
30210-add-record-support
branch
2 times, most recently
from
June 12, 2026 10:06
65c5189 to
bbb4b79
Compare
Replace java.util.logging.Logger with Yoko's VerboseLogging system for consistency with existing codebase patterns. - Remove Logger imports from RecordComponentInfo and RecordSupportUtils - Add VerboseLogging static imports (MARSHAL_LOG, MARSHAL_IN_LOG, MARSHAL_OUT_LOG) - Replace logger.fine() with MARSHAL_LOG in record detection and validation - Add MARSHAL_OUT_LOG.finer() for record component writing operations - Add MARSHAL_IN_LOG.finer() for record component reading operations - Add logging to ValueDescriptor record serialization paths - Lines added: 23, lines removed: 11
sakerl
force-pushed
the
30210-add-record-support
branch
from
June 12, 2026 10:56
d5c4a15 to
0770da5
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
For #30210