Fix: Linux Interop Issues for Custom Merge Operators #66
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.
I ran into a classic "it works on my machine" scenario while working on the new Merge Operator support (see #42) for my RocksDb.Extensions wrapper library. My tests were green on macOS, but the Linux CI build was failing mysteriously.
After some digging, I realized the issue was in how we handled the success output parameter in the C# interop layer.
The underlying RocksDB native API expects the success indicator to be a boolean-like value (0 or 1) stored in an unsigned char*, but we were marshalling it as an IntPtr. While macOS was lenient with this, Linux was not having it.
I've updated the implementation to correctly marshal this as a byte, ensuring it works cross-platform.
Reference: RocksDB C Header definition
@theolivenbaum could you please take a look at this?