avoid timing issues with audit logs

git-svn-id: https://svn.apache.org/repos/asf/archiva/branches/MRM-1025@910400 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Brett Porter 2010-02-16 05:34:01 +00:00
parent 199a251293
commit 0db9498522
2 changed files with 12 additions and 7 deletions

View File

@ -126,7 +126,9 @@ public class AuditEvent
{
try
{
timestamp = createNameFormat().parse( name );
int index = name.lastIndexOf( '/' );
String ts = index > 0 ? name.substring( 0, index ) : name;
timestamp = createNameFormat().parse( ts );
}
catch ( ParseException e )
{
@ -211,7 +213,9 @@ public class AuditEvent
public String getName()
{
return createNameFormat().format( timestamp );
// we add the resource name to the end to avoid clashes at that timestamp
// TODO: this is still not robust enough and the content model should be revised
return createNameFormat().format( timestamp ) + "/" + resource.substring( resource.lastIndexOf( '/' ) + 1 );
}
private static SimpleDateFormat createNameFormat()

View File

@ -138,16 +138,16 @@ public class AuditManagerTest
return createTestEvent( TEST_REPO_ID, name );
}
private static AuditEvent createTestEvent( String repositoryId, String name )
private static AuditEvent createTestEvent( String repositoryId, String t )
throws ParseException
{
AuditEvent event = new AuditEvent();
event.setTimestamp( TIMESTAMP_FORMAT.parse( name ) );
event.setTimestamp( TIMESTAMP_FORMAT.parse( AUDIT_EVENT_BASE + t ) );
event.setAction( AuditEvent.UPLOAD_FILE );
event.setRemoteIP( TEST_IP_ADDRESS );
event.setRepositoryId( repositoryId );
event.setUserId( TEST_USER );
event.setResource( TEST_RESOURCE_BASE + "/" + name.substring( AUDIT_EVENT_BASE.length() ) );
event.setResource( TEST_RESOURCE_BASE + "/" + t );
return event;
}
@ -197,10 +197,11 @@ public class AuditManagerTest
eventNames.put( TEST_REPO_ID_2, new ArrayList<String>() );
for ( int i = 0; i < numEvents; i++ )
{
String name = AUDIT_EVENT_BASE + MILLIS_FORMAT.format( i );
String t = MILLIS_FORMAT.format( i );
String name = AUDIT_EVENT_BASE + t + "/" + t;
String repositoryId = i % 2 == 0 ? TEST_REPO_ID : TEST_REPO_ID_2;
eventNames.get( repositoryId ).add( name );
events.add( createTestEvent( repositoryId, name ) );
events.add( createTestEvent( repositoryId, t ) );
}
metadataRepositoryControl.expectAndReturn(