-
Notifications
You must be signed in to change notification settings - Fork 603
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CORE-8928: Introduce redpanda.iceberg.target.lag.ms topic propery #25056
base: dev
Are you sure you want to change the base?
CORE-8928: Introduce redpanda.iceberg.target.lag.ms topic propery #25056
Conversation
/dt |
ddb8dc0
to
be5cd6a
Compare
be5cd6a
to
6b6ed8e
Compare
/dt |
6b6ed8e
to
22a9bb3
Compare
/dt |
22a9bb3
to
d6f0245
Compare
/dt |
Retry command for Build#61716please wait until all jobs are finished before running the slash command
|
CI test resultstest results on build#61716
test results on build#61737
test results on build#61744
test results on build#61777
|
d6f0245
to
c50d858
Compare
@bharathv - I have a few todos sprinkled in here related to property bounds. Currently I have it set up to match the commit interval cluster config, but that doesn't feel quite right. wdyt? |
src/v/config/configuration.cc
Outdated
"Default value for the redpanda.iceberg.target.lag.ms topic property", | ||
{.needs_restart = needs_restart::no, .visibility = visibility::user}, | ||
// TODO(oren): better default? | ||
std::chrono::milliseconds(1min), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My gut feeling is the default should be a bit higher, at least 5mins or so, just to give flexibility to the scheduler to schedule in more interesting ways rather than just missing deadlines all the time. This needs an empirical evaluation once all the parts are hooked up.
Also purely from a user standpoint my understanding is very few users really want to land data within a minute, my guess is this is typically in hours (I could be wrong here) but the default should be orders of minutes at least.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
5mins or so...to give flexibility to the scheduler
makes sense. by the same token, should the minimum value be a couple orders of magnitude higher? not sure how much of a footgun it to allow setting to 10ms, but it doesn't seem like a realistic choice in any case.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes, I agree.
src/v/config/configuration.cc
Outdated
, iceberg_target_lag_ms( | ||
*this, | ||
"iceberg_target_lag_ms", | ||
"Default value for the redpanda.iceberg.target.lag.ms topic property", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe add a little more detail on what the property controls?
src/v/cluster/topic_properties.cc
Outdated
@@ -150,6 +153,8 @@ bool topic_properties::requires_remote_erase() const { | |||
&& !read_replica.value_or(false) && remote_delete; | |||
} | |||
|
|||
// TODO(oren): need a check somewhere s.t. if iceberg is enabled we populate |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I did something like this in the past
Users of this property get ntp_config from the raft->log instance
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nice. i think in this case doing nothing is probably fine. I assume we'll still have something like this once your port is done?
redpanda/src/v/datalake/datalake_manager.cc
Lines 297 to 301 in 90c713a
start_translator( | |
partition, | |
topic_cfg->properties.iceberg_mode, | |
topic_cfg->properties.iceberg_invalid_record_action.value_or( | |
config::shard_local_cfg().iceberg_invalid_record_action.value())); |
then just wire the topic config in there?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes exactly.
ConfigProperty( | ||
config_type="LONG", | ||
value="10", | ||
doc_string="Something just tell me by failing", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
:D
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lol. and of course it didn't fail, so I forgot about it!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
:D, adding new properties is surprisingly complicated, so many places to update.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
oh, i think it's even a bit weirder than that. At least half of the ConfigProperty
s here never appear in the describe response as formulated, so they are just dead code afaict.
Looks to be a case of many properties not appearing in describe responses unless explicitly requested? I'll see whether I can fix it up async with this diff.
Retry command for Build#61737please wait until all jobs are finished before running the slash command
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
added @mattschumpert to the PR to sign-off on the config/property names and defaults.
src/v/config/configuration.cc
Outdated
"Default value for the redpanda.iceberg.target.lag.ms topic property", | ||
{.needs_restart = needs_restart::no, .visibility = visibility::user}, | ||
// TODO(oren): better default? | ||
std::chrono::milliseconds(1min), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes, I agree.
ConfigProperty( | ||
config_type="LONG", | ||
value="10", | ||
doc_string="Something just tell me by failing", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
:D, adding new properties is surprisingly complicated, so many places to update.
c50d858
to
c1f6297
Compare
force push CR comments |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm, bunch of nits.
src/v/config/configuration.cc
Outdated
"effor fashion, subject to resource availability.", | ||
{.needs_restart = needs_restart::no, .visibility = visibility::user}, | ||
std::chrono::milliseconds(5min), | ||
{.min = 10ms, .max = serde::max_serializable_ms}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
bump the min default too?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yeah I was going to see whether @mattschumpert would chime in, but I'll just stick it at like 10s and we can change if needed.
src/v/cluster/topic_properties.cc
Outdated
@@ -150,6 +153,8 @@ bool topic_properties::requires_remote_erase() const { | |||
&& !read_replica.value_or(false) && remote_delete; | |||
} | |||
|
|||
// TODO(oren): need a check somewhere s.t. if iceberg is enabled we populate |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes exactly.
try { | ||
auto val = boost::lexical_cast<std::chrono::milliseconds::rep>( | ||
it->value.value()); | ||
return val >= 10 && val <= serde::max_serializable_ms.count(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same, bump the default min?
Default value for the corresponding topic property: 'redpanda.iceberg.target.lag.ms'
c1f6297
to
b6b8d40
Compare
CI Failure: bazel build |
No-op for now, but we'll use this once translation is ported over to the new scheduler.
Backports Required
Release Notes
Improvements
iceberg_target_lag_ms
topic property