Skip to content

Commit

Permalink
cleanup all older versions
Browse files Browse the repository at this point in the history
  • Loading branch information
juliaElastic committed Sep 22, 2021
1 parent ac9cd50 commit 53fda55
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 16 deletions.
53 changes: 40 additions & 13 deletions x-pack/plugins/fleet/server/services/epm/packages/cleanup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,34 @@ import { appContextService } from '../..';
export async function removeOldAssets(options: {
savedObjectsClient: SavedObjectsClientContract;
pkgName: string;
oldVersion: string;
currentVersion: string;
}) {
const { savedObjectsClient, pkgName, oldVersion } = options;
const { savedObjectsClient, pkgName, currentVersion } = options;

// check if old version has assets
const assets = await savedObjectsClient.find<PackageAssetReference>({
// find all assets of older versions
const aggs = {
versions: { terms: { field: `${ASSETS_SAVED_OBJECT_TYPE}.attributes.package_version` } },
};
const oldVersionsAgg = (await savedObjectsClient.find<PackageAssetReference>({
type: ASSETS_SAVED_OBJECT_TYPE,
filter: `${ASSETS_SAVED_OBJECT_TYPE}.attributes.package_name:${pkgName} AND ${ASSETS_SAVED_OBJECT_TYPE}.attributes.package_version:${oldVersion}`,
// how to query if more than one page?
perPage: 100,
fields: ['id'],
});
const refs = assets.saved_objects.map(
(obj) => ({ id: obj.id, type: ASSETS_SAVED_OBJECT_TYPE } as PackageAssetReference)
);
filter: `${ASSETS_SAVED_OBJECT_TYPE}.attributes.package_name:${pkgName} AND ${ASSETS_SAVED_OBJECT_TYPE}.attributes.package_version<${currentVersion}`,
aggs,
page: 0,
perPage: 0,
})) as any;

const oldVersions = oldVersionsAgg.aggregations.versions.buckets.map((obj) => obj.key);

for (const oldVersion of oldVersions) {
await removeAssetsFromVersion(savedObjectsClient, pkgName, oldVersion);
}
}

async function removeAssetsFromVersion(
savedObjectsClient: SavedObjectsClientContract,
pkgName: string,
oldVersion: string
) {
// check if any policies are using this package version
const { total } = await packagePolicyService.list(savedObjectsClient, {
kuery: `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name:${pkgName} AND ${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.version:${oldVersion}`,
Expand All @@ -47,5 +59,20 @@ export async function removeOldAssets(options: {
return;
}

await removeArchiveEntries({ savedObjectsClient, refs });
// check if old version has assets
const finder = await savedObjectsClient.createPointInTimeFinder({
type: ASSETS_SAVED_OBJECT_TYPE,
filter: `${ASSETS_SAVED_OBJECT_TYPE}.attributes.package_name:${pkgName} AND ${ASSETS_SAVED_OBJECT_TYPE}.attributes.package_version:${oldVersion}`,
perPage: 1000,
fields: ['id'],
});

for await (const assets of finder.find()) {
const refs = assets.saved_objects.map(
(obj) => ({ id: obj.id, type: ASSETS_SAVED_OBJECT_TYPE } as PackageAssetReference)
);

await removeArchiveEntries({ savedObjectsClient, refs });
}
await finder.close();
}
8 changes: 7 additions & 1 deletion x-pack/plugins/fleet/server/services/epm/packages/install.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import { isUnremovablePackage, getInstallation, getInstallationObject } from './
import { removeInstallation } from './remove';
import { getPackageSavedObjects } from './get';
import { _installPackage } from './_install_package';
import { removeOldAssets } from './cleanup';

export async function isPackageInstalled(options: {
savedObjectsClient: SavedObjectsClientContract;
Expand Down Expand Up @@ -267,7 +268,12 @@ async function installPackageFromRegistry({
installType,
installSource: 'registry',
})
.then((assets) => {
.then(async (assets) => {
await removeOldAssets({
savedObjectsClient,
pkgName: packageInfo.name,
currentVersion: packageInfo.version,
});
return { assets, status: 'installed', installType };
})
.catch(async (err: Error) => {
Expand Down
6 changes: 4 additions & 2 deletions x-pack/plugins/fleet/server/services/package_policy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,8 @@ class PackagePolicyService {
}));
}

i = 0;

public async list(
soClient: SavedObjectsClientContract,
options: ListWithKuery
Expand Down Expand Up @@ -578,8 +580,8 @@ class PackagePolicyService {
});
await removeOldAssets({
savedObjectsClient: soClient,
pkgName: packagePolicy.package.name,
oldVersion: packagePolicy.package.version,
pkgName: packageInfo.name,
currentVersion: packageInfo.version,
});
} catch (error) {
result.push({
Expand Down

0 comments on commit 53fda55

Please sign in to comment.