mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-30 22:12:25 -05:00 
			
		
		
		
	[feature] Clean up/uncache remote media (#407)
* Add whereNotEmptyAndNotNull * Add GetRemoteOlderThanDays * Add GetRemoteOlderThanDays * Add PruneRemote to Manager interface * Start implementing PruneRemote * add new attachment + status to tests * fix up and test GetRemoteOlderThan * fix bad import * PruneRemote: return number pruned * add Cached column to mediaattachment * update + test pruneRemote * update mediaTest * use Cached column * upstep bun to latest version * embed structs in mediaAttachment * migrate mediaAttachment to new format * don't default cached to true * select only remote media * update db dependencies * step bun back to last working version * update pruneRemote to use Cached field * fix storage path of test attachments * add recache logic to manager * fix trimmed aspect ratio * test prune and recache * return errwithcode * tidy up different paths for emoji vs attachment * fix incorrect thumbnail type being stored * expose TransportController to media processor * implement tee-ing recached content * add thoughts of dog to test fedi attachments * test get remote files * add comment on PruneRemote * add postData cleanup to recache * test thumbnail fetching * add incredible diagram * go mod tidy * buffer pipes for recache streaming * test for client stops reading after 1kb * add media-remote-cache-days to config * add cron package * wrap logrus so it's available to cron * start and stop cron jobs gracefully
This commit is contained in:
		
					parent
					
						
							
								100f1280a6
							
						
					
				
			
			
				commit
				
					
						07727753b9
					
				
			
		
					 424 changed files with 637100 additions and 176498 deletions
				
			
		
							
								
								
									
										142
									
								
								vendor/modernc.org/libc/libc_freebsd.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										142
									
								
								vendor/modernc.org/libc/libc_freebsd.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -16,6 +16,7 @@ import ( | |||
| 	gotime "time" | ||||
| 	"unsafe" | ||||
| 
 | ||||
| 	guuid "github.com/google/uuid" | ||||
| 	"golang.org/x/sys/unix" | ||||
| 	"modernc.org/libc/errno" | ||||
| 	"modernc.org/libc/fcntl" | ||||
|  | @ -34,17 +35,13 @@ import ( | |||
| 	"modernc.org/libc/termios" | ||||
| 	"modernc.org/libc/time" | ||||
| 	"modernc.org/libc/unistd" | ||||
| 	"modernc.org/libc/uuid" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	in6_addr_any in.In6_addr | ||||
| ) | ||||
| 
 | ||||
| type ( | ||||
| 	long  = int64 | ||||
| 	ulong = uint64 | ||||
| ) | ||||
| 
 | ||||
| // // Keep these outside of the var block otherwise go generate will miss them. | ||||
| var X__stderrp = Xstdout | ||||
| var X__stdinp = Xstdin | ||||
|  | @ -715,71 +712,6 @@ func Xfileno(t *TLS, stream uintptr) int32 { | |||
| 	panic(todo("")) | ||||
| } | ||||
| 
 | ||||
| // int mkstemps(char *template, int suffixlen); | ||||
| func Xmkstemps(t *TLS, template uintptr, suffixlen int32) int32 { | ||||
| 	return Xmkstemps64(t, template, suffixlen) | ||||
| } | ||||
| 
 | ||||
| // int mkstemps(char *template, int suffixlen); | ||||
| func Xmkstemps64(t *TLS, template uintptr, suffixlen int32) int32 { | ||||
| 	len := uintptr(Xstrlen(t, template)) | ||||
| 	x := template + uintptr(len-6) - uintptr(suffixlen) | ||||
| 	for i := uintptr(0); i < 6; i++ { | ||||
| 		if *(*byte)(unsafe.Pointer(x + i)) != 'X' { | ||||
| 			if dmesgs { | ||||
| 				dmesg("%v: FAIL", origin(1)) | ||||
| 			} | ||||
| 			t.setErrno(errno.EINVAL) | ||||
| 			return -1 | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	fd, err := tempFile(template, x) | ||||
| 	if err != nil { | ||||
| 		if dmesgs { | ||||
| 			dmesg("%v: %v FAIL", origin(1), err) | ||||
| 		} | ||||
| 		t.setErrno(err) | ||||
| 		return -1 | ||||
| 	} | ||||
| 
 | ||||
| 	return int32(fd) | ||||
| } | ||||
| 
 | ||||
| // int mkstemp(char *template); | ||||
| func Xmkstemp(t *TLS, template uintptr) int32 { | ||||
| 	return Xmkstemp64(t, template) | ||||
| } | ||||
| 
 | ||||
| // int mkstemp(char *template); | ||||
| func Xmkstemp64(t *TLS, template uintptr) int32 { | ||||
| 	return Xmkstemps64(t, template, 0) | ||||
| } | ||||
| 
 | ||||
| func newFtsent(t *TLS, info int, path string, stat *unix.Stat_t, err syscall.Errno) (r *fts.FTSENT) { | ||||
| 	var statp uintptr | ||||
| 	if stat != nil { | ||||
| 		statp = Xmalloc(t, types.Size_t(unsafe.Sizeof(unix.Stat_t{}))) | ||||
| 		if statp == 0 { | ||||
| 			panic("OOM") | ||||
| 		} | ||||
| 
 | ||||
| 		*(*unix.Stat_t)(unsafe.Pointer(statp)) = *stat | ||||
| 	} | ||||
| 	csp, errx := CString(path) | ||||
| 	if errx != nil { | ||||
| 		panic("OOM") | ||||
| 	} | ||||
| 
 | ||||
| 	return &fts.FTSENT{ | ||||
| 		Ffts_info:    int32(info), | ||||
| 		Ffts_path:    csp, | ||||
| 		Ffts_pathlen: uint64(len(path)), | ||||
| 		Ffts_statp:   statp, | ||||
| 		Ffts_errno:   int32(err), | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func newCFtsent(t *TLS, info int, path string, stat *unix.Stat_t, err syscall.Errno) uintptr { | ||||
| 	p := Xcalloc(t, 1, types.Size_t(unsafe.Sizeof(fts.FTSENT{}))) | ||||
| 	if p == 0 { | ||||
|  | @ -1354,11 +1286,6 @@ func Xwritev(t *TLS, fd int32, iov uintptr, iovcnt int32) types.Ssize_t { | |||
| 	panic(todo("")) | ||||
| } | ||||
| 
 | ||||
| // void endpwent(void); | ||||
| func Xendpwent(t *TLS) { | ||||
| 	// nop | ||||
| } | ||||
| 
 | ||||
| // int __isoc99_sscanf(const char *str, const char *format, ...); | ||||
| func X__isoc99_sscanf(t *TLS, str, format, va uintptr) int32 { | ||||
| 	r := Xsscanf(t, str, format, va) | ||||
|  | @ -1368,18 +1295,6 @@ func X__isoc99_sscanf(t *TLS, str, format, va uintptr) int32 { | |||
| 	return r | ||||
| } | ||||
| 
 | ||||
| var ctimeStaticBuf [32]byte | ||||
| 
 | ||||
| // char *ctime(const time_t *timep); | ||||
| func Xctime(t *TLS, timep uintptr) uintptr { | ||||
| 	return Xctime_r(t, timep, uintptr(unsafe.Pointer(&ctimeStaticBuf[0]))) | ||||
| } | ||||
| 
 | ||||
| // char *ctime_r(const time_t *timep, char *buf); | ||||
| func Xctime_r(t *TLS, timep, buf uintptr) uintptr { | ||||
| 	panic(todo("")) | ||||
| } | ||||
| 
 | ||||
| // void __assert(const char * func, const char * file, int line, const char *expr) __dead2; | ||||
| func X__assert(t *TLS, fn, file uintptr, line int32, expr uintptr) { | ||||
| 	X__assert_fail(t, expr, file, uint32(line), fn) | ||||
|  | @ -1464,53 +1379,11 @@ func Xclosedir(t *TLS, dir uintptr) int32 { | |||
| 	return r | ||||
| } | ||||
| 
 | ||||
| // DIR *opendir(const char *name); | ||||
| func Xopendir(t *TLS, name uintptr) uintptr { | ||||
| 	p := Xmalloc(t, uint64(unsafe.Sizeof(darwinDir{}))) | ||||
| 	if p == 0 { | ||||
| 		panic("OOM") | ||||
| 	} | ||||
| 
 | ||||
| 	fd := int(Xopen(t, name, fcntl.O_RDONLY|fcntl.O_DIRECTORY|fcntl.O_CLOEXEC, 0)) | ||||
| 	if fd < 0 { | ||||
| 		if dmesgs { | ||||
| 			dmesg("%v: FAIL %v", origin(1), (*darwinDir)(unsafe.Pointer(p)).fd) | ||||
| 		} | ||||
| 		Xfree(t, p) | ||||
| 		return 0 | ||||
| 	} | ||||
| 
 | ||||
| 	if dmesgs { | ||||
| 		dmesg("%v: ok", origin(1)) | ||||
| 	} | ||||
| 	(*darwinDir)(unsafe.Pointer(p)).fd = fd | ||||
| 	(*darwinDir)(unsafe.Pointer(p)).h = 0 | ||||
| 	(*darwinDir)(unsafe.Pointer(p)).l = 0 | ||||
| 	(*darwinDir)(unsafe.Pointer(p)).eof = false | ||||
| 	return p | ||||
| } | ||||
| 
 | ||||
| // int __xuname(int namesize, void *namebuf) | ||||
| func X__xuname(t *TLS, namesize int32, namebuf uintptr) int32 { | ||||
| 	return Xuname(t, namebuf) | ||||
| } | ||||
| 
 | ||||
| // int chflags(const char *path, u_int flags); | ||||
| func Xchflags(t *TLS, path uintptr, flags uint64) int32 { | ||||
| 	if err := unix.Chflags(GoString(path), int(flags)); err != nil { | ||||
| 		if dmesgs { | ||||
| 			dmesg("%v: %v FAIL", origin(1), err) | ||||
| 		} | ||||
| 		t.setErrno(err) | ||||
| 		return -1 | ||||
| 	} | ||||
| 
 | ||||
| 	if dmesgs { | ||||
| 		dmesg("%v: ok", origin(1)) | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| // int pipe(int pipefd[2]); | ||||
| func Xpipe(t *TLS, pipefd uintptr) int32 { | ||||
| 	var a [2]int | ||||
|  | @ -1623,3 +1496,14 @@ func Xpthread_mutexattr_settype(tls *TLS, a uintptr, type1 int32) int32 { /* pth | |||
| 	(*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr = (((*pthread_mutexattr_t)(unsafe.Pointer(a)).__attr & Uint32FromInt32(CplInt32(3))) | uint32(type1)) | ||||
| 	return 0 | ||||
| } | ||||
| 
 | ||||
| // int uuid_parse( char *in, uuid_t uu); | ||||
| func Xuuid_parse(t *TLS, in uintptr, uu uintptr) int32 { | ||||
| 	r, err := guuid.Parse(GoString(in)) | ||||
| 	if err != nil { | ||||
| 		return -1 | ||||
| 	} | ||||
| 
 | ||||
| 	copy((*RawMem)(unsafe.Pointer(uu))[:unsafe.Sizeof(uuid.Uuid_t{})], r[:]) | ||||
| 	return 0 | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue