summaryrefslogtreecommitdiff
blob: 6b70bd4aed03786a957ffa249f816156c8e1f97c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
From 71b9eaaf6ec2c22715b772315321c28cdcfecdae Mon Sep 17 00:00:00 2001
Message-Id: <71b9eaaf6ec2c22715b772315321c28cdcfecdae.1574946436.git.asias@scylladb.com>
From: Asias He <asias@scylladb.com>
Date: Thu, 28 Nov 2019 20:41:25 +0800
Subject: [PATCH scylla] repair: Repair tables in parallel
To: scylladb-dev@googlegroups.com

---
 repair/repair.cc | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/repair/repair.cc b/repair/repair.cc
index c3e72854d6..3485605d4a 100644
--- a/repair/repair.cc
+++ b/repair/repair.cc
@@ -938,6 +938,8 @@ static future<> repair_cf_range(repair_info& ri,
     });
 }
 
+static thread_local semaphore tables_parallelism_semaphore(16);
+
 // Repair a single local range, multiple column families.
 // Comparable to RepairSession in Origin
 static future<> repair_range(repair_info& ri, const dht::token_range& range) {
@@ -956,13 +958,15 @@ static future<> repair_range(repair_info& ri, const dht::token_range& range) {
             neighbors.swap(live_neighbors);
       }
       return ::service::get_local_migration_manager().sync_schema(ri.db.local(), neighbors).then([&neighbors, &ri, range, id] {
-        return do_for_each(ri.cfs.begin(), ri.cfs.end(), [&ri, &neighbors, range] (auto&& cf) {
+        return parallel_for_each(ri.cfs.begin(), ri.cfs.end(), [&ri, &neighbors, range] (auto&& cf) {
+          return with_semaphore(tables_parallelism_semaphore, 1, [&ri, &neighbors, &cf, range] {
             ri._sub_ranges_nr++;
             if (ri.row_level_repair()) {
                 return repair_cf_range_row_level(ri, cf, range, neighbors);
             } else {
                 return repair_cf_range(ri, cf, range, neighbors);
             }
+          });
         });
       });
     });
-- 
2.23.0