Skip to content

Commit d5dd535

Browse files
Handle bulkGet errors on package retrieval from ES storage (#111114) (#111147)
Co-authored-by: Josh Dover <1813008+joshdover@users.noreply.github.com>
1 parent b0e2ba2 commit d5dd535

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

x-pack/plugins/fleet/server/services/epm/archive/storage.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import type {
2323
} from '../../../../common';
2424
import { pkgToPkgKey } from '../registry';
2525

26+
import { appContextService } from '../../app_context';
27+
2628
import { getArchiveEntry, setArchiveEntry, setArchiveFilelist, setPackageInfo } from './index';
2729
import type { ArchiveEntry } from './index';
2830
import { parseAndVerifyPolicyTemplates, parseAndVerifyStreams } from './validation';
@@ -165,15 +167,35 @@ export const getEsPackage = async (
165167
references: PackageAssetReference[],
166168
savedObjectsClient: SavedObjectsClientContract
167169
) => {
170+
const logger = appContextService.getLogger();
168171
const pkgKey = pkgToPkgKey({ name: pkgName, version: pkgVersion });
169172
const bulkRes = await savedObjectsClient.bulkGet<PackageAsset>(
170173
references.map((reference) => ({
171174
...reference,
172175
fields: ['asset_path', 'data_utf8', 'data_base64'],
173176
}))
174177
);
178+
const errors = bulkRes.saved_objects.filter((so) => so.error || !so.attributes);
175179
const assets = bulkRes.saved_objects.map((so) => so.attributes);
176180

181+
if (errors.length) {
182+
const resolvedErrors = errors.map((so) =>
183+
so.error
184+
? { type: so.type, id: so.id, error: so.error }
185+
: !so.attributes
186+
? { type: so.type, id: so.id, error: { error: `No attributes retrieved` } }
187+
: { type: so.type, id: so.id, error: { error: `Unknown` } }
188+
);
189+
190+
logger.warn(
191+
`Failed to retrieve ${pkgName}-${pkgVersion} package from ES storage. bulkGet failed for assets: ${JSON.stringify(
192+
resolvedErrors
193+
)}`
194+
);
195+
196+
return undefined;
197+
}
198+
177199
const paths: string[] = [];
178200
const entries: ArchiveEntry[] = assets.map(packageAssetToArchiveEntry);
179201
entries.forEach(({ path, buffer }) => {

x-pack/plugins/fleet/server/services/epm/packages/get.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,10 @@ export async function getPackageFromSource(options: {
217217
installedPkg.package_assets,
218218
savedObjectsClient
219219
);
220-
logger.debug(`retrieved installed package ${pkgName}-${pkgVersion} from ES`);
220+
221+
if (res) {
222+
logger.debug(`retrieved installed package ${pkgName}-${pkgVersion} from ES`);
223+
}
221224
}
222225
// for packages not in cache or package storage and installed from registry, check registry
223226
if (!res && pkgInstallSource === 'registry') {

0 commit comments

Comments
 (0)