public void setMemberRepositoryIds( List<String> repositories ) throws NoSuchRepositoryException, InvalidGroupingException { getExternalConfiguration( true ).clearMemberRepositoryIds(); for ( String repoId : repositories ) { addMemberRepositoryId( repoId ); } }
public void addMemberRepositoryId( String repositoryId ) throws NoSuchRepositoryException, InvalidGroupingException { // validate THEN modify // this will throw NoSuchRepository if needed Repository repo = repoRegistry.getRepository( repositoryId ); // check for cycles List<String> memberIds = new ArrayList<String>( getExternalConfiguration( false ).getMemberRepositoryIds() ); memberIds.add( repo.getId() ); checkForCyclicReference( getId(), memberIds, getId() ); // check for compatibility if ( !repo.getRepositoryContentClass().isCompatible( getRepositoryContentClass() ) ) { throw new InvalidGroupingException( getRepositoryContentClass(), repo.getRepositoryContentClass() ); } // if we are here, all is well getExternalConfiguration( true ).addMemberRepositoryId( repo.getId() ); }
List<String> newMemberIds = Collections.emptyList(); if ( isConfigured() ) getCurrentCoreConfiguration().isDirty() && !getExternalConfiguration( false ).getMemberRepositoryIds().equals( getExternalConfiguration( true ).getMemberRepositoryIds() ); currentMemberIds = getExternalConfiguration( false ).getMemberRepositoryIds(); newMemberIds = getExternalConfiguration( true ).getMemberRepositoryIds(); eventBus().post( new RepositoryGroupMembersChangedEvent( this, currentMemberIds, newMemberIds ) );
try addItems( names, result, getLocalStorage().listItems( this, request ) ); RepositoryItemUid uid = createUid( request.getRequestPath() ); for ( Repository repo : getMemberRepositories() ) addItems( names, result, repo.list( false, request ) ); found = true; if ( getLogger().isDebugEnabled() ) getLogger().debug( String.format( "Repository %s member of group %s was already processed during this request! Skipping it from processing. Request: %s",
@Override public Collection<String> evictUnusedItems( ResourceStoreRequest request, final long timestamp ) { if ( !getLocalStatus().shouldServiceRequest() ) { return Collections.emptyList(); } getLogger().info( String.format( "Evicting unused items from group repository %s from path \"%s\"", RepositoryStringUtils.getHumanizedNameString( this ), request.getRequestPath() ) ); HashSet<String> result = new HashSet<String>(); // here, we just iterate over members and call evict final List<Repository> members = getMemberRepositories(); for ( Repository repository : members ) { result.addAll( repository.evictUnusedItems( request, timestamp ) ); } eventBus().post( new RepositoryEventEvictUnusedItems( this ) ); return result; }
RepositoryItemUid uid = createUid( request.getRequestPath() ); for ( Repository repository : getRequestRepositories( request ) ) callables.add( new ItemRetrieveCallable( getLogger(), repository, request ) ); if ( getLogger().isDebugEnabled() ) getLogger().debug( String.format( "Repository %s member of group %s was already processed during this request! Skipping it from processing. Request: %s", for ( Repository repository : getRequestRepositories( request ) ) if ( getLogger().isDebugEnabled() ) getLogger().debug( RepositoryStringUtils.getFormattedMessage( "Member repository %s is not available, request failed.", e.getRepository() ) ); getLogger().warn( "Member repository request failed", e ); if ( getLogger().isDebugEnabled() ) getLogger().debug( String.format( "Repository %s member of group %s was already processed during this request! Skipping it from processing. Request: %s",
@Override protected DefaultRubyGroupRepositoryConfiguration getExternalConfiguration(boolean forWrite) { return (DefaultRubyGroupRepositoryConfiguration) super.getExternalConfiguration(forWrite); }
@Subscribe public void onEvent( final RepositoryRegistryEventRemove evt ) { final AbstractGroupRepositoryConfiguration extConfig = this.getExternalConfiguration( false ); if ( extConfig != null && extConfig.getMemberRepositoryIds().contains( evt.getRepository().getId() ) ) { removeMemberRepositoryId( evt.getRepository().getId() ); } }
@SuppressWarnings("deprecation") @Override public StorageItem retrieveItem(boolean fromTask, ResourceStoreRequest request) throws IllegalOperationException, ItemNotFoundException, StorageException { if (fromTask && request.getRequestPath().startsWith("/.nexus")) { return super.retrieveItem(true, request); } return facade.handleRetrieve(this, request, facade.get(request)); }
@Override protected StorageItem doRetrieveItem(final ResourceStoreRequest request) throws IllegalOperationException, ItemNotFoundException, StorageException { final StorageItem item; try { item = metadataSource.doRetrieveItem(request, this); } catch (IOException e) { throw new StorageException(e); } if (item != null) { return item; } return super.doRetrieveItem(request); }
private void checkForCyclicReference( final String id, List<String> memberRepositoryIds, String path ) throws InvalidGroupingException { if ( memberRepositoryIds.contains( id ) ) { throw new InvalidGroupingException( id, path ); } for ( String memberId : memberRepositoryIds ) { try { GroupRepository group = repoRegistry.getRepositoryWithFacet( memberId, GroupRepository.class ); checkForCyclicReference( id, group.getMemberRepositoryIds(), path + '/' + memberId ); } catch ( NoSuchRepositoryException e ) { // not a group repo, just ignore } } }
@Override protected Collection<StorageItem> doListItems(final ResourceStoreRequest request) throws ItemNotFoundException, StorageException { final RepositoryItemUid uid = createUid(P2Constants.METADATA_LOCK_PATH); final RepositoryItemUidLock lock = uid.getLock(); final boolean requestGroupLocalOnly = request.isRequestGroupLocalOnly(); try { lock.lock(Action.read); request.setRequestGroupLocalOnly(true); return super.doListItems(request); } finally { request.setRequestGroupLocalOnly(requestGroupLocalOnly); lock.unlock(); } }
RepositoryItemUid uid = createUid( request.getRequestPath() ); for ( Repository repository : getRequestRepositories( request ) ) callables.add( new GroupItemRetrieveCallable( getLogger(), repository, request, this ) ); if ( getLogger().isDebugEnabled() ) getLogger().debug( String.format( "Repository %s member of group %s was already processed during this request! Skipping it from processing. Request: %s", for ( Repository repo : getRequestRepositories( request ) ) if ( getLogger().isDebugEnabled() ) getLogger().debug( String.format( "Repository %s member of group %s was already processed during this request! Skipping it from processing. Request: %s",
@Override protected AbstractMavenGroupRepositoryConfiguration getExternalConfiguration( boolean forWrite ) { return (AbstractMavenGroupRepositoryConfiguration) super.getExternalConfiguration( forWrite ); }
@Override public StorageItem retrieveItem(final boolean fromTask, final ResourceStoreRequest request) throws IllegalOperationException, ItemNotFoundException, StorageException { final RepositoryItemUid uid = createUid(P2Constants.METADATA_LOCK_PATH); final RepositoryItemUidLock lock = uid.getLock(); try { lock.lock(Action.read); return super.retrieveItem(fromTask, request); } finally { lock.unlock(); } }
@Override protected StorageItem doRetrieveItem(final ResourceStoreRequest request) throws IllegalOperationException, ItemNotFoundException, StorageException { final RepositoryItemUid uid = createUid(P2Constants.METADATA_LOCK_PATH); final RepositoryItemUidLock lock = uid.getLock(); final boolean requestGroupLocalOnly = request.isRequestGroupLocalOnly(); try { lock.lock(Action.read); request.setRequestGroupLocalOnly(true); return super.doRetrieveItem(request); } finally { request.setRequestGroupLocalOnly(requestGroupLocalOnly); lock.unlock(); } }
public List<String> getMemberRepositoryIds() { ArrayList<String> result = new ArrayList<String>( getExternalConfiguration( false ).getMemberRepositoryIds().size() ); for ( String id : getExternalConfiguration( false ).getMemberRepositoryIds() ) { result.add( id ); } return Collections.unmodifiableList( result ); }
public void removeMemberRepositoryId( String repositoryId ) { getExternalConfiguration( true ).removeMemberRepositoryId( repositoryId ); }