Author: simoneg
Date: Wed May 25 15:01:50 2011
New Revision: 1127548

URL: http://svn.apache.org/viewvc?rev=1127548&view=rev
Log:
Logme where a runtime exception happen during merge

Modified:
    
labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/TransactionSecondPhaseThread.java

Modified: 
labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/TransactionSecondPhaseThread.java
URL: 
http://svn.apache.org/viewvc/labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/TransactionSecondPhaseThread.java?rev=1127548&r1=1127547&r2=1127548&view=diff
==============================================================================
--- 
labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/TransactionSecondPhaseThread.java
 (original)
+++ 
labs/magma/trunk/database-mongodb/src/main/java/org/apache/magma/database/mongo/TransactionSecondPhaseThread.java
 Wed May 25 15:01:50 2011
@@ -11,6 +11,7 @@ import java.util.SortedSet;
 import java.util.TreeSet;
 
 import org.apache.commons.beanutils.converters.StringArrayConverter;
+import org.apache.magma.basics.MagmaException;
 import org.bson.BSONObject;
 
 import com.mongodb.BasicDBList;
@@ -406,93 +407,95 @@ public class TransactionSecondPhaseThrea
 
        public boolean mergeTransactions(DBObject entdoc, String colldb, String 
collname, String entid) {
                String logid = colldb+":"+collname+":"+entid;
-               
-               Object entTrObj = entdoc.get("__transactions");
-               if (entTrObj == null) {
-                       logger.warning(logid, "entity has no transactions, 
probably it has already been committed");
-                       return true;
-               }
-               if (!(entTrObj instanceof List)) {
-                       logger.error(logid,"transactions are not a list !?? 
Nothing we can do anyway");
-                       return true;
-               }
-               List entTr = (List) entTrObj;
-               List<TransactionPart> parts = new ArrayList<TransactionPart>();
-               for (Object entTrPartObj : entTr) {
-                       if (!(entTrPartObj instanceof BSONObject)) {
-                               logger.error(logid,"there is a part which is 
not a BSONObject!? Nothing we can do anyway");
-                               continue;                                       
                                                                                
                                                
+               try {
+                       Object entTrObj = entdoc.get("__transactions");
+                       if (entTrObj == null) {
+                               logger.warning(logid, "entity has no 
transactions, probably it has already been committed");
+                               return true;
+                       }
+                       if (!(entTrObj instanceof List)) {
+                               logger.error(logid,"transactions are not a list 
!?? Nothing we can do anyway");
+                               return true;
+                       }
+                       List entTr = (List) entTrObj;
+                       List<TransactionPart> parts = new 
ArrayList<TransactionPart>();
+                       for (Object entTrPartObj : entTr) {
+                               if (!(entTrPartObj instanceof BSONObject)) {
+                                       logger.error(logid,"there is a part 
which is not a BSONObject!? Nothing we can do anyway");
+                                       continue;                               
                                                                                
                                                        
+                               }
+                               TransactionPart entTrPart = new 
TransactionPart((BSONObject)entTrPartObj);
+                               parts.add(entTrPart);
                        }
-                       TransactionPart entTrPart = new 
TransactionPart((BSONObject)entTrPartObj);
-                       parts.add(entTrPart);
-               }
-               Collections.sort(parts);
-               
-               
-               boolean deleted = false;
-               boolean runningfound = false;
-               List<String> dones = new ArrayList<String>();
-               for (TransactionPart part: parts) {
-                       if (part.isDeleted()) {
-                               deleted = true;
-                               break;
-                       }
-                       TransactionState ts = 
loadTransaction(part.getTransactionId());
-                       if (ts.isDone() || ts.isMissing()) {
-                               if (!runningfound) {
-                                       if (ts.isMissing()) {
-                                               logger.warning(logid,"refers to 
the missing transaction " + ts.getId() + ", considering it as done");           
                                                                
+                       Collections.sort(parts);
+                       
+                       
+                       boolean deleted = false;
+                       boolean runningfound = false;
+                       List<String> dones = new ArrayList<String>();
+                       for (TransactionPart part: parts) {
+                               if (part.isDeleted()) {
+                                       deleted = true;
+                                       break;
+                               }
+                               TransactionState ts = 
loadTransaction(part.getTransactionId());
+                               if (ts.isDone() || ts.isMissing()) {
+                                       if (!runningfound) {
+                                               if (ts.isMissing()) {
+                                                       
logger.warning(logid,"refers to the missing transaction " + ts.getId() + ", 
considering it as done");                                                       
                    
+                                               }
+                                               part.reapply(entdoc);
+                                               dones.add(ts.getId());
                                        }
-                                       part.reapply(entdoc);
-                                       dones.add(ts.getId());
+                               } else if (ts.isFailed()) {
+                                       // We consider it done so that it is 
removed
+                                       dones.add(ts.getId());                  
        
+                               } else if (ts.isRunning()) {
+                                       runningfound = true;
                                }
-                       } else if (ts.isFailed()) {
-                               // We consider it done so that it is removed
-                               dones.add(ts.getId());                          
-                       } else if (ts.isRunning()) {
-                               runningfound = true;
                        }
-               }
-               
-               BasicDBObject entsearch = new BasicDBObject();
-               entsearch.put("_id", entdoc.get("_id"));
-               int version = (Integer) 
MongoUtils.convertFromMongo(entdoc.get("version"), Integer.TYPE);
-               entsearch.put("version", version);
-               entdoc.put("version", version + 1);
-
-               WriteResult result = null;
-               MongoCollection entcoll = db.getCollection(colldb, collname);
-               if (deleted) {
-                       result = entcoll.remove(entsearch, concern);
-                       if (result.getError() != null) {
-                               logger.error(logid, "Error " + (deleted ? 
"deleting":"updating")  + " : " + result.getError());
-                               return false;
-                       } else if (result.getN() == 0) {
-                               logger.entitiesSkip++;
-                               // If we were deleting, we can safely ignore 
this, maybe someone else deleted it
-                               return deleted;
+                       
+                       BasicDBObject entsearch = new BasicDBObject();
+                       entsearch.put("_id", entdoc.get("_id"));
+                       int version = (Integer) 
MongoUtils.convertFromMongo(entdoc.get("version"), Integer.TYPE);
+                       entsearch.put("version", version);
+                       entdoc.put("version", version + 1);
+       
+                       WriteResult result = null;
+                       MongoCollection entcoll = db.getCollection(colldb, 
collname);
+                       if (deleted) {
+                               result = entcoll.remove(entsearch, concern);
+                               if (result.getError() != null) {
+                                       logger.error(logid, "Error " + (deleted 
? "deleting":"updating")  + " : " + result.getError());
+                                       return false;
+                               } else if (result.getN() == 0) {
+                                       logger.entitiesSkip++;
+                                       // If we were deleting, we can safely 
ignore this, maybe someone else deleted it
+                                       return deleted;
+                               } else {
+                                       logger.entitiesDone++;
+                               }                       
                        } else {
+                               // Remove done transaction parts
+                               for (Iterator iterator = entTr.iterator(); 
iterator.hasNext();) {
+                                       Object entTrPartObj = (Object) 
iterator.next();
+                                       if (!(entTrPartObj instanceof 
BSONObject)) continue;
+                                       BSONObject entTrPartDoc = 
(BSONObject)entTrPartObj;
+                                       String entTrPartTrId = (String) 
entTrPartDoc.get("__transactionId");
+                                       if (dones.contains(entTrPartTrId))
+                                               iterator.remove();
+                               }
+                               
+                               // Using normal write concern here .. if it 
fails for some reason, it will eventually be made consistent again upon read
+                               // FIXME does this make sense? It seems to 
provide no serious improvement
+                               result = entcoll.update(entsearch, entdoc, 
false, false, WriteConcern.NORMAL);
                                logger.entitiesDone++;
-                       }                       
-               } else {
-                       // Remove done transaction parts
-                       for (Iterator iterator = entTr.iterator(); 
iterator.hasNext();) {
-                               Object entTrPartObj = (Object) iterator.next();
-                               if (!(entTrPartObj instanceof BSONObject)) 
continue;
-                               BSONObject entTrPartDoc = 
(BSONObject)entTrPartObj;
-                               String entTrPartTrId = (String) 
entTrPartDoc.get("__transactionId");
-                               if (dones.contains(entTrPartTrId))
-                                       iterator.remove();
                        }
                        
-                       // Using normal write concern here .. if it fails for 
some reason, it will eventually be made consistent again upon read
-                       // FIXME does this make sense? It seems to provide no 
serious improvement
-                       result = entcoll.update(entsearch, entdoc, false, 
false, WriteConcern.NORMAL);
-                       logger.entitiesDone++;
+                       return true;
+               } catch (RuntimeException e) {
+                       throw new MagmaException(e, "On " + logid);
                }
-               
-               return true;
-               
        }               
        
        public static void main(String[] args) throws Exception {



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

Reply via email to