Procházet zdrojové kódy

Additional logging for vault version upgrade

Markus Kreusch před 8 roky
rodič
revize
82330db871

+ 3 - 0
main/ui/src/main/java/org/cryptomator/ui/model/UpgradeStrategy.java

@@ -41,6 +41,7 @@ public abstract class UpgradeStrategy {
 	 * Upgrades a vault. Might take a moment, should be run in a background thread.
 	 */
 	public void upgrade(Vault vault, CharSequence passphrase) throws UpgradeFailedException {
+		LOG.info("Upgrading {} from {} to {}.", vault.path().getValue(), vaultVersionBeforeUpgrade, vaultVersionAfterUpgrade);
 		Cryptor cryptor = null;
 		try {
 			final Path masterkeyFile = vault.path().getValue().resolve(Constants.MASTERKEY_FILENAME);
@@ -49,12 +50,14 @@ public abstract class UpgradeStrategy {
 			// create backup, as soon as we know the password was correct:
 			final Path masterkeyBackupFile = vault.path().getValue().resolve(Constants.MASTERKEY_BACKUP_FILENAME);
 			Files.copy(masterkeyFile, masterkeyBackupFile, StandardCopyOption.REPLACE_EXISTING);
+			LOG.info("Backuped masterkey.");
 			// do stuff:
 			upgrade(vault, cryptor);
 			// write updated masterkey file:
 			final byte[] upgradedMasterkeyFileContents = cryptor.writeKeysToMasterkeyFile(passphrase, vaultVersionAfterUpgrade).serialize();
 			final Path masterkeyFileAfterUpgrade = vault.path().getValue().resolve(Constants.MASTERKEY_FILENAME); // path may have changed
 			Files.write(masterkeyFileAfterUpgrade, upgradedMasterkeyFileContents, StandardOpenOption.TRUNCATE_EXISTING);
+			LOG.info("Updated masterkey.");
 		} catch (InvalidPassphraseException e) {
 			throw new UpgradeFailedException(localization.getString("unlock.errorMessage.wrongPassword"));
 		} catch (UnsupportedVaultFormatException e) {

+ 13 - 5
main/ui/src/main/java/org/cryptomator/ui/model/UpgradeVersion4to5.java

@@ -57,6 +57,8 @@ class UpgradeVersion4to5 extends UpgradeStrategy {
 				public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
 					if (BASE32_PATTERN.matcher(file.getFileName().toString()).find() && attrs.size() > cryptor.fileHeaderCryptor().headerSize()) {
 						migrate(file, attrs, cryptor);
+					} else {
+						LOG.info("Skipping irrelevant file {}.", file);
 					}
 					return FileVisitResult.CONTINUE;
 				}
@@ -70,18 +72,20 @@ class UpgradeVersion4to5 extends UpgradeStrategy {
 	}
 
 	private void migrate(Path file, BasicFileAttributes attrs, Cryptor cryptor) throws IOException {
+		LOG.info("Starting migration of {}...", file);
 		try (FileChannel ch = FileChannel.open(file, StandardOpenOption.READ, StandardOpenOption.WRITE)) {
 			// read header:
 			ByteBuffer headerBuf = ByteBuffer.allocate(cryptor.fileHeaderCryptor().headerSize());
 			ch.read(headerBuf);
 			headerBuf.flip();
+			LOG.info("\tHeader read");
 			FileHeader header = cryptor.fileHeaderCryptor().decryptHeader(headerBuf);
 			long cleartextSize = header.getFilesize();
 			if (cleartextSize < 0) {
-				LOG.info("Skipping already migrated file {}.", file);
+				LOG.info("\tSkipping already migrated file");
 				return;
 			} else if (cleartextSize > attrs.size()) {
-				LOG.warn("Skipping file {} with invalid file size {}/{}", file, cleartextSize, attrs.size());
+				LOG.warn("\tSkipping file with invalid file size {}/{}", cleartextSize, attrs.size());
 				return;
 			}
 			int headerSize = cryptor.fileHeaderCryptor().headerSize();
@@ -93,12 +97,13 @@ class UpgradeVersion4to5 extends UpgradeStrategy {
 			long newAdditionalCiphertextBytes = newCiphertextSize % ciphertextChunkSize;
 			if (newAdditionalCiphertextBytes == 0) {
 				// (new) last block is already correct. just truncate:
-				LOG.info("Migrating {} of cleartext size {}: Truncating to new ciphertext size: {}", file, cleartextSize, newEOF);
+				LOG.info("\tMigrating cleartext size {}: Truncating to new ciphertext size: {}", cleartextSize, newEOF);
 				ch.truncate(newEOF);
+				LOG.info("\tFile truncated");
 			} else {
 				// last block may contain padding and needs to be re-encrypted:
 				long lastChunkIdx = newFullChunks;
-				LOG.info("Migrating {} of cleartext size {}: Re-encrypting chunk {}. New ciphertext size: {}", file, cleartextSize, lastChunkIdx, newEOF);
+				LOG.info("\tMigrating cleartext size {}: Re-encrypting chunk {}. New ciphertext size: {}", cleartextSize, lastChunkIdx, newEOF);
 				long beginOfLastChunk = headerSize + lastChunkIdx * ciphertextChunkSize;
 				assert beginOfLastChunk < newEOF;
 				int lastCleartextChunkLength = (int) (cleartextSize % cleartextChunkSize);
@@ -116,15 +121,18 @@ class UpgradeVersion4to5 extends UpgradeStrategy {
 					ch.truncate(beginOfLastChunk);
 					ch.write(newLastChunkCiphertext);
 				} else {
-					LOG.error("Reached EOF at position {}/{}", beginOfLastChunk, newEOF);
+					LOG.error("\tReached EOF at position {}/{}", beginOfLastChunk, newEOF);
 					return; // must exit method before changing header!
 				}
+				LOG.info("\tReencrypted last block");
 			}
 			header.setFilesize(-1l);
 			ByteBuffer newHeaderBuf = cryptor.fileHeaderCryptor().encryptHeader(header);
 			ch.position(0);
 			ch.write(newHeaderBuf);
+			LOG.info("\tUpdated header");
 		}
+		LOG.info("Finished migration of {}.", file);
 	}
 
 }