Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Admin/XMover: Problematic translog detection and cancellation#533

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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Draft
amotl wants to merge13 commits intoxmover
base:xmover
Choose a base branch
Loading
fromxmover-problematic-translogs

Conversation

@amotl
Copy link
Member

@amotlamotl commentedSep 10, 2025
edited
Loading

About

The new subcommandxmover problematic-translogs can find and cancel replica shards with large uncommitted translog sizes. It provides options to set size thresholds and optionally execute cancel commands after user confirmation.

Install

uv pip install --upgrade'cratedb-toolkit @ git+https://github.com/crate/cratedb-toolkit.git@xmover-problematic-translogs'

Documentation

References

@coderabbitai
Copy link

coderabbitaibot commentedSep 10, 2025
edited
Loading

Important

Review skipped

Auto reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the.coderabbit.yaml file in this repository. To trigger a single review, invoke the@coderabbitai review command.

You can disable this status message by setting thereviews.review_status tofalse in the CodeRabbit configuration file.

Walkthrough

Introduces shard-size analytics and reporting in ShardAnalyzer, adds TranslogReporter and a new CLI command problematic-translogs, extends RecoveryMonitor with problematic shard visibility, incorporates partition-aware table displays, updates data model and database queries to include partition_values, and adds documentation and tests covering new behaviors.

Changes

Cohort / File(s)Summary of Changes
Shard size analytics and translog reporting
cratedb_toolkit/admin/xmover/analysis/shard.py
Added shard size overview, large/small shard detail methods, and TranslogReporter for analyzing uncommitted translogs and generating ALTER commands; integrated distribution stats and zone mapping into reporting.
CLI integration
cratedb_toolkit/admin/xmover/cli.py
Updated help/init flow; added problematic_translogs command with threshold option, optional execution of generated ALTER statements, confirmation, pacing, and error handling.
Model and typing updates
cratedb_toolkit/admin/xmover/model.py
Added TableStatsType alias; extended RecoveryInfo with optional partition_values field.
Database client extensions
cratedb_toolkit/admin/xmover/util/database.py
get_recovery_details now joins partition metadata and returns partition_values; added get_problematic_shards API with optional filters; adapted RecoveryInfo parsing to include partition_values.
Formatting helper
cratedb_toolkit/admin/xmover/util/format.py
Introduced format_table_display_with_partition for partition-aware table labeling.
Recovery monitoring UX
cratedb_toolkit/admin/xmover/operational/monitor.py
Added get_problematic_shards flow; partition-aware displays; revised summaries and watch-mode status, including non-recovering shard reporting.
Documentation
doc/admin/xmover/handbook.md
Documented problematic-translogs command, options, examples, and behavior.
Tests: CLI and features
tests/admin/test_cli.py,tests/admin/test_problematic_translogs.py
Expanded CLI coverage; added comprehensive tests for problematic-translogs including generation, cancellation, errors, and defaults.
Tests: Recovery monitor
tests/admin/test_recovery_monitor.py
Updated RecoveryInfo usages to include partition_values parameter.

Sequence Diagram(s)

sequenceDiagram  autonumber  actor U as User  participant CLI as xmover CLI  participant TR as TranslogReporter  participant DB as CrateDBClient  U->>CLI: xmover problematic-translogs --size-mb N [--cancel]  CLI->>TR: problematic_translogs(size_mb=N)  TR->>DB: query replicas with uncommitted translog >= N MB  DB-->>TR: rows (table, partition_values, shard_id, node, ...)  TR-->>CLI: generated ALTER ... REROUTE CANCEL SHARD commands  alt --cancel flag and commands exist    CLI->>U: Prompt for confirmation    U-->>CLI: Confirm/Decline    opt If confirmed      loop For each command        CLI->>DB: execute_query(command)        Note right of CLI: 1s delay between commands      end    end  end  CLI-->>U: Summary (counts, successes/failures)
Loading
sequenceDiagram  autonumber  participant SA as ShardAnalyzer  participant DB as CrateDBClient  participant UI as ShardReporter UI  SA->>DB: fetch shard stats and nodes/zones  DB-->>SA: shards (sizes, states), node zones  SA-->>UI: distribution_stats (buckets, totals, warnings)  UI-->>UI: render size distribution + optional large/small details
Loading
sequenceDiagram  autonumber  participant RM as RecoveryMonitor  participant DB as CrateDBClient  participant T as Terminal  RM->>DB: get_recoveries()  DB-->>RM: active/completed recoveries with partition_values  RM->>DB: get_problematic_shards()  DB-->>RM: shards not STARTED (with partition_values)  RM-->>T: status lines, summaries, examples (partition-aware)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Suggested reviewers

  • WalBeh
  • surister

Poem

A rabbit taps keys with a whiskered grin,
Buckets of shards, where to begin?
Translogs tamed, with cautious hops,
Cancel reroutes in gentle stops.
Partitions named, the metrics sing—
Balance restored: thump-thump, spring! 🐇📊

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check nameStatusExplanation
Docstring Coverage✅ PassedDocstring coverage is 90.24% which is sufficient. The required threshold is 80.00%.
Title Check✅ PassedThe title is concise and accurately summarizes the primary change: adding problematic translog detection and cancellation to the Admin/XMover tool; it reflects the new CLI command and related code/docs in the diff and is clear for teammates scanning history.
Description Check✅ PassedThe PR description clearly documents the new xmover problematic-translogs subcommand, its options (--size‑mb and --cancel), intended behavior (find and optionally cancel replica shards with large uncommitted translogs), and points to installation and docs; this directly matches the CLI, TranslogReporter, DB query, and handbook changes in the diff. The author also notes stacking onGH-523 and provides useful context and references, so the description is related and appropriate for the changeset.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment@coderabbitai help to get the list of available commands and usage tips.

@amotlamotlforce-pushed thexmover-problematic-translogs branch from373efef to143ffbfCompareSeptember 10, 2025 19:41
Copy link
MemberAuthor

@amotlamotlSep 10, 2025
edited
Loading

Choose a reason for hiding this comment

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

@WalBeh: Unfortunately, the software tests are failing here. I guess CrateDB has to be properly provisioned before.

pytest --no-cov tests/admin/test_problematic_translogs.py

Copy link
MemberAuthor

Choose a reason for hiding this comment

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

We've fixed the software tests per13d59cc.

@amotlamotlforce-pushed thexmover branch 2 times, most recently fromdac2a6d tocb05b4dCompareSeptember 10, 2025 23:21
@amotlamotlforce-pushed thexmover-problematic-translogs branch from143ffbf toa48d9fcCompareSeptember 17, 2025 16:49
@amotlamotlforce-pushed thexmover branch 4 times, most recently from21dd237 to3b3942fCompareSeptember 19, 2025 18:26
@amotlamotlforce-pushed thexmover-problematic-translogs branch fromd6a1753 to0c12e4fCompareSeptember 19, 2025 21:05
@amotl
Copy link
MemberAuthor

amotl commentedSep 19, 2025
edited
Loading

@WalBeh:Checks are failing here because code coverage dropped below 50%.

codecov/project — 46.49% (target 50.00%)

Can you add software tests here or to another branch which will bring up software test code coverage again, with a specific focus on your new code?

EDIT: All right, coverage is still >50%. However, the addition still decreased it, so it would not hurt to still add more test cases when applicable.

codecov/project Successful in 1s — 56.52% (target 50.00%)

@amotlamotl marked this pull request as ready for reviewSeptember 19, 2025 21:22
@amotl
Copy link
MemberAuthor

@coderabbitai review

coderabbitai[bot] reacted with eyes emoji

@coderabbitai
Copy link

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link

@coderabbitaicoderabbitaibot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Nitpick comments (11)
cratedb_toolkit/admin/xmover/model.py (1)

61-61:Standardize “no partition” sentinel.

Tests use the string "NULL". Prefer None to represent “no partition” at the data layer to avoid leaking sentinel strings into UIs. If "NULL" must be retained for compatibility, document it on the field.

doc/admin/xmover/handbook.md (1)

271-287:Add language to fenced code block to satisfy markdownlint.

Label the sample output block as text.

Apply:

-**Sample Output:**-```+**Sample Output:**+```text Found 3 shards with problematic translogs: ... Total: 3 ALTER commands generated-```+```
cratedb_toolkit/admin/xmover/util/format.py (1)

46-58:Fix typing: avoid implicit Optional (RUF013).

Annotatepartition_values as Optional and import it.

Apply:

+from typing import Optional@@-def format_table_display_with_partition(schema_name: str, table_name: str, partition_values: str = None) -> str:+def format_table_display_with_partition(+    schema_name: str, table_name: str, partition_values: Optional[str] = None+) -> str:

Optional (defensive): treat common sentinels as “no partition” to keep displays clean:

-    if partition_values:+    if partition_values and partition_values.strip() not in {"NULL", "-", "none", ""}:         return f"{base_display} {partition_values}"
cratedb_toolkit/admin/xmover/cli.py (2)

480-493:Catching broad Exception — either narrow or document.

Ifexecute_query raises a known exception type, catch that. Otherwise, suppress the Ruff BLE001 warning explicitly.

Apply one of:

-                    except Exception as e:+                    # Broad except is intentional for CLI UX+                    except Exception as e:  # noqa: BLE001

or, if available:

-                    except Exception as e:+                    except (click.ClickException, RuntimeError) as e:

Confirm the concrete exception type thrown byCrateDBClient.execute_query and replaceException accordingly.


506-510:Same: broad except for analysis block.

Mirror the decision above for consistency.

Apply:

-    except Exception as e:+    except Exception as e:  # noqa: BLE001
tests/admin/test_problematic_translogs.py (2)

156-159:Patch time.sleep at the module where it’s used to avoid cross-test bleed.

Patch the symbol in the CLI module (or the module that calls sleep), not the globaltime.sleep.

-), patch("time.sleep"):  # Mock sleep to speed up test+), patch("cratedb_toolkit.admin.xmover.cli.time.sleep"):  # Mock sleep where used

If sleep is called from another module, target that module path instead.


128-131:Make the query assertion resilient to quoting of "primary".

The SQL should quote the column assh."primary" = FALSE. Update the assertion to allow both.

+import re ...-assert "primary = FALSE" in query+assert re.search(r'"?primary"?\s*=\s*FALSE', query), query
cratedb_toolkit/admin/xmover/operational/monitor.py (1)

140-147:Use the shared formatter for table+partition display for consistency.

Align_format_recovery_table with the rest of the file.

-# Format table name with partition values if available-table_display = f"{recovery.schema_name}.{recovery.table_name}"-if recovery.partition_values:-    table_display = f"{table_display} {recovery.partition_values}"+table_display = format_table_display_with_partition(+    recovery.schema_name, recovery.table_name, recovery.partition_values+)
cratedb_toolkit/admin/xmover/util/database.py (1)

516-573:Docstring vs filter mismatch: exclude actively recovering shards or adjust wording.

get_problematic_shards says “aren't actively recovering” but currently includes allstate != 'STARTED', which can includeRECOVERING. Either update the filter or the docstring.

Option A (exclude recovering):

- where_conditions = ["s.state != 'STARTED'"]+ where_conditions = ["s.state NOT IN ('STARTED','RECOVERING')"]

Option B: Clarify the docstring to say it returns “non-started shards (may include recovering),” and rely on caller-side filtering (as done in monitor).

cratedb_toolkit/admin/xmover/analysis/shard.py (2)

1069-1127:Narrow the try/except and useelse: for Ruff TRY300; annotate broad catch if intentional.

Limit the try to the query, put the rendering inelse:, and annotate the broad catch (BLE001) since this is a CLI UX path.

-        try:-            result = self.client.execute_query(query, [size_mb])-            rows = result.get("rows", [])--            if not rows:-                console.print(f"[green]✓ No replica shards found with translog uncommitted size > {size_mb}MB[/green]")-                return []--            console.print(f"Found {len(rows)} shards with problematic translogs:")-            console.print()-            ...-            return alter_commands-        except Exception as e:-            console.print(f"[red]Error analyzing problematic translogs: {e}[/red]")+        try:+            result = self.client.execute_query(query, [size_mb])+        except Exception as e:  # noqa: BLE001+            console.print(f"[red]Error analyzing problematic translogs: {e}[/red]")             import traceback-             console.print(f"[dim]{traceback.format_exc()}[/dim]")             return []+        else:+            rows = result.get("rows", [])+            if not rows:+                console.print(f"[green]✓ No replica shards found with translog uncommitted size > {size_mb}MB[/green]")+                return []+            console.print(f"Found {len(rows)} shards with problematic translogs:")+            console.print()+            ...+            return alter_commands

771-773:Remove unused variable or use it.

zone is computed but unused.

-# FIXME: `zone` does not get used.-zone = next((node.zone for node in self.nodes if node.id == node_id), "unknown")  # noqa: F841+# zone lookup omitted intentionally; remove variable to avoid noise

Or use it in emitted stats if valuable.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between3b3942f and0c12e4f.

📒 Files selected for processing (10)
  • cratedb_toolkit/admin/xmover/analysis/shard.py (4 hunks)
  • cratedb_toolkit/admin/xmover/cli.py (4 hunks)
  • cratedb_toolkit/admin/xmover/model.py (2 hunks)
  • cratedb_toolkit/admin/xmover/operational/monitor.py (11 hunks)
  • cratedb_toolkit/admin/xmover/util/database.py (5 hunks)
  • cratedb_toolkit/admin/xmover/util/format.py (1 hunks)
  • doc/admin/xmover/handbook.md (1 hunks)
  • tests/admin/test_cli.py (1 hunks)
  • tests/admin/test_problematic_translogs.py (1 hunks)
  • tests/admin/test_recovery_monitor.py (5 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-09-18T17:32:10.537Z
Learnt from: amotlPR: crate/cratedb-toolkit#523File: cratedb_toolkit/admin/xmover/analyze/shard.py:0-0Timestamp: 2025-09-18T17:32:10.537ZLearning: XMover (cratedb_toolkit.admin.xmover) intentionally uses print statements throughout its codebase instead of structured logging, as it's designed as a CLI tool where direct console output is the intended behavior.

Applied to files:

  • cratedb_toolkit/admin/xmover/cli.py
  • cratedb_toolkit/admin/xmover/operational/monitor.py
🪛 markdownlint-cli2 (0.18.1)
doc/admin/xmover/handbook.md

272-272: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🪛 Ruff (0.13.0)
cratedb_toolkit/admin/xmover/util/format.py

46-46: PEP 484 prohibits implicitOptional

Convert toOptional[T]

(RUF013)

cratedb_toolkit/admin/xmover/cli.py

490-490: Do not catch blind exception:Exception

(BLE001)


506-506: Do not catch blind exception:Exception

(BLE001)

cratedb_toolkit/admin/xmover/analysis/shard.py

1126-1126: Consider moving this statement to anelse block

(TRY300)


1128-1128: Do not catch blind exception:Exception

(BLE001)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: build-and-publish
🔇 Additional comments (5)
cratedb_toolkit/admin/xmover/model.py (1)

2-5:Type alias and imports look good.

TheTableStatsType alias and expanded typing imports are appropriate and improve clarity.

tests/admin/test_cli.py (1)

10-19:CLI surface coverage updated — looks good.

Includingactive-shards,problematic-translogs, andshard-distribution here keeps the smoke test aligned with the CLI.

tests/admin/test_recovery_monitor.py (1)

74-74:Partition awareness wired into tests — OK.

Passingpartition_values aligns tests with the new dataclass signature.

If "no partition" is expected, consider usingNone rather than the string "NULL" to avoid UI artifacts. Confirm downstream formatting handlesNone correctly.

Also applies to: 138-138, 156-156, 224-224, 241-241

cratedb_toolkit/admin/xmover/cli.py (1)

44-56:Don't require a DB connection for offline/diagnostic commands — lazy-init the CrateDBClient

Eager connection blocksexplain-error and other offline flows; initialize the client only for subcommands that need DB access.

File: cratedb_toolkit/admin/xmover/cli.py (lines 44–56)

-# Test connection on startup.-client = CrateDBClient()-if not client.test_connection():-    console.print("[red]Error: Failed connecting to CrateDB[/red]")-    console.print(-        "Please check your database connection string, "-        "i.e. the CRATE_CONNECTION_STRING environment variable, "-        "possibly stored within an .env file"-    )-    raise click.Abort()--# Propagate the client handle.-ctx.obj["client"] = client+# Only initialize the DB client for commands that need it+needs_db = {+    "analyze",+    "find-candidates",+    "recommend",+    "check-balance",+    "shard-distribution",+    "active-shards",+    "monitor-recovery",+    "problematic-translogs",+    "zone-analysis",+    "validate-move",+    "test-connection",+}+sub = ctx.invoked_subcommand+if sub in needs_db:+    client = CrateDBClient()+    if not client.test_connection():+        console.print("[red]Error: Failed connecting to CrateDB[/red]")+        console.print(+            "Please check your database connection string, "+            "i.e. the CRATE_CONNECTION_STRING environment variable, "+            "possibly stored within an .env file"+        )+        raise click.Abort()+    ctx.obj["client"] = client

Verification: attempted the provided smoke-check but the import failed here with "ModuleNotFoundError: No module named 'croud'"; unable to run the smoke test in this environment. Re-run the smoke-check locally or in CI (with project dependencies, including croud, installed) after applying the patch to confirm offline commands work as expected.

tests/admin/test_problematic_translogs.py (1)

13-214:Solid, comprehensive test coverage for the new CLI path.

Scenarios are well covered (empty, partitioned/non‑partitioned, mixed, cancel flow, failures, defaults). Nice use of CliRunner and mocking.

Comment on lines +1060 to +1066
WHERE
sh.state = 'STARTED'
AND sh.translog_stats['uncommitted_size']\
> ? * 1024^2
AND primary = FALSE
ORDER BY
6 DESC\

Choose a reason for hiding this comment

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

⚠️ Potential issue

Quote and qualify the "primary" column in SQL.

Unquotedprimary can break on some engines; qualify with the alias for clarity.

-  AND primary = FALSE+  AND sh."primary" = FALSE

Note: adjust the related test to tolerate quotedprimary (see test update suggestion).

📝 Committable suggestion

‼️IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
WHERE
sh.state='STARTED'
ANDsh.translog_stats['uncommitted_size'] \
> ?*1024^2
ANDprimary=FALSE
ORDERBY
6DESC \
WHERE
sh.state='STARTED'
ANDsh.translog_stats['uncommitted_size'] \
> ?*1024^2
ANDsh."primary"=FALSE
ORDERBY
6DESC \
🤖 Prompt for AI Agents
In cratedb_toolkit/admin/xmover/analysis/shard.py around lines 1060 to 1066 theSQL uses an unquoted column name primary which can fail on some SQL engines;qualify it with the table alias (e.g., sh."primary" or sh.primary depending onquoting rules used elsewhere) in the WHERE clause and in any relatedORDER/GROUP/SELECT references, and update the related test to accept thequoted/qualified form of primary.


schema_name:str
table_name:str
partition_values:Optional[str]# Partition values for partitioned tables

Choose a reason for hiding this comment

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

⚠️ Potential issue

🧩 Analysis chain

New required field may be a breaking change; verify all call sites.

partition_values: Optional[str] is non‑default and now required at construction. Ensure all creators ofRecoveryInfo across the repo (and downstream users) were updated accordingly.

Run to verify:


🏁 Script executed:

#!/bin/bash# Find all RecoveryInfo constructions and show argumentsrg -nPU --type=py'(?s)RecoveryInfo\s*\(' -C2

Length of output: 2141


🏁 Script executed:

#!/bin/bashset -euo pipefailfile="cratedb_toolkit/admin/xmover/model.py"if [[!-f"$file" ]];thenecho"MISSING:$file"exit 0finl -ba"$file"| sed -n'1,240p'

Length of output: 59


Make partition_values optional (or update all callers).

Multiple RecoveryInfo(...) constructions don’t pass partition_values; either change the model to add a default (e.g. partition_values: Optional[str] = None in cratedb_toolkit/admin/xmover/model.py at ~line 61) or update all call sites to pass the new field. Affected call sites found: tests/admin/test_recovery_monitor.py:71,135,152,219,237 and cratedb_toolkit/admin/xmover/util/database.py:448.

🤖 Prompt for AI Agents
In cratedb_toolkit/admin/xmover/model.py around line 61, the RecoveryInfo fieldpartition_values is declared as Optional[str] but has no default causing callersthat omit it to fail; update the model to make it truly optional by giving it adefault (e.g. partition_values: Optional[str] = None) so existing callerscontinue to work, or alternatively update all call sites (tests andcratedb_toolkit/admin/xmover/util/database.py) to pass a value forpartition_values.

Comment on lines +311 to +319
is_recovering=any(
r.shard_id==shard["shard_id"]
andr.table_name==shard["table_name"]
andr.schema_name==shard["schema_name"]
forrinrecoveries
)
ifnotis_recovering:
non_recovering_shards.append(shard)

Choose a reason for hiding this comment

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

⚠️ Potential issue

Include partition in “is_recovering” checks to avoid false matches across partitions.

table_name + shard_id is not unique for partitioned tables; this can hide problematic shards or misclassify them.

- is_recovering = any(-    r.shard_id == shard["shard_id"]-    and r.table_name == shard["table_name"]-    and r.schema_name == shard["schema_name"]-    for r in recoveries- )+ is_recovering = any(+    r.shard_id == shard["shard_id"]+    and r.table_name == shard["table_name"]+    and r.schema_name == shard["schema_name"]+    and (r.partition_values or None) == (shard.get("partition_values") or None)+    for r in recoveries+ )

Apply the same change at Lines 395-401 and 463-470.

Also applies to: 395-401, 463-470

🤖 Prompt for AI Agents
In cratedb_toolkit/admin/xmover/operational/monitor.py around lines 311-319, theis_recovering check only compares shard_id, table_name and schema_name which canproduce false matches for partitioned tables; update the predicate to alsocompare partition (or partition_value/partition_id field used in shard dict andRecovery objects) so the match includes partition and preventsmisclassification; make the identical change in the same logic at lines 395-401and 463-470 so all three checks include partition in the equality conditions.

WalBehand others added12 commitsSeptember 23, 2025 23:35
- More or less just line-length fixes.- Only a single type adjustment was needed on the return value of the  `analyze_distribution` method.- Ruff recommended to use set comprehensions, so here we go.- At a single spot where an exception has been `pass`ed, we added  error output. Is it bad?
The new command can find and cancel replica shards with largeuncommitted translog sizes. It provides options to set size thresholdsand optionally execute cancel commands after user confirmation.
…portingThis commit adds comprehensive shard size analysis capabilities,including:- Size distribution bucketing and reporting- Early warning detection for oversized and undersized shards- Partition-aware shard status display- Integration with recovery monitoring- Improved problematic shard detection- Enhanced CLI output formattingThe changes help identify shard sizing issues that could impact clusterperformance and stability.
- Add max shard size tracking to size buckets- Add small shards analysis view to analyzer command
@amotlamotlforce-pushed thexmover-problematic-translogs branch from0c12e4f tobc2a66bCompareSeptember 23, 2025 21:35
@amotlamotl changed the titleAdmin/XMover: Add problematic translog detection and cancellationAdmin/XMover: Problematic translog detection and cancellationSep 23, 2025
@amotlamotl requested review fromWalBeh andseutSeptember 23, 2025 21:48
@amotlamotl marked this pull request as ready for reviewSeptember 23, 2025 21:48
@amotlamotl marked this pull request as draftSeptember 29, 2025 19:40
@amotlamotl removed the request for review fromseutNovember 18, 2025 19:16
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment

Reviewers

@coderabbitaicoderabbitai[bot]coderabbitai[bot] left review comments

@WalBehWalBehAwaiting requested review from WalBeh

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

3 participants

@amotl@WalBeh

[8]ページ先頭

©2009-2025 Movatter.jp