in this case:

1. /hypertable/servers/IP_38060/log/range_txn/0.log  exists
2. RangeServer found 0.log file, start recovering
3. RangeServer dead while recovering , 0.log and 0.log.tmp both exists
4. restarting RangeServer, found 0.log
5. trying to create 0.log.tmp, with no overwrite option, fail.

this patch would work for this case: creating a file with overwriting
option:

diff --git a/src/cc/Hypertable/Lib/RangeServerMetaLog.cc b/src/cc/
Hypertable/Lib/RangeServerMetaLog.cc
index a2c655b..340c651 100644
--- a/src/cc/Hypertable/Lib/RangeServerMetaLog.cc
+++ b/src/cc/Hypertable/Lib/RangeServerMetaLog.cc
@@ -70,7 +70,7 @@ RangeServerMetaLog::recover(const String &path) {
   String tmp(path);
   tmp += ".tmp";

-  fd(create(tmp));
+  fd(create(tmp, true));
   write_header();

   // copy the metalog and potentially skip the last bad entry
@@ -82,6 +82,7 @@ RangeServerMetaLog::recover(const String &path) {
   while ((entry = reader->read()))
     write(entry.get());

+  fs().remove(path);
   fs().rename(tmp, path);
 }


the reason why I inserted fs().remove(path): in some filesystem,
renaming does not automatically remove the destination file


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Hypertable Development" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/hypertable-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to