levy5307 commented on code in PR #1476:
URL: 
https://github.com/apache/incubator-pegasus/pull/1476#discussion_r1196096433


##########
src/common/fs_manager.cpp:
##########
@@ -134,68 +137,63 @@ bool dir_node::update_disk_stat(const bool 
update_disk_status)
     return (old_status != new_status);
 }
 
-fs_manager::fs_manager(bool for_test)
+fs_manager::fs_manager()
 {
-    if (!for_test) {
-        _counter_total_capacity_mb.init_app_counter("eon.replica_stub",
-                                                    "disk.capacity.total(MB)",
+    _counter_total_capacity_mb.init_app_counter("eon.replica_stub",
+                                                "disk.capacity.total(MB)",
+                                                COUNTER_TYPE_NUMBER,
+                                                "total disk capacity in MB");
+    _counter_total_available_mb.init_app_counter("eon.replica_stub",
+                                                 "disk.available.total(MB)",
+                                                 COUNTER_TYPE_NUMBER,
+                                                 "total disk available in MB");
+    _counter_total_available_ratio.init_app_counter("eon.replica_stub",
+                                                    
"disk.available.total.ratio",
                                                     COUNTER_TYPE_NUMBER,
-                                                    "total disk capacity in 
MB");
-        _counter_total_available_mb.init_app_counter("eon.replica_stub",
-                                                     
"disk.available.total(MB)",
-                                                     COUNTER_TYPE_NUMBER,
-                                                     "total disk available in 
MB");
-        _counter_total_available_ratio.init_app_counter("eon.replica_stub",
-                                                        
"disk.available.total.ratio",
-                                                        COUNTER_TYPE_NUMBER,
-                                                        "total disk available 
ratio");
-        _counter_min_available_ratio.init_app_counter("eon.replica_stub",
-                                                      
"disk.available.min.ratio",
-                                                      COUNTER_TYPE_NUMBER,
-                                                      "minimal disk available 
ratio in all disks");
-        _counter_max_available_ratio.init_app_counter("eon.replica_stub",
-                                                      
"disk.available.max.ratio",
-                                                      COUNTER_TYPE_NUMBER,
-                                                      "maximal disk available 
ratio in all disks");
-    }
+                                                    "total disk available 
ratio");
+    _counter_min_available_ratio.init_app_counter("eon.replica_stub",
+                                                  "disk.available.min.ratio",
+                                                  COUNTER_TYPE_NUMBER,
+                                                  "minimal disk available 
ratio in all disks");
+    _counter_max_available_ratio.init_app_counter("eon.replica_stub",
+                                                  "disk.available.max.ratio",
+                                                  COUNTER_TYPE_NUMBER,
+                                                  "maximal disk available 
ratio in all disks");
 }
 
 dir_node *fs_manager::get_dir_node(const std::string &subdir) const
 {
-    zauto_read_lock l(_lock);
     std::string norm_subdir;
     utils::filesystem::get_normalized_path(subdir, norm_subdir);
-    for (auto &n : _dir_nodes) {
-        // if input is a subdir of some dir_nodes
-        const std::string &d = n->full_dir;
-        if (norm_subdir.compare(0, d.size(), d) == 0 &&
-            (norm_subdir.size() == d.size() || norm_subdir[d.size()] == '/')) {
-            return n.get();
+
+    zauto_read_lock l(_lock);
+    for (const auto &dn : _dir_nodes) {
+        // Check if 'subdir' is a sub-directory of 'dn'.
+        const std::string &dir = dn->full_dir;
+        if (norm_subdir.compare(0, dir.size(), dir) == 0 &&

Review Comment:
   ``` if (norm_subdir.compare(0, dir.size(), dir) == 0 &&
               (norm_subdir.size() == dir.size() || norm_subdir[dir.size()] == 
'/'))```
   ==>
   ```
    if ((norm_subdir.size() == dir.size() || norm_subdir[dir.size()] == '/') && 
norm_subdir.compare(0, dir.size(), dir) == 0)
   ```



##########
src/common/fs_manager.cpp:
##########
@@ -211,20 +209,21 @@ dsn::error_code fs_manager::get_disk_tag(const 
std::string &dir, std::string &ta
 
 void fs_manager::add_replica(const gpid &pid, const std::string &pid_dir)
 {
-    dir_node *n = get_dir_node(pid_dir);
-    if (nullptr == n) {
+    const auto &dn = get_dir_node(pid_dir);
+    if (nullptr == dn) {
         LOG_ERROR(
             "{}: dir({}) of gpid({}) haven't registered", 
dsn_primary_address(), pid_dir, pid);
+        return;
+    }
+
+    zauto_write_lock l(_lock);
+    auto &replicas_for_app = dn->holding_replicas[pid.get_app_id()];

Review Comment:
   ```
   {   
       zauto_write_lock l(_lock);
       auto &replicas_for_app = dn->holding_replicas[pid.get_app_id()];
       auto result = replicas_for_app.emplace(pid);
   }
   ```



##########
src/common/fs_manager.cpp:
##########
@@ -211,20 +209,21 @@ dsn::error_code fs_manager::get_disk_tag(const 
std::string &dir, std::string &ta
 
 void fs_manager::add_replica(const gpid &pid, const std::string &pid_dir)
 {
-    dir_node *n = get_dir_node(pid_dir);
-    if (nullptr == n) {
+    const auto &dn = get_dir_node(pid_dir);
+    if (nullptr == dn) {

Review Comment:
   `dsn_unlikely` ?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to