Replies: 1 comment
-
DATABASE PACKAGINGBackgroundCurrently packaging of IPM modules occurs either as source files or as a studio project. The former is the default while the latter is useful for deployed code and installing in systems without IPM. However, these approaches still face limitations that database packaging would solve. Database packaging is the idea of packaging the entirety of a module and its dependencies into an IRIS.DAT file and delivering that file for installation. The benefits include but are not limited to:
DesignOverviewAdd a new option to the Resource HandlingCode ResourcesClasses, routines, includes, globals, and documents are all compiled into the IRIS.DAT file. These are standard InterSystems resources that live in the routines database. CSP Files & Static Resources
Python Dependencies
Test Resources
Generated Resources
Other Resource FilesPlatform CompatibilityCross-Platform SupportIRIS.DAT files are designed to work across Windows, Linux, and macOS. This enables packaging once and deploying to multiple platforms. Endian Conversion
IRIS Version Compatibility
PackagingCLI FlagsChange
Interactions with Other Flags
Database CreationPre-validation
Checksumming & IntegritySHA-256 Checksum:
Package Output StructureChanges to module.xml
Installation (with IPM)Commands
Pre-Installation ValidationFile Checks:
User ConfirmationSwap Warning (unless confirmation skipped with Database Swap ProcedureDetailed swap steps:
Backup StrategyAutomatic Backup:
Post-Install Validation
Rollback on FailureIf mount fails:
Update IPM MetadataOn successful installation:
Developer ModeNot Supported: Developer mode cannot be enabled for database-packaged modules. Error if attempted. Installation (without IPM)
UninstallationIPM has existing uninstall capabilities that should be leveraged.
Upgrades
StorageWhat Goes WhereGlobals Database (persists across swaps):
Metadata Mapping Strategy
IPM External RequirementIPM itself (%IPM.* classes) must not be in the routines DB being swapped:
MirroringConfiguration Assumptions
TestingTest Case CategoriesThese test cases will be bundled into test methods (see "Test Methods" section below). Packaging:
Installation:
Upgrading (existing Update.cls tests cover dependency changes, version validation, update step execution):
Uninstallation:
Validation & Error Handling:
Mixed Packaging:
Manual Testing (Not Automated in CI/CD)These tests should be performed manually to avoid overloading CI/CD systems or because they require special setup/intervention. Performance & Scalability:
Interrupt & Recovery:
Mirroring Test Cases (Requires Special Setup)These tests require a mirrored IRIS environment with primary and backup members. They are more complex to set up and run. Basic Mirrored Installation:
Upgrade in Mirrored Environment:
Update Steps with Mirroring:
Test Methods (Bundled Test Cases)This section maps the test cases above into specific test methods that will be implemented in test classes. Test.PM.Integration.DatabasePackage (new test class)TestSimplePackageAndInstall:
TestPackageAndInstallWithDependencies:
TestPackageAndInstallAllResourceTypes:
TestPackageAndInstallWithTestResources:
TestPackageWithUseCurrentDbFlag:
TestPackageWithExportPyDepsFlag:
TestPackagingAndInstallValidation:
TestBackupAndRollback:
TestUpgradeDatabaseToDatabase:
TestUpgradeSourceToDatabase:
TestUninstallDatabasePackage:
TestMixedPackaging:
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Feature Request
IPM should support packaging all document resources as a database (IRIS.DAT) file instead of source files/studio project.
Why do we want this?
A few reasons:
Workflows
Packaging
Optionally flag based (e.g. package ModuleA -format database). Options for format: module, database, studio project (long term get rid of this as IPM becomes native to IRIS).
Considerations:
Installation
Developer Mode
Not supported for database packaged.
Non-developer Mode
Considerations:
Upgrades
Considerations:
Storage
We need to carefully think about how storage of IPM should be handled:
Think about what happens with different mapped storage when certain databases are mirrored but others aren't (e.g. globals db is mirrored and routine db is not)
Beta Was this translation helpful? Give feedback.
All reactions