mirror of
				https://github.com/ClusterCockpit/cc-backend
				synced 2025-11-04 01:25:06 +01:00 
			
		
		
		
	Fix node filter: Use EXISTS with Eq for exact match and LIKE for Contains
This commit is contained in:
		@@ -194,11 +194,11 @@ func (r *JobRepository) FindConcurrentJobs(
 | 
			
		||||
 | 
			
		||||
	queryRunning := query.Where("job.job_state = ?").Where("(job.start_time BETWEEN ? AND ? OR job.start_time < ?)",
 | 
			
		||||
		"running", startTimeTail, stopTimeTail, startTime)
 | 
			
		||||
	queryRunning = queryRunning.Where("job.resources LIKE ?", fmt.Sprint("%", hostname, "%"))
 | 
			
		||||
	queryRunning = queryRunning.Where("EXISTS (SELECT 1 FROM json_each(job.resources) WHERE json_extract(value, '$.hostname') = ?)", hostname)
 | 
			
		||||
 | 
			
		||||
	query = query.Where("job.job_state != ?").Where("((job.start_time BETWEEN ? AND ?) OR (job.start_time + job.duration) BETWEEN ? AND ? OR (job.start_time < ?) AND (job.start_time + job.duration) > ?)",
 | 
			
		||||
		"running", startTimeTail, stopTimeTail, startTimeFront, stopTimeTail, startTime, stopTime)
 | 
			
		||||
	query = query.Where("job.resources LIKE ?", fmt.Sprint("%", hostname, "%"))
 | 
			
		||||
	query = query.Where("EXISTS (SELECT 1 FROM json_each(job.resources) WHERE json_extract(value, '$.hostname') = ?)", hostname)
 | 
			
		||||
 | 
			
		||||
	rows, err := query.RunWith(r.stmtCache).Query()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
 
 | 
			
		||||
@@ -194,7 +194,14 @@ func BuildWhereClause(filter *model.JobFilter, query sq.SelectBuilder) sq.Select
 | 
			
		||||
		query = buildIntCondition("job.num_hwthreads", filter.NumHWThreads, query)
 | 
			
		||||
	}
 | 
			
		||||
	if filter.Node != nil {
 | 
			
		||||
		query = buildStringCondition("job.resources", filter.Node, query)
 | 
			
		||||
		log.Infof("Applying node filter: %v", filter.Node)
 | 
			
		||||
		if filter.Node.Eq != nil {
 | 
			
		||||
			query = query.Where("EXISTS (SELECT 1 FROM json_each(job.resources) WHERE json_extract(value, '$.hostname') = ?)", *filter.Node.Eq)
 | 
			
		||||
		} else if filter.Node.Contains != nil {
 | 
			
		||||
			query = query.Where("EXISTS (SELECT 1 FROM json_each(job.resources) WHERE json_extract(value, '$.hostname') LIKE ?)", "%"+*filter.Node.Contains+"%")
 | 
			
		||||
		} else {
 | 
			
		||||
			query = buildStringCondition("job.resources", filter.Node, query)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if filter.Energy != nil {
 | 
			
		||||
		query = buildFloatCondition("job.energy", filter.Energy, query)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user