int JobManager::pauseJob(string JobId) { QMutexLocker locker(&m_mutex_MAP_JOBID_LISTTASK); JOBID2LISTTASK::iterator it = MAP_JOBID_LISTTASK.find(JobId); if(it != MAP_JOBID_LISTTASK.end()){ list<Task*> lpt = it->second; list<Task*>::iterator itl = lpt.begin(); for( ; itl != lpt.end() ; itl++ ) { if((*itl)->status == WAITING){ m_pJobScheduler->removeTaskFromWaitList(*itl); (*itl)->status = PAUSED; m_SQLITE_wrapper->insertTask(JobId, *itl); }else if((*itl)->status == RUNNING){ m_pJobScheduler->stopTask(*itl); (*itl)->status = PAUSED; m_SQLITE_wrapper->insertTask(JobId, *itl); } } }else{ idebug("Can not find JobId %s\n", JobId.c_str()); } return 0; }
int SQLITE_wrapper::openDB ( ) { QMutexLocker locker(&s_qMutex4EverFunc); int ret; ret = sqlite3_open(m_DBurl.c_str(),&db); if(ret != SQLITE_OK){ fprintf(stderr,"Cannot open db: %s\n",sqlite3_errmsg(db)); return 1; } idebug("%s %s\n", "Open database", m_DBurl.c_str()); return 0; } /* ----- end of method SQLITE_wrapper::openDB ----- */
Boolean v4pDisplayEnd() { int i ; static int j=0; UInt32 t2=TimGetTicks(); tlaps-=laps[j % 4]; tlaps+=laps[j % 4]=t2-t1; j++; idebug(tlaps); // Bilan des collides for (i = 0 ; i < 16 ; i++) { if (!collides[i].q) continue ; collides[i].x /= collides[i].q ; collides[i].y /= collides[i].q ; } return success ; }
int JobManager::continueJob(string JobId) { QMutexLocker locker(&m_mutex_MAP_JOBID_LISTTASK); JOBID2LISTTASK::iterator it = MAP_JOBID_LISTTASK.find(JobId); if(it != MAP_JOBID_LISTTASK.end()){ list<Task*> lpt = it->second; list<Task*>::iterator itl = lpt.begin(); for( ; itl != lpt.end() ; itl++ ) { if((*itl)->status == PAUSED){ (*itl)->status = WAITING; m_pJobScheduler->pushTask2Wait(*itl); m_SQLITE_wrapper->insertTask(JobId, *itl); } } }else{ idebug("Can not find JobId %s\n", JobId.c_str()); } return 0; }
int insertGeneric( sqlite3 *db, const char *table, const char keys[18][18], const char *types, vector<string> values, int n_column ) { QMutexLocker locker(&s_qMutex4EverFunc); string sql; int result; sqlite3_stmt *stmt; int id; sql = ""; sql += "SELECT " ; sql += keys[0]; sql += " FROM "; sql += table; sql += " WHERE "; sql += keys[0]; sql += " = "; sql += values[0]; sql += " ;"; //idebug ( "sql = %s\n", sql.c_str() ); result = sqlite3_prepare_v2( db, sql.c_str(), strlen( sql.c_str() ), &stmt, NULL ); assert( result == SQLITE_OK ); if ( sqlite3_step( stmt ) == SQLITE_ROW ) { /* a key/value was found in table, query the ROWID */ id = sqlite3_column_int( stmt, 0 ); assert( sqlite3_step( stmt ) == SQLITE_DONE ); sqlite3_finalize( stmt ); sql = ""; sql += "UPDATE "; sql += table; sql += " SET "; string tmps; for( int i = 1 ; i < n_column; i++ ) { switch ( types[i] ) { case 'd' : tmps = values[i]; break; case 's' : tmps = "'"; tmps += values[i]; tmps += "'"; break; default : break; } sql += keys[i]; sql += "="; sql += tmps; if(i != n_column-1) sql += ", "; } sql += " WHERE "; sql += keys[0]; sql +="="; sql += values[0]; sql += ";"; idebug ( "sql = %s\n", sql.c_str() ); result = sqlite3_exec( db, sql.c_str(), NULL, NULL, NULL ); assert( result == SQLITE_OK ); } else { /* key/value is not in table, so insert it */ sqlite3_finalize( stmt ); sql = ""; sql += "INSERT INTO "; sql += table; sql += "( "; for( int i = 0 ; i < n_column ; i++ ) { sql += keys[i]; if(i != n_column-1) sql += ","; } sql += " )VALUES( "; string tmps; for( int i = 0 ; i < n_column ; i++ ) { switch ( types[i] ) { case 'd' : tmps = values[i]; break; case 's' : tmps = "'"; tmps += values[i]; tmps += "'"; break; default : break; } sql += tmps; if(i != n_column-1) sql += ","; } sql += " );"; idebug ( "sql = %s\n", sql.c_str() ); result = sqlite3_exec( db, sql.c_str(), NULL, NULL, NULL ); assert( result == SQLITE_OK ); } return result; }
JOBID2LISTTASK queryTasks(vector<TaskStatus> vt, vector<string> vjob, string table) { QMutexLocker locker(&s_qMutex4EverFunc); JOBID2LISTTASK j2lt; string sql; sqlite3_stmt *stmt; int result; char tmpcs[10]; j2lt.clear(); if( vt.size() <= 0 ) { return j2lt; } sql = "SELECT JobId FROM "; sql += table; sql += " GROUP BY JobId;"; result = sqlite3_prepare_v2( db, sql.c_str(), strlen( sql.c_str() ), &stmt, NULL ); assert( result == SQLITE_OK ); while( sqlite3_step( stmt ) == SQLITE_ROW ) { char *ts = (char*)sqlite3_column_blob(stmt, 0); idebug("%s\n", ts); sqlite3_stmt *stmt_t; if( vjob.size() > 0) if(find(vjob.begin(), vjob.end(), string(ts)) == vjob.end()) continue; sql = "SELECT * FROM "; sql += table; sql += " WHERE (status = "; for( int i = 0 ; i < vt.size() ; i++ ) { memset(tmpcs, 0, 10); sprintf(tmpcs, "%d", vt[i]); sql += tmpcs; if( i != vt.size() -1){ sql += " OR status = "; } } sql += ") AND JobId = '"; sql += ts; sql += "';"; idebug("sql = %s\n", sql.c_str()); result = sqlite3_prepare_v2( db, sql.c_str(), strlen( sql.c_str() ), &stmt_t, NULL ); assert( result == SQLITE_OK ); list<Task*> lpt; Task* pt; while( sqlite3_step( stmt_t ) == SQLITE_ROW ) { pt = new Task; //memset(pt, 0, sizeof(Task)); pt->taskId = sqlite3_column_int64( stmt_t, 0 ); if(char *str = (char*)sqlite3_column_blob( stmt_t, 1 ) ) strcpy(pt->beginTime, str); if(char *str = (char*)sqlite3_column_blob( stmt_t, 2 ) ) strcpy(pt->endTime, str); if(char *str = (char*)sqlite3_column_blob( stmt_t, 3 )) strcpy(pt->host, str); pt->mpiPid = sqlite3_column_int( stmt_t, 4 ); pt->pid = sqlite3_column_int( stmt_t, 5 ); pt->threadId = sqlite3_column_int( stmt_t, 6 ); pt->status = (TaskStatus)sqlite3_column_int( stmt_t, 7 ); pt->taskInfo.execType = sqlite3_column_int( stmt_t, 8 ); pt->taskInfo.cmd= sqlite3_column_int( stmt_t, 9 ); pt->taskInfo.timeout = sqlite3_column_int( stmt_t, 10 ); pt->taskInfo.priority = sqlite3_column_int( stmt_t, 11 ); if(char *str = (char*)sqlite3_column_blob( stmt_t, 12 )) strcpy(pt->taskInfo.libName, str); if(char *str = (char*)sqlite3_column_blob( stmt_t, 13 )) strcpy(pt->taskInfo.funName, str); if(char *str = (char*)sqlite3_column_blob( stmt_t, 14 )) strcpy(pt->taskInfo.paraType, str); int num_para; char *pk = strchr(pt->taskInfo.paraType, ')'); if(pk != 0){ num_para = int(pk - pt->taskInfo.paraType); }else{ num_para = strlen(pt->taskInfo.paraType); } if(char *str = (char*)sqlite3_column_blob( stmt_t, 15 )){ idebug("%s\n", str); char *saveptr; for( int i = 0 ; i < num_para ; i++ ) { #ifdef _WINDOWS if( char* subs = strtok_s(str, "#", &saveptr) ) strcpy(pt->taskInfo.paraValue[i], subs); #else /* ----- not _WINDOWS ----- */ if( char* subs = strtok_r(str, "#", &saveptr) ) strcpy(pt->taskInfo.paraValue[i], subs); #endif /* ----- not _WINDOWS ----- */ str = NULL; } } pt->m_seconds = sqlite3_column_int( stmt_t, 16 ); idebug("taskId = %lld\n", pt->taskId); lpt.push_back(pt); } sqlite3_finalize( stmt_t ); if( lpt.size() > 0 ) { j2lt[ts] = lpt; } } sqlite3_finalize( stmt ); return j2lt; }