* Increase the sleep periods a bit to make the test less likely to
fail on slow machines. Of course it would be better if this test wasn't timing dependent...
This commit is contained in:
		
							parent
							
								
									5664b6d7ba
								
							
						
					
					
						commit
						c03b729319
					
				
					 4 changed files with 17 additions and 16 deletions
				
			
		| 
						 | 
					@ -638,10 +638,6 @@ void LocalStore::collectGarbage(const GCOptions & options, GCResults & results)
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
            tempRootsClosed.insert(*i);
 | 
					            tempRootsClosed.insert(*i);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* For testing - see tests/gc-concurrent.sh. */
 | 
					 | 
				
			||||||
    if (getenv("NIX_DEBUG_GC_WAIT"))
 | 
					 | 
				
			||||||
        sleep(2);
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    /* After this point the set of roots or temporary roots cannot
 | 
					    /* After this point the set of roots or temporary roots cannot
 | 
				
			||||||
       increase, since we hold locks on everything.  So everything
 | 
					       increase, since we hold locks on everything.  So everything
 | 
				
			||||||
       that is not currently in in `livePaths' or `tempRootsClosed'
 | 
					       that is not currently in in `livePaths' or `tempRootsClosed'
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,8 +1,11 @@
 | 
				
			||||||
mkdir $out
 | 
					mkdir $out
 | 
				
			||||||
echo $(cat $input1/foo)$(cat $input2/bar) > $out/foobar
 | 
					echo $(cat $input1/foo)$(cat $input2/bar) > $out/foobar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sleep 5
 | 
					sleep 10
 | 
				
			||||||
mkdir $out || true
 | 
					
 | 
				
			||||||
 | 
					# $out should not have been GC'ed while we were sleeping, but just in
 | 
				
			||||||
 | 
					# case...
 | 
				
			||||||
 | 
					mkdir -p $out
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Check that the GC hasn't deleted the lock on our output.
 | 
					# Check that the GC hasn't deleted the lock on our output.
 | 
				
			||||||
test -e "$out.lock"
 | 
					test -e "$out.lock"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,7 @@
 | 
				
			||||||
source common.sh
 | 
					source common.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$NIX_BIN_DIR/nix-collect-garbage -vvvvv
 | 
				
			||||||
 | 
					
 | 
				
			||||||
drvPath1=$($nixinstantiate gc-concurrent.nix)
 | 
					drvPath1=$($nixinstantiate gc-concurrent.nix)
 | 
				
			||||||
outPath1=$($nixstore -q $drvPath1)
 | 
					outPath1=$($nixstore -q $drvPath1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,15 +15,13 @@ ln -s $drvPath2 "$NIX_STATE_DIR"/gcroots/foo
 | 
				
			||||||
$nixstore -rvv "$drvPath1" &
 | 
					$nixstore -rvv "$drvPath1" &
 | 
				
			||||||
pid1=$!
 | 
					pid1=$!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Start build #2 in the background after 3 seconds.
 | 
					# Start build #2 in the background after 6 seconds.
 | 
				
			||||||
(sleep 3 && $nixstore -rvv "$drvPath2") &
 | 
					(sleep 6 && $nixstore -rvv "$drvPath2") &
 | 
				
			||||||
pid2=$!
 | 
					pid2=$!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Run the garbage collector while the build is running.  Note: the GC
 | 
					# Run the garbage collector while the build is running.
 | 
				
			||||||
# sleeps for *another* 2 seconds after acquiring the GC lock.  This
 | 
					sleep 4
 | 
				
			||||||
# checks whether build #1
 | 
					$NIX_BIN_DIR/nix-collect-garbage -vvvvv
 | 
				
			||||||
sleep 2
 | 
					 | 
				
			||||||
NIX_DEBUG_GC_WAIT=1 $NIX_BIN_DIR/nix-collect-garbage -vvvvv
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Wait for build #1/#2 to finish.
 | 
					# Wait for build #1/#2 to finish.
 | 
				
			||||||
echo waiting for pid $pid1 to finish...
 | 
					echo waiting for pid $pid1 to finish...
 | 
				
			||||||
| 
						 | 
					@ -30,11 +30,13 @@ echo waiting for pid $pid2 to finish...
 | 
				
			||||||
wait $pid2
 | 
					wait $pid2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Check that the root of build #1 and its dependencies haven't been
 | 
					# Check that the root of build #1 and its dependencies haven't been
 | 
				
			||||||
# deleted.
 | 
					# deleted.  The should not be deleted by the GC because they were
 | 
				
			||||||
 | 
					# being built during the GC.
 | 
				
			||||||
cat $outPath1/foobar
 | 
					cat $outPath1/foobar
 | 
				
			||||||
cat $outPath1/input-2/bar
 | 
					cat $outPath1/input-2/bar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Build #2 should have failed because its derivation got garbage collected.
 | 
					# Check that build #2 has succeeded.  It should succeed because the
 | 
				
			||||||
 | 
					# derivation is a GC root.
 | 
				
			||||||
cat $outPath2/foobar
 | 
					cat $outPath2/foobar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
rm "$NIX_STATE_DIR"/gcroots/foo
 | 
					rm "$NIX_STATE_DIR"/gcroots/foo
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,4 +4,4 @@ echo $(cat $input1/foo)$(cat $input2/bar)xyzzy > $out/foobar
 | 
				
			||||||
# Check that the GC hasn't deleted the lock on our output.
 | 
					# Check that the GC hasn't deleted the lock on our output.
 | 
				
			||||||
test -e "$out.lock"
 | 
					test -e "$out.lock"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sleep 3
 | 
					sleep 6
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue