Handle bulkGet errors on package retrieval from ES storage (#111114)

This commit is contained in:
Josh Dover 2021-09-03 16:01:28 +02:00 committed by GitHub
parent 21b4752dba
commit ed18699e38
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 1 deletions

View file

@ -23,6 +23,8 @@ import type {
} from '../../../../common';
import { pkgToPkgKey } from '../registry';
import { appContextService } from '../../app_context';
import { getArchiveEntry, setArchiveEntry, setArchiveFilelist, setPackageInfo } from './index';
import type { ArchiveEntry } from './index';
import { parseAndVerifyPolicyTemplates, parseAndVerifyStreams } from './validation';
@ -165,6 +167,7 @@ export const getEsPackage = async (
references: PackageAssetReference[],
savedObjectsClient: SavedObjectsClientContract
) => {
const logger = appContextService.getLogger();
const pkgKey = pkgToPkgKey({ name: pkgName, version: pkgVersion });
const bulkRes = await savedObjectsClient.bulkGet<PackageAsset>(
references.map((reference) => ({
@ -172,8 +175,27 @@ export const getEsPackage = async (
fields: ['asset_path', 'data_utf8', 'data_base64'],
}))
);
const errors = bulkRes.saved_objects.filter((so) => so.error || !so.attributes);
const assets = bulkRes.saved_objects.map((so) => so.attributes);
if (errors.length) {
const resolvedErrors = errors.map((so) =>
so.error
? { type: so.type, id: so.id, error: so.error }
: !so.attributes
? { type: so.type, id: so.id, error: { error: `No attributes retrieved` } }
: { type: so.type, id: so.id, error: { error: `Unknown` } }
);
logger.warn(
`Failed to retrieve ${pkgName}-${pkgVersion} package from ES storage. bulkGet failed for assets: ${JSON.stringify(
resolvedErrors
)}`
);
return undefined;
}
const paths: string[] = [];
const entries: ArchiveEntry[] = assets.map(packageAssetToArchiveEntry);
entries.forEach(({ path, buffer }) => {

View file

@ -217,7 +217,10 @@ export async function getPackageFromSource(options: {
installedPkg.package_assets,
savedObjectsClient
);
logger.debug(`retrieved installed package ${pkgName}-${pkgVersion} from ES`);
if (res) {
logger.debug(`retrieved installed package ${pkgName}-${pkgVersion} from ES`);
}
}
// for packages not in cache or package storage and installed from registry, check registry
if (!res && pkgInstallSource === 'registry') {