You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by si...@apache.org on 2011/05/25 17:01:51 UTC

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

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: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org