[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[jgit-dev] Large Objects

Hi!

Currently, 80 developers came to a screeching halt because somebody managed to push a 127Mb file. We managed to get Gerrit back to working order by following [1]. Still all developers cannot checkout, since jgit completely hangs (* not true, see below) when checking out this file

* jgit actually does not hang. it spends huuuuge amounts of time reading the file from the pack [2]. since the file isLarge(), it uses the fixed 8k buffer in a loop, with another 8k buffer on top, reading junks of (so it seems) 4-20 bytes. I let it run all night today, and it managed to checkout half the file (~64Mb) in 12 hours!

I need a quick and dirty solution to get around the problem to get all devs back on track. I played with streamFileThreshold, as that helped on the Gerrit server, but it seems to have no effect on local JGit. Any other thing i can do? And if it's changing a constant in jgit source for now, i'm happy too!

[1] http://groups.google.com/group/repo-discuss/browse_thread/thread/d46af3758a383e7c/fa73c82ff222a616?#fa73c82ff222a616
[2] Thread [ModalContext] (Suspended)	
	Inflater.inflateBytes(long, byte[], int, int) line: not available [native method]	
	Inflater.inflate(byte[], int, int) line: 255	
	InflaterInputStream.read(byte[], int, int) line: 152	
	InflaterInputStream.skip(long) line: 208	
	BufferedInputStream.skip(long) line: 366	
	ObjectStream$Filter.skip(long) line: 199	
	IO.skipFully(InputStream, long) line: 327	
	LargePackedDeltaObject$2(DeltaStream).seekBase() line: 339	
	LargePackedDeltaObject$2(DeltaStream).read(byte[], int, int) line: 213	
	BufferedInputStream.read1(byte[], int, int) line: 273	
	BufferedInputStream.read(byte[], int, int) line: 334	
	TeeInputStream.read(byte[], int, int) line: 111	
	LargePackedDeltaObject$1(ObjectStream$Filter).read(byte[], int, int) line: 209	
	LargePackedDeltaObject$1(InputStream).read(byte[]) line: 101	
	LargePackedDeltaObject(ObjectLoader).copyTo(OutputStream) line: 254	
	DirCacheCheckout.checkoutEntry(Repository, File, DirCacheEntry, ObjectReader) line: 961	
	DirCacheCheckout.doCheckout() line: 447	
	DirCacheCheckout.checkout() line: 381	
	CheckoutCommand.call() line: 174	
	GitRepositoryUtils.cloneRepository(File, URIish, String, boolean, IProgressMonitor, List<PostCloneTask>) line: 235	
	CloneRepositoryDialog$3.run(IProgressMonitor) line: 155	
	ModalContext$ModalContextThread.run() line: 121	


Regards,
Markus