@cumulus/common
Advanced tools
Changelog
[v1.11.1] - 2018-12-18
Please Note
app/config.yml
has a clientId
specified in the cmr
section. This will allow CMR to identify your requests for better support and metrics.
/tokenDelete
endpoint in @cumulus/api
to delete access token records@cumulus/ingest/crypto
moved and renamed to @cumulus/common/key-pair-provider
@cumulus/ingest/aws
function: KMSDecryptionFailed
and class: KMS
extracted and moved to @cumulus/common
and KMS
is exported as KMSProvider
from @cumulus/common/key-pair-provider
@cumulus/ingest/granule
functions: publish
, getGranuleId
, getXMLMetadataAsString
, getMetadataBodyAndTags
, parseXmlString
, getCmrXMLFiles
, postS3Object
, contructOnlineAccessUrls
, updateMetadata
, extracted and moved to @cumulus/cmrjs
getGranuleId
, getCmrXMLFiles
, publish
, updateMetadata
removed from @cumulus/ingest/granule
and added to @cumulus/cmrjs
;
updateMetadata
renamed updateCMRMetadata
.
@cumulus/ingest
test files renamed.'Client-Id'
header to all @cumulus/cmrjs
requests (made via searchConcept
, ingestConcept
, and deleteConcept
).cumulus/example/app/config.yml
entry for cmr.clientId
to use stackName for easier CMR-side identification.Changelog
[v1.11.0] - 2018-11-30
Please Note
cumulus-message-adapter
v1.0.13+ is required for @cumulus/api
granule reingest API to work properly. The latest version should be downloaded automatically by kes.TOKEN_SECRET
value (preferably 256-bit for security) must be added to .env
to securely sign JWTs used for authorization in @cumulus/api
@cumulus/sync-granule
and @cumulus/move-granules
tasks to always overwrite existing files for manually-triggered reingest.@cumulus/api
granule reingest API to
reingestGranule: true
and forceDuplicateOverwrite: true
to Cumulus message cumulus_meta.cumulus_context
field to indicate that the workflow is a manually triggered re-ingest.replace
cumulus-message-adapter
v1.0.13+ is required.@cumulus/api
to reject the move with a 409 status code if one or more of the files already exist at the destination location@cumulus/helloworld
to use S3 to store state for pass on retry tests@cumulus/ingest
:
http.js#list
will now find links with a trailing whitespacegranule.js
which looked for files in S3 using { Bucket: discoveredFile.bucket, Key: discoveredFile.name }
. This is obsolete since @cumulus/ingest
uses a file-staging
and constructCollectionId()
directory prefixes by default.@cumulus/api
to use JWT (JSON Web Token) as the transport format for API authorization tokens and to use JWT verification in the request authorization/token
endpoint in @cumulus/api
to return tokens as JWTs/refresh
endpoint in @cumulus/api
to request new access tokens from the OAuth provider using the refresh tokenrefreshAccessToken
to @cumulus/api/lib/EarthdataLogin
to manage refresh token requests with the Earthdata OAuth providerkinesisConsumer
to messageConsumer
as it handles both Kinesis streams and SNS topics as of this version.sns
-type rule support. These rules create a subscription between an SNS topic and the messageConsumer
.
When a message is received, messageConsumer
is triggered and passes the SNS message (JSON format expected) in
its entirety to the workflow in the payload
field of the Cumulus message. For more information on sns-type rules,
see the documentation.KinesisInboundEventLogger
and KinesisOutboundEventLogger
API lambdas. These lambdas
are utilized to dump incoming and outgoing ingest workflow kinesis streams
to cloudwatch for analytics in case of AWS/stream failure.@cumulus/api
package.hostId
to the @cumulus/cmrjs
to help build environment specific cmr urls.@cumulus/cmrjs.searchConcept
to search and return CMR results.@cumulus/cmrjs.CMR.searchGranule
and @cumulus/cmrjs.CMR.searchCollection
to include CMR's provider as a default parameter to searches.@cumulus/test-data.loadJSONTestData()
,
@cumulus/test-data.loadTestData()
, and
@cumulus/test-data.streamTestData()
to safely load test data. These
functions should be used instead of using require()
to load test data,
which could lead to tests interfering with each other.@cumulus/common/util/deprecate()
function to mark a piece of code as
deprecatedwaitForTestExecutionStart
to @cumulus/integration-tests
@cumulus/deployment
, added support for NGAP permissions boundaries for IAM roles with useNgapPermissionBoundary
flag in iam/config.yml
. Defaults to false.@cumulus/sf-sns-report
was not pulling large messages from S3 correctly.@cumulus/ingest/aws/StepFunction.pullEvent()
. Use @cumulus/common/aws.pullStepFunctionEvent()
.@cumulus/ingest/consumer.Consume
due to unpredictable implementation. Use @cumulus/ingest/consumer.Consumer
.
Call Consumer.consume()
instead of Consume.read()
.Changelog
[v1.10.4] - 2018-11-28
config.yml
parameter for SQS consumers: sqs_consumer_rate: (default 500)
, which is the maximum number of
messages the consumer will attempt to process per execution. Currently this is only used by the sf-starter consumer,
which runs every minute by default, making this a messages-per-minute upper bound. SQS does not guarantee the number
of messages returned per call, so this is not a fixed rate of consumption, only attempted number of messages received.@cumulus/ingest/consumer.Consume
due to unpredictable implementation. Use @cumulus/ingest/consumer.Consumer
.packages/api
dependency @mapbox/dyno
to 1.4.2
to mitigate event-stream
vulnerability.Changelog
[v1.10.3] - 2018-10-31
docs/docs-how-to.md
to outline how to do things like add new docs or locally install for testing.@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 S3aws.s3CopyObject
: Returns promise of S3 copyObject
, which copies an object in S3 to a new S3 locationaws.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.@cumulus/ingest/aws.S3
. Member functions of this class will now
log warnings pointing to similar functionality in @cumulus/common/aws
.Changelog
[v1.10.2] - 2018-10-24
CUMULUS-965
@cumulus/logger
packageCUMULUS-885
CUMULUS-705
@cumulus/api
package@cumulus/api
package, which can
be used to fetch the status of an AsyncOperation.@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.@cumulus/api
package, which will
fetch an Lambda function, run it in ECS, and then store the result to the
AsyncOperations table in DynamoDB.CUMULUS-851 - Added workflow lambda versioning feature to allow in-flight workflows to use lambda versions that were in place when a workflow was initiated
customCompilation
template configuration flag to indicate a template should use Cumulus's kes customized methods instead of 'core'.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.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).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
and deletePdr
functions to make DELETE
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@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/api
: /execution-status
endpoint requests and returns complete execution output if execution output is stored in S3 due to size.
Added option to use environment variable to set CMR host in @cumulus/cmrjs
.
CUMULUS-781 - Added integration tests for @cumulus/sync-granule
when duplicateHandling
is set to replace
or skip
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/common/fake-earthdata-login-server
. Tests can now create a
service stub based on @cumulus/api/lib/OAuth2
if testing requires handling
authentication.@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
.CNMToCMA
and CnmResponse
in the cumulus-data-shared
bucket and point the default stack to them.@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
@cumulus/move-granules
to include the moveStagedFiles
param.@cumulus/sync-granule
to include duplicateHandling
parameter for specifying how duplicate filenames should be handled@cumulus/sync-granule
to throw DuplicateFile
error when destination files already exist and duplicateHandling
is error
@cumulus/sync-granule
to use error
as the default for duplicateHandling
when it is not specified@cumulus/api
to use error
as the default value for duplicateHandling
in the Collection
model@cumulus/move-granules
to include duplicateHandling
parameter for specifying how duplicate filenames should be handled@cumulus/move-granules
to throw DuplicateFile
error when destination files already exist and duplicateHandling
is error
or not specified@cumulus/move-granules
to keep both old and new data when a destination file with different checksum already exists and duplicateHandling
is version
getGranuleId
in @cumulus/ingest
bug: getGranuleId
was constructing an error using filename
which was undefined. The fix replaces filename
with the uri
argument.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).@cumulus/deployment/lib/crypto.js
now checks for private key existence properly.Changelog
[v1.10.1] - 2018-09-4
@cumulus/deployment/
Changelog
[v1.10.0] - 2018-08-31
@cumulus/common
@cumulus/common/test-helpers
@cumulus/common/task
@cumulus/common/message-source
getPossiblyRemote
function from @cumulus/common/aws
startPromisedSfnExecution
function from @cumulus/common/aws
getCurrentSfnTask
function from @cumulus/common/aws
@cumulus/sync-granule
, 'collection' is now an optional config parameter@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:
@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.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
.@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.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.Changelog
[v1.9.1] - 2018-08-22
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+@cumulus/api
. Added integration test.@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
.
ifEquals
was added to packages/deployment/lib/kes.js
.@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.@cumulus/deployment
uses overlay2
driver by default and does not attempt to write --storage-opt dm.basesize
to fix this error.@cumulus/api/lambdas.yml
@cumulus/api
@cumulus/api
executions endpoint under new tasks
property, and under workflow_tasks
in step input/output.
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/integration-tests
to handle remote lambda outputstate
to have default value ENABLED
@cumulus/deployment
, changed the example app config.yml to have additional IAM rolesChangelog
[v1.9.0] - 2018-08-06
Please note additional information and upgrade instructions here
@cumulus/deployment
@cumulus/deployment
and @cumulus/api