[ 
https://issues.apache.org/jira/browse/CASSANDRA-15399?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17514369#comment-17514369
 ] 

David Capwell commented on CASSANDRA-15399:
-------------------------------------------

There are 2 types of tables: coordinator, participate; here are examples from 
both sides

*Participate* (host involved in the repair, this may be the coordinator, but 
would include all peers involved in the repair)

{code}
cqlsh> SELECT * FROM system_views.repair_participates WHERE tables CONTAINS 
'tlp_stress.clusteringslicing' ALLOW FILTERING;

@ Row 1
-------------------------+----------------------------------------
 id                      | 584eca30-afb6-11ec-9bff-cd38a4d988d3
 duration_millis         | 14773
 failure_cause           | null
 global                  | True
 incremental             | False
 last_updated_at         | 2022-03-29 23:17:18.993000+0000
 preview_kind            | NONE
 ranges                  | ['(-3074457345618258603,0]']
 repaired_at             | null
 state_failure_timestamp | null
 state_init_timestamp    | 2022-03-29 23:17:04.220000+0000
 state_skipped_timestamp | null
 state_success_timestamp | 2022-03-29 23:17:18.993000+0000
 success_message         | Cleanup message recieved
 tables                  | {'tlp_stress.clusteringslicing'}
 validations             | {0034e064-b54a-384f-99d0-af1bf42844a4}

(1 rows)
cqlsh> SELECT * FROM system_views.repair_validations WJERE 
id=0034e064-b54a-384f-99d0-af1bf42844a4; -- id from validations field above

@ Row 1
-------------------------------+--------------------------------------
 id                            | 0034e064-b54a-384f-99d0-af1bf42844a4
 duration_millis               | 14688
 estimated_partitions          | 897
 estimated_total_bytes         | 2321697131
 failure_cause                 | null
 initiator                     | /127.0.0.1:7000
 keyspace_name                 | tlp_stress
 last_updated_at               | 2022-03-29 23:17:18.916000+0000
 partitions_processed          | 181
 progress_percentage           | 100
 ranges                        | ['(-3074457345618258603,0]']
 repair_id                     | 584eca30-afb6-11ec-9bff-cd38a4d988d3
 session_id                    | 58509ef0-afb6-11ec-9bff-cd38a4d988d3
 state_failure_timestamp       | null
 state_init_timestamp          | 2022-03-29 23:17:04.228000+0000
 state_sending_trees_timestamp | 2022-03-29 23:17:18.916000+0000
 state_skipped_timestamp       | null
 state_start_timestamp         | 2022-03-29 23:17:04.299000+0000
 state_success_timestamp       | 2022-03-29 23:17:18.916000+0000
 status                        | success
 success_message               | null
 table_name                    | clusteringslicing

(1 rows)
{code}

What is lacking?  Linking with system_views.streaming, my plan is to update 
repair/streaming to support deep linking after this patch is merged (need to 
modify network messages for remote repair + streaming, so repair knows stream 
ids, and stream knows repair id)

*Coordinator*

{code}
cqlsh> SELECT * FROM system_views.repairs WHERE table_names CONTAINS 
'clusteringslicing' ALLOW FILTERING;

@ Row 1
---------------------------------------+--------------------------------------------------
 id                                    | 34424630-afb6-11ec-ab62-fb846f906c0a
 command_id                            | 2
 duration_millis                       | 7799
 failure_cause                         | null
 keyspace_name                         | tlp_stress
 last_updated_at                       | 2022-03-29 23:16:11.530000+0000
 options_column_families               | {}
 options_data_centers                  | {}
 options_force_repair                  | False
 options_hosts                         | {}
 options_ignore_unreplicated_keyspaces | False
 options_incremental                   | null
 options_job_threads                   | 1
 options_optimise_streams              | False
 options_parallelism                   | PARALLEL
 options_preview_kind                  | NONE
 options_primary_range                 | True
 options_pull_repair                   | False
 options_ranges                        | 
{'(6148914691236517205,-9223372036854775808]'}
 options_subrange_repair               | False
 options_trace                         | False
 participants                          | ['/127.0.0.1:7000', '/127.0.0.2:7000']
 ranges                                | 
[['(6148914691236517205,-9223372036854775808]']]
 sessions                              | {34441af0-afb6-11ec-ab62-fb846f906c0a}
 state_failure_timestamp               | null
 state_init_timestamp                  | 2022-03-29 23:16:03.731000+0000
 state_prepare_complete_timestamp      | 2022-03-29 23:16:03.741000+0000
 state_prepare_start_timestamp         | 2022-03-29 23:16:03.737000+0000
 state_repair_complete_timestamp       | 2022-03-29 23:16:11.529000+0000
 state_repair_start_timestamp          | 2022-03-29 23:16:03.742000+0000
 state_setup_timestamp                 | 2022-03-29 23:16:03.731000+0000
 state_skipped_timestamp               | null
 state_start_timestamp                 | 2022-03-29 23:16:03.732000+0000
 state_success_timestamp               | 2022-03-29 23:16:11.530000+0000
 status                                | success
 success_message                       | Repair completed successfully
 table_names                           | ['clusteringslicing']
 type                                  | full
 unfiltered_ranges                     | 
[['(6148914691236517205,-9223372036854775808]']]

(1 rows)
cqlsh> SELECT * FROM system_views.repair_sessions WHERE 
id=34441af0-afb6-11ec-ab62-fb846f906c0a; -- from sessions column above

@ Row 1
----------------------------+------------------------------------------------
 id                         | 34441af0-afb6-11ec-ab62-fb846f906c0a
 duration_millis            | 7785
 failure_cause              | null
 jobs                       | {f08d1aa3-04d5-3439-93a4-7beaf6bcd393}
 keyspace_name              | tlp_stress
 last_updated_at            | 2022-03-29 23:16:11.528000+0000
 ranges                     | ['(6148914691236517205,-9223372036854775808]']
 repair_id                  | 34424630-afb6-11ec-ab62-fb846f906c0a
 state_failure_timestamp    | null
 state_init_timestamp       | 2022-03-29 23:16:03.743000+0000
 state_jobs_start_timestamp | 2022-03-29 23:16:03.746000+0000
 state_skipped_timestamp    | null
 state_start_timestamp      | 2022-03-29 23:16:03.743000+0000
 state_success_timestamp    | 2022-03-29 23:16:11.528000+0000
 status                     | success
 success_message            | null
 table_names                | ['clusteringslicing']

(1 rows)
cqlsh> SELECT * FROM system_views.repair_jobs WHERE 
id=f08d1aa3-04d5-3439-93a4-7beaf6bcd393; -- from jobs column above

@ Row 1
-------------------------------------+------------------------------------------------
 id                                  | f08d1aa3-04d5-3439-93a4-7beaf6bcd393
 duration_millis                     | 7779
 failure_cause                       | null
 keyspace_name                       | tlp_stress
 last_updated_at                     | 2022-03-29 23:16:11.526000+0000
 ranges                              | 
['(6148914691236517205,-9223372036854775808]']
 repair_id                           | 34424630-afb6-11ec-ab62-fb846f906c0a
 session_id                          | 34441af0-afb6-11ec-ab62-fb846f906c0a
 state_failure_timestamp             | null
 state_init_timestamp                | 2022-03-29 23:16:03.747000+0000
 state_skipped_timestamp             | null
 state_snapshot_complete_timestamp   | null
 state_snapshot_start_timestamp      | null
 state_start_timestamp               | 2022-03-29 23:16:03.747000+0000
 state_stream_start_timestamp        | 2022-03-29 23:16:11.526000+0000
 state_success_timestamp             | 2022-03-29 23:16:11.526000+0000
 state_validation_complete_timestamp | 2022-03-29 23:16:11.526000+0000
 state_validation_start_timestamp    | 2022-03-29 23:16:03.747000+0000
 status                              | success
 success_message                     | null
 table_name                          | clusteringslicing

(1 rows)
{code}

Missing
* links to streaming
* repair_jobs/sessions doesn't show the participants, so requires a join with 
repairs


> Add ability to track state in repair
> ------------------------------------
>
>                 Key: CASSANDRA-15399
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-15399
>             Project: Cassandra
>          Issue Type: Improvement
>          Components: Consistency/Repair
>            Reporter: David Capwell
>            Assignee: David Capwell
>            Priority: Normal
>              Labels: pull-request-available
>          Time Spent: 6h 10m
>  Remaining Estimate: 0h
>
> To enhance the visibility in repair, we should expose internal state via 
> virtual tables; the state should include coordinator as well as participant 
> state (validation, sync, etc.)
> I propose the following tables:
> repairs - high level summary of the global state of repair; this should be 
> called on the coordinator.
> {code:sql}
> CREATE TABLE repairs (
>   id uuid,
>   keyspace_name text,
>   table_names frozen<list<text>>,
>   ranges frozen<list<text>>,
>   coordinator text,
>   participants frozen<list<text>>,
>   state text,
>   progress_percentage float,
>   last_updated_at_millis bigint,
>   duration_micro bigint,
>   failure_cause text,
>   PRIMARY KEY ( (id) )
> )
> {code}
> repair_tasks - represents RepairJob and participants state.  This will show 
> if validations are running on participants and the progress they are making; 
> this should be called on the coordinator.
> {code:sql}
> CREATE TABLE repair_tasks (
>   id uuid,
>   session_id uuid,
>   keyspace_name text,
>   table_name text,
>   ranges frozen<list<text>>,
>   coordinator text,
>   participant text,
>   state text,
>   state_description text,
>   progress_percentage float, -- between 0.0 and 100.0
>   last_updated_at_millis bigint,
>   duration_micro bigint,
>   failure_cause text,
>   PRIMARY KEY ( (id), session_id, table_name, participant )
> )
> {code}
> repair_validations - shows the state of the validation task and updated 
> periodically while validation is running; this should be called on the 
> participants.
> {code:sql}
> CREATE TABLE repair_validations (
>   id uuid,
>   session_id uuid,
>   ranges frozen<list<text>>,
>   keyspace_name text,
>   table_name text,
>   initiator text,
>   state text,
>   progress_percentage float,
>   queue_duration_ms bigint,
>   runtime_duration_ms bigint,
>   total_duration_ms bigint,
>   estimated_partitions bigint,
>   partitions_processed bigint,
>   estimated_total_bytes bigint,
>   failure_cause text,
>   PRIMARY KEY ( (id), session_id, table_name )
> )
> {code}
> The main reason for exposing virtual tables rather than exposing through 
> durable tables is to make sure what is exposed is accurate.  In cases of 
> write failures or node failures, the durable tables could become in-accurate 
> and could add edge cases where the repair is not running but the tables say 
> it is; by relying on repair's internal in-memory bookkeeping, these problems 
> go away.
> This jira does not try to solve the following:
> 1) repair resiliency - there are edge cases where repair hits an error and 
> runs forever (at least from nodetool's perspective).
> 2) repair stream tracking - I have not learned the streaming side yet and 
> what I see is multiple implementations exist, so seems like high scope.  My 
> hope is to punt from this jira and tackle separately.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to