Releases: nasa/cumulus
Releases · nasa/cumulus
v1.10.3
Added
- CUMULUS-817
- Added AWS Dead Letter Queues for lambdas that are scheduled asynchronously/such that failures show up only in cloudwatch logs.
- CUMULUS-956
- Migrated developer documentation and data-cookbooks to Docusaurus
- supports versioning of documentation
- Added
docs/docs-how-to.md
to outline how to do things like add new docs or locally install for testing. - Deployment/CI scripts have been updated to work with the new format
- Migrated developer documentation and data-cookbooks to Docusaurus
- CUMULUS-811
- Added new S3 functions to
@cumulus/common/aws
:aws.s3TagSetToQueryString
: converts S3 TagSet array to querystring (for use with upload()).aws.s3PutObject
: Returns promise of S3putObject
, which puts an object on S3aws.s3CopyObject
: Returns promise of S3copyObject
, which copies an object in S3 to a new S3 locationaws.s3GetObjectTagging
: Returns promise of S3getObjectTagging
, which returns an object containing an S3 TagSet.
@/cumulus/common/aws.s3PutObject
defaults to an explicitACL
of 'private' if not overridden.@/cumulus/common/aws.s3CopyObject
defaults to an explicitTaggingDirective
of 'COPY' if not overridden.
- Added new S3 functions to
Deprecated
- CUMULUS-811
- Deprecated
@cumulus/ingest/aws.S3
. Member functions of this class will now
log warnings pointing to similar functionality in@cumulus/common/aws
.
- Deprecated
v1.10.2
Important Note:
- Redeploy your
iam
stack.
Notable changes:
- Human-readable lambda versioning
- Duplicate granule handling - sync granule and move granule tasks now have an added, non-required parameter. Duplicate handling will default to error, if nothing is specified for the tasks or collection.
Added
- CUMULUS-885 CUMULUS-851 Human-readable lambda versioning
- Added 'human readable' version identifiers to Lambda Versioning lambda aliases
- Added workflow lambda versioning feature to allow in-flight workflows to use lambda versions that were in place when a workflow was initiated
- Updated Kes custom code to remove logic that used the CMA file key to determine template compilation logic. Instead, utilize a
customCompilation
template configuration flag to indicate a template should use Cumulus's kes customized methods instead of 'core'. - Added
useWorkflowLambdaVersions
configuration option to enable the lambdaVersioning feature set. This option is set to true by default and should be set to false to disable the feature. - Added uniqueIdentifier configuration key to S3 sourced lambdas to optionally support S3 lambda resource versioning within this scheme. This key must be unique for each modified version of the lambda package and must be updated in configuration each time the source changes.
- Added a new nested stack template that will create a
LambdaVersions
stack that will take lambda parameters from the base template, generate lambda versions/aliases and return outputs with references to the most 'current' lambda alias reference, and updated 'core' template to utilize these outputs (ifuseWorkflowLambdaVersions
is enabled).
- Updated Kes custom code to remove logic that used the CMA file key to determine template compilation logic. Instead, utilize a
@cumulus/ingest/granule.js
:ingestFile
inserts newduplicate_found: true
field in the file's record if a duplicate file already exists on S3.- CUMULUS-791 -
@cumulus/move-granules
:moveFileRequest
inserts newduplicate_found: true
field in the file's record if a duplicate file already exists on S3. Updated output schema to document newduplicate_found
field. @cumulus/api
:/execution-status
endpoint requests and returns complete execution output if execution output is stored in S3 due to size.- CUMULUS-705 Support for Async Operations
- Note: Make sure to update the IAM stack when deploying this update.
- Adds an AsyncOperations model and associated DynamoDB table to the
@cumulus/api
package - Adds an /asyncOperations endpoint to the
@cumulus/api
package, which can
be used to fetch the status of an AsyncOperation. - Adds a /bulkDelete endpoint to the
@cumulus/api
package, which performs an
asynchronous bulk-delete operation. This is a stub right now which is only
intended to demonstration how AsyncOperations work. - Adds an AsyncOperation ECS task to the
@cumulus/api
package, which will
fetch an Lambda function, run it in ECS, and then store the result to the
AsyncOperations table in DynamoDB.
- Created a
@cumulus/api/lib/OAuth2
interface, which is implemented by the
@cumulus/api/lib/EarthdataLogin
and@cumulus/api/lib/GoogleOAuth2
classes.
Endpoints that need to handle authentication will determine which class to use
based on environment variables. This also greatly simplifies testing. - Added
@cumulus/api/lib/assertions
, containing more complex AVA test assertions - Added PublishGranule workflow to publish a granule to CMR without full reingest. (ingest-in-place capability)
@cumulus/integration-tests
new functionality:listCollections
to list collections from a provided data directorydeleteCollection
to delete list of collections from a deployed stackcleanUpCollections
combines the above in one function.listProviders
to list providers from a provided data directorydeleteProviders
to delete list of providers from a deployed stackcleanUpProviders
combines the above in one function.@cumulus/integrations-tests/api.js
:deleteGranule
anddeletePdr
functions to makeDELETE
requests to Cumulus APIrules
API functionality for posting and deleting a rule and listing all ruleswait-for-deploy
lambda for use in the redeployment tests
- Added option to use environment variable to set CMR host in
@cumulus/cmrjs
.
Removed
- Removed
@cumulus/common/fake-earthdata-login-server
. Tests can now create a
service stub based on@cumulus/api/lib/OAuth2
if testing requires handling
authentication.
Changed
- CUMULUS-940 - modified
@cumulus/common/aws
receiveSQSMessages
to take a parameter object instead of positional parameters. All defaults remain the same, but now access to long polling is available throughoptions.waitTimeSeconds
. - Duplicate Granule Handling:
- CUMULUS-782 - Updated
@cumulus/sync-granule
task andGranule.ingestFile
in@cumulus/ingest
to keep both old and new data when a destination file with different checksum already exists andduplicateHandling
isversion
- Updated the config schema in
@cumulus/move-granules
to include themoveStagedFiles
param. - CUMULUS-778 - Updated config schema and documentation in
@cumulus/sync-granule
to includeduplicateHandling
parameter for specifying how duplicate filenames should be handled - CUMULUS-779 - Updated
@cumulus/sync-granule
to throwDuplicateFile
error when destination files already exist andduplicateHandling
iserror
- CUMULUS-780 - Updated
@cumulus/sync-granule
to useerror
as the default forduplicateHandling
when it is not specified - CUMULUS-780 - Updated
@cumulus/api
to useerror
as the default value forduplicateHandling
in theCollection
model - CUMULUS-785 - Updated the config schema and documentation in
@cumulus/move-granules
to includeduplicateHandling
parameter for specifying how duplicate filenames should be handled - CUMULUS-786, CUMULUS-787 - Updated
@cumulus/move-granules
to throwDuplicateFile
error when destination files already exist andduplicateHandling
iserror
or not specified - CUMULUS-789 - Updated
@cumulus/move-granules
to keep both old and new data when a destination file with different checksum already exists andduplicateHandling
isversion
- CUMULUS-782 - Updated
- CUMULUS-948 - Update lambda functions
CNMToCMA
andCnmResponse
in thecumulus-data-shared
bucket and point the default stack to them, for integration tests.
Fixed
getGranuleId
in@cumulus/ingest
bug:getGranuleId
was constructing an error usingfilename
which was undefined. The fix replacesfilename
with theuri
argument.- Fixes to
del
in@cumulus/api/endpoints/granules.js
to not error/fail when not all files exist in S3 (e.g. delete granule which has only 2 of 3 files ingested).
v1.10.1
Fixed
- CUMULUS-876 Fixed cloudformation template errors in
@cumulus/deployment/
- Replaced references to Fn::Ref: with Ref:
- Moved long form template references to a newline
v1.10.0
Removed
- Removed unused and broken code from
@cumulus/common
- Removed
@cumulus/common/test-helpers
- Removed
@cumulus/common/task
- Removed
@cumulus/common/message-source
- Removed the
getPossiblyRemote
function from@cumulus/common/aws
- Removed the
startPromisedSfnExecution
function from@cumulus/common/aws
- Removed the
getCurrentSfnTask
function from@cumulus/common/aws
- Removed
Changed
- CUMULUS-839 - In
@cumulus/sync-granule
, 'collection' is now an optional config parameter
Fixed
- CUMULUS-859 Moved duplicate code in
@cumulus/move-granules
and@cumulus/post-to-cmr
to@cumulus/ingest
. Fixed imports making assumptions about directory structure. @cumulus/ingest/consumer
correctly limits the number of messages being received and processed from SQS. Details:- Background:
@cumulus/api
includes a lambda<stack-name>-sqs2sf
which processes messages from the<stack-name>-startSF
SQS queue every minute. Thesqs2sf
lambda uses@cumulus/ingest/consumer
to receive and process messages from SQS. - Bug: More than
messageLimit
number of messages were being consumed and processed from the<stack-name>-startSF
SQS queue. Many step functions were being triggered simultaneously by the lambda<stack-name>-sqs2sf
(which consumes every minute from thestartSF
queue) and resulting in step function failure with the error:An error occurred (ThrottlingException) when calling the GetExecutionHistory
. - Fix:
@cumulus/ingest/consumer#processMessages
now processes messages untiltimeLimit
has passed OR once it receives up tomessageLimit
messages.sqs2sf
is deployed with a defaultmessageLimit
of 10. - IMPORTANT NOTE:
consumer
will actually process up tomessageLimit * 2 - 1
messages. This is because sometimesreceiveSQSMessages
will return less thanmessageLimit
messages and thus the consumer will continue to make calls toreceiveSQSMessages
. For example, given amessageLimit
of 10 and subsequent calls toreceiveSQSMessages
returns up to 9 messages, the loop will continue and a final call could return up to 10 messages.
- Background:
v1.9.1
Please Note To take advantage of the added granule tracking API functionality, updates are required for the message adapter and its libraries. You should be on the following versions:
cumulus-message-adapter
1.0.9+cumulus-message-adapter-js
1.0.4+cumulus-message-adapter-java
1.2.7+cumulus-message-adapter-python
1.0.5+
Added
- CUMULUS-687 Added logs endpoint to search for logs from a specific workflow execution in
@cumulus/api
. Added integration test. - CUMULUS-836 -
@cumulus/deployment
supports a configurable docker storage driver for ECS. ECS can be configured with eitherdevicemapper
(the default storage driver for AWS ECS-optimized AMIs) oroverlay2
(the storage driver used by the NGAP 2.0 AMI). The storage driver can be configured inapp/config.yml
withecs.docker.storageDriver: overlay2 | devicemapper
. The default isoverlay2
.- To support this configuration, a Handlebars helper
ifEquals
was added topackages/deployment/lib/kes.js
.
- To support this configuration, a Handlebars helper
- CUMULUS-836 -
@cumulus/api
added IAM roles required by the NGAP 2.0 AMI. The NGAP 2.0 AMI runs a scriptregister_instances_with_ssm.py
which requires the ECS IAM role to includeec2:DescribeInstances
andssm:GetParameter
permissions.
Fixed
- CUMULUS-836 -
@cumulus/deployment
usesoverlay2
driver by default and does not attempt to write--storage-opt dm.basesize
to fix this error. - CUMULUS-413 Kinesis processing now captures all errrors.
- Added kinesis fallback mechanism when errors occur during record processing.
- Adds FallbackTopicArn to
@cumulus/api/lambdas.yml
- Adds fallbackConsumer lambda to
@cumulus/api
- Adds fallbackqueue option to lambda definitions capture lambda failures after three retries.
- Adds kinesisFallback SNS topic to signal incoming errors from kinesis stream.
- Adds kinesisFailureSQS to capture fully failed events from all retries.
- CUMULUS-855 Adds integration test for kinesis' error path.
- CUMULUS-686 Added workflow task name and version tracking via
@cumulus/api
executions endpoint under newtasks
property, and underworkflow_tasks
in step input/output.- Depends on
cumulus-message-adapter
1.0.9+,cumulus-message-adapter-js
1.0.4+,cumulus-message-adapter-java
1.2.7+ andcumulus-message-adapter-python
1.0.5+
- Depends on
- CUMULUS-771
- Updated sync-granule to stream the remote file to s3
- Added integration test for ingesting granules from ftp provider
- Updated http/https integration tests for ingesting granules from http/https providers
- CUMULUS-862 Updated
@cumulus/integration-tests
to handle remote lambda output
Changed
- In
@cumulus/deployment
, changed the example app config.yml to have additional IAM roles
v1.9.0
Please note additional information and upgrade instructions here
Added
- CUMULUS-712 - Added integration tests verifying expected behavior in workflows
- GITC-776-2 - Add support for versioned collections
Fixed
- CUMULUS-832
- Fixed indentation in example config.yml in
@cumulus/deployment
- Fixed issue with new deployment using the default distribution endpoint in
@cumulus/deployment
and@cumulus/api
- Fixed indentation in example config.yml in
v1.8.1
Note IAM roles should be re-deployed with this release.
Added
- Cumulus-726
- Added function to
@cumulus/integration-tests
:sfnStep
includesgetStepInput
which returns the input to the schedule event of a given step function step. - Added IAM policy
@cumulus/deployment
: Lambda processing IAM role includeskinesis::PutRecord
so step function lambdas can write to kinesis streams.
- Added function to
- Cumulus Community Edition
- Added Google OAuth authentication token logic to
@cumulus/api
. Refactored token endpoint to use environment variable flagOAUTH_PROVIDER
when determining with authentication method to use. - Added API Lambda memory configuration variable
api_lambda_memory
to@cumulus/api
and@cumulus/deployment
.
- Added Google OAuth authentication token logic to
Changed
- Cumulus-726
- Changed function in
@cumulus/api
:models/rules.js#addKinesisEventSource
was modified to call todeleteKinesisEventSource
with all required parameters (rule's name, arn and type). - Changed function in
@cumulus/integration-tests
:getStepOutput
can now be used to return output of failed steps. If users of this function want the output of a failed event, they can pass a third parametereventType
as'failure'
. This function will work as always for steps which completed successfully.
- Changed function in
Removed
-
Cumulus-726
- Configuration change to
@cumulus/deployment
: Removed default auto scaling configuration for Granules and Files DynamoDB tables.
- Configuration change to
-
CUMULUS-688
- Add integration test for ExecutionStatus
- Function addition to
@cumulus/integration-tests
:api
includesgetExecutionStatus
which returns the execution status from the Cumulus API
v1.8.0
Added
-
CUMULUS-718 Adds integration test for Kinesis triggering a workflow.
-
GITC-776-3 Added more flexibility for rules. You can now edit all fields on the rule's record
We may need to update the api documentation to reflect this. -
CUMULUS-681 - Add ingest-in-place action to granules endpoint
- new applyWorkflow action at PUT /granules/{granuleid} Applying a workflow starts an execution of the provided workflow and passes the granule record as payload.
Parameter(s):- workflow - the workflow name
- new applyWorkflow action at PUT /granules/{granuleid} Applying a workflow starts an execution of the provided workflow and passes the granule record as payload.
-
CUMULUS-685 - Add parent exeuction arn to the execution which is triggered from a parent step function
Changed
- CUMULUS-768 - Integration tests get S3 provider data from shared data folder
Fixed
- CUMULUS-746 - Move granule API correctly updates record in dynamo DB and cmr xml file
- CUMULUS-766 - Populate database fileSize field from S3 if value not present in Ingest payload
v1.7.0
Please note: Upgrade Instructions
Added
- CUMULUS-491 - Add granule reconciliation API endpoints.
- CUMULUS-480 Add suport for backup and recovery:
- Add DynamoDB tables for granules, executions and pdrs
- Add ability to write all records to S3
- Add ability to download all DynamoDB records in form json files
- Add ability to upload records to DynamoDB
- Add migration scripts for copying granule, pdr and execution records from ElasticSearch to DynamoDB
- Add IAM support for batchWrite on dynamoDB
- CUMULUS-508 -
@cumulus/deployment
cloudformation template allows for lambdas and ECS clusters to have multiple AZ availability.@cumulus/deployment
also ensures docker usesdevicemapper
storage driver.
Fixed
- CUMULUS-747 - Delete granule API doesn't delete granule files in s3 and granule in elasticsearch
- update the StreamSpecification DynamoDB tables to have StreamViewType: "NEW_AND_OLD_IMAGES"
- delete granule files in s3
- CUMULUS-398 - Fix not able to filter executions bu workflow
- CUMULUS-544 - Post to CMR task has UAT URL hard-coded
- Made configurable: PostToCmr now requires CMR_ENVIRONMENT env to be set to 'SIT' or 'OPS' for those CMR environments. Default is UAT.
v1.6.0
Please note: Upgrade Instructions
Fixed
- CUMULUS-602 - Format all logs sent to Elastic Search.
- Extract cumulus log message and index it to Elastic Search.
Added
- CUMULUS-556 - add a mechanism for creating and running migration scripts on deployment.
- CUMULUS-461 Support use of metadata date and other components in
url_path
property
Changed
- CUMULUS-477 Update bucket configuration to support multiple buckets of the same type:
- Change the structure of the buckets to allow for more than one bucket of each type. The bucket structure is now:
bucket-key:
name:
type: i.e. internal, public, etc. - Change IAM and app deployment configuration to support new bucket structure
- Update tasks and workflows to support new bucket structure
- Replace instances where buckets.internal is relied upon to either use the system bucket or a configured bucket
- Move IAM template to the deployment package. NOTE: You now have to specify '--template node_modules/@cumulus/deployment/iam' in your IAM deployment
- Add IAM cloudformation template support to filter buckets by type
- Change the structure of the buckets to allow for more than one bucket of each type. The bucket structure is now: