From 0db94985225bc67f7d80f5708b10e58d7e17efbb Mon Sep 17 00:00:00 2001 From: Brett Porter Date: Tue, 16 Feb 2010 05:34:01 +0000 Subject: [PATCH] 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 --- .../maven/archiva/repository/audit/AuditEvent.java | 8 ++++++-- .../org/apache/archiva/audit/AuditManagerTest.java | 11 ++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/audit/AuditEvent.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/audit/AuditEvent.java index 12189f31b..d2269ee50 100644 --- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/audit/AuditEvent.java +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/audit/AuditEvent.java @@ -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() diff --git a/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java b/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java index 2bb3399a8..28c62456a 100644 --- a/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java +++ b/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java @@ -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() ); 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(