Merge branch 'master' into threaded
This commit is contained in:
		
				commit
				
					
						fc5652c811
					
				
			
		
					 4 changed files with 78 additions and 2 deletions
				
			
		|  | @ -10,8 +10,10 @@ module Git.Merge where | |||
| import Common | ||||
| import Git | ||||
| import Git.Command | ||||
| import Git.Version | ||||
| 
 | ||||
| {- Avoids recent git's interactive merge. -} | ||||
| mergeNonInteractive :: Ref -> Repo -> IO Bool | ||||
| mergeNonInteractive branch = runBool "merge" | ||||
| 	[Param "--no-edit", Param $ show branch] | ||||
| mergeNonInteractive branch | ||||
| 	| older "1.7.7.6" = runBool "merge" [Param $ show branch] | ||||
| 	| otherwise = runBool "merge" [Param "--no-edit", Param $ show branch] | ||||
|  |  | |||
							
								
								
									
										64
									
								
								doc/design/assistant/blog/day_37__back.mdwn
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								doc/design/assistant/blog/day_37__back.mdwn
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,64 @@ | |||
| Back home and laptop is fixed.. back to work. | ||||
| 
 | ||||
| Warmup exercises: | ||||
| 
 | ||||
| * Went in to make it queue transfers when a broken symlink is received, | ||||
|   only to find I'd already written code to do that, and forgotten about it. | ||||
|   Heh. Did check that the git-annex branch is always sent first, | ||||
|   which will ensure that code always knows where to transfer a key from. | ||||
|   I had probably not considered this wrinkle when first writing the code; | ||||
|   it worked by accident. | ||||
| 
 | ||||
| * Made the assistant check that a remote is known to have a key before | ||||
|   queueing a download from it. | ||||
| 
 | ||||
| * Fixed a bad interaction between the `git annex map` command and the | ||||
|   assistant. | ||||
| 
 | ||||
| ---- | ||||
| 
 | ||||
| Tried using a modified version of `MissingH` that doesn't use `HSLogger` | ||||
| to make git-annex work with the threaded GHC runtime. Unfortunatly, | ||||
| I am still seeing hangs in at least 3 separate code paths when | ||||
| running the test suite. I may have managed to fix one of the hangs, | ||||
| but have not grokked what's causing the others. | ||||
| 
 | ||||
| ---- | ||||
| 
 | ||||
| I now have access to a Mac OSX system, thanks to Kevin M. I've fixed | ||||
| some portability problems in git-annex with it before, but today I tested | ||||
| the assistant on it: | ||||
| 
 | ||||
| * Found a problem with the kqueue code that prevents incoming pushes from | ||||
|   being noticed. | ||||
| 
 | ||||
|   The problem was that the newly added git ref file does not trigger an add | ||||
|   event. The kqueue code saw a generic change event for the refs directory, | ||||
|   but since the old file was being deleted and replaced by the new file, | ||||
|   the kqueue code, which already had the old file in its cache, did not notice | ||||
|   the file had been replaced. | ||||
| 
 | ||||
|   I fixed that by making the kqueue code also track the inode of each file. | ||||
|   Currently that adds the overhead of a stat of each file, which could be | ||||
|   avoided if haskell exposed the inode returned by `readdir`. Room to | ||||
|   optimise this later... | ||||
| 
 | ||||
| * Also noticed that the kqueue code was not separating out file deletions | ||||
|   from directory deletions. IIRC Jimmy had once mentioned a problem with file | ||||
|   deletions not being noticed by the assistant, and this could be responsible | ||||
|   for that, although the directory deletion code seems to handle them ok | ||||
|   normally. It was making the transfer watching thread not notice when | ||||
|   any transfers finished, for sure. I fixed this oversight, looking in the | ||||
|   cache to see if there used to be a file or a directory, and running the | ||||
|   appropriate hook. | ||||
| 
 | ||||
| Even with these fixes, the assistant does not yet reliably transfer file | ||||
| contents on OSX. I think the problem is that with kqueue we're not | ||||
| guaranteed to get an add event, and a deletion event for a transfer | ||||
| info file -- if it's created and quickly deleted, the code that | ||||
| synthensizes those events doesn't run in time to know it existed. | ||||
| Since the transfer code relies on deletion events to tell when transfers | ||||
| are complete, it stops sending files after the first transfer, if the | ||||
| transfer ran so quickly it doesn't get the expected events.  | ||||
| 
 | ||||
| So, will need to work on OSX support some more... | ||||
|  | @ -10,6 +10,13 @@ all the other git clones, at both the git level and the key/value level. | |||
|   on remotes, and transfer. But first, need to ensure that when a remote | ||||
|   receives content, and updates its location log, it syncs that update | ||||
|   out. | ||||
| * Transfer watching has a race on kqueue systems, which makes finished | ||||
|   fast transfers not be noticed by the TransferWatcher. Which in turn | ||||
|   prevents the transfer slot being freed and any further transfers | ||||
|   from happening. So, this approach is too fragile to rely on for | ||||
|   maintaining the TransferSlots. Instead, need [[todo/assistant_threaded_runtime]], | ||||
|   which would allow running something for sure when a transfer thread | ||||
|   finishes. | ||||
| 
 | ||||
| ## longer-term TODO | ||||
| 
 | ||||
|  |  | |||
|  | @ -20,6 +20,9 @@ The test suite tends to hang when testing add. `git-annex` occasionally | |||
| hangs, apparently in a futex lock. This is not the assistant hanging, and | ||||
| git-annex does not otherwise use threads, so this is surprising. --[[Joey]] | ||||
| 
 | ||||
| > I've spent a lot of time debugging this, and trying to fix it, in the | ||||
| > "threaded" branch. There are still deadlocks. --[[Joey]] | ||||
| 
 | ||||
| --- | ||||
| 
 | ||||
| It would be possible to not use the threaded runtime. Instead, we could | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Joey Hess
				Joey Hess