Skip to content

Releases: nasa/cumulus

v1.10.3

31 Oct 17:07
Compare
Choose a tag to compare

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
  • 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 S3 putObject, which puts an object on S3
      • aws.s3CopyObject: Returns promise of S3 copyObject, which copies an object in S3 to a new S3 location
      • aws.s3GetObjectTagging: Returns promise of S3 getObjectTagging, which returns an object containing an S3 TagSet.
    • @/cumulus/common/aws.s3PutObject defaults to an explicit ACL of 'private' if not overridden.
    • @/cumulus/common/aws.s3CopyObject defaults to an explicit TaggingDirective of 'COPY' if not overridden.

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.

v1.10.2

25 Oct 14:42
Compare
Choose a tag to compare

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 (if useWorkflowLambdaVersions is enabled).
  • @cumulus/ingest/granule.js: ingestFile inserts new duplicate_found: true field in the file's record if a duplicate file already exists on S3.
  • CUMULUS-791 - @cumulus/move-granules: moveFileRequest inserts new duplicate_found: true field in the file's record if a duplicate file already exists on S3. Updated output schema to document new duplicate_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 directory
    • deleteCollection to delete list of collections from a deployed stack
    • cleanUpCollections combines the above in one function.
    • listProviders to list providers from a provided data directory
    • deleteProviders to delete list of providers from a deployed stack
    • cleanUpProviders combines the above in one function.
    • @cumulus/integrations-tests/api.js: deleteGranule and deletePdr functions to make DELETE requests to Cumulus API
    • rules API functionality for posting and deleting a rule and listing all rules
    • wait-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 through options.waitTimeSeconds.
  • Duplicate Granule Handling:
    • CUMULUS-782 - Updated @cumulus/sync-granule task and Granule.ingestFile in @cumulus/ingest to keep both old and new data when a destination file with different checksum already exists and duplicateHandling is version
    • Updated the config schema in @cumulus/move-granules to include the moveStagedFiles param.
    • CUMULUS-778 - Updated config schema and documentation in @cumulus/sync-granule to include duplicateHandling parameter for specifying how duplicate filenames should be handled
    • CUMULUS-779 - Updated @cumulus/sync-granule to throw DuplicateFile error when destination files already exist and duplicateHandling is error
    • CUMULUS-780 - Updated @cumulus/sync-granule to use error as the default for duplicateHandling when it is not specified
    • CUMULUS-780 - Updated @cumulus/api to use error as the default value for duplicateHandling in the Collection model
    • CUMULUS-785 - Updated the config schema and documentation in @cumulus/move-granules to include duplicateHandling parameter for specifying how duplicate filenames should be handled
    • CUMULUS-786, CUMULUS-787 - Updated @cumulus/move-granules to throw DuplicateFile error when destination files already exist and duplicateHandling is error 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 and duplicateHandling is version
  • CUMULUS-948 - Update lambda functions CNMToCMA and CnmResponse in the cumulus-data-shared bucket and point the default stack to them, for integration tests.

Fixed

  • getGranuleId in @cumulus/ingest bug: getGranuleId was constructing an error using filename which was undefined. The fix replaces filename with the uri 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

06 Sep 17:02
Compare
Choose a tag to compare

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

31 Aug 15:21
Compare
Choose a tag to compare

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

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. The sqs2sf 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 the startSF 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 until timeLimit has passed OR once it receives up to messageLimit messages. sqs2sf is deployed with a default messageLimit of 10.
    • IMPORTANT NOTE: consumer will actually process up to messageLimit * 2 - 1 messages. This is because sometimes receiveSQSMessages will return less than messageLimit messages and thus the consumer will continue to make calls to receiveSQSMessages. For example, given a messageLimit of 10 and subsequent calls to receiveSQSMessages returns up to 9 messages, the loop will continue and a final call could return up to 10 messages.

v1.9.1

23 Aug 18:04
Compare
Choose a tag to compare

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 either devicemapper (the default storage driver for AWS ECS-optimized AMIs) or overlay2 (the storage driver used by the NGAP 2.0 AMI). The storage driver can be configured in app/config.yml with ecs.docker.storageDriver: overlay2 | devicemapper. The default is overlay2.
    • To support this configuration, a Handlebars helper ifEquals was added to packages/deployment/lib/kes.js.
  • CUMULUS-836 - @cumulus/api added IAM roles required by the NGAP 2.0 AMI. The NGAP 2.0 AMI runs a script register_instances_with_ssm.py which requires the ECS IAM role to include ec2:DescribeInstances and ssm:GetParameter permissions.

Fixed

  • CUMULUS-836 - @cumulus/deployment uses overlay2 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 new tasks property, and under workflow_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+ and cumulus-message-adapter-python 1.0.5+
  • 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

07 Aug 12:42
Compare
Choose a tag to compare

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

v1.8.1

02 Aug 13:49
Compare
Choose a tag to compare

Note IAM roles should be re-deployed with this release.

Added

  • Cumulus-726
    • Added function to @cumulus/integration-tests: sfnStep includes getStepInput which returns the input to the schedule event of a given step function step.
    • Added IAM policy @cumulus/deployment: Lambda processing IAM role includes kinesis::PutRecord so step function lambdas can write to kinesis streams.
  • Cumulus Community Edition
    • Added Google OAuth authentication token logic to @cumulus/api. Refactored token endpoint to use environment variable flag OAUTH_PROVIDER when determining with authentication method to use.
    • Added API Lambda memory configuration variable api_lambda_memory to @cumulus/api and @cumulus/deployment.

Changed

  • Cumulus-726
    • Changed function in @cumulus/api: models/rules.js#addKinesisEventSource was modified to call to deleteKinesisEventSource 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 parameter eventType as 'failure'. This function will work as always for steps which completed successfully.

Removed

  • Cumulus-726

    • Configuration change to @cumulus/deployment: Removed default auto scaling configuration for Granules and Files DynamoDB tables.
  • CUMULUS-688

    • Add integration test for ExecutionStatus
    • Function addition to @cumulus/integration-tests: api includes getExecutionStatus which returns the execution status from the Cumulus API

v1.8.0

24 Jul 18:39
Compare
Choose a tag to compare

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
  • 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

02 Jul 21:51
Compare
Choose a tag to compare

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 uses devicemapper 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

07 Jun 20:28
Compare
Choose a tag to compare

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