Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 420743

Summary: [server] project delete fails after a git clone
Product: [ECD] Orion Reporter: Anthony Hunter <ahunter.eclipse>
Component: ServerAssignee: Anthony Hunter <ahunter.eclipse>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: P3    
Version: 4.0   
Target Milestone: 5.0 M1   
Hardware: PC   
OS: Windows 7   
Whiteboard:

Description Anthony Hunter CLA 2013-10-30 12:15:46 EDT
Start an Orion server using the default settings on Windows 7. Create a user and clone a git repository. Then delete the project. The delete fails and you cannot delete the project. The complaint is about a pack file. This problem does not occur on Linux.

Errors on the server:

!ENTRY org.eclipse.orion.server.core 4 0 2013-10-30 12:09:15.185
!MESSAGE Error removing project
!STACK 1
org.eclipse.core.runtime.CoreException: Problems encountered while deleting files.
	at org.eclipse.core.internal.filesystem.local.LocalFile.delete(LocalFile.java:131)
	at org.eclipse.orion.internal.server.servlets.workspace.WorkspaceResourceHandler.removeProject(WorkspaceResourceHandler.java:143)
[snip]
Contains: Could not delete: C:\workspace\foo\a\.git\objects\pack\pack-c2ff375bacd2a0263004cd60200b214a3322f6b7.pack.
Contains: Could not delete: C:\workspace\foo\a\.git\objects\pack.
Contains: Could not delete: C:\workspace\foo\a\.git\objects.
Contains: Could not delete: C:\workspace\foo\a\.git.
Contains: Could not delete: C:\workspace\foo\a.
!SUBENTRY 1 org.eclipse.core.filesystem 4 273 2013-10-30 12:09:15.191
!MESSAGE Problems encountered while deleting files.
!SUBENTRY 2 org.eclipse.core.filesystem 4 273 2013-10-30 12:09:15.191
!MESSAGE Could not delete: C:\workspace\foo\a\.git\objects\pack\pack-c2ff375bacd2a0263004cd60200b214a3322f6b7.pack.
!SUBENTRY 2 org.eclipse.core.filesystem 4 273 2013-10-30 12:09:15.191
!MESSAGE Could not delete: C:\workspace\foo\a\.git\objects\pack.
!SUBENTRY 2 org.eclipse.core.filesystem 4 273 2013-10-30 12:09:15.192
!MESSAGE Could not delete: C:\workspace\foo\a\.git\objects.
!SUBENTRY 2 org.eclipse.core.filesystem 4 273 2013-10-30 12:09:15.192
!MESSAGE Could not delete: C:\workspace\foo\a\.git.
!SUBENTRY 2 org.eclipse.core.filesystem 4 273 2013-10-30 12:09:15.192
!MESSAGE Could not delete: C:\workspace\foo\a.
Comment 1 Anthony Hunter CLA 2013-10-30 17:04:37 EDT
The problem also occurs on Linux:
% find /workspace/foo -name *.pack
/workspace/foo/C/.git/objects/pack/pack-c2ff375bacd2a0263004cd60200b214a3322f6b7.pack
% lsof /workspace/foo/C/.git/objects/pack/pack-c2ff375bacd2a0263004cd60200b214a3322f6b7.pack
COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
javaw   32079 ahunter  192r   REG    8,6    12371 1310845 /workspace/foo/C/.git/objects/pack/pack-c2ff375bacd2a0263004cd60200b214a3322f6b7.pack
javaw   32079 ahunter  193r   REG    8,6    12371 1310845 /workspace/foo/C/.git/objects/pack/pack-c2ff375bacd2a0263004cd60200b214a3322f6b7.pack
javaw   32079 ahunter  195r   REG    8,6    12371 1310845 /workspace/foo/C/.git/objects/pack/pack-c2ff375bacd2a0263004cd60200b214a3322f6b7.pack
javaw   32079 ahunter  197r   REG    8,6    12371 1310845 /workspace/foo/C/.git/objects/pack/pack-c2ff375bacd2a0263004cd60200b214a3322f6b7.pack
javaw   32079 ahunter  198r   REG    8,6    12371 1310845 /workspace/foo/C/.git/objects/pack/pack-c2ff375bacd2a0263004cd60200b214a3322f6b7.pack
javaw   32079 ahunter  200r   REG    8,6    12371 1310845 /workspace/foo/C/.git/objects/pack/pack-c2ff375bacd2a0263004cd60200b214a3322f6b7.pack
javaw   32079 ahunter  203r   REG    8,6    12371 1310845 /workspace/foo/C/.git/objects/pack/pack-c2ff375bacd2a0263004cd60200b214a3322f6b7.pack
javaw   32079 ahunter  204r   REG    8,6    12371 1310845 /workspace/foo/C/.git/objects/pack/pack-c2ff375bacd2a0263004cd60200b214a3322f6b7.pack

In several places we open the git repository on disk by a create() call but do not follow this up with a close(). If done correctly, there should be zero files open after the git operation completes. 

The end result is a leak of open git files. On windows you cannot delete the clone as these files are locked. Linux allows the the deletion anyway.
Comment 2 Anthony Hunter CLA 2013-11-01 10:59:34 EDT
The problem is caused by not cleaning up after creating and using Git objects. We need to close() when done with a Git Repository and dispose() when done with a Git RevWalk.

There are also places where we pass an existing Repository to a new GitJob, resulting in either neither side doing a close(), or the close() failing because it was called twice. The GitJob needs to create it's own Repository. Some jobs do this already, but LogJob and InitJob did not.