mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 01:02:25 -05:00 
			
		
		
		
	[chore] Move initial MediaRemotePrune to cmd.server function (#536)
* move initial prune up to the server start function * don't do initial prune when starting media manager * add admin/mediaremoteprune in processor
This commit is contained in:
		
					parent
					
						
							
								141107bdc1
							
						
					
				
			
			
				commit
				
					
						d7b46a4b63
					
				
			
		
					 6 changed files with 57 additions and 4 deletions
				
			
		|  | @ -235,6 +235,11 @@ var Start action.GTSAction = func(ctx context.Context) error { | ||||||
| 		return fmt.Errorf("error starting gotosocial service: %s", err) | 		return fmt.Errorf("error starting gotosocial service: %s", err) | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	// perform initial media prune in case value of MediaRemoteCacheDays changed | ||||||
|  | 	if err := processor.AdminMediaRemotePrune(ctx, viper.GetInt(config.Keys.MediaRemoteCacheDays)); err != nil { | ||||||
|  | 		return fmt.Errorf("error during initial media prune: %s", err) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	// catch shutdown signals from the operating system | 	// catch shutdown signals from the operating system | ||||||
| 	sigs := make(chan os.Signal, 1) | 	sigs := make(chan os.Signal, 1) | ||||||
| 	signal.Notify(sigs, os.Interrupt, syscall.SIGTERM) | 	signal.Notify(sigs, os.Interrupt, syscall.SIGTERM) | ||||||
|  |  | ||||||
|  | @ -175,10 +175,6 @@ func NewManager(database db.DB, storage *kv.KVStore) (Manager, error) { | ||||||
| 			return nil | 			return nil | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// Run an initial cache prune in case max age changed |  | ||||||
| 		logrus.Infof("media manager: running initial remote cache cleanup") |  | ||||||
| 		go pruneFunc() |  | ||||||
| 
 |  | ||||||
| 		// now start all the cron stuff we've lined up | 		// now start all the cron stuff we've lined up | ||||||
| 		c.Start() | 		c.Start() | ||||||
| 		logrus.Infof("media manager: next scheduled remote cache cleanup is %q", c.Entry(entryID).Next) | 		logrus.Infof("media manager: next scheduled remote cache cleanup is %q", c.Entry(entryID).Next) | ||||||
|  |  | ||||||
|  | @ -53,3 +53,7 @@ func (p *processor) AdminDomainBlockGet(ctx context.Context, authed *oauth.Auth, | ||||||
| func (p *processor) AdminDomainBlockDelete(ctx context.Context, authed *oauth.Auth, id string) (*apimodel.DomainBlock, gtserror.WithCode) { | func (p *processor) AdminDomainBlockDelete(ctx context.Context, authed *oauth.Auth, id string) (*apimodel.DomainBlock, gtserror.WithCode) { | ||||||
| 	return p.adminProcessor.DomainBlockDelete(ctx, authed.Account, id) | 	return p.adminProcessor.DomainBlockDelete(ctx, authed.Account, id) | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func (p *processor) AdminMediaRemotePrune(ctx context.Context, mediaRemoteCacheDays int) gtserror.WithCode { | ||||||
|  | 	return p.adminProcessor.MediaRemotePrune(ctx, mediaRemoteCacheDays) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -41,6 +41,7 @@ type Processor interface { | ||||||
| 	DomainBlockDelete(ctx context.Context, account *gtsmodel.Account, id string) (*apimodel.DomainBlock, gtserror.WithCode) | 	DomainBlockDelete(ctx context.Context, account *gtsmodel.Account, id string) (*apimodel.DomainBlock, gtserror.WithCode) | ||||||
| 	AccountAction(ctx context.Context, account *gtsmodel.Account, form *apimodel.AdminAccountActionRequest) gtserror.WithCode | 	AccountAction(ctx context.Context, account *gtsmodel.Account, form *apimodel.AdminAccountActionRequest) gtserror.WithCode | ||||||
| 	EmojiCreate(ctx context.Context, account *gtsmodel.Account, user *gtsmodel.User, form *apimodel.EmojiCreateRequest) (*apimodel.Emoji, gtserror.WithCode) | 	EmojiCreate(ctx context.Context, account *gtsmodel.Account, user *gtsmodel.User, form *apimodel.EmojiCreateRequest) (*apimodel.Emoji, gtserror.WithCode) | ||||||
|  | 	MediaRemotePrune(ctx context.Context, mediaRemoteCacheDays int) gtserror.WithCode | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type processor struct { | type processor struct { | ||||||
|  |  | ||||||
							
								
								
									
										45
									
								
								internal/processing/admin/mediaremoteprune.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								internal/processing/admin/mediaremoteprune.go
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,45 @@ | ||||||
|  | /* | ||||||
|  |    GoToSocial | ||||||
|  |    Copyright (C) 2021-2022 GoToSocial Authors admin@gotosocial.org | ||||||
|  | 
 | ||||||
|  |    This program is free software: you can redistribute it and/or modify | ||||||
|  |    it under the terms of the GNU Affero General Public License as published by | ||||||
|  |    the Free Software Foundation, either version 3 of the License, or | ||||||
|  |    (at your option) any later version. | ||||||
|  | 
 | ||||||
|  |    This program is distributed in the hope that it will be useful, | ||||||
|  |    but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |    GNU Affero General Public License for more details. | ||||||
|  | 
 | ||||||
|  |    You should have received a copy of the GNU Affero General Public License | ||||||
|  |    along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||||
|  | */ | ||||||
|  | 
 | ||||||
|  | package admin | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 	"fmt" | ||||||
|  | 
 | ||||||
|  | 	"github.com/sirupsen/logrus" | ||||||
|  | 	"github.com/superseriousbusiness/gotosocial/internal/gtserror" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func (p *processor) MediaRemotePrune(ctx context.Context, mediaRemoteCacheDays int) gtserror.WithCode { | ||||||
|  | 	if mediaRemoteCacheDays < 0 { | ||||||
|  | 		err := fmt.Errorf("invalid value for mediaRemoteCacheDays prune: value was %d, cannot be less than 0", mediaRemoteCacheDays) | ||||||
|  | 		return gtserror.NewErrorBadRequest(err, err.Error()) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	go func() { | ||||||
|  | 		pruned, err := p.mediaManager.PruneRemote(ctx, mediaRemoteCacheDays) | ||||||
|  | 		if err != nil { | ||||||
|  | 			logrus.Errorf("MediaRemotePrune: error pruning: %s", err) | ||||||
|  | 		} else { | ||||||
|  | 			logrus.Infof("MediaRemotePrune: pruned %d entries", pruned) | ||||||
|  | 		} | ||||||
|  | 	}() | ||||||
|  | 
 | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | @ -113,6 +113,8 @@ type Processor interface { | ||||||
| 	AdminDomainBlockGet(ctx context.Context, authed *oauth.Auth, id string, export bool) (*apimodel.DomainBlock, gtserror.WithCode) | 	AdminDomainBlockGet(ctx context.Context, authed *oauth.Auth, id string, export bool) (*apimodel.DomainBlock, gtserror.WithCode) | ||||||
| 	// AdminDomainBlockDelete deletes one domain block, specified by ID, returning the deleted domain block. | 	// AdminDomainBlockDelete deletes one domain block, specified by ID, returning the deleted domain block. | ||||||
| 	AdminDomainBlockDelete(ctx context.Context, authed *oauth.Auth, id string) (*apimodel.DomainBlock, gtserror.WithCode) | 	AdminDomainBlockDelete(ctx context.Context, authed *oauth.Auth, id string) (*apimodel.DomainBlock, gtserror.WithCode) | ||||||
|  | 	// AdminMediaRemotePrune triggers a prune of remote media according to the given number of mediaRemoteCacheDays | ||||||
|  | 	AdminMediaRemotePrune(ctx context.Context, mediaRemoteCacheDays int) gtserror.WithCode | ||||||
| 
 | 
 | ||||||
| 	// AppCreate processes the creation of a new API application | 	// AppCreate processes the creation of a new API application | ||||||
| 	AppCreate(ctx context.Context, authed *oauth.Auth, form *apimodel.ApplicationCreateRequest) (*apimodel.Application, error) | 	AppCreate(ctx context.Context, authed *oauth.Auth, form *apimodel.ApplicationCreateRequest) (*apimodel.Application, error) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue