2.0.0
This commit is contained in:
		
							parent
							
								
									f62603fd9d
								
							
						
					
					
						commit
						b5acf15877
					
				
					 18 changed files with 109 additions and 74 deletions
				
			
		
							
								
								
									
										57
									
								
								migration/2.0.0.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								migration/2.0.0.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,57 @@ | |||
| // for Node.js interpret
 | ||||
| 
 | ||||
| const chalk = require('chalk'); | ||||
| const sequential = require('promise-sequential'); | ||||
| 
 | ||||
| const { default: User } = require('../built/models/user'); | ||||
| const { default: DriveFile } = require('../built/models/drive-file'); | ||||
| 
 | ||||
| async function main() { | ||||
| 	const promiseGens = []; | ||||
| 
 | ||||
| 	const count = await DriveFile.count({}); | ||||
| 
 | ||||
| 	let prev; | ||||
| 
 | ||||
| 	for (let i = 0; i < count; i++) { | ||||
| 		promiseGens.push(() => { | ||||
| 			const promise = new Promise(async (res, rej) => { | ||||
| 				const file = await DriveFile.findOne(prev ? { | ||||
| 					_id: { $gt: prev._id } | ||||
| 				} : {}, { | ||||
| 					sort: { | ||||
| 						_id: 1 | ||||
| 					} | ||||
| 				}); | ||||
| 
 | ||||
| 				prev = file; | ||||
| 
 | ||||
| 				const user = await User.findOne({ _id: file.metadata.userId }); | ||||
| 
 | ||||
| 				DriveFile.update({ | ||||
| 					_id: file._id | ||||
| 				}, { | ||||
| 					$set: { | ||||
| 						'metadata._user': { | ||||
| 							host: user.host | ||||
| 						} | ||||
| 					} | ||||
| 				}).then(() => { | ||||
| 					res([i, file]); | ||||
| 				}).catch(rej); | ||||
| 			}); | ||||
| 
 | ||||
| 			promise.then(([i, file]) => { | ||||
| 				console.log(chalk`{gray ${i}} {green done: {bold ${file._id}} ${file.filename}}`); | ||||
| 			}); | ||||
| 
 | ||||
| 			return promise; | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	return await sequential(promiseGens); | ||||
| } | ||||
| 
 | ||||
| main().then(() => { | ||||
| 	console.log('ALL DONE'); | ||||
| }).catch(console.error); | ||||
|  | @ -1,49 +0,0 @@ | |||
| // for Node.js interpret
 | ||||
| 
 | ||||
| const { default: User } = require('../built/models/user'); | ||||
| const { default: Following } = require('../built/models/following'); | ||||
| const { default: zip } = require('@prezzemolo/zip') | ||||
| 
 | ||||
| const migrate = async (following) => { | ||||
| 	const follower = await User.findOne({ _id: following.followerId }); | ||||
| 	const followee = await User.findOne({ _id: following.followeeId }); | ||||
| 	const result = await Following.update(following._id, { | ||||
| 		$set: { | ||||
| 			stalk: true, | ||||
| 			_follower: { | ||||
| 				host: follower.host, | ||||
| 				inbox: follower.host != null ? follower.inbox : undefined | ||||
| 			}, | ||||
| 			_followee: { | ||||
| 				host: followee.host, | ||||
| 				inbox: followee.host != null ? followee.inbox : undefined | ||||
| 			} | ||||
| 		} | ||||
| 	}); | ||||
| 	return result.ok === 1; | ||||
| } | ||||
| 
 | ||||
| async function main() { | ||||
| 	const count = await Following.count({}); | ||||
| 
 | ||||
| 	const dop = Number.parseInt(process.argv[2]) || 5 | ||||
| 	const idop = ((count - (count % dop)) / dop) + 1 | ||||
| 
 | ||||
| 	return zip( | ||||
| 		1, | ||||
| 		async (time) => { | ||||
| 			console.log(`${time} / ${idop}`) | ||||
| 			const doc = await Following.find({}, { | ||||
| 				limit: dop, skip: time * dop | ||||
| 			}) | ||||
| 			return Promise.all(doc.map(migrate)) | ||||
| 		}, | ||||
| 		idop | ||||
| 	).then(a => { | ||||
| 		const rv = [] | ||||
| 		a.forEach(e => rv.push(...e)) | ||||
| 		return rv | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| main().then(console.dir).catch(console.error) | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue