Import log instead of using it off of window

This commit is contained in:
Josh Perez 2021-09-17 14:27:53 -04:00 committed by GitHub
parent 8eb0dd3116
commit 65ddf0a9e8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
155 changed files with 3654 additions and 3433 deletions

View file

@ -40,6 +40,7 @@ import {
typeofConversation,
} from '../util/whatTypeOfConversation';
import { SignalService as Proto } from '../protobuf';
import * as log from '../logging/log';
type IManifestRecordIdentifier = Proto.ManifestRecord.IIdentifier;
@ -136,7 +137,7 @@ async function generateManifest(
previousManifest?: Proto.IManifestRecord,
isNewManifest = false
): Promise<GeneratedManifestType> {
window.log.info(
log.info(
'storageService.generateManifest: generating manifest',
version,
isNewManifest
@ -186,7 +187,7 @@ async function generateManifest(
storageRecord.groupV1 = await toGroupV1Record(conversation);
identifier.type = ITEM_TYPE.GROUPV1;
} else {
window.log.info(
log.info(
'storageService.generateManifest: unknown conversation',
conversation.idForLogging()
);
@ -209,7 +210,7 @@ async function generateManifest(
// eslint-disable-next-line no-await-in-loop
storageItem = await encryptRecord(storageID, storageRecord);
} catch (err) {
window.log.error(
log.error(
'storageService.generateManifest: encrypt record failed:',
err && err.stack ? err.stack : String(err)
);
@ -224,13 +225,13 @@ async function generateManifest(
if (storageID) {
insertKeys.push(storageID);
window.log.info(
log.info(
'storageService.generateManifest: new key',
conversation.idForLogging(),
redactStorageID(storageID)
);
} else {
window.log.info(
log.info(
'storageService.generateManifest: no storage id',
conversation.idForLogging()
);
@ -238,7 +239,7 @@ async function generateManifest(
const oldStorageID = conversation.get('storageID');
if (oldStorageID) {
window.log.info(
log.info(
'storageService.generateManifest: deleting key',
redactStorageID(oldStorageID)
);
@ -259,7 +260,7 @@ async function generateManifest(
window.storage.get('storage-service-unknown-records') || []
).filter((record: UnknownRecord) => !validRecordTypes.has(record.itemType));
window.log.info(
log.info(
'storageService.generateManifest: adding unknown records:',
unknownRecordsArray.length
);
@ -279,7 +280,7 @@ async function generateManifest(
new Array<UnknownRecord>()
);
window.log.info(
log.info(
'storageService.generateManifest: adding records that had errors in the previous merge',
recordsWithErrors.length
);
@ -311,7 +312,7 @@ async function generateManifest(
rawDuplicates.has(identifier.raw) ||
typeRawDuplicates.has(typeAndRaw)
) {
window.log.info(
log.info(
'storageService.generateManifest: removing duplicate identifier from manifest',
identifier.type
);
@ -325,7 +326,7 @@ async function generateManifest(
key => arrayBufferToBase64(key) === storageID
);
if (hasDeleteKey) {
window.log.info(
log.info(
'storageService.generateManifest: removing key which has been deleted',
identifier.type
);
@ -335,9 +336,7 @@ async function generateManifest(
// Ensure that there is *exactly* one Account type in the manifest
if (identifier.type === ITEM_TYPE.ACCOUNT) {
if (hasAccountType) {
window.log.info(
'storageService.generateManifest: removing duplicate account'
);
log.info('storageService.generateManifest: removing duplicate account');
manifestRecordKeys.delete(identifier);
}
hasAccountType = true;
@ -355,7 +354,7 @@ async function generateManifest(
const storageID = Bytes.toBase64(storageItem.key);
if (storageKeyDuplicates.has(storageID)) {
window.log.info(
log.info(
'storageService.generateManifest: removing duplicate identifier from inserts',
redactStorageID(storageID)
);
@ -405,7 +404,7 @@ async function generateManifest(
);
const remoteDeletes: Array<string> = [];
pendingDeletes.forEach(id => remoteDeletes.push(redactStorageID(id)));
window.log.error(
log.error(
'Delete key sizes do not match',
'local',
localDeletes.join(','),
@ -480,13 +479,13 @@ async function uploadManifest(
}
if (newItems.size === 0 && deleteKeys.length === 0) {
window.log.info('storageService.uploadManifest: nothing to upload');
log.info('storageService.uploadManifest: nothing to upload');
return;
}
const credentials = window.storage.get('storageCredentials');
try {
window.log.info(
log.info(
'storageService.uploadManifest: keys inserting, deleting:',
newItems.size,
deleteKeys.length
@ -497,7 +496,7 @@ async function uploadManifest(
writeOperation.insertItem = Array.from(newItems);
writeOperation.deleteKey = deleteKeys.map(key => new FIXMEU8(key));
window.log.info('storageService.uploadManifest: uploading...', version);
log.info('storageService.uploadManifest: uploading...', version);
await window.textsecure.messaging.modifyStorageRecords(
typedArrayToArrayBuffer(
Proto.WriteOperation.encode(writeOperation).finish()
@ -507,7 +506,7 @@ async function uploadManifest(
}
);
window.log.info(
log.info(
'storageService.uploadManifest: upload done, updating conversation(s) with new storageIDs:',
conversationsToUpdate.length
);
@ -521,20 +520,20 @@ async function uploadManifest(
updateConversation(conversation.attributes);
});
} catch (err) {
window.log.error(
log.error(
'storageService.uploadManifest: failed!',
err && err.stack ? err.stack : String(err)
);
if (err.code === 409) {
if (conflictBackOff.isFull()) {
window.log.error(
log.error(
'storageService.uploadManifest: Exceeded maximum consecutive conflicts'
);
return;
}
window.log.info(
log.info(
`storageService.uploadManifest: Conflict found with v${version}, running sync job times(${conflictBackOff.getIndex()})`
);
@ -544,7 +543,7 @@ async function uploadManifest(
throw err;
}
window.log.info(
log.info(
'storageService.uploadManifest: setting new manifestVersion',
version
);
@ -553,7 +552,7 @@ async function uploadManifest(
backOff.reset();
if (window.ConversationController.areWePrimaryDevice()) {
window.log.warn(
log.warn(
'uploadManifest: We are primary device; not sending sync manifest'
);
return;
@ -566,26 +565,26 @@ async function uploadManifest(
}
async function stopStorageServiceSync() {
window.log.info('storageService.stopStorageServiceSync');
log.info('storageService.stopStorageServiceSync');
await window.storage.remove('storageKey');
if (backOff.isFull()) {
window.log.info(
log.info(
'storageService.stopStorageServiceSync: too many consecutive stops'
);
return;
}
await sleep(backOff.getAndIncrement());
window.log.info('storageService.stopStorageServiceSync: requesting new keys');
log.info('storageService.stopStorageServiceSync: requesting new keys');
setTimeout(() => {
if (!window.textsecure.messaging) {
throw new Error('storageService.stopStorageServiceSync: We are offline!');
}
if (window.ConversationController.areWePrimaryDevice()) {
window.log.warn(
log.warn(
'stopStorageServiceSync: We are primary device; not sending key sync request'
);
return;
@ -599,7 +598,7 @@ async function stopStorageServiceSync() {
}
async function createNewManifest() {
window.log.info('storageService.createNewManifest: creating new manifest');
log.info('storageService.createNewManifest: creating new manifest');
const version = window.storage.get('manifestVersion', 0);
@ -645,7 +644,7 @@ async function decryptManifest(
async function fetchManifest(
manifestVersion: number
): Promise<Proto.ManifestRecord | undefined> {
window.log.info('storageService.fetchManifest');
log.info('storageService.fetchManifest');
if (!window.textsecure.messaging) {
throw new Error('storageService.fetchManifest: We are offline!');
@ -667,7 +666,7 @@ async function fetchManifest(
// if we don't get a value we're assuming that there's no newer manifest
if (!encryptedManifest.value || !encryptedManifest.version) {
window.log.info('storageService.fetchManifest: nothing changed');
log.info('storageService.fetchManifest: nothing changed');
return;
}
@ -678,7 +677,7 @@ async function fetchManifest(
return;
}
} catch (err) {
window.log.error(
log.error(
'storageService.fetchManifest: failed!',
err && err.stack ? err.stack : String(err)
);
@ -721,10 +720,7 @@ async function mergeRecord(
try {
if (itemType === ITEM_TYPE.UNKNOWN) {
window.log.info(
'storageService.mergeRecord: Unknown item type',
storageID
);
log.info('storageService.mergeRecord: Unknown item type', storageID);
} else if (itemType === ITEM_TYPE.CONTACT && storageRecord.contact) {
hasConflict = await mergeContactRecord(storageID, storageRecord.contact);
} else if (itemType === ITEM_TYPE.GROUPV1 && storageRecord.groupV1) {
@ -735,9 +731,9 @@ async function mergeRecord(
hasConflict = await mergeAccountRecord(storageID, storageRecord.account);
} else {
isUnsupported = true;
window.log.info('storageService.mergeRecord: Unknown record:', itemType);
log.info('storageService.mergeRecord: Unknown record:', itemType);
}
window.log.info(
log.info(
'storageService.mergeRecord: merged',
redactStorageID(storageID),
itemType,
@ -745,7 +741,7 @@ async function mergeRecord(
);
} catch (err) {
hasError = true;
window.log.error(
log.error(
'storageService.mergeRecord: Error with',
redactStorageID(storageID),
itemType,
@ -798,22 +794,16 @@ async function processManifest(
return true;
});
window.log.info(
log.info(
'storageService.processManifest: local records:',
conversations.length
);
window.log.info(
'storageService.processManifest: local keys:',
localKeys.size
);
window.log.info(
log.info('storageService.processManifest: local keys:', localKeys.size);
log.info(
'storageService.processManifest: unknown records:',
stillUnknown.length
);
window.log.info(
'storageService.processManifest: remote keys:',
remoteKeys.size
);
log.info('storageService.processManifest: remote keys:', remoteKeys.size);
const remoteOnlySet: Set<string> = new Set();
remoteKeys.forEach((key: string) => {
@ -822,7 +812,7 @@ async function processManifest(
}
});
window.log.info(
log.info(
'storageService.processManifest: remote ids:',
Array.from(remoteOnlySet).map(redactStorageID).join(',')
);
@ -845,7 +835,7 @@ async function processManifest(
window.getConversations().forEach((conversation: ConversationModel) => {
const storageID = conversation.get('storageID');
if (storageID && !remoteKeys.has(storageID)) {
window.log.info(
log.info(
'storageService.processManifest: local key was not in remote manifest',
redactStorageID(storageID),
conversation.idForLogging()
@ -867,7 +857,7 @@ async function processRemoteRecords(
}
const storageKey = base64ToArrayBuffer(storageKeyBase64);
window.log.info(
log.info(
'storageService.processRemoteRecords: remote only keys',
remoteOnlyRecords.size
);
@ -890,9 +880,7 @@ async function processRemoteRecords(
);
if (!storageItems.items) {
window.log.info(
'storageService.processRemoteRecords: No storage items retrieved'
);
log.info('storageService.processRemoteRecords: No storage items retrieved');
return 0;
}
@ -904,7 +892,7 @@ async function processRemoteRecords(
const { key, value: storageItemCiphertext } = storageRecordWrapper;
if (!key || !storageItemCiphertext) {
window.log.error(
log.error(
'storageService.processRemoteRecords: No key or Ciphertext available'
);
await stopStorageServiceSync();
@ -927,7 +915,7 @@ async function processRemoteRecords(
storageItemKey
);
} catch (err) {
window.log.error(
log.error(
'storageService.processRemoteRecords: Error decrypting storage item'
);
await stopStorageServiceSync();
@ -964,13 +952,13 @@ async function processRemoteRecords(
);
try {
window.log.info(
log.info(
`storageService.processRemoteRecords: Attempting to merge ${sortedStorageItems.length} records`
);
const mergedRecords = await pMap(sortedStorageItems, mergeRecord, {
concurrency: 5,
});
window.log.info(
log.info(
`storageService.processRemoteRecords: Processed ${mergedRecords.length} records`
);
@ -1012,13 +1000,13 @@ async function processRemoteRecords(
(record: UnknownRecord) => !validRecordTypes.has(record.itemType)
);
window.log.info(
log.info(
'storageService.processRemoteRecords: Unknown records found:',
newUnknownRecords.length
);
window.storage.put('storage-service-unknown-records', newUnknownRecords);
window.log.info(
log.info(
'storageService.processRemoteRecords: Records with errors:',
newRecordsWithErrors.length
);
@ -1028,7 +1016,7 @@ async function processRemoteRecords(
window.storage.put('storage-service-error-records', newRecordsWithErrors);
if (conflictCount !== 0) {
window.log.info(
log.info(
'storageService.processRemoteRecords: ' +
`${conflictCount} conflicts found, uploading changes`
);
@ -1038,7 +1026,7 @@ async function processRemoteRecords(
conflictBackOff.reset();
} catch (err) {
window.log.error(
log.error(
'storageService.processRemoteRecords: failed!',
err && err.stack ? err.stack : String(err)
);
@ -1051,9 +1039,7 @@ async function sync(
ignoreConflicts = false
): Promise<Proto.ManifestRecord | undefined> {
if (!isStorageWriteFeatureEnabled()) {
window.log.info(
'storageService.sync: Not starting desktop.storage is falsey'
);
log.info('storageService.sync: Not starting desktop.storage is falsey');
return undefined;
}
@ -1062,7 +1048,7 @@ async function sync(
throw new Error('storageService.sync: Cannot start; no storage key!');
}
window.log.info('storageService.sync: starting...');
log.info('storageService.sync: starting...');
let manifest: Proto.ManifestRecord | undefined;
try {
@ -1078,7 +1064,7 @@ async function sync(
// Guarding against no manifests being returned, everything should be ok
if (!manifest) {
window.log.info('storageService.sync: no new manifest');
log.info('storageService.sync: no new manifest');
return undefined;
}
@ -1088,7 +1074,7 @@ async function sync(
);
const version = normalizeNumber(manifest.version);
window.log.info(
log.info(
`storageService.sync: manifest versions - previous: ${localManifestVersion}, current: ${version}`
);
@ -1102,20 +1088,20 @@ async function sync(
// We now know that we've successfully completed a storage service fetch
window.storage.put('storageFetchComplete', true);
} catch (err) {
window.log.error(
log.error(
'storageService.sync: error processing manifest',
err && err.stack ? err.stack : String(err)
);
}
window.Signal.Util.postLinkExperience.stop();
window.log.info('storageService.sync: complete');
log.info('storageService.sync: complete');
return manifest;
}
async function upload(fromSync = false): Promise<void> {
if (!isStorageWriteFeatureEnabled()) {
window.log.info(
log.info(
'storageService.upload: Not starting because the feature is not enabled'
);
@ -1145,15 +1131,11 @@ async function upload(fromSync = false): Promise<void> {
if (!window.storage.get('storageKey')) {
// requesting new keys runs the sync job which will detect the conflict
// and re-run the upload job once we're merged and up-to-date.
window.log.info(
'storageService.upload: no storageKey, requesting new keys'
);
log.info('storageService.upload: no storageKey, requesting new keys');
backOff.reset();
if (window.ConversationController.areWePrimaryDevice()) {
window.log.warn(
'upload: We are primary device; not sending key sync request'
);
log.warn('upload: We are primary device; not sending key sync request');
return;
}
@ -1178,10 +1160,7 @@ async function upload(fromSync = false): Promise<void> {
const localManifestVersion = window.storage.get('manifestVersion', 0);
const version = Number(localManifestVersion) + 1;
window.log.info(
'storageService.upload: will update to manifest version',
version
);
log.info('storageService.upload: will update to manifest version', version);
try {
const generatedManifest = await generateManifest(version, previousManifest);
@ -1189,14 +1168,14 @@ async function upload(fromSync = false): Promise<void> {
} catch (err) {
if (err.code === 409) {
await sleep(conflictBackOff.getAndIncrement());
window.log.info('storageService.upload: pushing sync on the queue');
log.info('storageService.upload: pushing sync on the queue');
// The sync job will check for conflicts and as part of that conflict
// check if an item needs sync and doesn't match with the remote record
// it'll kick off another upload.
setTimeout(runStorageServiceSyncJob);
return;
}
window.log.error(
log.error(
'storageService.upload',
err && err.stack ? err.stack : String(err)
);
@ -1212,21 +1191,19 @@ export function enableStorageService(): void {
// Note: this function is meant to be called before ConversationController is hydrated.
// It goes directly to the database, so in-memory conversations will be out of date.
export async function eraseAllStorageServiceState(): Promise<void> {
window.log.info('storageService.eraseAllStorageServiceState: starting...');
log.info('storageService.eraseAllStorageServiceState: starting...');
await Promise.all([
window.storage.remove('manifestVersion'),
window.storage.remove('storage-service-unknown-records'),
window.storage.remove('storageCredentials'),
]);
await eraseStorageServiceStateFromConversations();
window.log.info('storageService.eraseAllStorageServiceState: complete');
log.info('storageService.eraseAllStorageServiceState: complete');
}
export const storageServiceUploadJob = debounce(() => {
if (!storageServiceEnabled) {
window.log.info(
'storageService.storageServiceUploadJob: called before enabled'
);
log.info('storageService.storageServiceUploadJob: called before enabled');
return;
}
@ -1237,9 +1214,7 @@ export const storageServiceUploadJob = debounce(() => {
export const runStorageServiceSyncJob = debounce(() => {
if (!storageServiceEnabled) {
window.log.info(
'storageService.runStorageServiceSyncJob: called before enabled'
);
log.info('storageService.runStorageServiceSyncJob: called before enabled');
return;
}