Ejemplo n.º 1
0
 /**
  * Register a new fragment for a specific query
  *
  * @param queryIdentifier
  * @param appIdString
  * @param dagName
  * @param dagIdentifier
  * @param vertexName
  * @param fragmentNumber
  * @param attemptNumber
  * @param user
  * @throws IOException
  */
 QueryFragmentInfo registerFragment(
     QueryIdentifier queryIdentifier,
     String appIdString,
     String dagName,
     int dagIdentifier,
     String vertexName,
     int fragmentNumber,
     int attemptNumber,
     String user,
     FragmentSpecProto fragmentSpec)
     throws IOException {
   ReadWriteLock dagLock = getDagLock(queryIdentifier);
   dagLock.readLock().lock();
   try {
     if (!completedDagMap.contains(queryIdentifier)) {
       QueryInfo queryInfo = queryInfoMap.get(queryIdentifier);
       if (queryInfo == null) {
         queryInfo =
             new QueryInfo(
                 queryIdentifier,
                 appIdString,
                 dagName,
                 dagIdentifier,
                 user,
                 getSourceCompletionMap(queryIdentifier),
                 localDirsBase,
                 localFs);
         queryInfoMap.putIfAbsent(queryIdentifier, queryInfo);
       }
       return queryInfo.registerFragment(vertexName, fragmentNumber, attemptNumber, fragmentSpec);
     } else {
       // Cleanup the dag lock here, since it may have been created after the query completed
       dagSpecificLocks.remove(queryIdentifier);
       throw new RuntimeException(
           "Dag "
               + dagName
               + " already complete. Rejecting fragment ["
               + vertexName
               + ", "
               + fragmentNumber
               + ", "
               + attemptNumber
               + "]");
     }
   } finally {
     dagLock.readLock().unlock();
   }
 }