Showing preview only (7,330K chars total). Download the full file or copy to clipboard to get everything.
Repository: apache/openwhisk
Branch: master
Commit: 3d28212ee547
Files: 1088
Total size: 6.8 MB
Directory structure:
gitextract_6g47ow7y/
├── .asf.yaml
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ └── proposal.md
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── 0-on-demand.yaml
│ ├── 1-unit.yaml
│ ├── 2-system.yaml
│ ├── 3-multi-runtime.yaml
│ ├── 4-standalone.yaml
│ ├── 5-scheduler.yaml
│ ├── 6-performance.yaml
│ └── README.md
├── .gitignore
├── .pydevproject
├── .scalafmt.conf
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── CREDITS.txt
├── Jenkinsfile
├── LICENSE.txt
├── NOTICE.txt
├── README.md
├── ansible/
│ ├── README.md
│ ├── ansible.cfg
│ ├── apigateway.yml
│ ├── callbacks/
│ │ └── logformatter.py
│ ├── controller.yml
│ ├── couchdb.yml
│ ├── downloadcli-github.yml
│ ├── downloadcli.yml
│ ├── edge.yml
│ ├── elasticsearch.yml
│ ├── environments/
│ │ ├── docker-machine/
│ │ │ ├── group_vars/
│ │ │ │ └── all
│ │ │ └── hosts.j2.ini
│ │ └── local/
│ │ ├── group_vars/
│ │ │ └── all
│ │ └── hosts.j2.ini
│ ├── etcd.yml
│ ├── files/
│ │ ├── activations_design_document_for_activations_db.json
│ │ ├── auth.guest
│ │ ├── auth.whisk.system
│ │ ├── auth_design_document_for_subjects_db_v2.0.0.json
│ │ ├── filter_design_document.json
│ │ ├── genssl.sh
│ │ ├── logCleanup_design_document_for_activations_db.json
│ │ ├── namespace_throttlings_design_document_for_subjects_db.json
│ │ ├── package-versions.ini
│ │ ├── runtimes-nodeonly.json
│ │ ├── runtimes.json
│ │ ├── whisks_design_document_for_activations_db_filters_v2.1.0.json
│ │ ├── whisks_design_document_for_activations_db_filters_v2.1.1.json
│ │ ├── whisks_design_document_for_activations_db_v2.1.0.json
│ │ └── whisks_design_document_for_entities_db_v2.1.0.json
│ ├── group_vars/
│ │ └── all
│ ├── initMongoDB.yml
│ ├── initdb.yml
│ ├── invoker.yml
│ ├── kafka.yml
│ ├── library/
│ │ └── mongodb.py
│ ├── logs.yml
│ ├── mongodb.yml
│ ├── openwhisk.yml
│ ├── postdeploy.yml
│ ├── prereq.yml
│ ├── properties.yml
│ ├── publish.yml
│ ├── recreateDesignDocs.yml
│ ├── roles/
│ │ ├── apigateway/
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── cli/
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── cli-install/
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── controller/
│ │ │ ├── tasks/
│ │ │ │ ├── clean.yml
│ │ │ │ ├── deploy.yml
│ │ │ │ ├── join_pekko_cluster.yml
│ │ │ │ ├── lean.yml
│ │ │ │ └── main.yml
│ │ │ └── templates/
│ │ │ └── config.j2
│ │ ├── couchdb/
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── elasticsearch/
│ │ │ ├── tasks/
│ │ │ │ ├── clean.yml
│ │ │ │ ├── deploy.yml
│ │ │ │ └── main.yml
│ │ │ └── templates/
│ │ │ ├── elasticsearch.yml.j2
│ │ │ └── log4j2.properties.j2
│ │ ├── etcd/
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── invoker/
│ │ │ ├── tasks/
│ │ │ │ ├── clean.yml
│ │ │ │ ├── deploy.yml
│ │ │ │ └── main.yml
│ │ │ └── templates/
│ │ │ └── config.j2
│ │ ├── kafka/
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── mongodb/
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── nginx/
│ │ │ ├── files/
│ │ │ │ └── openwhisk-server-key.pem
│ │ │ ├── tasks/
│ │ │ │ ├── clean.yml
│ │ │ │ ├── deploy.yml
│ │ │ │ └── main.yml
│ │ │ └── templates/
│ │ │ └── nginx.conf.j2
│ │ ├── prereq/
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── redis/
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── routemgmt/
│ │ │ ├── files/
│ │ │ │ ├── installRouteMgmt.sh
│ │ │ │ └── uninstallRouteMgmt.sh
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── schedulers/
│ │ │ ├── tasks/
│ │ │ │ ├── clean.yml
│ │ │ │ ├── deploy.yml
│ │ │ │ ├── join_pekko_cluster.yml
│ │ │ │ └── main.yml
│ │ │ └── templates/
│ │ │ └── jmx.yml.j2
│ │ └── zookeeper/
│ │ └── tasks/
│ │ ├── clean.yml
│ │ ├── deploy.yml
│ │ └── main.yml
│ ├── routemgmt.yml
│ ├── scheduler.yml
│ ├── setup.yml
│ ├── tasks/
│ │ ├── db/
│ │ │ ├── checkDb.yml
│ │ │ ├── createUsers.yml
│ │ │ ├── grantPermissions.yml
│ │ │ ├── recreateDb.yml
│ │ │ └── recreateDoc.yml
│ │ ├── docker_login.yml
│ │ ├── gen_erl_cookie.yml
│ │ ├── initdb.yml
│ │ ├── installOpenwhiskCatalog.yml
│ │ ├── recreateViews.yml
│ │ ├── wipeDatabase.yml
│ │ └── writeWhiskProperties.yml
│ ├── teardown.yml
│ ├── templates/
│ │ ├── db_local.ini.j2
│ │ ├── jmxremote.access.j2
│ │ ├── jmxremote.password.j2
│ │ ├── whisk.conf.j2
│ │ └── whisk.properties.j2
│ ├── wipe.yml
│ └── yamllint.yml
├── build.gradle
├── common/
│ └── scala/
│ ├── .dockerignore
│ ├── Dockerfile
│ ├── Dockerfile-debian
│ ├── build.gradle
│ ├── copyJMXFiles.sh
│ ├── src/
│ │ └── main/
│ │ ├── resources/
│ │ │ ├── application.conf
│ │ │ ├── logback.xml
│ │ │ ├── logging.conf
│ │ │ ├── reference.conf
│ │ │ └── s3-reference.conf
│ │ └── scala/
│ │ └── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ ├── common/
│ │ │ ├── AverageRingBuffer.scala
│ │ │ ├── CausedBy.scala
│ │ │ ├── Config.scala
│ │ │ ├── ConfigMXBean.scala
│ │ │ ├── ConfigMapValue.scala
│ │ │ ├── Counter.scala
│ │ │ ├── ExecutorCloser.scala
│ │ │ ├── ForcibleSemaphore.scala
│ │ │ ├── Https.scala
│ │ │ ├── Logging.scala
│ │ │ ├── Message.scala
│ │ │ ├── NestedSemaphore.scala
│ │ │ ├── Prometheus.scala
│ │ │ ├── ResizableSemaphore.scala
│ │ │ ├── RingBuffer.scala
│ │ │ ├── Scheduler.scala
│ │ │ ├── TransactionId.scala
│ │ │ ├── UserEvents.scala
│ │ │ ├── WhiskInstants.scala
│ │ │ ├── time/
│ │ │ │ └── Clock.scala
│ │ │ └── tracing/
│ │ │ └── OpenTracingProvider.scala
│ │ ├── connector/
│ │ │ ├── kafka/
│ │ │ │ ├── KafkaConsumerConnector.scala
│ │ │ │ ├── KafkaMessagingProvider.scala
│ │ │ │ ├── KafkaMetrics.scala
│ │ │ │ ├── KafkaProducerConnector.scala
│ │ │ │ └── KamonMetricsReporter.scala
│ │ │ └── lean/
│ │ │ ├── LeanConsumer.scala
│ │ │ ├── LeanMessagingProvider.scala
│ │ │ └── LeanProducer.scala
│ │ ├── core/
│ │ │ ├── FeatureFlags.scala
│ │ │ ├── WarmUp.scala
│ │ │ ├── WhiskConfig.scala
│ │ │ ├── ack/
│ │ │ │ ├── Ack.scala
│ │ │ │ ├── HealthActionAck.scala
│ │ │ │ └── MessagingActiveAck.scala
│ │ │ ├── connector/
│ │ │ │ ├── Message.scala
│ │ │ │ ├── MessageConsumer.scala
│ │ │ │ ├── MessageProducer.scala
│ │ │ │ └── MessagingProvider.scala
│ │ │ ├── containerpool/
│ │ │ │ ├── ApacheBlockingContainerClient.scala
│ │ │ │ ├── Container.scala
│ │ │ │ ├── ContainerClient.scala
│ │ │ │ ├── ContainerFactory.scala
│ │ │ │ ├── PekkoContainerClient.scala
│ │ │ │ └── logging/
│ │ │ │ ├── DockerToActivationFileLogStore.scala
│ │ │ │ ├── DockerToActivationLogStore.scala
│ │ │ │ ├── ElasticSearchLogStore.scala
│ │ │ │ ├── ElasticSearchRestClient.scala
│ │ │ │ ├── LogDriverLogStore.scala
│ │ │ │ ├── LogStore.scala
│ │ │ │ └── SplunkLogStore.scala
│ │ │ ├── database/
│ │ │ │ ├── ActivationFileStorage.scala
│ │ │ │ ├── ActivationStore.scala
│ │ │ │ ├── ActivationStoreLevel.scala
│ │ │ │ ├── ArtifactActivationStore.scala
│ │ │ │ ├── ArtifactStore.scala
│ │ │ │ ├── ArtifactStoreExceptions.scala
│ │ │ │ ├── ArtifactStoreProvider.scala
│ │ │ │ ├── ArtifactWithFileStorageActivationStore.scala
│ │ │ │ ├── AttachmentStore.scala
│ │ │ │ ├── AttachmentSupport.scala
│ │ │ │ ├── Batcher.scala
│ │ │ │ ├── ConcurrentMapBackedCache.scala
│ │ │ │ ├── CouchDbRestClient.scala
│ │ │ │ ├── CouchDbRestStore.scala
│ │ │ │ ├── CouchDbStoreProvider.scala
│ │ │ │ ├── DocumentFactory.scala
│ │ │ │ ├── DocumentHandler.scala
│ │ │ │ ├── MultipleReadersSingleWriterCache.scala
│ │ │ │ ├── RemoteCacheInvalidation.scala
│ │ │ │ ├── StoreUtils.scala
│ │ │ │ ├── azblob/
│ │ │ │ │ └── AzureBlobAttachmentStore.scala
│ │ │ │ ├── cosmosdb/
│ │ │ │ │ ├── CollectionResourceUsage.scala
│ │ │ │ │ ├── CosmosDBArtifactStore.scala
│ │ │ │ │ ├── CosmosDBArtifactStoreProvider.scala
│ │ │ │ │ ├── CosmosDBConfig.scala
│ │ │ │ │ ├── CosmosDBSupport.scala
│ │ │ │ │ ├── CosmosDBUtil.scala
│ │ │ │ │ ├── CosmosDBViewMapper.scala
│ │ │ │ │ ├── IndexingPolicy.scala
│ │ │ │ │ ├── ReferenceCounted.scala
│ │ │ │ │ ├── RetryMetricsCollector.scala
│ │ │ │ │ └── RxObservableImplicits.scala
│ │ │ │ ├── elasticsearch/
│ │ │ │ │ └── ElasticSearchActivationStore.scala
│ │ │ │ ├── memory/
│ │ │ │ │ ├── MemoryArtifactStore.scala
│ │ │ │ │ ├── MemoryAttachmentStore.scala
│ │ │ │ │ ├── MemoryViewMapper.scala
│ │ │ │ │ └── NoopActivationStore.scala
│ │ │ │ ├── mongodb/
│ │ │ │ │ ├── MongoDBArtifactStore.scala
│ │ │ │ │ ├── MongoDBArtifactStoreProvider.scala
│ │ │ │ │ ├── MongoDBAsyncStreamSink.scala
│ │ │ │ │ ├── MongoDBAsyncStreamSource.scala
│ │ │ │ │ └── MongoDBViewMapper.scala
│ │ │ │ └── s3/
│ │ │ │ ├── CloudFrontSigner.scala
│ │ │ │ └── S3AttachmentStore.scala
│ │ │ ├── entitlement/
│ │ │ │ └── Privilege.scala
│ │ │ ├── entity/
│ │ │ │ ├── ActivationEntityLimit.scala
│ │ │ │ ├── ActivationId.scala
│ │ │ │ ├── ActivationLogs.scala
│ │ │ │ ├── ActivationResult.scala
│ │ │ │ ├── Annotations.scala
│ │ │ │ ├── ArgNormalizer.scala
│ │ │ │ ├── Attachments.scala
│ │ │ │ ├── BasicAuthenticationAuthKey.scala
│ │ │ │ ├── CacheKey.scala
│ │ │ │ ├── CreationId.scala
│ │ │ │ ├── DocInfo.scala
│ │ │ │ ├── DocumentReader.scala
│ │ │ │ ├── EntityPath.scala
│ │ │ │ ├── Exec.scala
│ │ │ │ ├── ExecManifest.scala
│ │ │ │ ├── FullyQualifiedEntityName.scala
│ │ │ │ ├── GenericAuthKey.scala
│ │ │ │ ├── Identity.scala
│ │ │ │ ├── InstanceConcurrencyLimit.scala
│ │ │ │ ├── InstanceId.scala
│ │ │ │ ├── IntraConcurrencyLimit.scala
│ │ │ │ ├── Limits.scala
│ │ │ │ ├── LimitsExceptions.scala
│ │ │ │ ├── LogLimit.scala
│ │ │ │ ├── MemoryLimit.scala
│ │ │ │ ├── Parameter.scala
│ │ │ │ ├── ParameterEncryption.scala
│ │ │ │ ├── Secret.scala
│ │ │ │ ├── SemVer.scala
│ │ │ │ ├── Size.scala
│ │ │ │ ├── Subject.scala
│ │ │ │ ├── TimeLimit.scala
│ │ │ │ ├── UUID.scala
│ │ │ │ ├── WhiskAction.scala
│ │ │ │ ├── WhiskActivation.scala
│ │ │ │ ├── WhiskAuth.scala
│ │ │ │ ├── WhiskEntity.scala
│ │ │ │ ├── WhiskPackage.scala
│ │ │ │ ├── WhiskRule.scala
│ │ │ │ ├── WhiskStore.scala
│ │ │ │ └── WhiskTrigger.scala
│ │ │ ├── etcd/
│ │ │ │ ├── EtcdClient.scala
│ │ │ │ ├── EtcdUtils.scala
│ │ │ │ └── EtcdWorker.scala
│ │ │ ├── service/
│ │ │ │ ├── DataManagementService.scala
│ │ │ │ ├── LeaseKeepAliveService.scala
│ │ │ │ └── WatcherService.scala
│ │ │ └── yarn/
│ │ │ ├── YARNComponentActor.scala
│ │ │ ├── YARNContainerFactory.scala
│ │ │ ├── YARNContainerInfoActor.scala
│ │ │ ├── YARNRESTUtil.scala
│ │ │ └── YARNTask.scala
│ │ ├── http/
│ │ │ ├── BasicHttpService.scala
│ │ │ ├── BasicRasService.scala
│ │ │ ├── CorsSettings.scala
│ │ │ ├── ErrorResponse.scala
│ │ │ ├── LenientSprayJsonSupport.scala
│ │ │ └── PoolingRestClient.scala
│ │ ├── spi/
│ │ │ └── SpiLoader.scala
│ │ └── utils/
│ │ ├── Exceptions.scala
│ │ ├── ExecutionContextFactory.scala
│ │ ├── JsHelpers.scala
│ │ ├── Retry.scala
│ │ └── TimeHelpers.scala
│ └── transformEnvironment.sh
├── core/
│ ├── controller/
│ │ ├── .dockerignore
│ │ ├── Dockerfile
│ │ ├── Dockerfile-debian
│ │ ├── Dockerfile.cov
│ │ ├── build.gradle
│ │ ├── init.sh
│ │ └── src/
│ │ └── main/
│ │ ├── resources/
│ │ │ ├── apiv1swagger.json
│ │ │ ├── application.conf
│ │ │ ├── infoswagger.json
│ │ │ └── reference.conf
│ │ └── scala/
│ │ └── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ └── core/
│ │ ├── controller/
│ │ │ ├── Actions.scala
│ │ │ ├── Activations.scala
│ │ │ ├── ApiUtils.scala
│ │ │ ├── AuthenticatedRoute.scala
│ │ │ ├── AuthorizedRouteDispatcher.scala
│ │ │ ├── Backend.scala
│ │ │ ├── BasicAuthenticationDirective.scala
│ │ │ ├── Controller.scala
│ │ │ ├── Entities.scala
│ │ │ ├── Limits.scala
│ │ │ ├── Namespaces.scala
│ │ │ ├── Packages.scala
│ │ │ ├── RestAPIs.scala
│ │ │ ├── Rules.scala
│ │ │ ├── Triggers.scala
│ │ │ ├── WebActions.scala
│ │ │ └── actions/
│ │ │ ├── PostActionActivation.scala
│ │ │ ├── PrimitiveActions.scala
│ │ │ └── SequenceActions.scala
│ │ ├── entitlement/
│ │ │ ├── ActionCollection.scala
│ │ │ ├── ActivationThrottler.scala
│ │ │ ├── Collection.scala
│ │ │ ├── Entitlement.scala
│ │ │ ├── FPCEntitlement.scala
│ │ │ ├── KindRestrictor.scala
│ │ │ ├── LocalEntitlement.scala
│ │ │ ├── PackageCollection.scala
│ │ │ └── RateThrottler.scala
│ │ └── loadBalancer/
│ │ ├── CommonLoadBalancer.scala
│ │ ├── FPCPoolBalancer.scala
│ │ ├── FeedFactory.scala
│ │ ├── InvokerPoolFactory.scala
│ │ ├── InvokerSupervision.scala
│ │ ├── LeanBalancer.scala
│ │ ├── LoadBalancer.scala
│ │ └── ShardingContainerPoolBalancer.scala
│ ├── cosmosdb/
│ │ └── cache-invalidator/
│ │ ├── .dockerignore
│ │ ├── Dockerfile
│ │ ├── Dockerfile-debian
│ │ ├── README.md
│ │ ├── build.gradle
│ │ ├── docker-compose.yml
│ │ ├── init.sh
│ │ └── src/
│ │ └── main/
│ │ ├── resources/
│ │ │ ├── application.conf
│ │ │ └── reference.conf
│ │ └── scala/
│ │ └── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ └── core/
│ │ └── database/
│ │ └── cosmosdb/
│ │ └── cache/
│ │ ├── CacheInvalidator.scala
│ │ ├── CacheInvalidatorConfig.scala
│ │ ├── ChangeFeedConsumer.scala
│ │ ├── KafkaEventProducer.scala
│ │ ├── Main.scala
│ │ └── WhiskChangeEventObserver.scala
│ ├── invoker/
│ │ ├── .dockerignore
│ │ ├── Dockerfile
│ │ ├── Dockerfile-debian
│ │ ├── Dockerfile.cov
│ │ ├── build.gradle
│ │ ├── init.sh
│ │ └── src/
│ │ └── main/
│ │ ├── resources/
│ │ │ └── application.conf
│ │ └── scala/
│ │ └── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ └── core/
│ │ ├── containerpool/
│ │ │ ├── ContainerPool.scala
│ │ │ ├── ContainerProxy.scala
│ │ │ ├── docker/
│ │ │ │ ├── DockerCliLogStore.scala
│ │ │ │ ├── DockerClient.scala
│ │ │ │ ├── DockerClientWithFileAccess.scala
│ │ │ │ ├── DockerContainer.scala
│ │ │ │ ├── DockerContainerFactory.scala
│ │ │ │ ├── DockerForMacContainerFactory.scala
│ │ │ │ ├── ProcessRunner.scala
│ │ │ │ ├── RuncClient.scala
│ │ │ │ └── StandaloneDockerContainerFactory.scala
│ │ │ ├── kubernetes/
│ │ │ │ ├── KubernetesClient.scala
│ │ │ │ ├── KubernetesContainer.scala
│ │ │ │ ├── KubernetesContainerFactory.scala
│ │ │ │ └── WhiskPodBuilder.scala
│ │ │ └── v2/
│ │ │ ├── ActivationClientProxy.scala
│ │ │ ├── FunctionPullingContainerPool.scala
│ │ │ ├── FunctionPullingContainerProxy.scala
│ │ │ └── InvokerHealthManager.scala
│ │ └── invoker/
│ │ ├── ContainerMessageConsumer.scala
│ │ ├── DefaultInvokerServer.scala
│ │ ├── FPCInvokerReactive.scala
│ │ ├── FPCInvokerServer.scala
│ │ ├── InstanceIdAssigner.scala
│ │ ├── Invoker.scala
│ │ ├── InvokerReactive.scala
│ │ ├── LogStoreCollector.scala
│ │ └── NamespaceBlacklist.scala
│ ├── monitoring/
│ │ └── user-events/
│ │ ├── .dockerignore
│ │ ├── Dockerfile
│ │ ├── Dockerfile-debian
│ │ ├── README.md
│ │ ├── build.gradle
│ │ ├── compose/
│ │ │ ├── grafana/
│ │ │ │ ├── dashboards/
│ │ │ │ │ ├── global-metrics.json
│ │ │ │ │ ├── openwhisk_events.json
│ │ │ │ │ └── top-namespaces.json
│ │ │ │ └── provisioning/
│ │ │ │ ├── dashboards/
│ │ │ │ │ └── dashboard.yml
│ │ │ │ └── datasources/
│ │ │ │ └── datasource.yml
│ │ │ └── prometheus/
│ │ │ └── prometheus.yml
│ │ ├── init.sh
│ │ └── src/
│ │ ├── main/
│ │ │ ├── resources/
│ │ │ │ ├── application.conf
│ │ │ │ ├── reference.conf
│ │ │ │ └── whisk-logback.xml
│ │ │ └── scala/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── openwhisk/
│ │ │ └── core/
│ │ │ └── monitoring/
│ │ │ └── metrics/
│ │ │ ├── EventConsumer.scala
│ │ │ ├── KamonRecorder.scala
│ │ │ ├── Main.scala
│ │ │ ├── MetricNames.scala
│ │ │ ├── OpenWhiskEvents.scala
│ │ │ ├── PrometheusEventsApi.scala
│ │ │ └── PrometheusRecorder.scala
│ │ └── test/
│ │ ├── resources/
│ │ │ ├── application.conf
│ │ │ └── logback-test.xml
│ │ └── scala/
│ │ └── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ └── core/
│ │ └── monitoring/
│ │ └── metrics/
│ │ ├── ApiTests.scala
│ │ ├── EventsTestHelper.scala
│ │ ├── KafkaSpecBase.scala
│ │ ├── KamonRecorderTests.scala
│ │ ├── OpenWhiskEventsTests.scala
│ │ └── PrometheusRecorderTests.scala
│ ├── routemgmt/
│ │ ├── common/
│ │ │ ├── apigw-utils.js
│ │ │ └── utils.js
│ │ ├── createApi/
│ │ │ ├── createApi.js
│ │ │ └── package.json
│ │ ├── deleteApi/
│ │ │ ├── deleteApi.js
│ │ │ └── package.json
│ │ └── getApi/
│ │ ├── getApi.js
│ │ └── package.json
│ ├── scheduler/
│ │ ├── Dockerfile
│ │ ├── Dockerfile.cov
│ │ ├── build.gradle
│ │ ├── init.sh
│ │ └── src/
│ │ └── main/
│ │ ├── protobuf/
│ │ │ └── activation.proto
│ │ ├── resources/
│ │ │ └── application.conf
│ │ └── scala/
│ │ └── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ └── core/
│ │ └── scheduler/
│ │ ├── FPCSchedulerServer.scala
│ │ ├── Scheduler.scala
│ │ ├── container/
│ │ │ ├── ContainerManager.scala
│ │ │ └── CreationJobManager.scala
│ │ ├── grpc/
│ │ │ └── ActivationServiceImpl.scala
│ │ ├── message/
│ │ │ └── ContainerMessage.scala
│ │ └── queue/
│ │ ├── ContainerCounter.scala
│ │ ├── ElasticSearchDurationChecker.scala
│ │ ├── MemoryQueue.scala
│ │ ├── NoopDurationChecker.scala
│ │ ├── QueueManager.scala
│ │ └── SchedulingDecisionMaker.scala
│ └── standalone/
│ ├── Dockerfile
│ ├── README.md
│ ├── build.gradle
│ ├── src/
│ │ ├── main/
│ │ │ ├── resources/
│ │ │ │ ├── logback-standalone.xml
│ │ │ │ ├── playground/
│ │ │ │ │ ├── actions/
│ │ │ │ │ │ ├── playground-delete.js
│ │ │ │ │ │ ├── playground-fetch.js
│ │ │ │ │ │ ├── playground-run.js
│ │ │ │ │ │ └── playground-userpackage.js
│ │ │ │ │ └── ui/
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── playground.css
│ │ │ │ │ └── playgroundFunctions.js
│ │ │ │ ├── standalone-kcf.conf
│ │ │ │ └── standalone.conf
│ │ │ └── scala/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── openwhisk/
│ │ │ ├── core/
│ │ │ │ └── ExecManifestSupport.scala
│ │ │ └── standalone/
│ │ │ ├── ApiGwLauncher.scala
│ │ │ ├── CouchDBLauncher.scala
│ │ │ ├── DockerVersion.scala
│ │ │ ├── InstallRouteMgmt.scala
│ │ │ ├── KafkaLauncher.scala
│ │ │ ├── LogbackConfigurator.scala
│ │ │ ├── PlaygroundLauncher.scala
│ │ │ ├── PreFlightChecks.scala
│ │ │ ├── ServerStartupCheck.scala
│ │ │ ├── ServiceInfoLogger.scala
│ │ │ ├── StandaloneDockerSupport.scala
│ │ │ ├── StandaloneOpenWhisk.scala
│ │ │ ├── Unzip.scala
│ │ │ ├── UserEventLauncher.scala
│ │ │ └── Wsk.scala
│ │ └── test/
│ │ └── scala/
│ │ └── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ └── standalone/
│ │ └── DockerVersionTests.scala
│ ├── start.sh
│ └── stop.sh
├── docs/
│ ├── README.md
│ ├── about.md
│ ├── actions-actionloop.md
│ ├── actions-docker.md
│ ├── actions-dotnet.md
│ ├── actions-go.md
│ ├── actions-java.md
│ ├── actions-new.md
│ ├── actions-nodejs.md
│ ├── actions-php.md
│ ├── actions-python.md
│ ├── actions-ruby.md
│ ├── actions-rust.md
│ ├── actions-swift.md
│ ├── actions-update.md
│ ├── actions.md
│ ├── annotations.md
│ ├── apigateway.md
│ ├── catalog.md
│ ├── cli.md
│ ├── conductors.md
│ ├── dedicated-invokers.md
│ ├── deploy.md
│ ├── dev/
│ │ ├── configuration.md
│ │ ├── future.md
│ │ ├── modules.md
│ │ └── troubleshooting/
│ │ └── build-failures.md
│ ├── feeds.md
│ ├── images/
│ │ ├── OpenWhisk_flow_of_processing.draw.io.xml
│ │ ├── README.md
│ │ └── whisk_icon_full_color_with_tm.psd
│ ├── intra-concurrency.md
│ ├── logging.md
│ ├── metrics.md
│ ├── packages.md
│ ├── parameters.md
│ ├── reference.md
│ ├── rest_api.md
│ ├── samples.md
│ ├── security.md
│ ├── single_entrypoint_proxy_contract.md
│ ├── spi.md
│ ├── tag-based-scheduling.md
│ ├── triggers_rules.md
│ ├── use_cases.md
│ ├── warmed-containers.md
│ ├── webactions.md
│ └── yarn.md
├── gradle/
│ ├── README.md
│ ├── docker.gradle
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── licenses/
│ └── LICENSE-spray.txt
├── proposals/
│ ├── POEM-1-proposal-for-openwhisk-enhancements.md
│ ├── POEM-2-function-pulling-container-scheduler.md
│ ├── POEM-3-action-limit-for-namespace.md
│ ├── POEM-4-action-concurrency-limit-within-namespace.md
│ ├── POEM-N-template.md
│ ├── POEM-support-array-result.md
│ └── README.md
├── settings.gradle
├── tests/
│ ├── .pydevproject
│ ├── README.md
│ ├── build.gradle
│ ├── dat/
│ │ ├── actions/
│ │ │ ├── README.md
│ │ │ ├── applicationError.js
│ │ │ ├── argCheck.js
│ │ │ ├── argsPrint.js
│ │ │ ├── asyncError.js
│ │ │ ├── blackbox/
│ │ │ │ └── exec
│ │ │ ├── build.sh
│ │ │ ├── cat.js
│ │ │ ├── concurrent.js
│ │ │ ├── concurrentFail1.js
│ │ │ ├── concurrentFail2.js
│ │ │ ├── conductor.js
│ │ │ ├── corsHeaderMod.js
│ │ │ ├── countdown.js
│ │ │ ├── createRule.swift
│ │ │ ├── createTrigger.swift
│ │ │ ├── dosLogs.js
│ │ │ ├── echo-web-http-head.js
│ │ │ ├── echo-web-http.js
│ │ │ ├── echo.js
│ │ │ ├── echo.json
│ │ │ ├── empty.js
│ │ │ ├── emptyJSONResult.js
│ │ │ ├── head.js
│ │ │ ├── hello.js
│ │ │ ├── hello.py
│ │ │ ├── hello.swift
│ │ │ ├── helloArray.js
│ │ │ ├── helloAsync.js
│ │ │ ├── helloContext.js
│ │ │ ├── helloDeadline.js
│ │ │ ├── helloOpenwhiskPackage.js
│ │ │ ├── helloPromise.js
│ │ │ ├── httpGet.swift
│ │ │ ├── initexit.js
│ │ │ ├── initforever.js
│ │ │ ├── invalidInput1.json
│ │ │ ├── invalidInput2.json
│ │ │ ├── invalidInput3.json
│ │ │ ├── invalidInput4.json
│ │ │ ├── invoke.swift
│ │ │ ├── invokeNonBlocking.swift
│ │ │ ├── jsonStringWebAction.js
│ │ │ ├── log.js
│ │ │ ├── loggingTimeout.js
│ │ │ ├── malformed.js
│ │ │ ├── malformed.py
│ │ │ ├── memoryWithGC.js
│ │ │ ├── multipleHeaders.js
│ │ │ ├── niam.js
│ │ │ ├── niam.py
│ │ │ ├── niam.swift
│ │ │ ├── openFiles.js
│ │ │ ├── params.js
│ │ │ ├── ping.js
│ │ │ ├── pngWeb.js
│ │ │ ├── printParams.js
│ │ │ ├── python-zip/
│ │ │ │ ├── __main__.py
│ │ │ │ └── greet.py
│ │ │ ├── pythonVersion.py
│ │ │ ├── runexception.js
│ │ │ ├── runexit.js
│ │ │ ├── sizedResult.js
│ │ │ ├── sleep.js
│ │ │ ├── sleep.py
│ │ │ ├── sort-array.js
│ │ │ ├── sort.js
│ │ │ ├── split-array.js
│ │ │ ├── split.js
│ │ │ ├── src/
│ │ │ │ └── java/
│ │ │ │ └── sleep/
│ │ │ │ ├── build.gradle
│ │ │ │ ├── settings.gradle
│ │ │ │ └── src/
│ │ │ │ └── main/
│ │ │ │ └── java/
│ │ │ │ └── Sleep.java
│ │ │ ├── stdenv.py
│ │ │ ├── step.js
│ │ │ ├── textBody.js
│ │ │ ├── trigger.swift
│ │ │ ├── unicode.tests/
│ │ │ │ ├── go-1.13.txt
│ │ │ │ ├── go-1.15.txt
│ │ │ │ ├── nodejs-10.txt
│ │ │ │ ├── nodejs-12.txt
│ │ │ │ ├── nodejs-14.txt
│ │ │ │ ├── php-7.3.txt
│ │ │ │ ├── php-7.4.txt
│ │ │ │ ├── python-3.txt
│ │ │ │ ├── python.txt
│ │ │ │ ├── ruby-2.5.txt
│ │ │ │ ├── rust-1.34.txt
│ │ │ │ ├── src/
│ │ │ │ │ ├── dotnet2.2/
│ │ │ │ │ │ ├── Apache.OpenWhisk.UnicodeTests.Dotnet/
│ │ │ │ │ │ │ ├── Apache.OpenWhisk.UnicodeTests.Dotnet.csproj
│ │ │ │ │ │ │ └── Unicode.cs
│ │ │ │ │ │ └── openwhisk-unicodetests-dotnet.sln
│ │ │ │ │ └── java/
│ │ │ │ │ └── unicode/
│ │ │ │ │ ├── build.gradle
│ │ │ │ │ ├── settings.gradle
│ │ │ │ │ └── src/
│ │ │ │ │ └── main/
│ │ │ │ │ └── java/
│ │ │ │ │ └── Unicode.java
│ │ │ │ ├── swift-4.2.txt
│ │ │ │ ├── swift-5.1.txt
│ │ │ │ └── swift-5.3.txt
│ │ │ ├── validInput1.json
│ │ │ ├── validInput2.json
│ │ │ ├── wc.js
│ │ │ ├── wcbin.js
│ │ │ ├── word_count.json
│ │ │ └── zippedaction/
│ │ │ ├── index.js
│ │ │ └── package.json
│ │ └── apigw/
│ │ ├── apigw_path_param_support_test_invalidActionType.json
│ │ ├── apigw_path_param_support_test_invalidParamName1.json
│ │ ├── apigw_path_param_support_test_invalidParamName2.json
│ │ ├── apigw_path_param_support_test_invalidTargetUrl.json
│ │ ├── apigw_path_param_support_test_withPathParameters1.json
│ │ ├── apigw_path_param_support_test_withPathParameters2.json
│ │ ├── endpoints.without.action.swagger.json
│ │ ├── local.api.bad.yaml
│ │ ├── local.api.yaml
│ │ ├── testswaggerdoc1
│ │ ├── testswaggerdoc2
│ │ └── testswaggerdocinvalid
│ ├── performance/
│ │ ├── README.md
│ │ ├── gatling_tests/
│ │ │ ├── build.gradle
│ │ │ ├── build.sh
│ │ │ └── src/
│ │ │ └── gatling/
│ │ │ ├── resources/
│ │ │ │ ├── conf/
│ │ │ │ │ └── logback.xml
│ │ │ │ └── data/
│ │ │ │ ├── nodeJSAction.js
│ │ │ │ ├── nodeJSAsyncAction.js
│ │ │ │ ├── pythonAction.py
│ │ │ │ ├── src/
│ │ │ │ │ └── java/
│ │ │ │ │ ├── build.gradle
│ │ │ │ │ ├── settings.gradle
│ │ │ │ │ └── src/
│ │ │ │ │ └── main/
│ │ │ │ │ └── java/
│ │ │ │ │ └── JavaAction.java
│ │ │ │ ├── swiftAction.swift
│ │ │ │ └── users.csv
│ │ │ └── scala/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── openwhisk/
│ │ │ ├── ApiV1Simulation.scala
│ │ │ ├── BlockingInvokeOneActionSimulation.scala
│ │ │ ├── ColdBlockingInvokeSimulation.scala
│ │ │ ├── LatencySimulation.scala
│ │ │ └── extension/
│ │ │ └── whisk/
│ │ │ ├── OpenWhiskActionBuilder.scala
│ │ │ ├── OpenWhiskDsl.scala
│ │ │ ├── OpenWhiskProtocolBuilder.scala
│ │ │ └── Predef.scala
│ │ ├── preparation/
│ │ │ ├── actions/
│ │ │ │ ├── async.js
│ │ │ │ └── noop.js
│ │ │ ├── create.sh
│ │ │ ├── deploy-lean.sh
│ │ │ └── deploy.sh
│ │ └── wrk_tests/
│ │ ├── latency.sh
│ │ ├── post.lua
│ │ └── throughput.sh
│ └── src/
│ ├── main/
│ │ └── scala/
│ │ └── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ └── GradleWorkaround.scala
│ └── test/
│ ├── resources/
│ │ ├── application.conf.j2
│ │ ├── logback-test.xml
│ │ ├── swagger-config.json
│ │ └── templates/
│ │ └── build.gradle.mustache
│ └── scala/
│ ├── actionContainers/
│ │ ├── ActionContainer.scala
│ │ ├── BasicActionRunnerTests.scala
│ │ └── ResourceHelpers.scala
│ ├── apigw/
│ │ └── healthtests/
│ │ ├── ApiGwEndToEndTests.scala
│ │ └── ApiGwRestEndToEndTests.scala
│ ├── common/
│ │ ├── ConcurrencyHelpers.scala
│ │ ├── FreePortFinder.scala
│ │ ├── JsHelpers.scala
│ │ ├── LoggedFunction.scala
│ │ ├── Pair.java
│ │ ├── RunCliCmd.scala
│ │ ├── SimpleExec.scala
│ │ ├── StreamLogging.scala
│ │ ├── TestHelpers.scala
│ │ ├── TestUtils.java
│ │ ├── TimingHelpers.scala
│ │ ├── WhiskProperties.java
│ │ ├── WskActorSystem.scala
│ │ ├── WskCliOperations.scala
│ │ ├── WskOperations.scala
│ │ ├── WskTestHelpers.scala
│ │ ├── WskTracingTests.scala
│ │ └── rest/
│ │ ├── SwaggerValidator.scala
│ │ └── WskRestOperations.scala
│ ├── ha/
│ │ ├── CacheInvalidationTests.scala
│ │ └── ShootComponentsTests.scala
│ ├── invokerShoot/
│ │ └── ShootInvokerTests.scala
│ ├── limits/
│ │ └── ThrottleTests.scala
│ ├── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ ├── common/
│ │ │ ├── ConfigMXBeanTests.scala
│ │ │ ├── ConfigMapValueTests.scala
│ │ │ ├── ConfigTests.scala
│ │ │ ├── ForcibleSemaphoreTests.scala
│ │ │ ├── NestedSemaphoreTests.scala
│ │ │ ├── PrometheusTests.scala
│ │ │ ├── ResizableSemaphoreTests.scala
│ │ │ ├── RunCliCmdTests.scala
│ │ │ ├── SchedulerTests.scala
│ │ │ ├── TransactionIdTests.scala
│ │ │ ├── UserEventTests.scala
│ │ │ └── etcd/
│ │ │ ├── EtcdConfigTests.scala
│ │ │ ├── EtcdKvTests.scala
│ │ │ ├── EtcdLeaderShipUnitTests.scala
│ │ │ └── EtcdWorkerTests.scala
│ │ ├── connector/
│ │ │ └── kafka/
│ │ │ └── KafkaMetricsTests.scala
│ │ ├── core/
│ │ │ ├── WhiskConfigTests.scala
│ │ │ ├── admin/
│ │ │ │ └── WskAdminTests.scala
│ │ │ ├── apigw/
│ │ │ │ └── actions/
│ │ │ │ └── test/
│ │ │ │ ├── ApiGwRestRoutemgmtActionTests.scala
│ │ │ │ └── ApiGwRoutemgmtActionTests.scala
│ │ │ ├── cli/
│ │ │ │ └── test/
│ │ │ │ ├── ApiGwRestBasicTests.scala
│ │ │ │ ├── ApiGwRestTests.scala
│ │ │ │ ├── BaseApiGwTests.scala
│ │ │ │ ├── TestJsonArgs.scala
│ │ │ │ ├── WskActionSequenceTests.scala
│ │ │ │ ├── WskEntitlementTests.scala
│ │ │ │ ├── WskRestActionSequenceTests.scala
│ │ │ │ ├── WskRestBasicUsageTests.scala
│ │ │ │ ├── WskRestEntitlementTests.scala
│ │ │ │ └── WskWebActionsTests.scala
│ │ │ ├── connector/
│ │ │ │ ├── test/
│ │ │ │ │ ├── EventMessageTests.scala
│ │ │ │ │ ├── MessageFeedTests.scala
│ │ │ │ │ ├── MessageTests.scala
│ │ │ │ │ └── TestConnector.scala
│ │ │ │ └── tests/
│ │ │ │ └── AcknowledgementMessageTests.scala
│ │ │ ├── containerpool/
│ │ │ │ ├── docker/
│ │ │ │ │ └── test/
│ │ │ │ │ ├── AkkaContainerClientTests.scala
│ │ │ │ │ ├── ApacheBlockingContainerClientTests.scala
│ │ │ │ │ ├── DockerClientTests.scala
│ │ │ │ │ ├── DockerClientWithFileAccessTests.scala
│ │ │ │ │ ├── DockerContainerFactoryTests.scala
│ │ │ │ │ ├── DockerContainerTests.scala
│ │ │ │ │ ├── ProcessRunnerTests.scala
│ │ │ │ │ └── RuncClientTests.scala
│ │ │ │ ├── kubernetes/
│ │ │ │ │ └── test/
│ │ │ │ │ ├── Fabric8ClientTests.scala
│ │ │ │ │ ├── KubeClientSupport.scala
│ │ │ │ │ ├── KubernetesClientTests.scala
│ │ │ │ │ ├── KubernetesContainerTests.scala
│ │ │ │ │ └── WhiskPodBuilderTests.scala
│ │ │ │ ├── logging/
│ │ │ │ │ ├── ElasticSearchLogStoreTests.scala
│ │ │ │ │ ├── ElasticSearchRestClientTests.scala
│ │ │ │ │ ├── LogDriverLogStoreTests.scala
│ │ │ │ │ ├── SplunkLogStoreTests.scala
│ │ │ │ │ └── test/
│ │ │ │ │ ├── DockerToActivationFileLogStoreTests.scala
│ │ │ │ │ └── DockerToActivationLogStoreTests.scala
│ │ │ │ ├── test/
│ │ │ │ │ ├── ContainerArgsConfigTest.scala
│ │ │ │ │ ├── ContainerPoolConfigTests.scala
│ │ │ │ │ ├── ContainerPoolTests.scala
│ │ │ │ │ └── ContainerProxyTests.scala
│ │ │ │ ├── v2/
│ │ │ │ │ └── test/
│ │ │ │ │ ├── ActivationClientProxyTests.scala
│ │ │ │ │ ├── FunctionPullingContainerPoolTests.scala
│ │ │ │ │ ├── FunctionPullingContainerProxyTests.scala
│ │ │ │ │ └── InvokerHealthManagerTests.scala
│ │ │ │ └── yarn/
│ │ │ │ └── test/
│ │ │ │ ├── MockYARNRM.scala
│ │ │ │ └── YARNContainerFactoryTests.scala
│ │ │ ├── controller/
│ │ │ │ ├── actions/
│ │ │ │ │ └── test/
│ │ │ │ │ └── SequenceAccountingTests.scala
│ │ │ │ └── test/
│ │ │ │ ├── ActionsApiTests.scala
│ │ │ │ ├── ActionsApiWithDbPollingTests.scala
│ │ │ │ ├── ActionsApiWithoutDbPollingTests.scala
│ │ │ │ ├── ActivationsApiTests.scala
│ │ │ │ ├── BasicAuthenticateTests.scala
│ │ │ │ ├── ConductorsApiTests.scala
│ │ │ │ ├── ControllerApiTests.scala
│ │ │ │ ├── ControllerRoutesTests.scala
│ │ │ │ ├── ControllerTestCommon.scala
│ │ │ │ ├── EntitlementProviderTests.scala
│ │ │ │ ├── FPCEntitlementTests.scala
│ │ │ │ ├── KindRestrictorTests.scala
│ │ │ │ ├── LimitsApiTests.scala
│ │ │ │ ├── NamespacesApiTests.scala
│ │ │ │ ├── PackageActionsApiTests.scala
│ │ │ │ ├── PackagesApiTests.scala
│ │ │ │ ├── RateThrottleTests.scala
│ │ │ │ ├── RespondWithHeadersTests.scala
│ │ │ │ ├── RulesApiTests.scala
│ │ │ │ ├── SequenceApiTests.scala
│ │ │ │ ├── SwaggerRoutesTests.scala
│ │ │ │ ├── TriggersApiTests.scala
│ │ │ │ ├── WebActionsApiTests.scala
│ │ │ │ ├── WhiskAuthHelpers.scala
│ │ │ │ └── migration/
│ │ │ │ └── SequenceActionApiMigrationTests.scala
│ │ │ ├── database/
│ │ │ │ ├── ArtifactActivationStoreBehaviorBase.scala
│ │ │ │ ├── ArtifactActivationStoreTests.scala
│ │ │ │ ├── ArtifactWithFileStorageActivationStoreTests.scala
│ │ │ │ ├── CouchDBArtifactStoreTests.scala
│ │ │ │ ├── CouchDBAttachmentStoreTests.scala
│ │ │ │ ├── CouchDBStoreBehaviorBase.scala
│ │ │ │ ├── LimitsCommandTests.scala
│ │ │ │ ├── UserCommandTests.scala
│ │ │ │ ├── WhiskAdminCliTestBase.scala
│ │ │ │ ├── azblob/
│ │ │ │ │ ├── AzureBlob.scala
│ │ │ │ │ ├── AzureBlobAttachmentStoreBehaviorBase.scala
│ │ │ │ │ ├── AzureBlobAttachmentStoreCDNTests.scala
│ │ │ │ │ ├── AzureBlobAttachmentStoreITTests.scala
│ │ │ │ │ └── AzureBlobConfigTest.scala
│ │ │ │ ├── cosmosdb/
│ │ │ │ │ ├── CollectionResourceUsageTests.scala
│ │ │ │ │ ├── CosmosDBArtifactStoreTests.scala
│ │ │ │ │ ├── CosmosDBAttachmentStoreTests.scala
│ │ │ │ │ ├── CosmosDBConfigTests.scala
│ │ │ │ │ ├── CosmosDBLeakTests.scala
│ │ │ │ │ ├── CosmosDBSoftDeleteTests.scala
│ │ │ │ │ ├── CosmosDBStoreBehaviorBase.scala
│ │ │ │ │ ├── CosmosDBSupportTests.scala
│ │ │ │ │ ├── CosmosDBTestSupport.scala
│ │ │ │ │ ├── CosmosDBUtilTest.scala
│ │ │ │ │ ├── IndexingPolicyTests.scala
│ │ │ │ │ ├── RecordingLeakDetector.java
│ │ │ │ │ ├── RecordingLeakDetectorFactory.java
│ │ │ │ │ ├── ReferenceCountedTests.scala
│ │ │ │ │ └── cache/
│ │ │ │ │ ├── CacheInvalidatorTests.scala
│ │ │ │ │ └── WhiskChangeEventObserverTests.scala
│ │ │ │ ├── elasticsearch/
│ │ │ │ │ ├── ElasticSearchActivationStoreBehaviorBase.scala
│ │ │ │ │ └── ElasticSearchActivationStoreTests.scala
│ │ │ │ ├── memory/
│ │ │ │ │ ├── MemoryArtifactStoreBehaviorBase.scala
│ │ │ │ │ ├── MemoryArtifactStoreTests.scala
│ │ │ │ │ └── MemoryAttachmentStoreTests.scala
│ │ │ │ ├── mongodb/
│ │ │ │ │ ├── MongoDBArtifactStoreTests.scala
│ │ │ │ │ ├── MongoDBAsyncStreamGraphTests.scala
│ │ │ │ │ ├── MongoDBAttachmentStoreTests.scala
│ │ │ │ │ ├── MongoDBStoreBehaviorBase.scala
│ │ │ │ │ └── MongoDBViewMapperTests.scala
│ │ │ │ ├── s3/
│ │ │ │ │ ├── CloudFrontSignerTests.scala
│ │ │ │ │ ├── S3AttachmentStoreAwsTests.scala
│ │ │ │ │ ├── S3AttachmentStoreBehaviorBase.scala
│ │ │ │ │ ├── S3AttachmentStoreCloudFrontTests.scala
│ │ │ │ │ ├── S3AttachmentStoreMinioTests.scala
│ │ │ │ │ ├── S3Aws.scala
│ │ │ │ │ ├── S3Minio.scala
│ │ │ │ │ └── S3WithPrefixTests.scala
│ │ │ │ └── test/
│ │ │ │ ├── AttachmentCompatibilityTests.scala
│ │ │ │ ├── AttachmentStoreBehaviors.scala
│ │ │ │ ├── AttachmentSupportTests.scala
│ │ │ │ ├── BatcherTests.scala
│ │ │ │ ├── CacheConcurrencyTests.scala
│ │ │ │ ├── CleanUpActivationsTest.scala
│ │ │ │ ├── CouchDbRestClientTests.scala
│ │ │ │ ├── DatabaseScriptTestUtils.scala
│ │ │ │ ├── DbUtils.scala
│ │ │ │ ├── DocumentHandlerTests.scala
│ │ │ │ ├── ExtendedCouchDbRestClient.scala
│ │ │ │ ├── MultipleReadersSingleWriterCacheTests.scala
│ │ │ │ ├── RemoveLogsTests.scala
│ │ │ │ ├── ReplicatorTests.scala
│ │ │ │ └── behavior/
│ │ │ │ ├── ActivationStoreBehavior.scala
│ │ │ │ ├── ActivationStoreBehaviorBase.scala
│ │ │ │ ├── ActivationStoreCRUDBehaviors.scala
│ │ │ │ ├── ActivationStoreQueryBehaviors.scala
│ │ │ │ ├── ArtifactStoreActivationsQueryBehaviors.scala
│ │ │ │ ├── ArtifactStoreAttachmentBehaviors.scala
│ │ │ │ ├── ArtifactStoreBehavior.scala
│ │ │ │ ├── ArtifactStoreBehaviorBase.scala
│ │ │ │ ├── ArtifactStoreCRUDBehaviors.scala
│ │ │ │ ├── ArtifactStoreQueryBehaviors.scala
│ │ │ │ ├── ArtifactStoreSubjectQueryBehaviors.scala
│ │ │ │ ├── ArtifactStoreTestUtil.scala
│ │ │ │ └── ArtifactStoreWhisksQueryBehaviors.scala
│ │ │ ├── entity/
│ │ │ │ └── test/
│ │ │ │ ├── ActivationCompatTests.scala
│ │ │ │ ├── ActivationResponseTests.scala
│ │ │ │ ├── ControllerInstanceIdTests.scala
│ │ │ │ ├── DatastoreTests.scala
│ │ │ │ ├── ExecHelpers.scala
│ │ │ │ ├── ExecManifestTests.scala
│ │ │ │ ├── ExecTests.scala
│ │ │ │ ├── InvokerInstanceIdTests.scala
│ │ │ │ ├── MigrationEntities.scala
│ │ │ │ ├── ParameterEncryptionTests.scala
│ │ │ │ ├── SchemaTests.scala
│ │ │ │ ├── SizeTests.scala
│ │ │ │ ├── ViewTests.scala
│ │ │ │ └── WhiskEntityTests.scala
│ │ │ ├── invoker/
│ │ │ │ └── test/
│ │ │ │ ├── ContainerMessageConsumerTests.scala
│ │ │ │ ├── DefaultInvokerServerTests.scala
│ │ │ │ ├── FPCInvokerServerTests.scala
│ │ │ │ ├── InstanceIdAssignerTests.scala
│ │ │ │ ├── InvokerBootUpTests.scala
│ │ │ │ └── NamespaceBlacklistTests.scala
│ │ │ ├── limits/
│ │ │ │ ├── ActionLimitsTests.scala
│ │ │ │ ├── ConcurrencyTests.scala
│ │ │ │ └── MaxActionDurationTests.scala
│ │ │ ├── loadBalancer/
│ │ │ │ └── test/
│ │ │ │ ├── FPCPoolBalancerTests.scala
│ │ │ │ ├── InvokerSupervisionTests.scala
│ │ │ │ └── ShardingContainerPoolBalancerTests.scala
│ │ │ ├── scheduler/
│ │ │ │ ├── FPCSchedulerFlowTests.scala
│ │ │ │ ├── FPCSchedulerServerTests.scala
│ │ │ │ ├── container/
│ │ │ │ │ └── test/
│ │ │ │ │ ├── ContainerManagerTests.scala
│ │ │ │ │ └── CreationJobManagerTests.scala
│ │ │ │ ├── grpc/
│ │ │ │ │ └── test/
│ │ │ │ │ ├── ActivationServiceImplTests.scala
│ │ │ │ │ └── CommonVariable.scala
│ │ │ │ └── queue/
│ │ │ │ └── test/
│ │ │ │ ├── ContainerCounterTests.scala
│ │ │ │ ├── ElasticSearchDurationCheckResultFormatTest.scala
│ │ │ │ ├── ElasticSearchDurationCheckerTests.scala
│ │ │ │ ├── MemoryQueueFlowTests.scala
│ │ │ │ ├── MemoryQueueTests.scala
│ │ │ │ ├── MemoryQueueTestsFixture.scala
│ │ │ │ ├── QueueManagerTests.scala
│ │ │ │ └── SchedulingDecisionMakerTests.scala
│ │ │ └── service/
│ │ │ ├── DataManagementServiceTests.scala
│ │ │ ├── LeaseKeepAliveServiceTests.scala
│ │ │ └── WatcherServiceTests.scala
│ │ ├── http/
│ │ │ └── PoolingRestClientTests.scala
│ │ ├── spi/
│ │ │ └── SpiTests.scala
│ │ ├── standalone/
│ │ │ ├── StandaloneApiGwTests.scala
│ │ │ ├── StandaloneCouchTests.scala
│ │ │ ├── StandaloneKCFTests.scala
│ │ │ ├── StandaloneKafkaTests.scala
│ │ │ ├── StandaloneSanityTestSupport.scala
│ │ │ ├── StandaloneServerFixture.scala
│ │ │ ├── StandaloneServerTests.scala
│ │ │ └── StandaloneUserEventTests.scala
│ │ ├── test/
│ │ │ └── http/
│ │ │ └── RESTProxy.scala
│ │ └── utils/
│ │ └── test/
│ │ └── ExecutionContextFactoryTests.scala
│ ├── services/
│ │ ├── HeadersTests.scala
│ │ └── KafkaConnectorTests.scala
│ └── system/
│ ├── basic/
│ │ ├── WskActionTests.scala
│ │ ├── WskActivationLogsTests.scala
│ │ ├── WskActivationTests.scala
│ │ ├── WskConductorTests.scala
│ │ ├── WskConsoleTests.scala
│ │ ├── WskMultiRuntimeTests.scala
│ │ ├── WskPackageTests.scala
│ │ ├── WskRestBasicTests.scala
│ │ ├── WskRestRuleTests.scala
│ │ ├── WskRuleTests.scala
│ │ ├── WskSequenceTests.scala
│ │ └── WskUnicodeTests.scala
│ └── rest/
│ ├── ActionSchemaTests.scala
│ ├── GoCLINginxTests.scala
│ ├── JsonSchema.scala
│ ├── JsonSchemaTests.scala
│ ├── RestUtil.scala
│ └── SwaggerTests.scala
└── tools/
├── actionProxy/
│ ├── Dockerfile
│ ├── README.md
│ ├── build.gradle
│ └── invoke.py
├── admin/
│ ├── README-NEXT.md
│ ├── README.md
│ ├── build.gradle
│ ├── src/
│ │ └── main/
│ │ ├── resources/
│ │ │ └── application.conf
│ │ └── scala/
│ │ └── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ └── core/
│ │ ├── cli/
│ │ │ ├── CommandMessages.scala
│ │ │ └── Main.scala
│ │ └── database/
│ │ ├── LimitsCommand.scala
│ │ └── UserCommand.scala
│ ├── wskadmin
│ ├── wskprop.py
│ └── wskutil.py
├── build/
│ ├── README.md
│ ├── checkLogs.py
│ ├── citool
│ └── redo
├── db/
│ ├── README.md
│ ├── cleanUpActivations.py
│ ├── cosmosDbUtil.py
│ ├── deleteLogsFromActivations.py
│ ├── moveCodeToAttachment.py
│ └── replicateDbs.py
├── dev/
│ ├── README.md
│ ├── build.gradle
│ └── src/
│ └── main/
│ ├── groovy/
│ │ ├── CategoryManager.groovy
│ │ ├── couchdbViews.groovy
│ │ ├── intellijRunConfig.groovy
│ │ ├── listRepos.groovy
│ │ └── renderModuleDetails.groovy
│ └── resources/
│ └── modules.md
├── eclipse/
│ ├── java.xml
│ └── scala.properties
├── git/
│ ├── README.md
│ ├── pre-commit-scalafmt-gradlew.sh
│ └── pre-commit-scalafmt-native.sh
├── github/
│ ├── checkAndUploadLogs.sh
│ ├── debugAction.sh
│ ├── flake8.sh
│ ├── runDummyTests.sh
│ ├── runLeanSystemTests.sh
│ ├── runMultiRuntimeTests.sh
│ ├── runSchedulerTests.sh
│ ├── runStandaloneTests.sh
│ ├── runSystemTests.sh
│ ├── runUnitTests.sh
│ ├── s3-upload.sh
│ ├── scan.sh
│ ├── setup.sh
│ ├── waitIfDebug.sh
│ └── writeOnSlack.sh
├── jenkins/
│ └── apache/
│ └── dockerhub.groovy
├── macos/
│ ├── README.md
│ └── docker-machine/
│ ├── README.md
│ ├── tweak-dockerhost.sh
│ └── tweak-dockermachine.sh
├── ow-utils/
│ ├── Dockerfile
│ ├── Dockerfile.arm
│ ├── README.md
│ └── build.gradle
├── owperf/
│ ├── README.md
│ ├── owperf.js
│ ├── owperf.sh
│ ├── owperf_data.odg
│ ├── package.json
│ ├── setup.sh
│ └── testAction.js
├── travis/
│ ├── README.md
│ ├── box-upload.py
│ ├── checkAndUploadLogs.sh
│ ├── distDocker.sh
│ ├── docker.conf
│ ├── docker.sh
│ ├── flake8.sh
│ ├── runLeanSystemTests.sh
│ ├── runMultiRuntimeTests.sh
│ ├── runSchedulerTests.sh
│ ├── runStandaloneTests.sh
│ ├── runSystemTests.sh
│ ├── runTests.sh
│ ├── runUnitTests.sh
│ ├── scan.sh
│ ├── setup-docker.py
│ ├── setup.sh
│ ├── setupLeanSystem.sh
│ ├── setupPrereq.sh
│ └── setupSystem.sh
└── ubuntu-setup/
├── README.md
├── all.sh
├── ansible.sh
├── bashprofile.sh
├── docker-xenial.sh
├── docker.sh
├── java8.sh
├── misc.sh
└── pip.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .asf.yaml
================================================
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
github:
description: "Apache OpenWhisk is an open source serverless cloud platform"
homepage: https://openwhisk.apache.org/
labels:
- openwhisk
- apache
- serverless
- faas
- functions-as-a-service
- cloud
- serverless-architectures
- serverless-functions
- docker
- kubernetes
- functions
protected_branches:
master:
required_status_checks:
strict: true
required_pull_request_reviews:
required_approving_review_count: 1
required_signatures: false
enabled_merge_buttons:
merge: false
squash: true
rebase: true
features:
issues: true
notifications:
commits: commits@openwhisk.apache.org
issues_status: issues@openwhisk.apache.org
issues_comment: issues@openwhisk.apache.org
pullrequests_status: issues@openwhisk.apache.org
pullrequests_comment: issues@openwhisk.apache.org
================================================
FILE: .gitattributes
================================================
# Auto detect text files and perform LF normalization.
# Resources:
# - https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
# - http://davidlaing.com/2012/09/19/customise-your-gitattributes-to-become-a-git-ninja/
# - https://help.github.com/articles/dealing-with-line-endings/
* text=auto
*.go text eol=lf
*.java text
*.js text
*.md text
*.py text eol=lf
*.scala text
*.sh text eol=lf
*.gradle text
*.xml text
*.bat text eol=crlf
*.jar binary
*.png binary
# python files not having the .py extension
tools/cli/wsk text eol=lf
tools/cli/wskadmin text eol=lf
# bash files not having the .sh extension
gradlew text eol=lf
core/javaAction/proxy/gradlew text eol=lf
sdk/docker/client/action text eol=lf
# auth files with default api keys
ansible/files/auth.guest text eol=lf
ansible/files/auth.whisk.system text eol=lf
================================================
FILE: .github/ISSUE_TEMPLATE/proposal.md
================================================
## Enhancement Description
Please summarize your proposal (e.g. the "what", the "why", and some of the "how").
* Proposal: [a link to the corresponding pull request if it exists already]()
## References
Please provide links to prior discussion (e.g., Apache `dev` list), wikis, or related issues.
================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
<!--
We use the issue tracker for bugs and feature requests. For general questions and discussion please use https://openwhisk.apache.org/slack.html or https://openwhisk.apache.org/community.html instead.
Do NOT share passwords, credentials or other confidential information.
Before creating a new issue, please check if there is one already open that
fits the defect you are reporting.
If you open an issue and realize later it is a duplicate of a pre-existing
open issue, please close yours and add a comment to the other.
Issues can be created for either defects or enhancement requests. If you are a committer than please add the labels "bug" or "feature". If you are not a committer please make clear in the comments which one it is, so that committers can add these labels later.
If you are reporting a defect, please edit the issue description to include the
information shown below.
If you are reporting an enhancement request, please include information on what you are trying to achieve and why that enhancement would help you.
For more information about reporting issues, see
https://github.com/apache/openwhisk/blob/master/CONTRIBUTING.md#raising-issues
Use the commands below to provide key information from your environment:
You do not have to include this information if this is a feature request.
-->
## Environment details:
* local deployment, native ubuntu, Mac OS, Kubernetes, ...
* version of docker, ubuntu, ...
## Steps to reproduce the issue:
1.
2.
3.
## Provide the expected results and outputs:
```
output comes here
```
## Provide the actual results and outputs:
```
output comes here
```
## Additional information you deem important:
* issue happens only occasionally or under certain circumstances
* changes you did or observed in the environment
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--- Provide a concise summary of your changes in the Title -->
## Description
<!--- Provide a detailed description of your changes. -->
<!--- Include details of what problem you are solving and how your changes are tested. -->
## Related issue and scope
<!--- Please include a link to a related issue if there is one. -->
- [ ] I opened an issue to propose and discuss this change (#????)
## My changes affect the following components
<!--- Select below all system components are affected by your change. -->
<!--- Enter an `x` in all applicable boxes. -->
- [ ] API
- [ ] Controller
- [ ] Message Bus (e.g., Kafka)
- [ ] Loadbalancer
- [ ] Scheduler
- [ ] Invoker
- [ ] Intrinsic actions (e.g., sequences, conductors)
- [ ] Data stores (e.g., CouchDB)
- [ ] Tests
- [ ] Deployment
- [ ] CLI
- [ ] General tooling
- [ ] Documentation
## Types of changes
<!--- What types of changes does your code introduce? Use `x` in all the boxes that apply: -->
- [ ] Bug fix (generally a non-breaking change which closes an issue).
- [ ] Enhancement or new feature (adds new functionality).
- [ ] Breaking change (a bug fix or enhancement which changes existing behavior).
## Checklist:
<!--- Please review the points below which help you make sure you've covered all aspects of the change you're making. -->
- [ ] I signed an [Apache CLA](https://github.com/apache/openwhisk/blob/master/CONTRIBUTING.md).
- [ ] I reviewed the [style guides](https://github.com/apache/openwhisk/blob/master/CONTRIBUTING.md#coding-standards) and followed the recommendations (Travis CI will check :).
- [ ] I added tests to cover my changes.
- [ ] My changes require further changes to the documentation.
- [ ] I updated the documentation where necessary.
================================================
FILE: .github/dependabot.yml
================================================
# Keep GitHub Actions up to date with GitHub's Dependabot...
# https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
groups:
GitHub_Actions:
patterns:
- "*" # Group all Actions updates into a single larger pull request
schedule:
interval: weekly
================================================
FILE: .github/workflows/0-on-demand.yaml
================================================
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
name: On Demand Tests
on:
workflow_dispatch:
inputs:
enable_ngrok_debug:
description: "Enable Ngrok Debugging"
required: true
type: boolean
default: false
test_suite:
description: Select Test Suite to run
type: choice
options:
- Unit
- System
- MultiRuntime
- Standalone
- Scheduler
- Performance
- Dummy
env:
# openwhisk env
TEST_SUITE: ${{ inputs.test_suite }}
ANSIBLE_CMD: "ansible-playbook -i environments/local -e docker_image_prefix=testing"
GRADLE_PROJS_SKIP: ""
# (optional) slack incoming wehbook for notifications
SLACK_WEBHOOK: ${{secrets.SLACK_WEBHOOK}}
# (optional) s3 log upload
LOG_BUCKET: ${{ secrets.LOG_BUCKET }}
LOG_ACCESS_KEY_ID: ${{ secrets.LOG_ACCESS_KEY_ID }}
LOG_SECRET_ACCESS_KEY: ${{ secrets.LOG_SECRET_ACCESS_KEY }}
LOG_REGION: ${{ secrets.LOG_REGION }}
# github
GH_BUILD: ${{ github.event_name }}-${{ github.sha }}
GH_BRANCH: ${{ github.head_ref || github.ref_name }}
# https://develocity.apache.org
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
# (optional) you need to add as secrets an ngrok token and a password to debug a build on demand
NGROK_DEBUG: ${{ inputs.enable_ngrok_debug }}
NGROK_TOKEN: ${{ secrets.NGROK_TOKEN }}
NGROK_PASSWORD: ${{ secrets.NGROK_PASSWORD }}
jobs:
openwhisk:
runs-on: ubuntu-22.04
continue-on-error: false
steps:
- name: Checkout
uses: actions/checkout@v6
- name: "Setup"
run: ./tools/github/setup.sh
- name: Maximize free space
run: >
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/.ghcup
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
- name: Check free space
run: df -h
- id: tests
name: Run Tests
run: "./tools/github/run${{ env.TEST_SUITE }}Tests.sh"
continue-on-error: true
- id: logs
name: Show results and Upload logs
run: ./tools/github/checkAndUploadLogs.sh ${{ env.TEST_SUITE }}
- name: Slack Notification
run: >
./tools/github/writeOnSlack.sh
"[$TEST_SUITE]" ${{ steps.tests.outcome }} on ${GH_BUILD}
$'\nbranch:' $GH_BRANCH
$'\nmessage:' "$(git log -1 --oneline | cat)"
$'\nlogs:' ${{ steps.logs.outputs.logs }}
$'\nreport:' ${{ steps.logs.outputs.report }}
- name: Debug Action (if requested)
run: ./tools/github/debugAction.sh
- name: Wait for Debug (if requested)
run: ./tools/github/waitIfDebug.sh
- name: Results
run: test "${{ steps.tests.outcome }}" == "success"
================================================
FILE: .github/workflows/1-unit.yaml
================================================
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
name: Unit Tests
on:
push:
branches: [ master, 2.0.0 ]
pull_request:
branches: [ master, 2.0.0 ]
types: [ opened, synchronize, reopened ]
schedule:
- cron: '30 1 * * 1,3,5'
env:
# openwhisk env
TEST_SUITE: Unit
ANSIBLE_CMD: "ansible-playbook -i environments/local -e docker_image_prefix=testing"
GRADLE_PROJS_SKIP: ""
## secrets
# (optional) slack incoming wehbook for notifications
SLACK_WEBHOOK: ${{secrets.SLACK_WEBHOOK}}
# (optional) s3 log upload
LOG_BUCKET: ${{ secrets.LOG_BUCKET }}
LOG_ACCESS_KEY_ID: ${{ secrets.LOG_ACCESS_KEY_ID }}
LOG_SECRET_ACCESS_KEY: ${{ secrets.LOG_SECRET_ACCESS_KEY }}
LOG_REGION: ${{ secrets.LOG_REGION }}
# some tests need also this even if they are empty on pull_requests...
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: ${{ secrets.AWS_REGION }}
# github
GH_BUILD: ${{ github.event_name }}-${{ github.sha }}
GH_BRANCH: ${{ github.head_ref || github.ref_name }}
# https://develocity.apache.org
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
jobs:
openwhisk:
runs-on: ubuntu-22.04
continue-on-error: false
steps:
- name: Checkout
uses: actions/checkout@v6
- name: "Setup"
run: ./tools/github/setup.sh
- name: Maximize free space
run: >
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/.ghcup
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
- name: Check free space
run: df -h
- id: tests
name: Run Tests
run: "./tools/github/run${{ env.TEST_SUITE }}Tests.sh"
continue-on-error: true
- id: logs
name: Show results and Upload logs
run: ./tools/github/checkAndUploadLogs.sh ${{ env.TEST_SUITE }}
- name: Slack Notification
run: >
./tools/github/writeOnSlack.sh
"[$TEST_SUITE]" ${{ steps.tests.outcome }} on ${GH_BUILD}
$'\nbranch:' $GH_BRANCH
$'\nmessage:' "$(git log -1 --oneline | cat)"
$'\nlogs:' ${{ steps.logs.outputs.logs }}
$'\nreport:' ${{ steps.logs.outputs.report }}
- name: Results
run: test "${{ steps.tests.outcome }}" == "success"
================================================
FILE: .github/workflows/2-system.yaml
================================================
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
name: System Tests
on:
push:
branches: [ master, 2.0.0 ]
pull_request:
branches: [ master, 2.0.0 ]
types: [ opened, synchronize, reopened ]
schedule:
- cron: '30 2 * * 1,3,5'
env:
# openwhisk env
TEST_SUITE: System
ANSIBLE_CMD: "ansible-playbook -i environments/local -e docker_image_prefix=testing -e container_pool_pekko_client=false"
GRADLE_PROJS_SKIP: ""
## secrets
# (optional) slack incoming wehbook for notifications
SLACK_WEBHOOK: ${{secrets.SLACK_WEBHOOK}}
# (optional) s3 log upload
LOG_BUCKET: ${{ secrets.LOG_BUCKET }}
LOG_ACCESS_KEY_ID: ${{ secrets.LOG_ACCESS_KEY_ID }}
LOG_SECRET_ACCESS_KEY: ${{ secrets.LOG_SECRET_ACCESS_KEY }}
LOG_REGION: ${{ secrets.LOG_REGION }}
# github
GH_BUILD: ${{ github.event_name }}-${{ github.sha }}
GH_BRANCH: ${{ github.head_ref || github.ref_name }}
# https://develocity.apache.org
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
jobs:
openwhisk:
runs-on: ubuntu-22.04
continue-on-error: false
steps:
- name: Checkout
uses: actions/checkout@v6
- name: "Setup"
run: ./tools/github/setup.sh
- name: Maximize free space
run: >
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/.ghcup
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
- name: Check free space
run: df -h
- id: tests
name: Run Tests
run: "./tools/github/run${{ env.TEST_SUITE }}Tests.sh"
continue-on-error: true
- id: logs
name: Show results and Upload logs
run: ./tools/github/checkAndUploadLogs.sh ${{ env.TEST_SUITE }}
- name: Slack Notification
run: >
./tools/github/writeOnSlack.sh
"[$TEST_SUITE]" ${{ steps.tests.outcome }} on ${GH_BUILD}
$'\nbranch:' $GH_BRANCH
$'\nmessage:' "$(git log -1 --oneline | cat)"
$'\nlogs:' ${{ steps.logs.outputs.logs }}
$'\nreport:' ${{ steps.logs.outputs.report }}
- name: Results
run: test "${{ steps.tests.outcome }}" == "success"
================================================
FILE: .github/workflows/3-multi-runtime.yaml
================================================
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
name: MultiRuntime Tests
on:
push:
branches: [ master, 2.0.0 ]
pull_request:
branches: [ master, 2.0.0 ]
types: [ opened, synchronize, reopened ]
schedule:
- cron: '30 3 * * 1,3,5'
env:
# openwhisk env
TEST_SUITE: MultiRuntime
ANSIBLE_CMD: "ansible-playbook -i environments/local -e docker_image_prefix=testing"
GRADLE_PROJS_SKIP: ""
## secrets
# (optional) slack incoming wehbook for notifications
SLACK_WEBHOOK: ${{secrets.SLACK_WEBHOOK}}
# (optional) s3 log upload
LOG_BUCKET: ${{ secrets.LOG_BUCKET }}
LOG_ACCESS_KEY_ID: ${{ secrets.LOG_ACCESS_KEY_ID }}
LOG_SECRET_ACCESS_KEY: ${{ secrets.LOG_SECRET_ACCESS_KEY }}
LOG_REGION: ${{ secrets.LOG_REGION }}
# github
GH_BUILD: ${{ github.event_name }}-${{ github.sha }}
GH_BRANCH: ${{ github.head_ref || github.ref_name }}
# https://develocity.apache.org
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
jobs:
openwhisk:
runs-on: ubuntu-22.04
continue-on-error: false
steps:
- name: Checkout
uses: actions/checkout@v6
- name: "Setup"
run: ./tools/github/setup.sh
- name: Maximize free space
run: >
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/.ghcup
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
- name: Check free space
run: df -h
- id: tests
name: Run Tests
run: "./tools/github/run${{ env.TEST_SUITE }}Tests.sh"
continue-on-error: true
- id: logs
name: Show results and Upload logs
run: ./tools/github/checkAndUploadLogs.sh ${{ env.TEST_SUITE }}
- name: Slack Notification
run: >
./tools/github/writeOnSlack.sh
"[$TEST_SUITE]" ${{ steps.tests.outcome }} on ${GH_BUILD}
$'\nbranch:' $GH_BRANCH
$'\nmessage:' "$(git log -1 --oneline | cat)"
$'\nlogs:' ${{ steps.logs.outputs.logs }}
$'\nreport:' ${{ steps.logs.outputs.report }}
- name: Results
run: test "${{ steps.tests.outcome }}" == "success"
================================================
FILE: .github/workflows/4-standalone.yaml
================================================
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
name: Standalone Tests
on:
push:
branches: [ master, 2.0.0 ]
pull_request:
branches: [ master, 2.0.0 ]
types: [ opened, synchronize, reopened ]
schedule:
- cron: '30 4 * * 1,3,5'
env:
# openwhisk env
TEST_SUITE: Standalone
ANSIBLE_CMD: "ansible-playbook -i environments/local -e docker_image_prefix=testing"
GRADLE_PROJS_SKIP: ""
## secrets
# (optional) slack incoming wehbook for notifications
SLACK_WEBHOOK: ${{secrets.SLACK_WEBHOOK}}
# (optional) s3 log upload
LOG_BUCKET: ${{ secrets.LOG_BUCKET }}
LOG_ACCESS_KEY_ID: ${{ secrets.LOG_ACCESS_KEY_ID }}
LOG_SECRET_ACCESS_KEY: ${{ secrets.LOG_SECRET_ACCESS_KEY }}
LOG_REGION: ${{ secrets.LOG_REGION }}
# github
GH_BUILD: ${{ github.event_name }}-${{ github.sha }}
GH_BRANCH: ${{ github.head_ref || github.ref_name }}
# https://develocity.apache.org
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
jobs:
openwhisk:
runs-on: ubuntu-22.04
continue-on-error: false
steps:
- name: Checkout
uses: actions/checkout@v6
- name: "Setup"
run: ./tools/github/setup.sh
- name: Maximize free space
run: >
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/.ghcup
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
- name: Check free space
run: df -h
- id: tests
name: Run Tests
run: "./tools/github/run${{ env.TEST_SUITE }}Tests.sh"
continue-on-error: true
- id: logs
name: Show results and Upload logs
run: ./tools/github/checkAndUploadLogs.sh ${{ env.TEST_SUITE }}
- name: Slack Notification
run: >
./tools/github/writeOnSlack.sh
"[$TEST_SUITE]" ${{ steps.tests.outcome }} on ${GH_BUILD}
$'\nbranch:' $GH_BRANCH
$'\nmessage:' "$(git log -1 --oneline | cat)"
$'\nlogs:' ${{ steps.logs.outputs.logs }}
$'\nreport:' ${{ steps.logs.outputs.report }}
- name: Results
run: test "${{ steps.tests.outcome }}" == "success"
================================================
FILE: .github/workflows/5-scheduler.yaml
================================================
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
name: Scheduler Tests
on:
push:
branches: [ master, 2.0.0 ]
pull_request:
branches: [ master, 2.0.0 ]
types: [ opened, synchronize, reopened ]
schedule:
- cron: '30 5 * * 1,3,5'
env:
# openwhisk env
TEST_SUITE: Scheduler
ANSIBLE_CMD: "ansible-playbook -i environments/local -e docker_image_prefix=testing"
GRADLE_PROJS_SKIP: ""
## secrets
# (optional) slack incoming wehbook for notifications
SLACK_WEBHOOK: ${{secrets.SLACK_WEBHOOK}}
# (optional) s3 log upload
LOG_BUCKET: ${{ secrets.LOG_BUCKET }}
LOG_ACCESS_KEY_ID: ${{ secrets.LOG_ACCESS_KEY_ID }}
LOG_SECRET_ACCESS_KEY: ${{ secrets.LOG_SECRET_ACCESS_KEY }}
LOG_REGION: ${{ secrets.LOG_REGION }}
# github
GH_BUILD: ${{ github.event_name }}-${{ github.sha }}
GH_BRANCH: ${{ github.head_ref || github.ref_name }}
# https://develocity.apache.org
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
jobs:
openwhisk:
runs-on: ubuntu-22.04
continue-on-error: false
steps:
- name: Checkout
uses: actions/checkout@v6
- name: "Setup"
run: ./tools/github/setup.sh
- name: Maximize free space
run: >
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/.ghcup
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
- name: Check free space
run: df -h
- id: tests
name: Run Tests
run: "./tools/github/run${{ env.TEST_SUITE }}Tests.sh"
continue-on-error: true
- id: logs
name: Show results and Upload logs
run: ./tools/github/checkAndUploadLogs.sh ${{ env.TEST_SUITE }}
- name: Slack Notification
run: >
./tools/github/writeOnSlack.sh
"[$TEST_SUITE]" ${{ steps.tests.outcome }} on ${GH_BUILD}
$'\nbranch:' $GH_BRANCH
$'\nmessage:' "$(git log -1 --oneline | cat)"
$'\nlogs:' ${{ steps.logs.outputs.logs }}
$'\nreport:' ${{ steps.logs.outputs.report }}
- name: Results
run: test "${{ steps.tests.outcome }}" == "success"
================================================
FILE: .github/workflows/6-performance.yaml
================================================
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
name: Performance Tests
on:
push:
branches: [ master, 2.0.0 ]
pull_request:
branches: [ master, 2.0.0 ]
types: [ opened, synchronize, reopened ]
schedule:
- cron: '30 6 * * 1,3,5'
env:
# openwhisk env
TEST_SUITE: Performance
ANSIBLE_CMD: "ansible-playbook -i environments/local -e docker_image_prefix=testing"
GRADLE_PROJS_SKIP: ""
## secrets
# (optional) slack incoming wehbook for notifications
SLACK_WEBHOOK: ${{secrets.SLACK_WEBHOOK}}
# (optional) s3 log upload
LOG_BUCKET: ${{ secrets.LOG_BUCKET }}
LOG_ACCESS_KEY_ID: ${{ secrets.LOG_ACCESS_KEY_ID }}
LOG_SECRET_ACCESS_KEY: ${{ secrets.LOG_SECRET_ACCESS_KEY }}
LOG_REGION: ${{ secrets.LOG_REGION }}
# github
GH_BUILD: ${{ github.event_name }}-${{ github.sha }}
GH_BRANCH: ${{ github.head_ref || github.ref_name }}
# https://develocity.apache.org
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
jobs:
openwhisk:
runs-on: ubuntu-22.04
continue-on-error: false
steps:
- name: Checkout
uses: actions/checkout@v6
- name: "Setup"
run: ./tools/github/setup.sh
- name: Maximize free space
run: >
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/.ghcup
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
- name: Check free space
run: df -h
- run: ./tests/performance/preparation/deploy.sh
- run: TERM=dumb ./tests/performance/wrk_tests/latency.sh "https://172.17.0.1:10001" "$(cat ansible/files/auth.guest)" ./tests/performance/preparation/actions/noop.js 2m
continue-on-error: true
- run: TERM=dumb ./tests/performance/wrk_tests/latency.sh "https://172.17.0.1:10001" "$(cat ansible/files/auth.guest)" ./tests/performance/preparation/actions/async.js 2m
continue-on-error: true
- run: TERM=dumb ./tests/performance/wrk_tests/throughput.sh "https://172.17.0.1:10001" "$(cat ansible/files/auth.guest)" ./tests/performance/preparation/actions/noop.js 4 1 2 2m
continue-on-error: true
- run: TERM=dumb ./tests/performance/wrk_tests/throughput.sh "https://172.17.0.1:10001" "$(cat ansible/files/auth.guest)" ./tests/performance/preparation/actions/async.js 4 1 2 2m
continue-on-error: true
- run: TERM=dumb ./tests/performance/wrk_tests/throughput.sh "https://172.17.0.1:10001" "$(cat ansible/files/auth.guest)" ./tests/performance/preparation/actions/noop.js 100 110 2 2m
continue-on-error: true
- run: TERM=dumb ./tests/performance/wrk_tests/throughput.sh "https://172.17.0.1:10001" "$(cat ansible/files/auth.guest)" ./tests/performance/preparation/actions/async.js 100 110 2 2m
continue-on-error: true
- run: OPENWHISK_HOST="172.17.0.1" CONNECTIONS="100" REQUESTS_PER_SEC="1" ./gradlew gatlingRun-org.apache.openwhisk.ApiV1Simulation
continue-on-error: true
- run: OPENWHISK_HOST="172.17.0.1" MEAN_RESPONSE_TIME="1000" API_KEY="$(cat ansible/files/auth.guest)" EXCLUDED_KINDS="python:default,java:default,swift:default" PAUSE_BETWEEN_INVOKES="100" ./gradlew gatlingRun-org.apache.openwhisk.LatencySimulation
continue-on-error: true
- run: OPENWHISK_HOST="172.17.0.1" API_KEY="$(cat ansible/files/auth.guest)" CONNECTIONS="100" REQUESTS_PER_SEC="1" ./gradlew gatlingRun-org.apache.openwhisk.BlockingInvokeOneActionSimulation
continue-on-error: true
- run: OPENWHISK_HOST="172.17.0.1" API_KEY="$(cat ansible/files/auth.guest)" CONNECTIONS="100" REQUESTS_PER_SEC="1" ASYNC="true" ./gradlew gatlingRun-org.apache.openwhisk.BlockingInvokeOneActionSimulation
continue-on-error: true
# The following configuration does not make much sense. But we do not have enough users. But it's good to verify, that the test is still working.
- run: OPENWHISK_HOST="172.17.0.1" USERS="1" REQUESTS_PER_SEC="1" ./gradlew gatlingRun-org.apache.openwhisk.ColdBlockingInvokeSimulation
continue-on-error: true
- name: Slack Notification
run: >
./tools/github/writeOnSlack.sh
"[$TEST_SUITE]" ${{ steps.tests.outcome }} on ${GH_BUILD}
$'\nbranch:' $GH_BRANCH
$'\nmessage:' "$(git log -1 --oneline | cat)"
$'\nCheck GitHub logs for results'
================================================
FILE: .github/workflows/README.md
================================================
# How to use those workflows
There are a few [GitHub secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets) to configure to fully leverage the build.
You can use and set the following secrets also in your fork.
## Ngrok Debugging
You can debug a GitHub Action build using [NGROK](https://ngrok.com/).
It is disabled for automated build triggered by push and pull_requests.
You can trigger a workflow run manually enabling ngrok debugging.
It will open an ssh connection to the VM and keep it up and running for one hour.
The connection URL is shown in the log for debugAction.sh
You can then connect to the build VM, and debug it.
You need to use a password of your choice to access it.
You can continue the build with `touch /tmp/continue`.
You can abort the build with `touch /tmp/abort`.
To enable this option you have to register to Ngrok, using the fee account and get the NGROK Token.
Then set the following secrets:
- `NGROK_TOKEN` to the ngrok token.
- `NGROK_PASSWORD` to a password of choice to access the build with the ssh command generated.
## Log Upload
The build uploads the logs to a S3 bucket allowing to inspect them with a browser.
You need to create the bucket with the following commands:
```
LOG_BUCKET=<name-of-your-bucket>
LOG_REGION=<the-region-you-use>
aws s3 mb s3://$LOG_BUCKET --region $LOG_REGION
aws s3 website s3://$LOG_BUCKET/ --index-document index.html
aws s3api put-bucket-acl --acl public-read --bucket $LOG_BUCKET
```
To enable upload to the created bucket you need to set the following secrets:
- `LOG_BUCKET`: name of your bucket in s3 (just the name, without `s3://`); create it before.
- `LOG_ACCESS_KEY_ID`: your aws access key.
- `LOG_SECRET_ACCESS_KEY`: your aws secret key.
- `LOG_REGION`: important: the region where your bucket is.
## Slack notification
If you want to get notified of what happens on slack, create an [Incoming Web Hook](https://api.slack.com/messaging/webhooks) and then set the following secret:
- `SLACK_WEBHOOK`: the incoming webhook URL provided by slack.
================================================
FILE: .gitignore
================================================
# Whisk
nginx.conf
whisk.properties
whisk.conf
default.props
/tests/src/test/resources/application.conf
.ant-targets-build.xml
/results/
/logs/
/config/custom-config.xml
results
*.retry
# Environments
/ansible/environments/*
!/ansible/environments/distributed
!/ansible/environments/docker-machine
!/ansible/environments/local
!/ansible/environments/mac
# Eclipse
bin/
**/.project
.settings/
.classpath
.cache-main
.cache-tests
# Linux
*~
*.swp
# Mac
.DS_Store
# Gradle
.gradle
build/
!/tools/build/
# Python
.ipynb_checkpoints/
*.pyc
# NodeJS
node_modules
# IntelliJ
.idea
*.class
*.iml
out/
# Ansible
ansible/environments/docker-machine/hosts
ansible/environments/local/hosts
ansible/db_local.ini*
ansible/tmp/*
ansible/roles/nginx/files/openwhisk-client*
ansible/roles/nginx/files/*.csr
ansible/roles/nginx/files/*.p12
ansible/roles/nginx/files/*cert.pem
ansible/roles/nginx/files/*p12
ansible/roles/kafka/files/*
ansible/roles/controller/files/*
ansible/roles/invoker/files/*
# .zip files must be explicited whitelisted
*.zip
tests/dat/actions/sleep.jar
tests/dat/actions/blackbox.zip
tests/dat/actions/python.zip
tests/dat/actions/zippedaction.zip
tests/dat/actions/zippedaction/node_modules
tests/dat/actions/python2_virtualenv.zip
tests/dat/actions/python_virtualenv/virtualenv
tests/dat/actions/.built
tests/dat/actions/unicode.tests/java-8.bin
tests/performance/gatling_tests/src/gatling/resources/data/javaAction.jar
tests/performance/gatling_tests/.built
# dev
intellij-run-config.groovy
# VSCode
.vscode/
# route management
core/routemgmt/createApi/apigw-utils.js
core/routemgmt/createApi/package-lock.json
core/routemgmt/createApi/utils.js
core/routemgmt/deleteApi/apigw-utils.js
core/routemgmt/deleteApi/package-lock.json
core/routemgmt/deleteApi/utils.js
core/routemgmt/getApi/apigw-utils.js
core/routemgmt/getApi/package-lock.json
core/routemgmt/getApi/utils.js
# vscode metals
.bloop/
.metals/
================================================
FILE: .pydevproject
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?eclipse-pydev version="1.0"?><pydev_project>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 3.6</pydev_property>
</pydev_project>
================================================
FILE: .scalafmt.conf
================================================
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
version = 1.5.1
style = intellij
danglingParentheses = false
maxColumn = 120
docstrings = JavaDoc
rewrite.rules = [SortImports]
project.git = true
================================================
FILE: CHANGELOG.md
================================================
<!--
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
-->
# OpenWhisk Core
## Apache 2.0.0
### Branch: [2.0.0](https://github.com/apache/openwhisk/tree/2.0.0)
### Changes
- Upgrade the docker version to 23.0.6 (https://github.com/apache/openwhisk/commit/8af209262c98e07b8cc3cb688d5d48f633f2d006, [@style95](https://github.com/style95))
- Enable the scheduler by default (https://github.com/apache/openwhisk/commit/4fac03aa8b2df4d8074f2af5b1139225e02890ea, [@style95](https://github.com/style95))
- Update the ngrok v3 (https://github.com/apache/openwhisk/commit/5529cc49d31f135dfdac4f2a2072ca46bfd754de, [@style95](https://github.com/style95))
- Update FPC invoker health reporting logic (https://github.com/apache/openwhisk/commit/aea3a8814d4e9ce6f704374d124146be1693f123, [@bdoyle0182](https://github.com/bdoyle0182))
- Change the required_status_checks to strict (https://github.com/apache/openwhisk/commit/e20ab1789ecea04da15dd34bddbc1143607e08cf, [@style95](https://github.com/style95))
- Bump the github_actions group with 1 update (https://github.com/apache/openwhisk/commit/29168859aaab83b821a18f12243f63793cbfe588, [@dependabot[bot]](https://github.com/apps/dependabot))
- Keep GitHub Actions up to date with GitHub's Dependabot (https://github.com/apache/openwhisk/commit/5c876f247982e2896c974f91114e1ce89b7b4c8e, [@cclauss](https://github.com/cclauss))
- Fix typo (https://github.com/apache/openwhisk/commit/3f11fcc361e060326f4341e9e79d14c185eb5771, [@cclauss](https://github.com/cclauss))
- Fix unit test cases (https://github.com/apache/openwhisk/commit/4b5c5d1c7aaebffd6e07db0c4b0d8e79b648bcbb, [@style95](https://github.com/style95))
- Update README.md (https://github.com/apache/openwhisk/commit/6d99fd1c4ae92741994457a367df3384c052ef2d, [@moritzraho](https://github.com/moritzraho))
- Add ability to scale Ephemeral storage along with memory, similar to CPU (https://github.com/apache/openwhisk/commit/b9f16dc68100e41f19a6a78f92c5e27dc5fab177, [@mcdan](https://github.com/mcdan))
- Fixed an issue with missed config keys while iterating through them on Scala 2.13.x (https://github.com/apache/openwhisk/commit/597d61d6eef974b25e5cdc6e1c284f9867429170, [@joni-jones](https://github.com/joni-jones))
- Bump lodash from 4.17.15 to 4.17.21 in /core/routemgmt/getApi (https://github.com/apache/openwhisk/commit/cdde5a79c663796da1af494296cc8afb20dfb9ac, [@dependabot[bot]](https://github.com/apps/dependabot))
- Use max-connection-pool as queue size (https://github.com/apache/openwhisk/commit/ae0c4e0c37a77de4c23ca95dee763b165ce20d18, [@style95](https://github.com/style95))
- fix: message skipping typo (https://github.com/apache/openwhisk/commit/a4f4b2da6f7fed4821775fb79a60b7a5e6f396b4, [@0o001](https://github.com/0o001))
- Memory leak in `akka.actor.LocalActorRef` (https://github.com/apache/openwhisk/commit/6f11d48b216a01b7c6fa3342d2b8b972109106f7, [@joni-jones](https://github.com/joni-jones))
- Add optional cpu limit to spawned action containers (https://github.com/apache/openwhisk/commit/0c27a650ab6073e131e5c74002465e93cf4d8621, [@quintenp01](https://github.com/quintenp01))
- Add ZOOKEEPER_HOSTS as an optional property (https://github.com/apache/openwhisk/commit/6375c96066ca0e24cb81996a877bdd7caecdb72b, [@style95](https://github.com/style95))
- Update the nodejs action kind (https://github.com/apache/openwhisk/commit/20f7d98fdfba275bc3e5c88be0b7cdec956df2aa, [@style95](https://github.com/style95))
- Maximize build spaces of all workflows by manually removing unnecessary resources (https://github.com/apache/openwhisk/commit/951ce58be7f82122734523b338053c49662a6dad, [@style95](https://github.com/style95))
- Compare invocation namespaces when handling a cycle and recovering a queue (https://github.com/apache/openwhisk/commit/9371d6290136b37a24bbb32a9ef50ff816e9211d, [@style95](https://github.com/style95))
- Refresh runtimes list: add new versions; remove old/deprecated versions (https://github.com/apache/openwhisk/commit/54564cbc76771658c14a84dd413856d8b078eeb8, [@dgrove-oss](https://github.com/dgrove-oss))
- Authenticate GitHub Actions builds to ge.apache.org (https://github.com/apache/openwhisk/commit/be3f6d63be9ff513f733f0b64bde7bca78e8c148, [@clayburn](https://github.com/clayburn))
- Remove `fail-fast` matrix strategy from GitHub Actions (https://github.com/apache/openwhisk/commit/f73ec7f006ff278c9ff88a241d58c5c799d16115, [@clayburn](https://github.com/clayburn))
- Finish setup on error (https://github.com/apache/openwhisk/commit/88156c3c382dff013dc9f636ac49f0a39886cbce, [@style95](https://github.com/style95))
- patch groovy 3.0.17 (https://github.com/apache/openwhisk/commit/6c47e6024d9de18c7151e4f04f56a195e98b0cd3, [@bdoyle0182](https://github.com/bdoyle0182))
- Capture build scans on ge.apache.org to benefit from deep build insights (https://github.com/apache/openwhisk/commit/37605b4da431d610660d97ae11e181f2aecff268, [@clayburn](https://github.com/clayburn))
- Apply scalaFmt (https://github.com/apache/openwhisk/commit/ba871e59f7b77f02689a13e4e24e438645d67a47, [@style95](https://github.com/style95))
- User Defined Action Instance Concurrency Limits (https://github.com/apache/openwhisk/commit/72bb2a1fc4783f29cb34d6ad1ffabf2b6676773b, [@bdoyle0182](https://github.com/bdoyle0182))
- use compatibility serializer for future message forma… (https://github.com/apache/openwhisk/commit/be8ac20372fe44ed226c758b71dce510a4227cc8, [@bdoyle0182](https://github.com/bdoyle0182))
- upgrade kafka client library to 2.8.2 (https://github.com/apache/openwhisk/commit/6bc559d41f74525e26c9bd03d01dc4a3e9b5c658, [@bdoyle0182](https://github.com/bdoyle0182))
- update scheduler not processing metric to counter (https://github.com/apache/openwhisk/commit/a22e706b0f93cf4d673a2aa5ab6110918ce149c0, [@bdoyle0182](https://github.com/bdoyle0182))
- add support for multi partition kafka topics (https://github.com/apache/openwhisk/commit/d84e4eefb764b36b63867967b1882d1226481f61, [@bdoyle0182](https://github.com/bdoyle0182))
- fix bug in average ring buffer and add negative protection to scheduling decision maker (https://github.com/apache/openwhisk/commit/de3e0a8fdf4bf6341ccc423727628d554e53edee, [@bdoyle0182](https://github.com/bdoyle0182))
- fix action not processing metric (https://github.com/apache/openwhisk/commit/4e2dea12c7b0cfe14dcb509685cc9097d6007e19, [@bdoyle0182](https://github.com/bdoyle0182))
- Send a queue removed message to the queue manager (https://github.com/apache/openwhisk/commit/cb3b64f84f64305cf680faaa14f2cd13bdb56589, [@style95](https://github.com/style95))
- fix memory queue stuck in removed state edge case (https://github.com/apache/openwhisk/commit/fedf0227803401f7ac6cf3a33d9e14fc6fac74e8, [@bdoyle0182](https://github.com/bdoyle0182))
- fix missed etcd unregister data case for an existing container in container proxy (https://github.com/apache/openwhisk/commit/7c94e9ba05ec9dbd59303672cc81b963d53351ba, [@bdoyle0182](https://github.com/bdoyle0182))
- Add Scheduler Queue Metric for Not Processing Any Activations (https://github.com/apache/openwhisk/commit/60ca6605bb081f99906cff1a21caf75d47e414fa, [@bdoyle0182](https://github.com/bdoyle0182))
- remove action version from scheduler metrics without kamon (https://github.com/apache/openwhisk/commit/96ff327dcce25bdb91b59fd2746d1e3a2979143e, [@bdoyle0182](https://github.com/bdoyle0182))
- add base dependency version to cve remediations for downstream runtime builds (https://github.com/apache/openwhisk/commit/949c513de55c06e8e244a05c57f5d2419eb00466, [@bdoyle0182](https://github.com/bdoyle0182))
- attempt to fix downstream runtime builds (https://github.com/apache/openwhisk/commit/6dd737d628a9e852c2ff2db55ac510d7661b8528, [@bdoyle0182](https://github.com/bdoyle0182))
- dependency updates for cve patches (https://github.com/apache/openwhisk/commit/65a0132e73b41528dcf5b2817a55a579f7900433, [@bdoyle0182](https://github.com/bdoyle0182))
- Bump Newtonsoft.Json (https://github.com/apache/openwhisk/commit/8054f3b4cb53babdbc89911060258f36363afbc0, [@dependabot[bot]](https://github.com/apps/dependabot))
- Docs golang broken markdown link (https://github.com/apache/openwhisk/commit/2358976a5d5f9f42c539a6436b35922c4f8898fa, [@jonasbn](https://github.com/jonasbn))
- update language runtimes to use newer versions (https://github.com/apache/openwhisk/commit/b7c203b8b70f1d5ec39e95287a6cf572fed33f1b, [@dgrove-oss](https://github.com/dgrove-oss))
- dependency updates for cve patches (https://github.com/apache/openwhisk/commit/f0e281e35f90930983fbbbd0da2da3f4b32b4d72, [@bdoyle0182](https://github.com/bdoyle0182))
- fix flaky ActivationClientProxy unit test (https://github.com/apache/openwhisk/commit/ed43b4d1ce0e6ae27c9a4b714be123be5a82fae9, [@bdoyle0182](https://github.com/bdoyle0182))
- rollback logback minor upgrade to latest patch (https://github.com/apache/openwhisk/commit/3ea756f2d9d42463212c192f6a008f7d24e05718, [@bdoyle0182](https://github.com/bdoyle0182))
- upgrade some dependencies for CVE Patches (https://github.com/apache/openwhisk/commit/084c2ad9dbaf1c86b469eb4730b9eb9e7bc6e095, [@bdoyle0182](https://github.com/bdoyle0182))
- make scheduler consider action concurrency >1 (https://github.com/apache/openwhisk/commit/415ae98fd9f1fd44f5ab2dccb8b5cbe2d20932bb, [@bdoyle0182](https://github.com/bdoyle0182))
- remove zookeeper config requirement (https://github.com/apache/openwhisk/commit/9d96c6ded0bcc46076a8be2800fc061d08eb3704, [@bdoyle0182](https://github.com/bdoyle0182))
- add GHA status badges; remove .travis.yml (https://github.com/apache/openwhisk/commit/096dba495dff5eddd95d98159739e155df628040, [@dgrove-oss](https://github.com/dgrove-oss))
- Fix the bug that match does not exhaustive (https://github.com/apache/openwhisk/commit/104c1e8e6cca2194da9a46a721626f4584741f23, [@style95](https://github.com/style95))
- Provide action limit configuration for each namespace (https://github.com/apache/openwhisk/commit/61ca4c8fe39f2b47b84c20a8114f261cd12820d7, [@upgle](https://github.com/upgle))
- Fix typo (https://github.com/apache/openwhisk/commit/4bc4c3b0e1294479dc20fa19389917d0f630a6a6, [@style95](https://github.com/style95))
- schedule actions to run at least 3 times a week (https://github.com/apache/openwhisk/commit/40944e6eef40c39b7e547cd9b7251b72f53fc1ed, [@dgrove-oss](https://github.com/dgrove-oss))
- fixes to use different secrets, show the results in the log (https://github.com/apache/openwhisk/commit/21c9a6363fe14e581ec67da281e1762db02ae557, [@msciabarra](https://github.com/msciabarra))
- GitHub action (https://github.com/apache/openwhisk/commit/f717619c8c25b54294cfa195732732e85c5d9431, [@msciabarra](https://github.com/msciabarra))
- drop travis from required checks to merge a PR (https://github.com/apache/openwhisk/commit/a7ed8b5ef080036b3e7dc18b966f096effd20494, [@dgrove-oss](https://github.com/dgrove-oss))
- Fix missing attachment stuck actions (https://github.com/apache/openwhisk/commit/daeadbf11fb46d0f4471fef8e56c1741e1249ab8, [@bdoyle0182](https://github.com/bdoyle0182))
- Add cors headers to components' server admin routes (https://github.com/apache/openwhisk/commit/85788875d597f4225909479cefbdf403c0d19ff2, [@bdoyle0182](https://github.com/bdoyle0182))
- Handle container cleanup from ActivationClient shutdown gracefully (https://github.com/apache/openwhisk/commit/44791f361d1492e985e9f1bcf3616253c77ed39d, [@style95](https://github.com/style95))
- Add scheduler overprovision for new actions before namespace throttling (https://github.com/apache/openwhisk/commit/077fb6d24f0132e7755ea47d7ee9b35f0966daf3, [@bdoyle0182](https://github.com/bdoyle0182))
- Make the test stable (https://github.com/apache/openwhisk/commit/0f4b0c220e050d408a650a8c5a90fbc54b52768a, [@style95](https://github.com/style95))
- optimize scheduling decision when there are stale activations (https://github.com/apache/openwhisk/commit/07c920249d0a0db5fe3bc603add73e410f40dddd, [@bdoyle0182](https://github.com/bdoyle0182))
- Add zero downtime deployment (https://github.com/apache/openwhisk/commit/651a2e95726f69fb8403c49ce909371521e8986f, [@style95](https://github.com/style95))
- Openwhisk action invocation flow diagram (https://github.com/apache/openwhisk/commit/74ca61c8512f43981b6eaca158edc3749ba2513f, [@Rajiv2605](https://github.com/Rajiv2605))
- Prevent cycle in the QueueManager (https://github.com/apache/openwhisk/commit/ef725a653ab112391f79c274d8e3dcfb915d59a3, [@style95](https://github.com/style95))
- Delete ETCD data first when disabling the invoker (https://github.com/apache/openwhisk/commit/145971b8faedad71a7e07fd398528ff563bbaae5, [@style95](https://github.com/style95))
- Clean Up Etcd Worker Actor (https://github.com/apache/openwhisk/commit/236ca5e4b894e4cc626f685c1d0eba5c3e6077ec, [@bdoyle0182](https://github.com/bdoyle0182))
- Fix minor ansible typos (https://github.com/apache/openwhisk/commit/8d60463db6ee59b77d1f9034755cb1946ed49fdb, [@hunhoffe](https://github.com/hunhoffe))
- change default warmed container keeping count (https://github.com/apache/openwhisk/commit/ff7d578bc6ffe0bb392ca9d741f585ac68a025db, [@bdoyle0182](https://github.com/bdoyle0182))
- Add Function Cache Refresh If Invoker Is Running Container For Function (https://github.com/apache/openwhisk/commit/6effb15ce6f415f8424c0094d67e64078f5c64c1, [@bdoyle0182](https://github.com/bdoyle0182))
- Fix Orphaned Container Edge Case In Paused State of Container Proxy (https://github.com/apache/openwhisk/commit/625c5f2ef64c9cc50da568998199ff623ad01f41, [@bdoyle0182](https://github.com/bdoyle0182))
- add container and creation ids to logs when queue attempts to stop for better debugging (https://github.com/apache/openwhisk/commit/a1639f0e4d7270c9a230190ac26acb61413b6bbb, [@bdoyle0182](https://github.com/bdoyle0182))
- Add note on concurrency limit config (https://github.com/apache/openwhisk/commit/c209a65322e89bdcd85c028192b905a5f2670211, [@davidfrickert](https://github.com/davidfrickert))
- Prepare to integrate new scheduler into apache/openwhisk-deploy-kube (https://github.com/apache/openwhisk/commit/347ff1f3b737d00194ddeda2fb6fefe79c36ec48, [@hunhoffe](https://github.com/hunhoffe))
- add config to fail async scheduler throttles as whisk errors (https://github.com/apache/openwhisk/commit/20a7b1c6ad3c57b583484c1fc12a069da42ad847, [@bdoyle0182](https://github.com/bdoyle0182))
- add error handling to container manager when invoker query fails (https://github.com/apache/openwhisk/commit/138f3d9022610b9d00078db5226e3fd4ec67d64a, [@bdoyle0182](https://github.com/bdoyle0182))
- Revert etcd client version (https://github.com/apache/openwhisk/commit/740c907b5e99b3210a46e936370d703911201862, [@style95](https://github.com/style95))
- Skip scheduling for empty cold creation. (https://github.com/apache/openwhisk/commit/9be427c72680035e852496440a5a8ce4113424c4, [@style95](https://github.com/style95))
- use openwhisk-client-js 3.21.7 (https://github.com/apache/openwhisk/commit/3354314ac8c6b9c6ab2d9f584c8916afc64360a4, [@dgrove-oss](https://github.com/dgrove-oss))
- add config to mask docker run args when logging (https://github.com/apache/openwhisk/commit/6605b5f9187adc84a298a290bfdee914d6c2fe4c, [@bdoyle0182](https://github.com/bdoyle0182))
- bump java etcd client to 0.0.21 (https://github.com/apache/openwhisk/commit/40077664ab3011e7a333b0197fa9a285502a1d81, [@bdoyle0182](https://github.com/bdoyle0182))
- Exclude warmed containers in disabled invokers. (https://github.com/apache/openwhisk/commit/e36b2d8c0cd3ef362ea0f6220d9af0371acd10c2, [@style95](https://github.com/style95))
- Add document for support array result (https://github.com/apache/openwhisk/commit/7de8bad25fbad49b2613c70b12a3abe9b24c857e, [@ningyougang](https://github.com/ningyougang))
- Add fake clock for test code (https://github.com/apache/openwhisk/commit/9005a083cb58735031f36262bb93f580044cad9e, [@upgle](https://github.com/upgle))
- Support backward compatibility for runtime's return type (https://github.com/apache/openwhisk/commit/1a0f1ce74446a30cdb8d06c7526d7405bfe55909, [@upgle](https://github.com/upgle))
- Go to the NamespaceThrottled state rather than Flushing state. (https://github.com/apache/openwhisk/commit/8fd21565a293eb548e6aceddb925cec49bbb6b03, [@style95](https://github.com/style95))
- Adjust the default configurations. (https://github.com/apache/openwhisk/commit/cf127f9cd3fab2102a4797faa6ab044a39d82bd2, [@style95](https://github.com/style95))
- Revert cycle handling. (https://github.com/apache/openwhisk/commit/2683ed1e6f35da5d7f7c586d8f1a14ba11c7d408, [@style95](https://github.com/style95))
- Support array result for common action and sequence action (https://github.com/apache/openwhisk/commit/62b8a50d447c066a4e579ed1d8c85eef02e37e41, [@ningyougang](https://github.com/ningyougang))
- chore: remove duplicate entry from .gitignore (https://github.com/apache/openwhisk/commit/d92485ce7743931cae48ef8fa89da3c10e54fcf4, [@jbampton](https://github.com/jbampton))
- poem for max action container concurrency (https://github.com/apache/openwhisk/commit/a3287924e87cc4cba3cdf878cefbbfbe9c408b50, [@bdoyle0182](https://github.com/bdoyle0182))
- Add missing configurations. (https://github.com/apache/openwhisk/commit/3e5b8b2949bfca87cad417badb2e2a00124d4de8, [@style95](https://github.com/style95))
- This is to make sure activations for a shared action run in an invocation namespace. (https://github.com/apache/openwhisk/commit/44379b87821e8dcec360fc9b465c3977d07b0807, [@style95](https://github.com/style95))
- Bumping to gradle 6 (https://github.com/apache/openwhisk/commit/f29981a2f9961765067340f5ce15a6a616ef9b31, [@upgle](https://github.com/upgle))
- [Proposal] POEM: provide array result for all runtime images (https://github.com/apache/openwhisk/commit/3014b870005a11902fdc70cbe88b10cab8ef67f8, [@ningyougang](https://github.com/ningyougang))
- Do not put data to ETCD when no date is changed. (https://github.com/apache/openwhisk/commit/c507069d1b3983bff20c3d9e306cd3694e6c6a3c, [@style95](https://github.com/style95))
- Adjust error for container creation. (https://github.com/apache/openwhisk/commit/491256530c980fda6457816049db0ec9f2007330, [@style95](https://github.com/style95))
- Change the value of pause-grace for new scheduler (https://github.com/apache/openwhisk/commit/f915acc659b71029f0c74fd848e366d923dbb2d4, [@JesseStutler](https://github.com/JesseStutler))
- Make ElasticSearch ports configurable. (https://github.com/apache/openwhisk/commit/8d0a9b2bb7bdbf01ef5f75c70d64cd2653a793cb, [@style95](https://github.com/style95))
- Update wrong error message "action does not exist". (https://github.com/apache/openwhisk/commit/9bc5e043444d115cec0d79ac47d7002baa522924, [@style95](https://github.com/style95))
- Dedicated Invokers (https://github.com/apache/openwhisk/commit/8c140e0d5baec8e760832ca98d8bcc66664a0146, [@style95](https://github.com/style95))
- Add tags to invokers. (https://github.com/apache/openwhisk/commit/d55d8fe86332c9996ccbb421233f60da2c70192f, [@style95](https://github.com/style95))
- Support graceful shutdown. (https://github.com/apache/openwhisk/commit/a03507ceeb2c4648c875ed68273de1448ec0d074, [@style95](https://github.com/style95))
- Add a documentation for warmed containers configurations. (https://github.com/apache/openwhisk/commit/1fbfd6bcb3d65845a328382641c1db7182763ced, [@style95](https://github.com/style95))
- Retry on any errors. (https://github.com/apache/openwhisk/commit/4a69be20cda806680d181666c8126333b31c90ca, [@style95](https://github.com/style95))
- Increase the payload limit. (https://github.com/apache/openwhisk/commit/53b23524e7b8d6c44a2cf103cda1d577d8d2144a, [@style95](https://github.com/style95))
- Add retry to store activations. (https://github.com/apache/openwhisk/commit/814b7fabafa21d5580271149407f91af432953aa, [@style95](https://github.com/style95))
- Upgrade the Kubernetes client version. (https://github.com/apache/openwhisk/commit/1a8364dcb7e1b24cb79e463a9f54d82cefad832f, [@style95](https://github.com/style95))
- Forward header from a trigger to actions. (https://github.com/apache/openwhisk/commit/7c5a5d6964a62deb931445684bab0b0524a9ad64, [@style95](https://github.com/style95))
- Fail all activations when it fails to pull a blackbox image. (https://github.com/apache/openwhisk/commit/f03cbcc4ab6ff2d041b5e83b243b48afa4c81381, [@style95](https://github.com/style95))
- Fix scheduler inProgressDuration parsing (https://github.com/apache/openwhisk/commit/4016aa803ee84b849db8a907cbd17a41cc374e7a, [@hunhoffe](https://github.com/hunhoffe))
- [Scheduler Enhancement] Increase the retention timeout for the blackbox action. (https://github.com/apache/openwhisk/commit/8d31e96e1a321987f9f5c3b7289ba83bf4eebff6, [@style95](https://github.com/style95))
- Make proxy timeouts configurable. (https://github.com/apache/openwhisk/commit/a7fecfb6939b1b32fec84ccac7291a838b2d61c7, [@style95](https://github.com/style95))
- Add test cases to make sure an invoker properly boots up in terms of ETCD keys. (https://github.com/apache/openwhisk/commit/2363295909de5c872e61a6c9a721d80653d1f2df, [@style95](https://github.com/style95))
- Consider binding action when creating or recovering queue. (https://github.com/apache/openwhisk/commit/c66486e7038e1d334b9b50aff31ff9d00d50b566, [@style95](https://github.com/style95))
- add support for etcd client authentication (https://github.com/apache/openwhisk/commit/639c4a914bd0b7f31509349c3c8b3566e027dab3, [@bdoyle0182](https://github.com/bdoyle0182))
- [Scheduler Enhancement] Remove deleted containers. (https://github.com/apache/openwhisk/commit/88435790cbed79db3f887c1918599cb9dead2590, [@style95](https://github.com/style95))
- Update npm version for ow-utils docker (https://github.com/apache/openwhisk/commit/c5970a657a3070e9964cb14715b9df31819d3b75, [@hugy718](https://github.com/hugy718))
- rework scheduler wait time metric (https://github.com/apache/openwhisk/commit/052d4d21889b38808f96958f553eeaa73947a553, [@bdoyle0182](https://github.com/bdoyle0182))
- Remove containers gradually when disable invoker (https://github.com/apache/openwhisk/commit/80de54e1fce7c900d694ec4427ec8730a0432697, [@jiangpengcheng](https://github.com/jiangpengcheng))
- fix scheduling config loading wrong config (https://github.com/apache/openwhisk/commit/21b03a57019d9cc3ba80917534edbd4bb19b607a, [@bdoyle0182](https://github.com/bdoyle0182))
- Prevent cycle sending (https://github.com/apache/openwhisk/commit/a75950a543b83ffbd7753f128855556198ee155d, [@jiangpengcheng](https://github.com/jiangpengcheng))
- Introduce scheduling configurations. (https://github.com/apache/openwhisk/commit/4ef94d727cdc90a772946330de3837649936a5db, [@style95](https://github.com/style95))
- Use pureconfig for invoker/scheduler's basic http auth (https://github.com/apache/openwhisk/commit/0c4aab1bd57bc4b8eb1e0e968b714e6447aeabea, [@jiangpengcheng](https://github.com/jiangpengcheng))
- refresh runtime versions for nodejs and golang (https://github.com/apache/openwhisk/commit/1e09049aaf32e595d13a67ead2cec583a3b1809d, [@dgrove-oss](https://github.com/dgrove-oss))
- Fix missing keystroke in requirements (https://github.com/apache/openwhisk/commit/f71c41c04e240fdfb47e9534f367ad6c7b2c434c, [@Blucknote](https://github.com/Blucknote))
- Add containerPool container histogram metric (https://github.com/apache/openwhisk/commit/1a6c99df42dd190d897b6806c008d5b2cdd5a4e5, [@ningyougang](https://github.com/ningyougang))
- Add missing configuration for scheduler (https://github.com/apache/openwhisk/commit/6731f1c996b8ea5e913d8bc81ceb7de87e4e8c02, [@upgle](https://github.com/upgle))
- fix perMin throttle config for fpc (https://github.com/apache/openwhisk/commit/4b595e00960200516023592e0135dac7550c3d7e, [@bdoyle0182](https://github.com/bdoyle0182))
- update action container metrics subactions to action instead of namespace (https://github.com/apache/openwhisk/commit/57be429ed28d93167472ac3b1bc0f670498cddfb, [@bdoyle0182](https://github.com/bdoyle0182))
- Add some testcases and missing ASF headers for new scheduler (https://github.com/apache/openwhisk/commit/c90e8ccbc6e49bebc4bf9d641bd8aee0085cc805, [@jiangpengcheng](https://github.com/jiangpengcheng))
- [Proposal] POEM: Providing action limits for each namespace (https://github.com/apache/openwhisk/commit/edc484b373f0c18a6555f50cbcff095cda09d3ca, [@upgle](https://github.com/upgle))
- add per min throttling support to fpc (https://github.com/apache/openwhisk/commit/0912c73a4bf00caa448d6aea726fbf255b7a187e, [@bdoyle0182](https://github.com/bdoyle0182))
- add fpc load balancer metrics (https://github.com/apache/openwhisk/commit/426aef484d31f863c3345e321f7f39ee4c23b88a, [@bdoyle0182](https://github.com/bdoyle0182))
- Take revision into consideration when choose warm container (https://github.com/apache/openwhisk/commit/7fdc246137162e937e54435e1f27d8d95e8e89d5, [@jiangpengcheng](https://github.com/jiangpengcheng))
- Fix wrong returned type when reschedule activation msg (https://github.com/apache/openwhisk/commit/23be3351d3db6d62d14ed69b85afdc71e7ffb4a4, [@jiangpengcheng](https://github.com/jiangpengcheng))
- Use a template for swagger code generating (https://github.com/apache/openwhisk/commit/d88a7d2be8399bea7e55910ed225777d90d8fb9f, [@jiangpengcheng](https://github.com/jiangpengcheng))
- Use testcontainers to test MongoDB stuff (https://github.com/apache/openwhisk/commit/674704eab8aa56d86b13b452e627511f22c3ca06, [@jiangpengcheng](https://github.com/jiangpengcheng))
- Replace kafka.RecordMetadata with a common ResultMetadata (https://github.com/apache/openwhisk/commit/cbdcfe574984b6509335da64da86f80d592aaa1e, [@jiangpengcheng](https://github.com/jiangpengcheng))
- send old version memoryQueue's stale activation to queueManager when update action (https://github.com/apache/openwhisk/commit/37f1f9918906ee938ec30e4442f1b9910d5c5c5d, [@ningyougang](https://github.com/ningyougang))
- Update Ansible scheduler instructions (https://github.com/apache/openwhisk/commit/33cfb36a326f4cdc621cdd33d4b4265e3cb090cb, [@hunhoffe](https://github.com/hunhoffe))
- Fix path error (https://github.com/apache/openwhisk/commit/9a39c10cbf820265b99c3135193ee5709248bbfa, [@hunhoffe](https://github.com/hunhoffe))
- Adjust the keeping duration. (https://github.com/apache/openwhisk/commit/3e3414ced7fb6e6d85b95f0f9cdd43a0a68da4fd, [@style95](https://github.com/style95))
- Fix new scheduler error (https://github.com/apache/openwhisk/commit/b0a88b5b523b1867038b0d2615fc2cf7b4951972, [@jiangpengcheng](https://github.com/jiangpengcheng))
- Update ansible with new scheduler instructions (https://github.com/apache/openwhisk/commit/829e734c759e8cf188e30c22d7f96f69ebfb1a97, [@hunhoffe](https://github.com/hunhoffe))
- add enable/disable invoker support to old scheduler (https://github.com/apache/openwhisk/commit/3b6d07a18cec3e92ceb5c54558464d1bfdbc0f82, [@bdoyle0182](https://github.com/bdoyle0182))
- [New Scheduler] Run scheduler (https://github.com/apache/openwhisk/commit/5332e6de625c4df9b717e067a5369ee446e2fda1, [@style95](https://github.com/style95))
- add system config options for success / failure levels to write blocking / non-blocking activations to db (https://github.com/apache/openwhisk/commit/8be150577a12c54867d99f0dd82a74e9647863c0, [@bdoyle0182](https://github.com/bdoyle0182))
- [New Scheduler] Implement FPCInvokerReactive (https://github.com/apache/openwhisk/commit/e172168fc5a55ba0c8443adbc91629291a1ca321, [@ningyougang](https://github.com/ningyougang))
- Update main method of the scheduler. (https://github.com/apache/openwhisk/commit/d9394f4e04f68359985df5654f7e0f11686b6741, [@style95](https://github.com/style95))
- Add FPC Load Balancer (https://github.com/apache/openwhisk/commit/b1ccbec1fd0b88d5277c8ca601f2b257b26c19da, [@style95](https://github.com/style95))
- Fix links in Issue and PR Template (https://github.com/apache/openwhisk/commit/96330437d63b5291a020d8a2ba1b401f2cc84ab5, [@klcodanr](https://github.com/klcodanr))
- docker creds in build-specific directory (https://github.com/apache/openwhisk/commit/af11418df942e8d2cdc4c4ce933645fa723e9e45, [@dgrove-oss](https://github.com/dgrove-oss))
- Update README.md (https://github.com/apache/openwhisk/commit/285f9d4afcc429d63baa1943a69bb64097b059dd, [@dgrove-oss](https://github.com/dgrove-oss))
- Reflect decision to drop support for runtime-ballerina (https://github.com/apache/openwhisk/commit/ac332ea7ce756fdb95284bc48b2b335c5ee92684, [@dgrove-oss](https://github.com/dgrove-oss))
- finish/failed uncompleted transaction (https://github.com/apache/openwhisk/commit/3753daf0e0c3d237c05ff4668e2f4c5f45d7dcb9, [@jiangpengcheng](https://github.com/jiangpengcheng))
- remove swift:4.2 (https://github.com/apache/openwhisk/commit/eacbe1a3d63539bcc9aa3a6c57cdcabc302b92cd, [@dgrove-oss](https://github.com/dgrove-oss))
- [New Scheduler] Add memory queue for the new scheduler (https://github.com/apache/openwhisk/commit/cf36299d5ee45aa014ec84326d3a69f5b2df446c, [@style95](https://github.com/style95))
- Accept non-standard status codes. (https://github.com/apache/openwhisk/commit/7e1caaa42fb485cefea799ed6835adada1461d7f, [@rabbah](https://github.com/rabbah))
- upgrade to nginx 1.21.1 (https://github.com/apache/openwhisk/commit/cbe53b199a36c5c2a288e249aa84690e2066abdc, [@dgrove-oss](https://github.com/dgrove-oss))
- minor version bump of azure-storage-blob to fix builds (https://github.com/apache/openwhisk/commit/3e6138d088fbd502a69c31314ad7c0089c5f5283, [@dgrove-oss](https://github.com/dgrove-oss))
- update name for Python 3 image (https://github.com/apache/openwhisk/commit/209dc44cc8d8fd46e5ac56a869ca7dd58ad9f616, [@dgrove-oss](https://github.com/dgrove-oss))
- remove previously deprecated nodejs:10 and go:1.11 kinds (https://github.com/apache/openwhisk/commit/91e3f28cd010d5410a78e6514d630cb1f6b63cee, [@dgrove-oss](https://github.com/dgrove-oss))
- cleanup: remove obsolete mesos configuration (https://github.com/apache/openwhisk/commit/a99b0a8acaeb03a7e65965549bbdd12a9c13e78f, [@dgrove-oss](https://github.com/dgrove-oss))
- don't log a uuid of the username portion of basic auth info (https://github.com/apache/openwhisk/commit/4e25ada99c00875564c4e5aa51677b20d67afd66, [@dgrove-oss](https://github.com/dgrove-oss))
- modules.md: travis-ci.org -> travis-ci.com migration (https://github.com/apache/openwhisk/commit/bf62f740057f5210ff05582d119fd692fb6c6341, [@dgrove-oss](https://github.com/dgrove-oss))
- Disable StandaloneKCFTests (https://github.com/apache/openwhisk/commit/67a80c3378e53d9bf967e3f0c3dcf10d55aa6ee7, [@dgrove-oss](https://github.com/dgrove-oss))
- [New Scheduler] Manage memory queues in scheduler (https://github.com/apache/openwhisk/commit/0cdfdb3ecb20fbff11e401c34143fe0e8ff61f83, [@KeonHee](https://github.com/KeonHee))
- Remove Mesos container factory. (https://github.com/apache/openwhisk/commit/dc7c66678308f72d219464ca723a7a997c66568a, [@rabbah](https://github.com/rabbah))
- Fix ansible README (https://github.com/apache/openwhisk/commit/11a1f33c4e5f2bc7c97584fc889c8dcaaf5e1a43, [@ryutoyasugi](https://github.com/ryutoyasugi))
- Docs update for local dev (https://github.com/apache/openwhisk/commit/afe39860eb456b8d32bdd68ed724967aefca72c5, [@ddragosd](https://github.com/ddragosd))
- update to openwhisk-client-js 3.21.4 (https://github.com/apache/openwhisk/commit/58b218340b1070e153ba6ed8cf7a51c2a1a9b1de, [@dgrove-oss](https://github.com/dgrove-oss))
- update modules.md to move deploy-mesos and external-resources to inactive (https://github.com/apache/openwhisk/commit/184a926a93c340688558eb86c9c49d4edb1dbfdf, [@dgrove-oss](https://github.com/dgrove-oss))
- Fix deprecated error (https://github.com/apache/openwhisk/commit/20417de0e73b8c15f162c20efb66d2df027dcfa4, [@jiangpengcheng](https://github.com/jiangpengcheng))
- Implement MongoDBArtifactStore (https://github.com/apache/openwhisk/commit/927962692e45fc7276ccb7902fd3a111daa54885, [@jiangpengcheng](https://github.com/jiangpengcheng))
- Fix build error (https://github.com/apache/openwhisk/commit/e65f899ca5ce95d1aadd8f1b244a2cb80bbd35f4, [@ningyougang](https://github.com/ningyougang))
- Implement ActivationClientProxy (https://github.com/apache/openwhisk/commit/99fb2c59e264d820d6b95a6319b7882f19aead4d, [@ningyougang](https://github.com/ningyougang))
- [New Scheduler]Add CreationJobManager (https://github.com/apache/openwhisk/commit/71585f130df31b74733ef6c4652a6779aaa679ab, [@jiangpengcheng](https://github.com/jiangpengcheng))
- #5060: Upgrade to Akka 2.6.12 (https://github.com/apache/openwhisk/commit/7791e4b97c0918205bc957f59f859af5ad51edcd, [@vrann](https://github.com/vrann))
- Update the notice year (https://github.com/apache/openwhisk/commit/ecb2a980659f28d0adbd9ef837afaf4cb2b695bf, [@style95](https://github.com/style95))
- [New Scheduler] Implement FunctionPullingContainerProxy (https://github.com/apache/openwhisk/commit/0b2d2ab0103b92b57bda64a37277788fa89171f0, [@ningyougang](https://github.com/ningyougang))
- #5120: Unit Tests failing due to testcontainers (https://github.com/apache/openwhisk/commit/4ec5d966e5b80babdce35effe0ca13729fa056a8, [@vrann](https://github.com/vrann))
- Document for prewarmed container (https://github.com/apache/openwhisk/commit/661ddc5e3657fe9b9be21f18e5ef9bafe7ba7aec, [@ningyougang](https://github.com/ningyougang))
- [New Scheduler] Add container message consumer (https://github.com/apache/openwhisk/commit/b818c3b3e8bd3fa9ac7742d1b8c051ec09b76ae2, [@upgle](https://github.com/upgle))
- [New Scheduler] Manage container creation (https://github.com/apache/openwhisk/commit/f1829e1160d0aca51fc3ff93a77621c488b148ad, [@KeonHee](https://github.com/KeonHee))
- refresh module list (https://github.com/apache/openwhisk/commit/9c445f372f4e504acdd97fa20d046692fe61294d, [@dgrove-oss](https://github.com/dgrove-oss))
- increase default totalWait when getting an activation (https://github.com/apache/openwhisk/commit/1a0bf9fe027665b839d11f81b9ee7afe11a67ad3, [@dgrove-oss](https://github.com/dgrove-oss))
- prefetch openwhisk/example to avoid timeout during test execution (https://github.com/apache/openwhisk/commit/bb7192e90a046c5aaad9785fdd4ec6591ab78909, [@dgrove-oss](https://github.com/dgrove-oss))
- deprecate nodejs:10 kind (https://github.com/apache/openwhisk/commit/64cd96438374a5ad0e71582aeaae26490f8cdd22, [@dgrove-oss](https://github.com/dgrove-oss))
- [New Scheduler] Implement FunctionPullingContainerPool (https://github.com/apache/openwhisk/commit/3802374d58d87fc6a95477929fc67269d6dcfe2c, [@ningyougang](https://github.com/ningyougang))
- Add prefix for topics (https://github.com/apache/openwhisk/commit/aa7e6e2af196ac017ae4b9ea36656bec868a9931, [@ningyougang](https://github.com/ningyougang))
- [New Scheduler]Implement PFCInvokerServer (https://github.com/apache/openwhisk/commit/e036fc9823b8e015a88e1a44d3f282698ae62fe7, [@ningyougang](https://github.com/ningyougang))
- attempt to hack around docker rate limiting during tests (https://github.com/apache/openwhisk/commit/87c8a98869399fb0842eb81638ed0e04d12c3e6b, [@dgrove-oss](https://github.com/dgrove-oss))
- change default nodejs kind from nodejs:10 to nodejs:14 (https://github.com/apache/openwhisk/commit/8bbcd517aac827d073b40b6c55a1e1645272ad68, [@dgrove-oss](https://github.com/dgrove-oss))
- Make kafka version configurable (https://github.com/apache/openwhisk/commit/df1970b92d8422af29676d81f0d0e59a96bb55a3, [@ningyougang](https://github.com/ningyougang))
- update default python3 image name (https://github.com/apache/openwhisk/commit/f7ec9e30d2de3f0c3252e32b300d4aa7412b15bf, [@dgrove-oss](https://github.com/dgrove-oss))
- Updated Kamon bundle dependencies to 2.1.12 version (https://github.com/apache/openwhisk/commit/a201e02bfd0949f40fd12cf0b8c94b9c17956def, [@joni-jones](https://github.com/joni-jones))
- [New Scheduler] Add ActivationService (https://github.com/apache/openwhisk/commit/cd6fded8a6836756cbfbe4159064c85683b64cd7, [@upgle](https://github.com/upgle))
- Quote ansible default value. (https://github.com/apache/openwhisk/commit/6e5850f52dd965e6fafaccb39d28c37854571463, [@rabbah](https://github.com/rabbah))
- Fixed link for Ansible (https://github.com/apache/openwhisk/commit/d741c8767dac386a4cf9efd64a37591e554b02f5, [@ishaanthakur](https://github.com/ishaanthakur))
- Implement InvokerHealthyManager (https://github.com/apache/openwhisk/commit/59b67fe96f44e573f3348afed966a1cdaf80ddf2, [@ningyougang](https://github.com/ningyougang))
- [New Scheduler] Add DataManagementService (https://github.com/apache/openwhisk/commit/ecb15098caded058ddb6976c630f5b6dcd656177, [@style95](https://github.com/style95))
- fix: update Homebrew commands (https://github.com/apache/openwhisk/commit/625fc5b7593360bc01e74147c02ce5f1461b5cd3, [@jbampton](https://github.com/jbampton))
- Change up travis URL. (https://github.com/apache/openwhisk/commit/659b76207e99b842874a83b2abf1bd18fc208715, [@rabbah](https://github.com/rabbah))
- configure more github properties via asf.yaml (https://github.com/apache/openwhisk/commit/2ce44b394d01627f93c1d6efcbfeec77340bcd72, [@dgrove-oss](https://github.com/dgrove-oss))
- fix: Python 3 urlencode (https://github.com/apache/openwhisk/commit/aa023d839f509e0557e7e1394830dd4377221bbc, [@jbampton](https://github.com/jbampton))
- [New Scheduler] Add container counter (https://github.com/apache/openwhisk/commit/f9e469e50aac5a345a010e2bf1f71596f1b101fc, [@jiangpengcheng](https://github.com/jiangpengcheng))
- [New Scheduler] Implement KeepAliveService (https://github.com/apache/openwhisk/commit/e05aa44b0cab519c82cf84a8171671a21d779562, [@KeonHee](https://github.com/KeonHee))
- chore: fix spelling (https://github.com/apache/openwhisk/commit/cc9bc49b75b5bed0e906cbf68d3c17ce84958a4b, [@jbampton](https://github.com/jbampton))
- Make cache expiration time configurable (https://github.com/apache/openwhisk/commit/00642f737708cdbb82bd88cb74c4bdb109f4b6b0, [@fe-lix-](https://github.com/fe-lix-))
- Add php:8.0 kind (https://github.com/apache/openwhisk/commit/d8cf17247bbcd8c1250873254d0c213fa28116ce, [@akrabat](https://github.com/akrabat))
- [New Scheduler] Add a centralized watcher for etcd data (https://github.com/apache/openwhisk/commit/ed58b233d2848cad2d452a4d71b704764fb001b6, [@jiangpengcheng](https://github.com/jiangpengcheng))
- [New Scheduler] CI for testing related new scheduler (https://github.com/apache/openwhisk/commit/4a13303fae4d9750da6662bb39b3ec92d6ccf56c, [@KeonHee](https://github.com/KeonHee))
- update unicode test dat files for runtime language levels (https://github.com/apache/openwhisk/commit/4d88ca782795b995591b4f3c0e44d61b76005232, [@dgrove-oss](https://github.com/dgrove-oss))
- remove deprecated python:2 kind (https://github.com/apache/openwhisk/commit/3c80842d09409d0c16b8fe3e732fd9de4980ab42, [@dgrove-oss](https://github.com/dgrove-oss))
- [New Scheduler] Etcd installation & Implements EtcdClient (https://github.com/apache/openwhisk/commit/5eda22171a238e933121b3918c5940e37fb009c5, [@KeonHee](https://github.com/KeonHee))
- Implement FCPSchedulerServer (https://github.com/apache/openwhisk/commit/1753946ac16b91b2d2a3fc55ab215b14e71c2b39, [@ningyougang](https://github.com/ningyougang))
- format: format the invoker's Dockerfile (https://github.com/apache/openwhisk/commit/faae555e583fb8a1b83e2b30840bf0610cbde00b, [@ZinuoCai](https://github.com/ZinuoCai))
- Don't create prewarm container when used memory reaches the limit (https://github.com/apache/openwhisk/commit/c6e32b12ba2269e2aa4612ccb549764b9ffc3766, [@ningyougang](https://github.com/ningyougang))
- [New Scheduler]Implement FPCEntitlementProvider (https://github.com/apache/openwhisk/commit/efdbd6049a849eb432e1c3fffc56bdb3fd344eaf, [@jiangpengcheng](https://github.com/jiangpengcheng))
- Fix wsk action create command in Rust example (https://github.com/apache/openwhisk/commit/212d809303c984d55839090299f98cf58aed7378, [@kingledion](https://github.com/kingledion))
- Fixes bug in invoker supervision on startup. (https://github.com/apache/openwhisk/commit/66868205b52ee65f28756038c44d8df5b96d2bcc, [@rabbah](https://github.com/rabbah))
- Python 3 fixes. (https://github.com/apache/openwhisk/commit/9d08977cc6bc831e5e9ea9a8d869d2f9c37d3efa, [@rabbah](https://github.com/rabbah))
- Use focal release for travis ci (https://github.com/apache/openwhisk/commit/5a847e3c71c27707776e6d9d135bbb78e8275e5a, [@jiangpengcheng](https://github.com/jiangpengcheng))
- [New Scheduler] Add duration checker (https://github.com/apache/openwhisk/commit/a6ad9e418e605894c5e96e5601c3e1b8ded4166a, [@style95](https://github.com/style95))
- take prewarmed container's memory as used memory (https://github.com/apache/openwhisk/commit/b0baa7b3c2aeff56fda0b826749e25df7067242a, [@ningyougang](https://github.com/ningyougang))
- Fix heisenbug (https://github.com/apache/openwhisk/commit/2d0c8a72711cf20da4aedb8ada68d62774c0eca9, [@style95](https://github.com/style95))
- Migrate the Travis configuration to travis-ci.com (https://github.com/apache/openwhisk/commit/a2025382fa4dbd8ce448b037b14a54d818a224ca, [@style95](https://github.com/style95))
- Copy jmx files instead of moving to support k8s (https://github.com/apache/openwhisk/commit/6254477d5f95ee8d693e16daf52e9b1938f87b59, [@upgle](https://github.com/upgle))
- Make runtime delete timeout configurable (https://github.com/apache/openwhisk/commit/4babe39fd2dbcc900ccedb5a5e9561d301361205, [@ningyougang](https://github.com/ningyougang))
- Reset / Overwrite invokerId for unique name in zookeeper manually (https://github.com/apache/openwhisk/commit/526f0119ef9e89336b76c483e32c8dad75bfcdb4, [@bdoyle0182](https://github.com/bdoyle0182))
- Hide version in fallback activation's path (https://github.com/apache/openwhisk/commit/12ca4e307e3b095a266352b7b12cf5ddaeb44577, [@upgle](https://github.com/upgle))
- [New Scheduler] Initial commit for the scheduler component (https://github.com/apache/openwhisk/commit/7b99af975eb77fa00ac71ecf3f0c27e74a3ca8b4, [@style95](https://github.com/style95))
- bump openwhisk-client-js to 3.21.3 (https://github.com/apache/openwhisk/commit/cb1645052dab33d18e5d0c059df6d1ef7ce3a6de, [@dgrove-oss](https://github.com/dgrove-oss))
- re-fix: fix: add new Windows docker.exe location (https://github.com/apache/openwhisk/commit/6feda87956c0043339f59063b341d5afdeff632a, [@shazron](https://github.com/shazron))
- add swift:5.3 kind and change default from swift:4.2 to swift:5.3 (https://github.com/apache/openwhisk/commit/f18e9d5647360eb8401fdb7f9c2605a27369c776, [@dgrove-oss](https://github.com/dgrove-oss))
## Apache 1.0.0
### Branch: [1.0.0](https://github.com/apache/openwhisk/tree/1.0.0)
### Notable changes
- Improvements to parameter encryption to support per-namespace keys. ([#4855](https://github.com/apache/openwhisk/pull/4855), [@rabbah](https://github.com/rabbah))
- Use latest code if action's revision is mismatched. ([#4954](https://github.com/apache/openwhisk/pull/4954), [@upgle](https://github.com/upgle))
- Do not delete previous annotation and support delete annotation via CLI. ([#4940](https://github.com/apache/openwhisk/pull/4940), [@ningyougang](https://github.com/ningyougang))
- Prewarm eviction variance. ([#4916](https://github.com/apache/openwhisk/pull/4916), [@tysonnorris](https://github.com/tysonnorris))
- Allow to get activation list by a binding package name. ([#4919](https://github.com/apache/openwhisk/pull/4919), [@upgle](https://github.com/upgle))
- Allow parent/child transaction ids. ([#4819](https://github.com/apache/openwhisk/pull/4819), [@upgle](https://github.com/upgle))
- Adjust prewarm container dynamically. ([#4871](https://github.com/apache/openwhisk/pull/4871), [@ningyougang](https://github.com/ningyougang))
- Add NodeJS 14 runtime. ([#4902](https://github.com/apache/openwhisk/pull/4902), [@rabbah](https://github.com/rabbah))
- Create AES128 and AES256 encryption for parameters. ([#4756](https://github.com/apache/openwhisk/pull/4756), [@mcdan](https://github.com/mcdan))
- Implement an ElasticSearchActivationStore. ([#4724](https://github.com/apache/openwhisk/pull/4724), [@jiangpengcheng](https://github.com/jiangpengcheng))
- Add Swift 5.1 runtime to runtimes.json. ([#4803](https://github.com/apache/openwhisk/pull/4803), [@dgrove-oss](https://github.com/dgrove-oss))
- Add volume mapping for Docker credentials. ([#4791](https://github.com/apache/openwhisk/pull/4791), [@style95](https://github.com/style95))
- add .NET Core 3.1 runtime kind. ([#4792](https://github.com/apache/openwhisk/pull/4792), [@dgrove-oss](https://github.com/dgrove-oss))
- Add PHP 7.4 runtime. ([#4767](https://github.com/apache/openwhisk/pull/4767), [@akrabat](https://github.com/akrabat))
- Serialize `updated` value of entity document in response. ([#4646](https://github.com/apache/openwhisk/pull/4646), [@upgle](https://github.com/upgle))
- Provide environment at init time. ([#4722](https://github.com/apache/openwhisk/pull/4722), [@upgle](https://github.com/upgle))
- OpenWhisk User Events. ([#4584](https://github.com/apache/openwhisk/pull/4584), [@selfxp](https://github.com/selfxp))
- Openwhisk in a standalone runnable jar. ([#4516](https://github.com/apache/openwhisk/pull/4516), [@chetanmeh](https://github.com/chetanmeh))
- Update Docker client version to 18.06.3. ([#4430](https://github.com/apache/openwhisk/pull/4430), [@style95](https://github.com/style95))
- Add `binding` annotation to record an action path not resolved. ([#4211](https://github.com/apache/openwhisk/pull/4211), [@upgle](https://github.com/upgle))
- Add SPI for invoker. ([#4453](https://github.com/apache/openwhisk/pull/4453), [@style95](https://github.com/style95))
- Enable CouchDB persist_path in a distributed environment as well. ([#4290](https://github.com/apache/openwhisk/pull/4290), [@style95](https://github.com/style95))
- Feature flag to turn on/off support for provide-api-key annotation. ([#4334](https://github.com/apache/openwhisk/pull/4334), [@chetanmeh](https://github.com/chetanmeh))
- Add annotations to inject the API key into the action context. ([#4284](https://github.com/apache/openwhisk/pull/4284), [@rabbah](https://github.com/rabbah))
- Update CosmosDB to 2.4.2. ([#4321](https://github.com/apache/openwhisk/pull/4321), [@chetanmeh](https://github.com/chetanmeh))
- Adding YARNContainerFactory. ([#4129](https://github.com/apache/openwhisk/pull/4129), [@SamHjelmfelt](https://github.com/SamHjelmfelt))
- Allow persisted CouchDB directory mount. ([#4250](https://github.com/apache/openwhisk/pull/4250), [@rabbah](https://github.com/rabbah))
- Bump ephemeral CouchDB to v2.3. ([#4202](https://github.com/apache/openwhisk/pull/4202), [@jonpspri](https://github.com/jonpspri))
- Add Ballerina 0.990.2 runtime. ([#4239](https://github.com/apache/openwhisk/pull/4239), [@rabbah](https://github.com/rabbah))
- Add Swift 4.2 runtime in default deployment. ([#4210](https://github.com/apache/openwhisk/pull/4210), [@csantanapr](https://github.com/csantanapr))
- Add PHP 7.3 runtime. ([#4182](https://github.com/apache/openwhisk/pull/4182), [@akrabat](https://github.com/akrabat))
- Add .NET Core 2.2 runtime. ([#4172](https://github.com/apache/openwhisk/pull/4172), [@shawnallen85](https://github.com/shawnallen85))
- Updated Intellij script to start controller and invoker locally. ([#4142](https://github.com/apache/openwhisk/pull/4142), [@ddragosd](https://github.com/ddragosd))
- Ensure ResultMessage is processed. ([#4135](https://github.com/apache/openwhisk/pull/4135), [@jiangpengcheng](https://github.com/jiangpengcheng))
- Protect Package Bindings from containing circular references. ([#4122](https://github.com/apache/openwhisk/pull/4122), [@asteed](https://github.com/asteed))
- Ensure, that Result-ack is sent before Completion-ack. ([#4115](https://github.com/apache/openwhisk/pull/4115), [@cbickel](https://github.com/cbickel))
- Add NodeJS 10 runtime to default set of runtimes for ansible/vagrant. ([#4124](https://github.com/apache/openwhisk/pull/4124), [@csantanapr](https://github.com/csantanapr))
- Enable concurrent activation processing. ([#2795](https://github.com/apache/openwhisk/pull/2795), [@tysonnorris](https://github.com/tysonnorris))
- Rename the package from whisk to org.apache.openwhisk. ([#4073](https://github.com/apache/openwhisk/pull/4073), [@houshengbo](https://github.com/houshengbo))
- Allow web actions from package bindings. ([#3880](https://github.com/apache/openwhisk/pull/3880), [@upgle](https://github.com/upgle))
- Switch to Scala 2.12.7 ([#4062](https://github.com/apache/openwhisk/pull/4062), [@chetanmeh](https://github.com/chetanmeh))
- Always return activation without logs on blocking invoke. ([#4100](https://github.com/apache/openwhisk/pull/4100), [@cbickel](https://github.com/cbickel))
- Changes to include Go runtime. ([#4093](https://github.com/apache/openwhisk/pull/4093), [@sciabarracom](https://github.com/sciabarracom))
- Send active-ack after log collection for non-blocking activations. ([#4041](https://github.com/apache/openwhisk/pull/4041), [@cbickel](https://github.com/cbickel))
- Increase max-content-length to 50 MB. ([#4059](https://github.com/apache/openwhisk/pull/4059), [@chetanmeh](https://github.com/chetanmeh))
- Using non-root user in controller. ([#3579](https://github.com/apache/openwhisk/pull/3579), [@Himavanth](https://github.com/Himavanth))
- Customize invoker user memory for memory based load-balancing. ([#4011](https://github.com/apache/openwhisk/pull/4011), [@ningyougang](https://github.com/ningyougang))
- Secure the invoker with SSL. ([#3968](https://github.com/apache/openwhisk/pull/3968), [@cbickel](https://github.com/cbickel))
- Reuse a container on `applicationError`. ([#3941](https://github.com/apache/openwhisk/pull/3941), [@tysonnorris](https://github.com/tysonnorris))
- Memory based load-balancing ([#3747](https://github.com/apache/openwhisk/pull/3747), [@cbickel](https://github.com/cbickel))
- Activation ID in header. ([#3671](https://github.com/apache/openwhisk/pull/3671), [@style95](https://github.com/style95))
- Treat action code as attachments. ([#3945](https://github.com/apache/openwhisk/pull/3945), [@chetanmeh](https://github.com/chetanmeh))
- K8S: Implement invoker-node affinity and eliminate usage of kubectl. ([#3963](https://github.com/apache/openwhisk/pull/3963), [@dgrove-oss](https://github.com/dgrove-oss))
- Add Ruby 2.5 runtime support. ([#3725](https://github.com/apache/openwhisk/pull/3725), [@remore](https://github.com/remore))
- S3AttachmentStore. ([#3779](https://github.com/apache/openwhisk/pull/3779), [@chetanmeh](https://github.com/chetanmeh))
- ContainerClient + Akka HTTP alternative to HttpUtils. ([#3812](https://github.com/apache/openwhisk/pull/3812), [@tysonnorris](https://github.com/tysonnorris))
- Throttle the system based on active-ack timeouts. ([#3875](https://github.com/apache/openwhisk/pull/3875), [@markusthoemmes](https://github.com/markusthoemmes))
- Recover image pulls by trying to run the container anyways. ([#3813](https://github.com/apache/openwhisk/pull/3813), [@markusthoemmes](https://github.com/markusthoemmes))
- Use separate DB users for deployed components. ([#3876](https://github.com/apache/openwhisk/pull/3876), [@cbickel](https://github.com/cbickel))
- Introduce SPI to swap authentication directives. ([#3829](https://github.com/apache/openwhisk/pull/3829), [@mhenke1](https://github.com/mhenke1))
- ArtifactStore implementation for CosmosDB. ([#3562](https://github.com/apache/openwhisk/pull/3562), [@chetanmeh](https://github.com/chetanmeh))
- Add support for PHP 7.2 runtime. ([#3736](https://github.com/apache/openwhisk/pull/3736), [@akrabat](https://github.com/akrabat))
## Incubating 0.9.0
### Branch: [0.9.0-incubating](https://github.com/apache/openwhisk/tree/0.9.0-incubating)
### Notable changes
- Initial release.
================================================
FILE: CODE_OF_CONDUCT.md
================================================
<!--
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
-->
# Apache OpenWhisk Community Code of Conduct
Please refer to the [Apache Code of Conduct](https://www.apache.org/foundation/policies/conduct.html).
================================================
FILE: CONTRIBUTING.md
================================================
<!--
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
-->
[](http://www.apache.org/licenses/LICENSE-2.0)
# Contributing to Apache OpenWhisk
Anyone can contribute to the OpenWhisk project and we welcome your contributions.
There are multiple ways to contribute: report bugs, improve the docs, and
contribute code, but you must follow these prerequisites and guidelines:
- [Contributor License Agreement](#contributor-license-agreement)
- [Raising issues](#raising-issues)
- [Coding Standards](#coding-standards)
### Contributor License Agreement
All contributors must sign and submit an Apache CLA (Contributor License Agreement).
Instructions on how to do this can be found here:
[http://www.apache.org/licenses/#clas](http://www.apache.org/licenses/#clas)
Sign the appropriate CLA and submit it to the Apache Software Foundation (ASF) secretary. You will receive a confirmation email from the ASF and be added to
the following list: http://people.apache.org/unlistedclas.html. Once your name is on this list, you are done and your PR can be merged.
Project committers will use this list to verify pull requests (PRs) come from contributors that have signed a CLA.
We look forward to your contributions!
## Raising issues
Please raise any bug reports or enhancement requests on the respective project repository's GitHub issue tracker. Be sure to search the
list to see if your issue has already been raised.
A good bug report is one that make it easy for us to understand what you were trying to do and what went wrong.
Provide as much context as possible so we can try to recreate the issue.
A good enhancement request comes with an explanation of what you are trying to do and how that enhancement would help you.
### Discussion
Please use the project's developer email list to engage our community:
[dev@openwhisk.apache.org](dev@openwhisk.apache.org)
In addition, we provide a "dev" Slack team channel for conversations at:
https://openwhisk-team.slack.com/messages/dev/
### Coding standards
Please ensure you follow the coding standards used throughout the existing
code base. Some basic rules include:
- all files must have the Apache license in the header.
- all PRs must have passing builds for all operating systems.
- the code is correctly formatted as defined in the [Scalariform plugin properties](tools/eclipse/scala.properties). If you use IntelliJ for development this [page](https://plugins.jetbrains.com/plugin/7480-scalariform) describes the setup and configuration of the plugin.
================================================
FILE: CREDITS.txt
================================================
C R E D I T S
This is the file where major donations to the OpenWhisk project are listed and it
should be used to give appropriate visibility to those individuals, organizations
or companies that donated resources to the effort. This file wants to be one of
the ways the OpenWhisk community pays back.
Community Credits
-----------------
The OpenWhisk project code was originally created, designed, developed (under an
IBM copyright dated 2015-2016) and donated by the IBM Corporation (http://www.ibm.com/)
to the Apache Software Foundation (ASF). The following repositories were included in
the initial donation:
* openwhisk:
* Primary (core) source code repository including platform code, run books, tests and more.
* openwhisk-catalog:
* Catalog of built-in system, utility, test and sample Actions, Feeds and provider integration tooling.
* openwhisk-client-js:
* JavaScript (JS) client library for the OpenWhisk platform.
* openwhisk-client-swift:
* Swift-based client SDK for OpenWhisk compatible with Swift 2.x and runs on iOS 9, WatchOS 2, and Darwin.
* openwhisk-sdk-docker:
* SDK that shows how to create “Black box” Docker containers that can run Action (code).
* openwhisk-client-go:
* API Framework written in GoLang (in-progress)
* openwhisk-python-cli:
* API client written in Python.
* openwhisk-package-pushnotifications:
* Push notifications to registered devices. (in-progress)
* openwhisk-package-alarms
* Package that can be used to create periodic, time-based alarms
* openwhisk-package-cloudant
* Package that can be used to store data to Cloudant object storage
* openwhisk-package-twilio:
* Integration with Twilio. (in-progress)
* openwhisk-package-jira:
* Integration with JIRA events. (in-progress)
* openwhisk-package-rss:
* Integration with RSS feeds.
* openwhisk-package-kafka:
* Integration with Kafka. (in-progress)
* openwhisk-slackbot-poc:
* Deploy a Slackbot with the capability to run OpenWhisk actions.
* openwhisk-wskdeploy:
* Utility for deploying and managing Apache OpenWhisk packages and projects.
* openwhisk.github.io:
* Apache OpenWhisk website code built using Jekyll.
* openwhisk-tutorial:
* Interactive tutorial framework (JavaScript) for for OpenWhisk, its CLI and packages.
* openwhisk-vscode:
* Visual Studio Code extension (prototype) for authoring OpenWhisk actions inside the editor.
* openwhisk-xcode:
* Collection of OpenWhisk tools for OS X implemented in Swift 3.
* openwhisk-debugger
* The OpenWhisk debugger project
* openwhisk-podspecs:
* CocoaPods Podspecs repository for ‘openwhisk-client-swift’ subproject.
* openwhisk-devtools:
* Development tools for building and deploying Apache OpenWhisk
* openwhisk-workshop:
* Workshop to help developers learn how to build serverless applications using the platform.
* openwhisk-package-template:
* This is a template to be use when creating new packages for OpenWhisk.
* openwhisk-sample-matos:
* Sample application with Message Hub and Object Store.
* openwhisk-sample-slackbot:
* A proof-of-concept Slackbot to invoke OpenWhisk actions.
The API Gateway code was a collaboration project jointly developed by both IBM Corporation
and Adobe Systems Incorporated (http://www.adobe.com/) and a donation to the Apache OpenWhisk
project by both companies.
* openwhisk-apigateway: A performant API Gateway based on Openresty and NGINX.
The OpenWhisk Composer project code was originally created, designed, developed (under an
IBM copyright dated 2017-2018) and donated in October and November 2018
by the IBM Corporation (http://www.ibm.com/) to the Apache Software Foundation (ASF).
The following repositories were included in the donation:
* openwhisk-composer:
* A new programming model for composing cloud functions built on OpenWhisk
* openwhisk-composer-python:
* A Python client library for OpenWhisk composer.
The Apache OpenWhisk Community
http://openwhisk.apache.org/
================================================
FILE: Jenkinsfile
================================================
#!groovy
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
timeout(time: 12, unit: 'HOURS') {
def port = "444"
def cert = "domain.crt"
def key = "domain.key"
node("openwhisk") {
def hostName = sh(returnStdout: true, script: 'hostname').trim()
def domainName = hostName+".apache.org"
def home = sh(returnStdout: true, script: 'echo $HOME').trim()
def jobName = sh(returnStdout: true, script: 'echo $JOB_NAME').trim()
def jobSpace = "${home}/jenkins-slave/workspace/${jobName}"
lock("${hostName}") {
sh "mkdir -p ${jobSpace}"
dir("${jobSpace}") {
try {
deleteDir()
stage('Checkout') {
checkout scm
}
stage('Build') {
// Set up a private docker registry service, accessed by all the OpenWhisk VMs.
try {
sh "docker container stop registry && docker container rm -v registry"
} catch (exp) {
println("Unable to stop and remove the container registry.")
}
sh "docker run -d --restart=always --name registry -v \"$HOME\"/certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:${port} -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/${cert} \
-e REGISTRY_HTTP_TLS_KEY=/certs/${key} -p ${port}:${port} registry:2"
// Build the controller, scheduler, and invoker images.
sh "./gradlew distDocker -PdockerRegistry=${domainName}:${port}"
//Install the various modules like standalone
sh "./gradlew install"
}
stage('Deploy Lean') {
dir("ansible") {
// Copy the jenkins ansible configuration under the directory ansible. This can make sure the SSH is used to
// access the VMs of invokers by the VM of the controller.
sh '[ -f "environments/jenkins/ansible_jenkins.cfg" ] && cp environments/jenkins/ansible_jenkins.cfg ansible.cfg'
}
dir("ansible/environments/jenkins") {
sh "cp ${hostName}.j2.ini hosts.j2.ini"
}
dir("ansible/environments/jenkins/group_vars") {
sh "cp ${hostName} all"
}
dir("ansible") {
sh 'ansible-playbook -i environments/jenkins setup.yml'
sh 'ansible-playbook -i environments/jenkins openwhisk.yml -e mode=clean'
sh 'ansible-playbook -i environments/jenkins apigateway.yml -e mode=clean'
sh 'ansible-playbook -i environments/jenkins couchdb.yml -e mode=clean'
sh 'ansible-playbook -i environments/jenkins couchdb.yml'
sh 'ansible-playbook -i environments/jenkins initdb.yml'
sh 'ansible-playbook -i environments/jenkins wipe.yml'
sh 'ansible-playbook -i environments/jenkins apigateway.yml'
sh 'ansible-playbook -i environments/jenkins openwhisk.yml -e lean=true'
sh 'ansible-playbook -i environments/jenkins properties.yml'
sh 'ansible-playbook -i environments/jenkins routemgmt.yml'
sh 'ansible-playbook -i environments/jenkins postdeploy.yml'
}
}
try {
stage('Test Lean Openwhisk') {
sh './gradlew :tests:test --tests system.basic.WskRestBasicTests -DtestResultsDirName=test-lean-openwhisk'
}
} catch (exp) {
println("Exception: " + exp)
error(exp)
}
stage('Deploy full Openwhisk') {
dir("ansible") {
sh 'ansible-playbook -i environments/jenkins openwhisk.yml -e mode=clean'
sh 'ansible-playbook -i environments/jenkins openwhisk.yml'
}
}
try {
stage('Test') {
sh './gradlew :tests:test -DtestResultsDirName=test-openwhisk'
}
} catch (exp) {
println("Exception:" + exp)
}
try {
stage('Shoot one invoker test') {
def folder = "ansible/environments/jenkins/group_vars"
def invoker1_node = sh(returnStdout: true,
script: "grep invoker1_machine ${folder}/${hostName} | cut -d: -f2").trim()
sh "ssh -i ${home}/secret/openwhisk_key openwhisk@${invoker1_node} 'docker stop invoker1'"
sleep time: 1, unit: 'MINUTES'
sh './gradlew :tests:testShootInvoker -DtestResultsDirName=test-shoot-invoker'
sh "ssh -i ${home}/secret/openwhisk_key openwhisk@${invoker1_node} 'docker start invoker1'"
}
} catch (exp) {
println("Exception:" + exp)
}
} catch (exp) {
println("Exception:" + exp)
error(exp)
} finally {
println("Executing finally block")
stage('Clean up') {
dir("ansible") {
sh 'ansible-playbook -i environments/jenkins openwhisk.yml -e mode=clean'
sh 'ansible-playbook -i environments/jenkins apigateway.yml -e mode=clean'
sh 'ansible-playbook -i environments/jenkins couchdb.yml -e mode=clean'
}
}
step([$class: 'JUnitResultArchiver', testResults: '**/test*/**/TEST-*.xml'])
}
}
}
}
}
================================================
FILE: LICENSE.txt
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
========================================================================
Apache License 2.0
========================================================================
This distribution bundles the following components, which are available under an Apache License 2.0 (https://opensource.org/licenses/Apache-2.0).
Spray Caching 1.3.4 (io.spray:spray-caching_2.11:1.3.4 - http://spray.io/documentation/1.2.4/spray-caching/)
ConcurrentMapBackedCache.scala under common/scala/src/main/scala/org/apache/openwhisk/core/database/ contains implementation
from Spray's [[spray.caching.Cache]] and [[spray.caching.SimpleLruCache]] respectively.
License included at licenses/LICENSE-spray.txt, or https://github.com/spray/spray/blob/master/LICENSE
Copyright (C) 2011-2015 the spray project <http://spray.io>
This product bundles the files gradlew and gradlew.bat from Gradle v5.5
which are distributed under the Apache License, Version 2.0.
For details see ./gradlew and ./gradlew.bat.
================================================
FILE: NOTICE.txt
================================================
Apache OpenWhisk
Copyright 2016-2024 The Apache Software Foundation
This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
================================================
FILE: README.md
================================================
<!--
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
-->
# OpenWhisk
[](http://www.apache.org/licenses/LICENSE-2.0)
[](https://openwhisk-team.slack.com/)
[](https://twitter.com/intent/follow?screen_name=openwhisk)
[](https://github.com/apache/openwhisk/actions/workflows/1-unit.yaml)
[](https://github.com/apache/openwhisk/actions/workflows/2-system.yaml)
[](https://github.com/apache/openwhisk/actions/workflows/3-multi-runtime.yaml)
[](https://github.com/apache/openwhisk/actions/workflows/4-standalone.yaml)
[](https://github.com/apache/openwhisk/actions/workflows/5-scheduler.yaml)
[](https://github.com/apache/openwhisk/actions/workflows/6-performance.yaml)
[](https://codecov.io/gh/apache/openwhisk)
OpenWhisk is a serverless functions platform for building cloud applications.
OpenWhisk offers a rich programming model for creating serverless APIs from functions,
composing functions into serverless workflows, and connecting events to functions using rules and triggers.
Learn more at [http://openwhisk.apache.org](http://openwhisk.apache.org).
* [Quick Start](#quick-start) (Deploy and Use OpenWhisk on your machine)
* [Deploy to Kubernetes](#deploy-to-kubernetes) (For development and production)
* For project contributors and Docker deployments:
* [Deploy to Docker for Mac](./tools/macos/README.md)
* [Deploy to Docker for Ubuntu](./tools/ubuntu-setup/README.md)
* [Learn Concepts and Commands](#learn-concepts-and-commands)
* [OpenWhisk Community and Support](#openwhisk-community-and-support)
* [Project Repository Structure](#project-repository-structure)
### Notice of Breaking Upgrade 10/17/2025
Apache Openwhisk has migrated to the Apache Pekko framework. The master branch as of 10/17/2025 uses Apache Pekko. This change results in a breaking change such that you must re-deploy new clusters and cutover traffic to the new cluster. All other changes should be transient to you other than instead of using Akka configuration overrides in your deployments, you would now need to update those to use the Pekko equivalent. A 3.x release branch will eventually follow this
change.
### Quick Start
The easiest way to start using OpenWhisk is to install the "Standalone" OpenWhisk stack.
This is a full-featured OpenWhisk stack running as a Java process for convenience.
Serverless functions run within Docker containers. You will need [Docker](https://docs.docker.com/install),
[Java](https://java.com/en/download/help/download_options.xml) and [Node.js](https://nodejs.org) available on your machine.
To get started:
```
git clone https://github.com/apache/openwhisk.git
cd openwhisk
./gradlew core:standalone:bootRun
```
- When the OpenWhisk stack is up, it will open your browser to a functions [Playground](./docs/images/playground-ui.png),
typically served from http://localhost:3232. The Playground allows you create and run functions directly from your browser.
- To make use of all OpenWhisk features, you will need the OpenWhisk command line tool called
`wsk` which you can download from https://s.apache.org/openwhisk-cli-download.
Please refer to the [CLI configuration](./docs/cli.md) for additional details. Typically you
configure the CLI for Standalone OpenWhisk as follows:
```
wsk property set \
--apihost 'http://localhost:3233' \
--auth '23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP'
```
- Standalone OpenWhisk can be configured to deploy additional capabilities when that is desirable.
Additional resources are available [here](./core/standalone/README.md).
### Deploy to Kubernetes
OpenWhisk can also be installed on a Kubernetes cluster. You can use
a managed Kubernetes cluster provisioned from a public cloud provider
(e.g., AKS, EKS, IKS, GKE), or a cluster you manage yourself.
Additionally for local development, OpenWhisk is compatible with Minikube,
and Kubernetes for Mac using the support built into Docker 18.06 (or higher).
To get started:
```
git clone https://github.com/apache/openwhisk-deploy-kube.git
```
Then follow the instructions in the [OpenWhisk on Kubernetes README.md](https://github.com/apache/openwhisk-deploy-kube/blob/master/README.md).
### Learn Concepts and Commands
Browse the [documentation](docs/) to learn more. Here are some topics you may be
interested in:
- [System overview](docs/about.md)
- [Getting Started](docs/README.md)
- [Create and invoke actions](docs/actions.md)
- [Create triggers and rules](docs/triggers_rules.md)
- [Use and create packages](docs/packages.md)
- [Browse and use the catalog](docs/catalog.md)
- [OpenWhisk system details](docs/reference.md)
- [Implementing feeds](docs/feeds.md)
- [Developing a runtime for a new language](docs/actions-actionloop.md)
### OpenWhisk Community and Support
Report bugs, ask questions and request features [here on GitHub](../../issues).
You can also join the OpenWhisk Team on Slack [https://openwhisk-team.slack.com](https://openwhisk-team.slack.com) and chat with developers. To get access to our public Slack team, request an invite [https://openwhisk.apache.org/slack.html](https://openwhisk.apache.org/slack.html).
### Project Repository Structure
The OpenWhisk system is built from a [number of components](docs/dev/modules.md). The picture below groups the components by their GitHub repos. Please open issues for a component against the appropriate repo (if in doubt just open against the main openwhisk repo).

### What happens on an invocation?
This diagram depicts the steps which take place within Openwhisk when an action is invoked by the user:

================================================
FILE: ansible/README.md
================================================
<!--
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
-->
Deploying OpenWhisk using Ansible
=========
### Getting started
If you want to deploy OpenWhisk locally using Ansible, you first need to install Ansible on your development environment:
#### Ubuntu users
```shell script
sudo apt-get install python-pip
sudo pip install ansible==4.1.0
sudo pip install jinja2==3.0.1
```
#### Docker for Mac users
```shell script
sudo easy_install pip
sudo pip install ansible==4.1.0
pip install jinja2==3.0.1
```
Docker for Mac does not provide any official ways to meet some requirements for OpenWhisk.
You need to depend on the workarounds until Docker provides official methods.
If you prefer [Docker-machine](https://docs.docker.com/machine/) to [Docker for mac](https://docs.docker.com/docker-for-mac/), you can follow instructions in [docker-machine/README.md](../tools/macos/docker-machine/README.md).
##### Enable Docker remote API
The remote Docker API is required for collecting logs using the Ansible playbook [logs.yml](logs.yml).
##### Activate docker0 network (local dev only)
The OpenWhisk deployment via Ansible uses the `docker0` network interface to deploy OpenWhisk and it does not exist on Docker for Mac environment.
An expedient workaround is to add alias for `docker0` network to loopback interface.
```shell script
sudo ifconfig lo0 alias 172.17.0.1/24
```
### Using Ansible
**Caveat:** All Ansible commands are meant to be executed from the `ansible` directory.
This is important because that's where `ansible.cfg` is located which contains generic settings that are needed for the remaining steps.
Set the environment for the commands below by running
```shell script
ENVIRONMENT=local # or docker-machine or jenkins or vagrant
```
The default environment is `local` which works for Ubuntu and
Docker for Mac. To use the default environment, you may omit the `-i` parameter entirely. For older Mac installation using Docker Machine,
use `-i environments/docker-machine`.
In all instructions, replace `<openwhisk_home>` with the base directory of your OpenWhisk source tree. e.g. `openwhisk`
#### Ansible with pyenv (local dev only)
When using [pyenv](https://github.com/pyenv/pyenv) to manage your versions of python, the [ansible python interpreter](https://docs.ansible.com/ansible/latest/reference_appendices/python_3_support.html) will use your system's default python, which may have a different version.
To make sure ansible uses the same version of python which you configured, execute:
```bash
echo -e "\nansible_python_interpreter: `which python`\n" >> ./environments/local/group_vars/all
```
#### Preserving configuration and log directories on reboot
When using the local Ansible environment, configuration and log data is stored in `/tmp` by default. However, operating
system such as Linux and Mac clean the `/tmp` directory on reboot, resulting in failures when OpenWhisk tries to start
up again. To avoid this problem, export the `OPENWHISK_TMP_DIR` variable assigning it the path to a persistent
directory before deploying OpenWhisk.
#### Setup
This step should be executed once per development environment.
It will generate the `hosts` configuration file based on your environment settings.
> This file is generated automatically for an ephemeral CouchDB instance during `setup.yml`.
The default configuration does not run multiple instances of core components (e.g., controller, invoker, kafka).
You may elect to enable high-availability (HA) mode by passing the Ansible option `-e mode=HA` when executing this playbook.
This will configure your deployment with multiple instances (e.g., two Kafka instances, and two invokers).
In addition to the host file generation, you need to configure the database for your deployment. This is done
by modifying the file `ansible/db_local.ini` to provide the following properties.
```
[db_creds]
db_provider=
db_username=
db_password=
db_protocol=
db_host=
db_port=
```
For convenience, you can use shell environment variables that are read by the playbook to generate the required `db_local.ini` file as shown below.
```shell script
export OW_DB=CouchDB
export OW_DB_USERNAME=<your couchdb user>
export OW_DB_PASSWORD=<your couchdb password>
export OW_DB_PROTOCOL=<your couchdb protocol>
export OW_DB_HOST=<your couchdb host>
export OW_DB_PORT=<your couchdb port>
ansible-playbook -i environments/$ENVIRONMENT setup.yml
```
##### Use Cloudant as a datastore
```shell script
export OW_DB=Cloudant
export OW_DB_USERNAME=<your cloudant user>
export OW_DB_PASSWORD=<your cloudant password>
export OW_DB_PROTOCOL=https
export OW_DB_HOST=<your cloudant user>.cloudant.com
export OW_DB_PORT=443
ansible-playbook -i environments/$ENVIRONMENT setup.yml
```
#### Install Prerequisites
> This step is not required for local environments since all prerequisites are already installed, and therefore may be skipped.
This step needs to be done only once per target environment. It will install necessary prerequisites on all target hosts in the environment.
```
ansible-playbook -i environments/$ENVIRONMENT prereq.yml
```
**Hint:** During playbook execution the `TASK [prereq : check for pip]` can show as failed. This is normal if no pip is installed. The playbook will then move on and install pip on the target machines.
### [Optional] Enable the new scheduler
You can enable the new scheduler of OpenWhisk.
It will run one more component called "scheduler" and ETCD.
#### Configure service providers for the scheduler
You can update service providers for the scheduler as follows.
**common/scala/src/main/resources/reference.conf**
If you are using ElasticSearch (recommended) then replace ```NoopDurationCheckerProvider``` with ```ElasticSearchDurationCheckerProvider``` below.
```
whisk.spi {
ArtifactStoreProvider = org.apache.openwhisk.core.database.CouchDbStoreProvider
ActivationStoreProvider = org.apache.openwhisk.core.database.ArtifactActivationStoreProvider
MessagingProvider = org.apache.openwhisk.connector.kafka.KafkaMessagingProvider
ContainerFactoryProvider = org.apache.openwhisk.core.containerpool.docker.DockerContainerFactoryProvider
LogStoreProvider = org.apache.openwhisk.core.containerpool.logging.DockerToActivationLogStoreProvider
LoadBalancerProvider = org.apache.openwhisk.core.loadBalancer.FPCPoolBalancer
EntitlementSpiProvider = org.apache.openwhisk.core.entitlement.FPCEntitlementProvider
AuthenticationDirectiveProvider = org.apache.openwhisk.core.controller.BasicAuthenticationDirective
InvokerProvider = org.apache.openwhisk.core.invoker.FPCInvokerReactive
InvokerServerProvider = org.apache.openwhisk.core.invoker.FPCInvokerServer
DurationCheckerProvider = org.apache.openwhisk.core.scheduler.queue.NoopDurationCheckerProvider
}
.
.
.
```
#### Configure pause grace for the scheduler
Set the value of pause-grace to 10s by default
**core/invoker/src/main/resources/application.conf**
```
container-proxy {
timeouts {
# The "unusedTimeout" in the ContainerProxy,
#aka 'How long should a container sit idle until we kill it?'
idle-container = 10 minutes
pause-grace = 10 seconds
keeping-duration = 10 minutes
}
.
.
.
```
#### Disable the scheduler
- You can disable the scheduler by configuring `scheduler_enable`.
- The scheduler is enabled by default.
**ansible/environments/local/group_vars/all**
```yaml
scheduler_enable: false
```
#### [Optional] Enable ElasticSearch Activation Store
When you use the new scheduler, it is recommended to use ElasticSearch as an activation store.
**ansible/environments/local/group_vars**
```yaml
db_activation_backend: ElasticSearch
elastic_cluster_name: <your elasticsearch cluster name>
elastic_protocol: <your elasticsearch protocol>
elastic_index_pattern: <your elasticsearch index pattern>
elastic_base_volume: <your elasticsearch volume directory>
elastic_username: <your elasticsearch username>
elastic_password: <your elasticsearch username>
```
You can also refer to this guide to [deploy OpenWhisk using ElasticSearch](https://github.com/apache/openwhisk/blob/master/ansible/README.md#using-elasticsearch-to-store-activations).
### Deploying Using CouchDB
- Make sure your `db_local.ini` file is [setup for](#setup) CouchDB then execute:
```shell script
cd <openwhisk_home>
./gradlew distDocker
cd ansible
ansible-playbook -i environments/$ENVIRONMENT couchdb.yml
ansible-playbook -i environments/$ENVIRONMENT initdb.yml
ansible-playbook -i environments/$ENVIRONMENT wipe.yml
ansible-playbook -i environments/$ENVIRONMENT openwhisk.yml
# installs a catalog of public packages and actions
ansible-playbook -i environments/$ENVIRONMENT postdeploy.yml
# to use the API gateway
ansible-playbook -i environments/$ENVIRONMENT apigateway.yml
ansible-playbook -i environments/$ENVIRONMENT routemgmt.yml
```
- You need to run `initdb.yml` **every time** you do a fresh deploy CouchDB to initialize the subjects database.
- The `wipe.yml` playbook should be run on a fresh deployment only, otherwise actions and activations will be lost.
- Run `postdeploy.yml` after deployment to install a catalog of useful packages.
- To use the API Gateway, you'll need to run `apigateway.yml` and `routemgmt.yml`.
- Use `ansible-playbook -i environments/$ENVIRONMENT openwhisk.yml` to avoid wiping the data store. This is useful to start OpenWhisk after restarting your Operating System.
#### Limitation
You cannot run multiple CouchDB nodes on a single machine. This limitation comes from Erlang EPMD which CouchDB relies on to find other nodes.
To deploy multiple CouchDB nodes, they should be placed on different machines respectively otherwise their ports will clash.
### Deploying Using Cloudant
- Make sure your `db_local.ini` file is set up for Cloudant. See [Setup](#setup).
- Then execute:
```shell script
cd <openwhisk_home>
./gradlew distDocker
cd ansible
ansible-playbook -i environments/$ENVIRONMENT initdb.yml
ansible-playbook -i environments/$ENVIRONMENT wipe.yml
ansible-playbook -i environments/$ENVIRONMENT apigateway.yml
ansible-playbook -i environments/$ENVIRONMENT openwhisk.yml
# installs a catalog of public packages and actions
ansible-playbook -i environments/$ENVIRONMENT postdeploy.yml
# to use the API gateway
ansible-playbook -i environments/$ENVIRONMENT apigateway.yml
ansible-playbook -i environments/$ENVIRONMENT routemgmt.yml
```
- You need to run `initdb` on Cloudant **only once** per Cloudant database to initialize the subjects database.
- The `initdb.yml` playbook will only initialize your database if it is not initialized already, else it will skip initialization steps.
- The `wipe.yml` playbook should be run on a fresh deployment only, otherwise actions and activations will be lost.
- Run `postdeploy.yml` after deployment to install a catalog of useful packages.
- To use the API Gateway, you'll need to run `apigateway.yml` and `routemgmt.yml`.
- Use `ansible-playbook -i environments/$ENVIRONMENT openwhisk.yml` to avoid wiping the data store. This is useful to start OpenWhisk after restarting your Operating System.
### Deploying Using MongoDB
You can choose MongoDB instead of CouchDB as the database backend to store entities.
- Deploy a mongodb server(Optional, for test and develop only, use an external MongoDB server in production).
You need to execute `pip install pymongo` first
```
ansible-playbook -i environments/<environment> mongodb.yml -e mongodb_data_volume="/tmp/mongo-data"
```
- Then execute
```
cd <openwhisk_home>
./gradlew distDocker
cd ansible
ansible-playbook -i environments/<environment> initMongodb.yml -e mongodb_connect_string="mongodb://172.17.0.1:27017"
ansible-playbook -i environments/<environment> apigateway.yml -e mongodb_connect_string="mongodb://172.17.0.1:27017"
ansible-playbook -i environments/<environment> openwhisk.yml -e mongodb_connect_string="mongodb://172.17.0.1:27017" -e db_artifact_backend="MongoDB"
# installs a catalog of public packages and actions
ansible-playbook -i environments/<environment> postdeploy.yml
# to use the API gateway
ansible-playbook -i environments/<environment> apigateway.yml
ansible-playbook -i environments/<environment> routemgmt.yml
```
Available parameters for ansible are
```
mongodb:
connect_string: "{{ mongodb_connect_string }}"
database: "{{ mongodb_database | default('whisks') }}"
data_volume: "{{ mongodb_data_volume | default('mongo-data') }}"
```
### Using ElasticSearch to Store Activations
You can use ElasticSearch (ES) to store activations separately while other entities remain stored in CouchDB. There is an Ansible playbook to setup a simple ES cluster for testing and development purposes.
- Provide your custom ES related ansible arguments:
```
elastic_protocol="http"
elastic_index_pattern="openwhisk-%s" // this will be combined with namespace's name, so different namespace can use different index
elastic_base_volume="esdata" // name of docker volume to store ES data
elastic_cluster_name="openwhisk"
elastic_java_opts="-Xms1g -Xmx1g"
elastic_loglevel="INFO"
elastic_username="admin"
elastic_password="admin"
elasticsearch_connect_string="x.x.x.x:9200,y.y.y.y:9200" // if you want to use an external ES cluster, add it
```
- Then execute:
```shell script
cd <openwhisk_home>
./gradlew distDocker
cd ansible
# couchdb is still needed to store subjects and actions
ansible-playbook -i environments/$ENVIRONMENT couchdb.yml
ansible-playbook -i environments/$ENVIRONMENT initdb.yml
ansible-playbook -i environments/$ENVIRONMENT wipe.yml
# this will deploy a simple ES cluster, you can skip this to use external ES cluster
ansible-playbook -i environments/$ENVIRONMENT elasticsearch.yml
ansible-playbook -i environments/$ENVIRONMENT openwhisk.yml -e db_activation_backend=ElasticSearch
# installs a catalog of public packages and actions
ansible-playbook -i environments/$ENVIRONMENT postdeploy.yml
# to use the API gateway
ansible-playbook -i environments/$ENVIRONMENT apigateway.yml
ansible-playbook -i environments/$ENVIRONMENT routemgmt.yml
```
### Configuring the installation of `wsk` CLI
There are two installation modes to install `wsk` CLI: remote and local.
The mode "remote" means to download the `wsk` binaries from available web links.
By default, OpenWhisk sets the installation mode to remote and downloads the
binaries from the CLI
[release page](https://github.com/apache/openwhisk-cli/releases),
where OpenWhisk publishes the official `wsk` binaries.
The mode "local" means to build and install the `wsk` binaries from local CLI
project. You can download the source code of OpenWhisk CLI
[here](https://github.com/apache/openwhisk-cli).
Let's assume your OpenWhisk CLI home directory is
`$OPENWHISK_HOME/../openwhisk-cli` and you've already `export`ed
`OPENWHISK_HOME` to be the root directory of this project. After you download
the CLI repository, use the gradle command to build the binaries (you can omit
the `-PnativeBuild` if you want to cross-compile for all supported platforms):
```shell script
cd "$OPENWHISK_HOME/../openwhisk-cli"
./gradlew releaseBinaries -PnativeBuild
```
The binaries are generated and put into a tarball in the folder
`../openwhisk-cli/release`. Then, use the following Ansible command
to (re-)configure the CLI installation:
```shell script
export OPENWHISK_ENVIRONMENT=local # ... or whatever
ansible-playbook -i environments/$OPENWHISK_ENVIRONMENT edge.yml -e mode=clean
ansible-playbook -i environments/$OPENWHISK_ENVIRONMENT edge.yml \
-e cli_installation_mode=local \
-e openwhisk_cli_home="$OPENWHISK_HOME/../openwhisk-cli"
```
The parameter `cli_installation_mode` specifies the CLI installation mode and
the parameter `openwhisk_cli_home` specifies the home directory of your local
OpenWhisk CLI. (_n.b._ `openwhisk_cli_home` defaults to
`$OPENWHISK_HOME/../openwhisk-cli`.)
Once the CLI is installed, you can [use it to work with Whisk](../docs/cli.md).
### Hot-swapping a Single Component
The playbook structure allows you to clean, deploy or re-deploy a single component as well as the entire OpenWhisk stack. Let's assume you have deployed the entire stack using the `openwhisk.yml` playbook. You then make a change to a single component, for example the invoker. You will probably want a new tag on the invoker image so you first build it using:
```shell script
cd <openwhisk_home>
./gradlew :core:invoker:distDocker -PdockerImageTag=myNewInvoker
```
Then all you need to do is re-deploy the invoker using the new image:
```shell script
cd ansible
ansible-playbook -i environments/$ENVIRONMENT invoker.yml -e docker_image_tag=myNewInvoker
```
**Hint:** You can omit the Docker image tag parameters in which case `latest` will be used implicitly.
### Cleaning a Single Component
You can remove a single component just as you would remove the entire deployment stack.
For example, if you wanted to remove only the controller you would run:
```shell script
cd ansible
ansible-playbook -i environments/$ENVIRONMENT controller.yml -e mode=clean
```
**Caveat:** In distributed environments some components (e.g. Invoker, etc.) exist on multiple machines. So if you run a playbook to clean or deploy those components, it will run on **all** of the hosts targeted by the component's playbook.
### Cleaning an OpenWhisk Deployment
Once you are done with the deployment you can clean it from the target environment.
```shell script
ansible-playbook -i environments/$ENVIRONMENT openwhisk.yml -e mode=clean
```
### Removing all prereqs from an environment
This is usually not necessary, however in case you want to uninstall all prereqs from a target environment, execute:
```shell script
ansible-playbook -i environments/$ENVIRONMENT prereq.yml -e mode=clean
```
### Lean Setup
To have a lean setup (no Kafka, Zookeeper and no Invokers as separate entities):
At [Deploying Using CouchDB](ansible/README.md#deploying-using-cloudant) step, replace:
```shell script
ansible-playbook -i environments/$ENVIRONMENT openwhisk.yml
```
by:
```shell script
ansible-playbook -i environments/$ENVIRONMENT openwhisk.yml -e lean=true
```
### Troubleshooting
Some of the more common problems and their solution are listed here.
#### Setuptools Version Mismatch
If you encounter the following error message during `ansible` execution
```
ERROR! Unexpected Exception: ... Requirement.parse('setuptools>=11.3'))
```
your `setuptools` package is likely out of date. You can upgrade the package using this command:
```shell script
pip install --upgrade setuptools --user python
```
#### Mac Setup - Python Interpreter
The MacOS environment assumes Python is installed in `/usr/local/bin` which is the default location when using `brew`.
The following error will occur if Python is located elsewhere:
```
ansible all -i environments/mac -m ping
ansible | FAILED! => {
"changed": false,
"failed": true,
"module_stderr": "/bin/sh: /usr/local/bin/python: No such file or directory\n",
"module_stdout": "",
"msg": "MODULE FAILURE",
"parsed": false
}
```
An expedient workaround is to create a link to the expected location:
```shell script
ln -s $(which python) /usr/local/bin/python
```
Alternatively, you can also configure the location of Python interpreter in `environments/<environment>/group_vars`.
```shell script
ansible_python_interpreter: "/usr/local/bin/python"
```
#### Failed to import docker-py
After `brew install ansible`, the following lines are printed out:
```
==> Caveats
If you need Python to find the installed site-packages:
mkdir -p ~/Library/Python/2.7/lib/python/site-packages
echo '/usr/local/lib/python2.7/site-packages' > ~/Library/Python/2.7/lib/python/site-packages/homebrew.pth
```
Just run the two commands to fix this issue.
#### Spaces in Paths
Ansible 2.1.0.0 and earlier versions do not support a space in file paths.
Many file imports and roles will not work correctly when included from a path that contains spaces.
If you encounter this error message during Ansible execution
```
fatal: [ansible]: FAILED! => {"failed": true, "msg": "need more than 1 value to unpack"}
```
the path to your OpenWhisk `ansible` directory contains spaces. To fix this, please copy the source tree to a path
without spaces as there is no current fix available to this problem.
#### Changing limits
The default system throttling limits are configured in this file [./group_vars/all](./group_vars/all) and may be changed by modifying the group_vars for your specific environment.
```
limits:
invocationsPerMinute: "{{ limit_invocations_per_minute | default(60) }}"
concurrentInvocations: "{{ limit_invocations_concurrent | default(30) }}"
firesPerMinute: "{{ limit_fires_per_minute | default(60) }}"
sequenceMaxLength: "{{ limit_sequence_max_length | default(50) }}"
```
- The `limits.invocationsPerMinute` represents the allowed namespace action invocations per minute.
- The `limits.concurrentInvocations` represents the maximum concurrent invocations allowed per namespace.
- The `limits.firesPerMinute` represents the allowed namespace trigger firings per minute.
- The `limits.sequenceMaxLength` represents the maximum length of a sequence action.
#### Set the timezone for containers
The default timezone for all system containers is UTC. The timezone may differ from your servers which could make it difficult to inspect logs. The timezone is configured globally in [group_vars/all](./group_vars/all#L280) or by passing an extra variable `-e docker_timezone=xxx` when you run an ansible-playbook.
================================================
FILE: ansible/ansible.cfg
================================================
[defaults]
callback_whitelist = profile_tasks
retry_files_enabled = False
host_key_checking = False
inventory = environments/local
callback_plugins = callbacks
hash_behaviour = merge
gather_timeout = 60
[ssh_connection]
scp_if_ssh = True
================================================
FILE: ansible/apigateway.yml
================================================
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
- hosts: redis
roles:
- redis
- hosts: apigateway
roles:
- apigateway
================================================
FILE: ansible/callbacks/logformatter.py
================================================
"""Python callback for highlighting Ansible logs.
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
"""
from __future__ import (absolute_import, division, print_function)
import os
import sys
import textwrap
from ansible.plugins.callback import CallbackBase
__metaclass__ = type
class CallbackModule(CallbackBase):
"""."""
def __init__(self):
"""Initialize superclass."""
super(CallbackModule, self).__init__()
def emit(self, host, category, data):
"""Emit colorized output based upon data contents."""
if type(data) == dict:
cmd = data['cmd'] if 'cmd' in data else None
msg = data['msg'] if 'msg' in data else None
stdout = data['stdout'] if 'stdout' in data else None
stderr = data['stderr'] if 'stderr' in data else None
reason = data['reason'] if 'reason' in data else None
print()
if cmd:
print(hilite('[%s]\n> %s' % (category, cmd), category, wrap = False))
if reason:
print(hilite(reason, category))
if msg:
print(hilite(msg, category))
if stdout:
print(hilite(stdout, category))
if stderr:
print(hilite(stderr, category))
def runner_on_failed(self, host, res, ignore_errors=False):
self.emit(host, 'FAILED', res)
def runner_on_ok(self, host, res):
pass
def runner_on_skipped(self, host, item=None):
self.emit(host, 'SKIPPED', '...')
def runner_on_unreachable(self, host, res):
self.emit(host, 'UNREACHABLE', res)
def runner_on_async_failed(self, host, res, jid):
self.emit(host, 'FAILED', res)
def hilite(msg, status, wrap = True):
"""Highlight message."""
def supports_color():
if ((sys.platform != 'win32' or 'ANSICON' in os.environ) and
sys.stdout.isatty()):
return True
else:
return False
if supports_color():
attr = []
if status == 'FAILED':
# red
attr.append('31')
else:
# bold
attr.append('1')
text = '\x1b[%sm%s\x1b[0m' % (';'.join(attr), msg)
else:
text = msg
return textwrap.fill(text, 80) if wrap else text
================================================
FILE: ansible/controller.yml
================================================
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
---
# This playbook deploys Openwhisk Controllers.
- hosts: controllers
vars:
#
# host_group - usually "{{ groups['...'] }}" where '...' is what was used
# for 'hosts' above. The hostname of each host will be looked up in this
# group to assign a zero-based index. That index will be used in concert
# with 'name_prefix' below to assign a host/container name.
host_group: "{{ groups['controllers'] }}"
#
# name_prefix - a unique prefix for this set of controllers. The prefix
# will be used in combination with an index (determined using
# 'host_group' above) to name host/controllers.
name_prefix: "controller"
#
# controller_index_base - the deployment process allocates host docker
# ports to individual controllers based on their indices. This is an
# additional offset to prevent collisions between different controller
# groups. Usually 0 if only one group is being deployed, otherwise
# something like "{{ groups['firstcontrollergroup']|length }}"
controller_index_base: 0
#
# select which additional capabilities (from the controller role) need
# to be added to the controller. Plugin will override default
# configuration settings. (Plugins are found in the
# 'roles/controller/tasks' directory for now.)
controller_plugins:
# Join an pekko cluster rather than running standalone pekko
- "join_pekko_cluster"
roles:
- controller
================================================
FILE: ansible/couchdb.yml
================================================
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
---
# This playbook deploys a CouchDB for Openwhisk.
- hosts: db
roles:
- couchdb
================================================
FILE: ansible/downloadcli-github.yml
================================================
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
---
# This playbook is used to download cli from Github and copy directly to bin
- hosts: ansible
tasks:
- name: grab the local CLI from the Github
unarchive:
src: "{{ openwhisk_cli.remote.location }}/{{ openwhisk_cli.archive_name}}-{{ openwhisk_cli_tag }}-{{os}}-{{arch}}.{{ext}}"
dest: "{{ openwhisk_home }}/bin"
mode: "0755"
remote_src: yes
vars:
arch: "{{ ansible_machine | replace ('x86_64', 'amd64') }}"
os: "{{ ansible_system | lower | replace('darwin', 'mac') }}"
ext: "{{ ( ansible_system in ['Windows', 'Darwin']) | ternary('zip', 'tgz') }}"
================================================
FILE: ansible/downloadcli.yml
================================================
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
---
# This playbook downloads the Openwhisk cli aka wsk from the API host.
- hosts: ansible
roles:
- cli-install
================================================
FILE: ansible/edge.yml
================================================
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
---
# This playbook deploys Openwhisk Edge servers.
# The edge is usually populated with NGINX serving as proxy.
# The CLI also gets built and published for downloading from NGINX.
# SDKs for blackbox get published to NGINX also.
- hosts: edge
roles:
- nginx
- cli
================================================
FILE: ansible/elasticsearch.yml
================================================
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
---
# This playbook deploys a ElasticSearch cluster
- hosts: elasticsearch
gather_facts: yes
vars:
#
# host_group - usually "{{ groups['...'] }}" where '...' is what was used
# for 'hosts' above. The hostname of each host will be looked up in this
# group to assign a zero-based index. That index will be used in concert
# with 'name_prefix' below to assign a host/container name.
host_group: "{{ groups['elasticsearch'] }}"
#
# name_prefix - a unique prefix for this set of elasticsearches. The prefix
# will be used in combination with an index (determined using
# 'host_group' above) to name host/elasticsearcher.
name_prefix: "elasticsearch"
roles:
- elasticsearch
================================================
FILE: ansible/environments/docker-machine/group_vars/all
================================================
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
config_root_dir: /Users/Shared/wskconf
whisk_logs_dir: /Users/Shared/wsklogs
docker_registry: ""
docker_dns: ""
runtimes_bypass_pull_for_local_images: true
environment_type: "docker-machine"
env_hosts_dir: "{{ playbook_dir }}/environments/docker-machine"
# The whisk_api_localhost_name is used to configure nginx to permit vanity URLs for web actions.
# It is also used for the SSL certificate generation. For a local deployment, this is typically
# a hostname that is resolved on the client, via /etc/hosts for example.
whisk_api_localhost_name: "openwhisk"
# Hardcoded for docker-machine since db init runs on host not inside VM
db_prefix: whisk_dockermachine_
# API GW connection configuration
apigw_auth_user: ""
apigw_auth_pwd: ""
apigw_host_v2: "http://{{ groups['apigateway']|first }}:{{apigateway.port.api}}/v2"
invoker_allow_multiple_instances: true
# Set kafka configuration
kafka_heap: '512m'
kafka_topics_completed_retentionBytes: 104857600
kafka_topics_completed_retentionMS: 300000
kafka_topics_health_retentionBytes: 104857600
kafka_topics_health_retentionMS: 300000
kafka_topics_invoker_retentionBytes: 104857600
kafka_topics_invoker_retentionMS: 300000
================================================
FILE: ansible/environments/docker-machine/hosts.j2.ini
================================================
; the first parameter in a host is the inventory_hostname
; used for local actions only
ansible ansible_connection=local
[edge]
{{ docker_machine_ip }} ansible_host={{ docker_machine_ip }}
[controllers]
controller0 ansible_host={{ docker_machine_ip }}
;{% if mode is defined and 'HA' in mode %}
;controller1 ansible_host={{ docker_machine_ip }}
;{% endif %}
[kafkas]
kafka0 ansible_host={{ docker_machine_ip }}
{% if mode is defined and 'HA' in mode %}
kafka1 ansible_host={{ docker_machine_ip }}
{% endif %}
[zookeepers:children]
kafkas
[invokers]
invoker0 ansible_host={{ docker_machine_ip }}
{% if mode is defined and 'HA' in mode %}
invoker1 ansible_host={{ docker_machine_ip }}
{% endif %}
[db]
{{ docker_machine_ip }} ansible_host={{ docker_machine_ip }}
[redis]
{{ docker_machine_ip }} ansible_host={{ docker_machine_ip }}
[apigateway]
{{ docker_machine_ip }} ansible_host={{ docker_machine_ip }}
[elasticsearch:children]
db
[etcd]
etcd0 ansible_host={{ docker_machine_ip }}
{% if mode is defined and 'HA' in mode %}
etcd1 ansible_host={{ docker_machine_ip }}
; define variables
[all:vars]
ansible_connection=ssh
ansible_user=docker
ansible_ssh_private_key_file=~/.docker/machine/machines/{{ docker_machine_name | default("whisk")}}/id_rsa
ansible_python_interpreter=/usr/local/bin/python
================================================
FILE: ansible/environments/local/group_vars/all
================================================
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
openwhisk_tmp_dir: "{{ lookup('env', 'OPENWHISK_TMP_DIR')|default('/tmp' if ansible_distribution == 'MacOSX' else '/var/tmp', true) }}"
config_root_dir: "{{ openwhisk_tmp_dir }}/wskconf"
whisk_logs_dir: "{{ openwhisk_tmp_dir }}/wsklogs"
coverage_enabled: "{{ lookup('env', 'GRADLE_COVERAGE') | default('false', true) | bool}}"
coverage_logs_dir: "{{ openwhisk_tmp_dir }}/wskcov"
docker_registry: ""
docker_dns: ""
runtimes_bypass_pull_for_local_images: true
invoker_use_runc: "{{ ansible_distribution != 'MacOSX' }}"
db_prefix: whisk_local_
# API GW connection configuration
apigw_auth_user: ""
apigw_auth_pwd: ""
apigw_host_v2: "http://{{ groups['apigateway']|first }}:{{apigateway.port.api}}/v2"
invoker_allow_multiple_instances: true
# Set kafka configuration
kafka_heap: '512m'
kafka_topics_completed_retentionBytes: 104857600
kafka_topics_completed_retentionMS: 300000
kafka_topics_health_retentionBytes: 104857600
kafka_topics_health_retentionMS: 300000
kafka_topics_invoker_retentionBytes: 104857600
kafka_topics_invoker_retentionMS: 300000
env_hosts_dir: "{{ playbook_dir }}/environments/local"
container_pool_pekko_client: true
runtimes_enable_concurrency: true
limit_action_concurrency_max: 500
namespace_default_limit_action_concurrency_max: 500
================================================
FILE: ansible/environments/local/hosts.j2.ini
================================================
; the first parameter in a host is the inventory_hostname
; used for local actions only
ansible ansible_connection=local
[edge]
172.17.0.1 ansible_host=172.17.0.1 ansible_connection=local
[controllers]
controller0 ansible_host=172.17.0.1 ansible_connection=local
;{% if mode is defined and 'HA' in mode %}
;controller1 ansible_host=172.17.0.1 ansible_connection=local
;{% endif %}
[kafkas]
kafka0 ansible_host=172.17.0.1 ansible_connection=local
{% if mode is defined and 'HA' in mode %}
kafka1 ansible_host=172.17.0.1 ansible_connection=local
{% endif %}
[zookeepers:children]
kafkas
[invokers]
invoker0 ansible_host=172.17.0.1 ansible_connection=local
{% if mode is defined and 'HA' in mode %}
invoker1 ansible_host=172.17.0.1 ansible_connection=local
{% endif %}
[schedulers]
scheduler0 ansible_host=172.17.0.1 ansible_connection=local
{% if mode is defined and 'HA' in mode %}
scheduler1 ansible_host=172.17.0.1 ansible_connection=local
{% endif %}
; db group is only used if db.provider is CouchDB
[db]
172.17.0.1 ansible_host=172.17.0.1 ansible_connection=local
[elasticsearch:children]
db
[redis]
172.17.0.1 ansible_host=172.17.0.1 ansible_connection=local
[apigateway]
172.17.0.1 ansible_host=172.17.0.1 ansible_connection=local
[etcd]
etcd0 ansible_host=172.17.0.1 ansible_connection=local
================================================
FILE: ansible/etcd.yml
================================================
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
---
# This playbook deploys Openwhisk Invokers.
- hosts: etcd
roles:
- etcd
================================================
FILE: ansible/files/activations_design_document_for_activations_db.json
================================================
{
"_id": "_design/activations",
"views": {
"byDate": {
"map": "function (doc) {\n if (doc.activationId !== undefined) try {\n emit(doc.start, [doc._id, doc._rev]);\n } catch (e) {}\n}"
}
},
"language": "javascript"
}
================================================
FILE: ansible/files/auth.guest
================================================
23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
================================================
FILE: ansible/files/auth.whisk.system
================================================
789c46b1-71f6-4ed5-8c54-816aa4f8c502:abczO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP
================================================
FILE: ansible/files/auth_design_document_for_subjects_db_v2.0.0.json
================================================
{
"_id": "_design/subjects.v2.0.0",
"views": {
"identities": {
"map": "function (doc) {\n if (doc.namespaces && !doc.blocked) {\n doc.namespaces.forEach(function(namespace) {\n var v = {_id: namespace.name + '/limits', namespace: namespace.name, uuid: namespace.uuid, key: namespace.key};\n emit([namespace.name], v);\n emit([namespace.uuid, namespace.key], v);\n });\n }\n}"
}
},
"language": "javascript",
"indexes": {}
}
================================================
FILE: ansible/files/filter_design_document.json
================================================
{
"_id": "_design/snapshotFilters",
"filters": {
"withoutDeletedAndDesignDocuments": "function(doc, req) {\n return !doc._deleted && !(doc._id.indexOf(\"_design/\") == 0);\n}"
}
}
================================================
FILE: ansible/files/genssl.sh
================================================
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
set -e
PASSWORD="openwhisk"
if [ "$#" -lt 3 ]; then
echo "usage: $0 <common name: host or ip> [server|client] <scriptdir> <OPTIONAL:TrustorePassword> <OPTIONAL:generateKey>"
exit
fi
CN=$1
TYPE=$2
SCRIPTDIR=$3
export TRUSTSTORE_PASSWORD=${4:-PASSWORD}
NAME_PREFIX=$5
GENKEY=$6
## generates a (self-signed) certificate
if [[ -n $GENKEY ]]
then
openssl genrsa -out "$SCRIPTDIR/${NAME_PREFIX}openwhisk-server-key.pem" 2048
fi
function gen_csr(){
echo generating server certificate request
openssl req -new \
-key "$SCRIPTDIR/${NAME_PREFIX}openwhisk-server-key.pem" \
-nodes \
-subj "/C=US/ST=NY/L=Yorktown/O=OpenWhisk/CN=$CN" \
-out "$SCRIPTDIR/${NAME_PREFIX}openwhisk-server-request.csr"
}
function gen_cert(){
echo generating self-signed password-less server certificate
openssl x509 -req \
-in "$SCRIPTDIR/${NAME_PREFIX}openwhisk-server-request.csr" \
-signkey "$SCRIPTDIR/${NAME_PREFIX}openwhisk-server-key.pem" \
-out "${SCRIPTDIR}/${NAME_PREFIX}openwhisk-server-cert.pem" \
-days 365
}
function gen_p12_keystore(){
openssl pkcs12 -export -name $CN \
-passout pass:$TRUSTSTORE_PASSWORD \
-in "$SCRIPTDIR/${NAME_PREFIX}openwhisk-server-cert.pem" \
-inkey "$SCRIPTDIR/${NAME_PREFIX}openwhisk-server-key.pem" \
-out "$SCRIPTDIR/${NAME_PREFIX}openwhisk-keystore.p12"
}
if [ "$TYPE" == "server_with_JKS_keystore" ]; then
gen_csr
gen_cert
echo generate new key and place it in the keystore
keytool -genkey -v \
-alias $CN \
-dname "C=US,ST=NY,L=Yorktown,O=OpenWhisk,CN=$CN" \
-keystore "${SCRIPTDIR}/${NAME_PREFIX}keystore.jks" \
-keypass:env TRUSTSTORE_PASSWORD \
-storepass:env TRUSTSTORE_PASSWORD \
-keyalg RSA \
-ext KeyUsage:critical="keyCertSign" \
-ext BasicConstraints:critical="ca:true" \
-validity 365
echo export private key from the keystore
keytool -keystore "${SCRIPTDIR}/${NAME_PREFIX}keystore.jks" -alias $CN -certreq -file "${SCRIPTDIR}/${NAME_PREFIX}cert-file" -storepass:env TRUSTSTORE_PASSWORD
echo sign the certificate with private key
openssl x509 -req -CA "${SCRIPTDIR}/${NAME_PREFIX}openwhisk-server-cert.pem" -CAkey "$SCRIPTDIR/${NAME_PREFIX}openwhisk-server-key.pem" -in "${SCRIPTDIR}/${NAME_PREFIX}cert-file" -out "${SCRIPTDIR}/${NAME_PREFIX}cert-signed" -days 365 -CAcreateserial -passin pass:$TRUSTSTORE_PASSWORD
echo import CA cert in the keystore
keytool -keystore "${SCRIPTDIR}/${NAME_PREFIX}keystore.jks" -alias CARoot -import -file "${SCRIPTDIR}/${NAME_PREFIX}openwhisk-server-cert.pem" -storepass:env TRUSTSTORE_PASSWORD -noprompt
echo import the private key in the keystore
keytool -keystore "${SCRIPTDIR}/${NAME_PREFIX}keystore.jks" -alias $CN -import -file "${SCRIPTDIR}/${NAME_PREFIX}cert-signed" -storepass:env TRUSTSTORE_PASSWORD -noprompt
elif [ "$TYPE" == "server" ]; then
gen_csr
gen_cert
echo generate keystore
gen_p12_keystore
elif [ "$TYPE" == "p12_keystore_only" ]; then
gen_csr
gen_p12_keystore
else
echo generating client ca key
openssl genrsa -aes256 -passout pass:$PASSWORD -out "$SCRIPTDIR/openwhisk-client-ca-key.pem" 2048
echo generating client ca request
openssl req -new \
-key "$SCRIPTDIR/openwhisk-client-ca-key.pem" \
-passin pass:$PASSWORD \
-subj "/C=US/ST=NY/L=Yorktown/O=OpenWhisk/CN=$CN" \
-out "$SCRIPTDIR/openwhisk-client-ca.csr"
echo generating client ca pem
openssl x509 -req \
-in "$SCRIPTDIR/openwhisk-client-ca.csr" \
-signkey "$SCRIPTDIR/openwhisk-client-ca-key.pem" \
-passin pass:$PASSWORD \
-out "$SCRIPTDIR/openwhisk-client-ca-cert.pem" \
-days 365 -sha1 -extensions v3_ca
echo generating client key
openssl genrsa -aes256 -passout pass:$PASSWORD -out "$SCRIPTDIR/openwhisk-client-key.pem" 2048
echo generating client certificate csr file
openssl req -new \
-key "$SCRIPTDIR/openwhisk-client-key.pem" \
-passin pass:$PASSWORD \
-subj "/C=US/ST=NY/L=Yorktown/O=OpenWhisk/CN=guest" \
-out "$SCRIPTDIR/openwhisk-client-certificate-request.csr"
echo generating self-signed client certificate
echo 01 > $SCRIPTDIR/openwhisk-client-ca-cert.srl
openssl x509 -req \
-in "$SCRIPTDIR/openwhisk-client-certificate-request.csr" \
-CA "$SCRIPTDIR/openwhisk-client-ca-cert.pem" \
-CAkey "$SCRIPTDIR/openwhisk-client-ca-key.pem" \
-CAserial "$SCRIPTDIR/openwhisk-client-ca-cert.srl" \
-passin pass:$PASSWORD \
-out "$SCRIPTDIR/openwhisk-client-cert.pem" \
-days 365 -sha1 -extensions v3_req
echo remove client key\'s password
openssl rsa \
-in "$SCRIPTDIR/openwhisk-client-key.pem" \
-passin pass:$PASSWORD \
-out "$SCRIPTDIR/openwhisk-client-key.pem"
fi
================================================
FILE: ansible/files/logCleanup_design_document_for_activations_db.json
================================================
{
"_id": "_design/logCleanup",
"views": {
"byDateWithLogs": {
"map": "function (doc) {\n if (doc.activationId !== undefined && doc.logs && doc.logs.length > 0) try {\n var deleteLogs = true;\n for (i = 0; i < doc.annotations.length; i++) {\n var a = doc.annotations[i];\n if (a.key == \"kind\") {\n deleteLogs = a.value != \"sequence\";\n break;\n }\n }\n if (deleteLogs) {\n emit(doc.start, doc._id);\n }\n } catch (e) {}\n}"
}
},
"language": "javascript"
}
================================================
FILE: ansible/files/namespace_throttlings_design_document_for_subjects_db.json
================================================
{
"_id": "_design/namespaceThrottlings",
"views": {
"blockedNamespaces": {
"map": "function (doc) {\n if (doc._id.indexOf(\"/limits\") >= 0) {\n if (doc.concurrentInvocations === 0 || doc.invocationsPerMinute === 0) {\n var namespace = doc._id.replace(\"/limits\", \"\");\n emit(namespace, 1);\n }\n } else if (doc.subject && doc.namespaces && doc.blocked) {\n doc.namespaces.forEach(function(namespace) {\n emit(namespace.name, 1);\n });\n }\n}",
"reduce": "_sum"
}
},
"language": "javascript"
}
================================================
FILE: ansible/files/package-versions.ini
================================================
[openwhisk-cli]
git_tag=latest
================================================
FILE: ansible/files/runtimes-nodeonly.json
================================================
{
"description": [
"This file describes the different languages (aka. managed action runtimes) supported by the system",
"as well as blackbox images that support the runtime specification.",
"Only actions with runtime families / kinds defined here can be created / read / updated / deleted / invoked.",
"Define a list of runtime families (example: 'nodejs') with at least one kind per family (example: 'nodejs:20').",
"Each runtime family needs a default kind (default: true).",
"When removing or renaming runtime families or runtime kinds from this file, preexisting actions",
"with the affected kinds can no longer be read / updated / deleted / invoked. In order to remove or rename",
"runtime families or runtime kinds, mark all affected runtime kinds as deprecated (deprecated: true) and",
"perform a manual migration of all affected actions.",
"",
"This file is meant to list a small set of runtimes used by the GitHub Action system tests. Using a small set of runtimes",
"instead of all runtimes maintained by the Apache Openwhisk community speeds up tests."
],
"runtimes": {
"nodejs": [
{
"kind": "nodejs:20",
"default": true,
"image": {
"prefix": "openwhisk",
"name": "action-nodejs-v20",
"tag": "nightly"
},
"deprecated": false,
"attached": {
"attachmentName": "codefile",
"attachmentType": "text/plain"
},
"stemCells": [{
"count": 2,
"memory": "256 MB"
}]
}
]
},
"blackboxes": [
{
"prefix": "openwhisk",
"name": "dockerskeleton",
"tag": "nightly"
}
]
}
================================================
FILE: ansible/files/runtimes.json
================================================
{
"description": [
"This file describes the different languages (aka. managed action runtimes) supported by the system",
"as well as blackbox images that support the runtime specification.",
"Only actions with runtime families / kinds defined here can be created / read / updated / deleted / invoked.",
"Define a list of runtime families (example: 'nodejs') with at least one kind per family (example: 'nodejs:20').",
"Each runtime family needs a default kind (default: true).",
"When removing or renaming runtime families or runtime kinds from this file, preexisting actions",
"with the affected kinds can no longer be read / updated / deleted / invoked. In order to remove or rename",
"runtime families or runtime kinds, mark all affected runtime kinds as deprecated (deprecated: true) and",
"perform a manual migration of all affected actions.",
"",
"This file is meant to list all stable runtimes supported by the Apache Openwhisk community."
],
"runtimes": {
"nodejs": [
{
"kind": "nodejs:18",
"default": false,
"image": {
"prefix": "openwhisk",
"name": "action-nodejs-v18",
"tag": "nightly"
},
"deprecated": false,
"attached": {
"attachmentName": "codefile",
"attachmentType": "text/plain"
}
},
{
"kind": "nodejs:20",
"default": true,
"image": {
"prefix": "openwhisk",
"name": "action-nodejs-v20",
"tag": "nightly"
},
"deprecated": false,
"attached": {
"attachmentName": "codefile",
"attachmentType": "text/plain"
},
"stemCells": [
{
"initialCount": 2,
"memory": "256 MB",
"reactive": {
"minCount": 1,
"maxCount": 4,
"ttl": "2 minutes",
"threshold": 1,
"increment": 1
}
}
]
}
],
"python": [
{
"kind": "python:3.10",
"default": true,
"image": {
"prefix": "openwhisk",
"name": "action-python-v3.10",
"tag": "nightly"
},
"deprecated": false,
"attached": {
"attachmentName": "codefile",
"attachmentType": "text/plain"
}
},
{
"kind": "python:3.11",
"default": false,
"image": {
"prefix": "openwhisk",
"name": "action-python-v3.11",
"tag": "nightly"
},
"deprecated": false,
"attached": {
"attachmentName": "codefile",
"attachmentType": "text/plain"
}
}
],
"swift": [
{
"kind": "swift:5.3",
"default": true,
"image": {
"prefix": "openwhisk",
"name": "action-swift-v5.3",
"tag": "nightly"
},
"deprecated": false,
"attached": {
"attachmentName": "codefile",
"attachmentType": "text/plain"
}
},
{
"kind": "swift:5.7",
"default": false,
"image": {
"prefix": "openwhisk",
"name": "action-swift-v5.7",
"tag": "nightly"
},
"deprecated": false,
"attached": {
"attachmentName": "codefile",
"attachmentType": "text/plain"
}
}
],
"java": [
{
"kind": "java:8",
"default": true,
"image": {
"prefix": "openwhisk",
"name": "java8action",
"tag": "nightly"
},
"deprecated": false,
"attached": {
"attachmentName": "codefile",
"attachmentType": "text/plain"
},
"requireMain": true
}
],
"php": [
{
"kind": "php:8.1",
"default": true,
"deprecated": false,
"image": {
"prefix": "openwhisk",
"name": "action-php-v8.1",
"tag": "nightly"
},
"attached": {
"attachmentName": "codefile",
"attachmentType": "text/plain"
}
}
],
"ruby": [
{
"kind": "ruby:2.5",
"default": true,
"deprecated": false,
"attached": {
"attachmentName": "codefile",
"attachmentType": "text/plain"
},
"image": {
"prefix": "openwhisk",
"name": "action-ruby-v2.5",
"tag": "nightly"
}
}
],
"go": [
{
"kind": "go:1.20",
"default": true,
"deprecated": false,
"attached": {
"attachmentName": "codefile",
"attachmentType": "text/plain"
},
"image": {
"prefix": "openwhisk",
"name": "action-golang-v1.20",
"tag": "nightly"
}
}
],
"dotnet": [
{
"kind": "dotnet:3.1",
"default": true,
"deprecated": false,
"requireMain": true,
"image": {
"prefix": "openwhisk",
"name": "action-dotnet-v3.1",
"tag": "nightly"
},
"attached": {
"attachmentName": "codefile",
"attachmentType": "text/plain"
}
},
{
"kind": "dotnet:6.0",
"default": false,
"deprecated": false,
"requireMain": true,
"image": {
"prefix": "openwhisk",
"name": "action-dotnet-v6.0",
"tag": "nightly"
},
"attached": {
"attachmentName": "codefile",
"attachmentType": "text/plain"
}
}
],
"rust": [
{
"kind": "rust:1.34",
"default": true,
"image": {
"prefix": "openwhisk",
"name": "action-rust-v1.34",
"tag": "nightly"
},
"deprecated": false,
"attached": {
"attachmentName": "codefile",
"attachmentType": "text/plain"
}
}
]
},
"blackboxes": [
{
"prefix": "openwhisk",
"name": "dockerskeleton",
"tag": "nightly"
}
]
}
================================================
FILE: ansible/files/whisks_design_document_for_activations_db_filters_v2.1.0.json
================================================
{
"_id": "_design/whisks-filters.v2.1.0",
"language": "javascript",
"views": {
"activations": {
"map": "function (doc) {\n var PATHSEP = \"/\";\n var isActivation = function (doc) { return (doc.activationId !== undefined) };\n var summarize = function (doc) {\n var endtime = doc.end !== 0 ? doc.end : undefined;\n return {\n namespace: doc.namespace,\n name: doc.name,\n version: doc.version,\n publish: doc.publish,\n annotations: doc.annotations,\n activationId: doc.activationId,\n start: doc.start,\n end: endtime,\n duration: endtime !== undefined ? endtime - doc.start : undefined,\n cause: doc.cause,\n statusCode: (endtime !== undefined && doc.response !== undefined && doc.response.statusCode !== undefined) ? doc.response.statusCode : undefined\n }\n };\n\n var pathFilter = function(doc) {\n for (i = 0; i < doc.annotations.length; i++) {\n var a = doc.annotations[i];\n if (a.key == \"path\") try {\n var p = a.value.split(PATHSEP);\n if (p.length == 3) {\n return p[1] + PATHSEP + doc.name;\n } else return doc.name;\n } catch (e) {\n return doc.name;\n }\n }\n return doc.name;\n }\n\n if (isActivation(doc)) try {\n var value = summarize(doc)\n emit([doc.namespace+PATHSEP+pathFilter(doc), doc.start], value);\n } catch (e) {}\n}\n",
"reduce": "_count"
}
}
}
================================================
FILE: ansible/files/whisks_design_document_for_activations_db_filters_v2.1.1.json
================================================
{
"_id": "_design/whisks-filters.v2.1.1",
"language": "javascript",
"views": {
"activations": {
"map": "function (doc) {\n var PATHSEP = \"/\";\n var isActivation = function (doc) { return (doc.activationId !== undefined) };\n var summarize = function (doc) {\n var endtime = doc.end !== 0 ? doc.end : undefined;\n return {\n namespace: doc.namespace,\n name: doc.name,\n version: doc.version,\n publish: doc.publish,\n annotations: doc.annotations,\n activationId: doc.activationId,\n start: doc.start,\n end: endtime,\n duration: endtime !== undefined ? endtime - doc.start : undefined,\n cause: doc.cause,\n statusCode: (endtime !== undefined && doc.response !== undefined && doc.response.statusCode !== undefined) ? doc.response.statusCode : undefined\n }\n };\n \n var pathFilter = function(doc) {\n var path = undefined;\n var binding = undefined;\n for (i = 0; i < doc.annotations.length; i++) {\n var a = doc.annotations[i];\n if (a.key == \"path\") {\n path = a.value;\n }\n if (a.key == \"binding\") {\n binding = a.value;\n }\n }\n try {\n if (binding) {\n var b = binding.split(PATHSEP)\n return b[1] + PATHSEP + doc.name;\n }\n if (path) {\n var p = path.split(PATHSEP);\n if (p.length == 3) {\n return p[1] + PATHSEP + doc.name;\n } else return doc.name; \n }\n } catch (e) {\n return doc.name;\n }\n return doc.name;\n }\n\n if (isActivation(doc)) try {\n var value = summarize(doc)\n emit([doc.namespace+PATHSEP+pathFilter(doc), doc.start], value);\n } catch (e) {}\n}\n",
"reduce": "_count"
}
}
}
================================================
FILE: ansible/files/whisks_design_document_for_activations_db_v2.1.0.json
================================================
{
"_id": "_design/whisks.v2.1.0",
"language": "javascript",
"views": {
"activations": {
"map": "function (doc) {\n var PATHSEP = \"/\";\n var isActivation = function (doc) { return (doc.activationId !== undefined) };\n var summarize = function (doc) {\n var endtime = doc.end !== 0 ? doc.end : undefined;\n return {\n namespace: doc.namespace,\n name: doc.name,\n version: doc.version,\n publish: doc.publish,\n annotations: doc.annotations,\n activationId: doc.activationId,\n start: doc.start,\n end: endtime,\n duration: endtime !== undefined ? endtime - doc.start : undefined,\n cause: doc.cause,\n statusCode: (endtime !== undefined && doc.response !== undefined && doc.response.statusCode !== undefined) ? doc.response.statusCode : undefined\n }\n };\n\n if (isActivation(doc)) try {\n var value = summarize(doc)\n emit([doc.namespace, doc.start], value);\n } catch (e) {}\n}\n",
"reduce": "_count"
}
}
}
================================================
FILE: ansible/files/whisks_design_document_for_entities_db_v2.1.0.json
================================================
{
"_id": "_design/whisks.v2.1.0",
"language": "javascript",
"views": {
"rules": {
"map": "function (doc) {\n var PATHSEP = \"/\";\n var isRule = function (doc) { return (doc.trigger !== undefined) };\n if (isRule(doc)) try {\n var ns = doc.namespace.split(PATHSEP);\n var root = ns[0];\n emit([doc.namespace, doc.updated], 1);\n if (root !== doc.namespace) {\n emit([root, doc.updated], 1);\n }\n } catch (e) {}\n}",
"reduce": "_count"
},
"packages-public": {
"map": "function (doc) {\n var isPublicPackage = function(doc) { \n return doc.binding && doc.publish && Object.keys(doc.binding).length == 0;\n }\n if (isPublicPackage(doc)) try {\n var value = {\n namespace: doc.namespace,\n name: doc.name,\n version: doc.version,\n publish: doc.publish,\n annotations: doc.annotations,\n updated: doc.updated,\n binding: false\n };\n emit([doc.namespace, doc.updated], value);\n } catch (e) {}\n}",
"reduce": "_count"
},
"packages": {
"map": "function (doc) {\n var isPackage = function (doc) { return (doc.binding !== undefined) };\n if (isPackage(doc)) try {\n var value = {\n namespace: doc.namespace,\n name: doc.name,\n version: doc.version,\n publish: doc.publish,\n annotations: doc.annotations,\n updated: doc.updated\n };\n if (Object.keys(doc.binding).length > 0) {\n value.binding = doc.binding;\n } else {\n value.binding = false;\n }\n emit([doc.namespace, doc.updated], value);\n } catch (e) {}\n}",
"reduce": "_count"
},
"actions": {
"map": "function (doc) {\n var PATHSEP = \"/\";\n var isAction = function (doc) { return (doc.exec !== undefined) };\n if (isAction(doc)) try {\n var ns = doc.namespace.split(PATHSEP);\n var root = ns[0];\n var value = {\n namespace: doc.namespace,\n name: doc.name,\n version: doc.version,\n publish: doc.publish,\n annotations: doc.annotations,\n limits: doc.limits,\n exec: { binary: doc.exec.binary || false},\n updated: doc.updated\n };\n emit([doc.namespace, doc.updated], value);\n if (root !== doc.namespace) {\n emit([root, doc.updated], value);\n }\n } catch (e) {}\n}",
"reduce": "_count"
},
"triggers": {
"map": "function (doc) {\n var PATHSEP = \"/\";\n var isTrigger = function (doc) { return (doc.exec === undefined && doc.binding === undefined && doc.parameters !== undefined) };\n if (isTrigger(doc)) try {\n var ns = doc.namespace.split(PATHSEP);\n var root = ns[0];\n var value = {\n namespace: doc.namespace,\n name: doc.name,\n version: doc.version,\n publish: doc.publish,\n annotations: doc.annotations,\n updated: doc.updated\n };\n emit([doc.namespace, doc.updated], value);\n if (root !== doc.namespace) {\n emit([root, doc.updated], value);\n }\n } catch (e) {}\n}",
"reduce": "_count"
}
}
}
================================================
FILE: ansible/group_vars/all
================================================
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
mode: deploy
lean: false
prompt_user: true
openwhisk_home: "{{ lookup('env', 'OPENWHISK_HOME') | default(playbook_dir ~ '/..', true) }}"
openwhisk_cli_home: "{{ lookup('env', 'OPENWHISK_CLI') | default(openwhisk_home ~ '/../openwhisk-cli', true) }}"
exclude_logs_from: []
# This whisk_api_localhost_name_default is used to configure nginx to permit vanity URLs for web actions
# for local deployment. For a public deployment, the specific environment group vars should define
# whisk_api_host_name; this is available to actions and hence must resolve from inside an action container
# specific to the deployment (i.e., it may be an IP address rather than a hostname in some cases).
# For a local deployment, use whisk_api_localhost_name. For a deployment which requires
# different name resolution between the whisk_api_host_name and the whisk_api_local_host_name, both should
# be defined so that the nginx configuration for the server name reflects the public facing naming (of the
# edge router) even if it is
gitextract_6g47ow7y/
├── .asf.yaml
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ └── proposal.md
│ ├── ISSUE_TEMPLATE.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── 0-on-demand.yaml
│ ├── 1-unit.yaml
│ ├── 2-system.yaml
│ ├── 3-multi-runtime.yaml
│ ├── 4-standalone.yaml
│ ├── 5-scheduler.yaml
│ ├── 6-performance.yaml
│ └── README.md
├── .gitignore
├── .pydevproject
├── .scalafmt.conf
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── CREDITS.txt
├── Jenkinsfile
├── LICENSE.txt
├── NOTICE.txt
├── README.md
├── ansible/
│ ├── README.md
│ ├── ansible.cfg
│ ├── apigateway.yml
│ ├── callbacks/
│ │ └── logformatter.py
│ ├── controller.yml
│ ├── couchdb.yml
│ ├── downloadcli-github.yml
│ ├── downloadcli.yml
│ ├── edge.yml
│ ├── elasticsearch.yml
│ ├── environments/
│ │ ├── docker-machine/
│ │ │ ├── group_vars/
│ │ │ │ └── all
│ │ │ └── hosts.j2.ini
│ │ └── local/
│ │ ├── group_vars/
│ │ │ └── all
│ │ └── hosts.j2.ini
│ ├── etcd.yml
│ ├── files/
│ │ ├── activations_design_document_for_activations_db.json
│ │ ├── auth.guest
│ │ ├── auth.whisk.system
│ │ ├── auth_design_document_for_subjects_db_v2.0.0.json
│ │ ├── filter_design_document.json
│ │ ├── genssl.sh
│ │ ├── logCleanup_design_document_for_activations_db.json
│ │ ├── namespace_throttlings_design_document_for_subjects_db.json
│ │ ├── package-versions.ini
│ │ ├── runtimes-nodeonly.json
│ │ ├── runtimes.json
│ │ ├── whisks_design_document_for_activations_db_filters_v2.1.0.json
│ │ ├── whisks_design_document_for_activations_db_filters_v2.1.1.json
│ │ ├── whisks_design_document_for_activations_db_v2.1.0.json
│ │ └── whisks_design_document_for_entities_db_v2.1.0.json
│ ├── group_vars/
│ │ └── all
│ ├── initMongoDB.yml
│ ├── initdb.yml
│ ├── invoker.yml
│ ├── kafka.yml
│ ├── library/
│ │ └── mongodb.py
│ ├── logs.yml
│ ├── mongodb.yml
│ ├── openwhisk.yml
│ ├── postdeploy.yml
│ ├── prereq.yml
│ ├── properties.yml
│ ├── publish.yml
│ ├── recreateDesignDocs.yml
│ ├── roles/
│ │ ├── apigateway/
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── cli/
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── cli-install/
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── controller/
│ │ │ ├── tasks/
│ │ │ │ ├── clean.yml
│ │ │ │ ├── deploy.yml
│ │ │ │ ├── join_pekko_cluster.yml
│ │ │ │ ├── lean.yml
│ │ │ │ └── main.yml
│ │ │ └── templates/
│ │ │ └── config.j2
│ │ ├── couchdb/
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── elasticsearch/
│ │ │ ├── tasks/
│ │ │ │ ├── clean.yml
│ │ │ │ ├── deploy.yml
│ │ │ │ └── main.yml
│ │ │ └── templates/
│ │ │ ├── elasticsearch.yml.j2
│ │ │ └── log4j2.properties.j2
│ │ ├── etcd/
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── invoker/
│ │ │ ├── tasks/
│ │ │ │ ├── clean.yml
│ │ │ │ ├── deploy.yml
│ │ │ │ └── main.yml
│ │ │ └── templates/
│ │ │ └── config.j2
│ │ ├── kafka/
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── mongodb/
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── nginx/
│ │ │ ├── files/
│ │ │ │ └── openwhisk-server-key.pem
│ │ │ ├── tasks/
│ │ │ │ ├── clean.yml
│ │ │ │ ├── deploy.yml
│ │ │ │ └── main.yml
│ │ │ └── templates/
│ │ │ └── nginx.conf.j2
│ │ ├── prereq/
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── redis/
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── routemgmt/
│ │ │ ├── files/
│ │ │ │ ├── installRouteMgmt.sh
│ │ │ │ └── uninstallRouteMgmt.sh
│ │ │ └── tasks/
│ │ │ ├── clean.yml
│ │ │ ├── deploy.yml
│ │ │ └── main.yml
│ │ ├── schedulers/
│ │ │ ├── tasks/
│ │ │ │ ├── clean.yml
│ │ │ │ ├── deploy.yml
│ │ │ │ ├── join_pekko_cluster.yml
│ │ │ │ └── main.yml
│ │ │ └── templates/
│ │ │ └── jmx.yml.j2
│ │ └── zookeeper/
│ │ └── tasks/
│ │ ├── clean.yml
│ │ ├── deploy.yml
│ │ └── main.yml
│ ├── routemgmt.yml
│ ├── scheduler.yml
│ ├── setup.yml
│ ├── tasks/
│ │ ├── db/
│ │ │ ├── checkDb.yml
│ │ │ ├── createUsers.yml
│ │ │ ├── grantPermissions.yml
│ │ │ ├── recreateDb.yml
│ │ │ └── recreateDoc.yml
│ │ ├── docker_login.yml
│ │ ├── gen_erl_cookie.yml
│ │ ├── initdb.yml
│ │ ├── installOpenwhiskCatalog.yml
│ │ ├── recreateViews.yml
│ │ ├── wipeDatabase.yml
│ │ └── writeWhiskProperties.yml
│ ├── teardown.yml
│ ├── templates/
│ │ ├── db_local.ini.j2
│ │ ├── jmxremote.access.j2
│ │ ├── jmxremote.password.j2
│ │ ├── whisk.conf.j2
│ │ └── whisk.properties.j2
│ ├── wipe.yml
│ └── yamllint.yml
├── build.gradle
├── common/
│ └── scala/
│ ├── .dockerignore
│ ├── Dockerfile
│ ├── Dockerfile-debian
│ ├── build.gradle
│ ├── copyJMXFiles.sh
│ ├── src/
│ │ └── main/
│ │ ├── resources/
│ │ │ ├── application.conf
│ │ │ ├── logback.xml
│ │ │ ├── logging.conf
│ │ │ ├── reference.conf
│ │ │ └── s3-reference.conf
│ │ └── scala/
│ │ └── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ ├── common/
│ │ │ ├── AverageRingBuffer.scala
│ │ │ ├── CausedBy.scala
│ │ │ ├── Config.scala
│ │ │ ├── ConfigMXBean.scala
│ │ │ ├── ConfigMapValue.scala
│ │ │ ├── Counter.scala
│ │ │ ├── ExecutorCloser.scala
│ │ │ ├── ForcibleSemaphore.scala
│ │ │ ├── Https.scala
│ │ │ ├── Logging.scala
│ │ │ ├── Message.scala
│ │ │ ├── NestedSemaphore.scala
│ │ │ ├── Prometheus.scala
│ │ │ ├── ResizableSemaphore.scala
│ │ │ ├── RingBuffer.scala
│ │ │ ├── Scheduler.scala
│ │ │ ├── TransactionId.scala
│ │ │ ├── UserEvents.scala
│ │ │ ├── WhiskInstants.scala
│ │ │ ├── time/
│ │ │ │ └── Clock.scala
│ │ │ └── tracing/
│ │ │ └── OpenTracingProvider.scala
│ │ ├── connector/
│ │ │ ├── kafka/
│ │ │ │ ├── KafkaConsumerConnector.scala
│ │ │ │ ├── KafkaMessagingProvider.scala
│ │ │ │ ├── KafkaMetrics.scala
│ │ │ │ ├── KafkaProducerConnector.scala
│ │ │ │ └── KamonMetricsReporter.scala
│ │ │ └── lean/
│ │ │ ├── LeanConsumer.scala
│ │ │ ├── LeanMessagingProvider.scala
│ │ │ └── LeanProducer.scala
│ │ ├── core/
│ │ │ ├── FeatureFlags.scala
│ │ │ ├── WarmUp.scala
│ │ │ ├── WhiskConfig.scala
│ │ │ ├── ack/
│ │ │ │ ├── Ack.scala
│ │ │ │ ├── HealthActionAck.scala
│ │ │ │ └── MessagingActiveAck.scala
│ │ │ ├── connector/
│ │ │ │ ├── Message.scala
│ │ │ │ ├── MessageConsumer.scala
│ │ │ │ ├── MessageProducer.scala
│ │ │ │ └── MessagingProvider.scala
│ │ │ ├── containerpool/
│ │ │ │ ├── ApacheBlockingContainerClient.scala
│ │ │ │ ├── Container.scala
│ │ │ │ ├── ContainerClient.scala
│ │ │ │ ├── ContainerFactory.scala
│ │ │ │ ├── PekkoContainerClient.scala
│ │ │ │ └── logging/
│ │ │ │ ├── DockerToActivationFileLogStore.scala
│ │ │ │ ├── DockerToActivationLogStore.scala
│ │ │ │ ├── ElasticSearchLogStore.scala
│ │ │ │ ├── ElasticSearchRestClient.scala
│ │ │ │ ├── LogDriverLogStore.scala
│ │ │ │ ├── LogStore.scala
│ │ │ │ └── SplunkLogStore.scala
│ │ │ ├── database/
│ │ │ │ ├── ActivationFileStorage.scala
│ │ │ │ ├── ActivationStore.scala
│ │ │ │ ├── ActivationStoreLevel.scala
│ │ │ │ ├── ArtifactActivationStore.scala
│ │ │ │ ├── ArtifactStore.scala
│ │ │ │ ├── ArtifactStoreExceptions.scala
│ │ │ │ ├── ArtifactStoreProvider.scala
│ │ │ │ ├── ArtifactWithFileStorageActivationStore.scala
│ │ │ │ ├── AttachmentStore.scala
│ │ │ │ ├── AttachmentSupport.scala
│ │ │ │ ├── Batcher.scala
│ │ │ │ ├── ConcurrentMapBackedCache.scala
│ │ │ │ ├── CouchDbRestClient.scala
│ │ │ │ ├── CouchDbRestStore.scala
│ │ │ │ ├── CouchDbStoreProvider.scala
│ │ │ │ ├── DocumentFactory.scala
│ │ │ │ ├── DocumentHandler.scala
│ │ │ │ ├── MultipleReadersSingleWriterCache.scala
│ │ │ │ ├── RemoteCacheInvalidation.scala
│ │ │ │ ├── StoreUtils.scala
│ │ │ │ ├── azblob/
│ │ │ │ │ └── AzureBlobAttachmentStore.scala
│ │ │ │ ├── cosmosdb/
│ │ │ │ │ ├── CollectionResourceUsage.scala
│ │ │ │ │ ├── CosmosDBArtifactStore.scala
│ │ │ │ │ ├── CosmosDBArtifactStoreProvider.scala
│ │ │ │ │ ├── CosmosDBConfig.scala
│ │ │ │ │ ├── CosmosDBSupport.scala
│ │ │ │ │ ├── CosmosDBUtil.scala
│ │ │ │ │ ├── CosmosDBViewMapper.scala
│ │ │ │ │ ├── IndexingPolicy.scala
│ │ │ │ │ ├── ReferenceCounted.scala
│ │ │ │ │ ├── RetryMetricsCollector.scala
│ │ │ │ │ └── RxObservableImplicits.scala
│ │ │ │ ├── elasticsearch/
│ │ │ │ │ └── ElasticSearchActivationStore.scala
│ │ │ │ ├── memory/
│ │ │ │ │ ├── MemoryArtifactStore.scala
│ │ │ │ │ ├── MemoryAttachmentStore.scala
│ │ │ │ │ ├── MemoryViewMapper.scala
│ │ │ │ │ └── NoopActivationStore.scala
│ │ │ │ ├── mongodb/
│ │ │ │ │ ├── MongoDBArtifactStore.scala
│ │ │ │ │ ├── MongoDBArtifactStoreProvider.scala
│ │ │ │ │ ├── MongoDBAsyncStreamSink.scala
│ │ │ │ │ ├── MongoDBAsyncStreamSource.scala
│ │ │ │ │ └── MongoDBViewMapper.scala
│ │ │ │ └── s3/
│ │ │ │ ├── CloudFrontSigner.scala
│ │ │ │ └── S3AttachmentStore.scala
│ │ │ ├── entitlement/
│ │ │ │ └── Privilege.scala
│ │ │ ├── entity/
│ │ │ │ ├── ActivationEntityLimit.scala
│ │ │ │ ├── ActivationId.scala
│ │ │ │ ├── ActivationLogs.scala
│ │ │ │ ├── ActivationResult.scala
│ │ │ │ ├── Annotations.scala
│ │ │ │ ├── ArgNormalizer.scala
│ │ │ │ ├── Attachments.scala
│ │ │ │ ├── BasicAuthenticationAuthKey.scala
│ │ │ │ ├── CacheKey.scala
│ │ │ │ ├── CreationId.scala
│ │ │ │ ├── DocInfo.scala
│ │ │ │ ├── DocumentReader.scala
│ │ │ │ ├── EntityPath.scala
│ │ │ │ ├── Exec.scala
│ │ │ │ ├── ExecManifest.scala
│ │ │ │ ├── FullyQualifiedEntityName.scala
│ │ │ │ ├── GenericAuthKey.scala
│ │ │ │ ├── Identity.scala
│ │ │ │ ├── InstanceConcurrencyLimit.scala
│ │ │ │ ├── InstanceId.scala
│ │ │ │ ├── IntraConcurrencyLimit.scala
│ │ │ │ ├── Limits.scala
│ │ │ │ ├── LimitsExceptions.scala
│ │ │ │ ├── LogLimit.scala
│ │ │ │ ├── MemoryLimit.scala
│ │ │ │ ├── Parameter.scala
│ │ │ │ ├── ParameterEncryption.scala
│ │ │ │ ├── Secret.scala
│ │ │ │ ├── SemVer.scala
│ │ │ │ ├── Size.scala
│ │ │ │ ├── Subject.scala
│ │ │ │ ├── TimeLimit.scala
│ │ │ │ ├── UUID.scala
│ │ │ │ ├── WhiskAction.scala
│ │ │ │ ├── WhiskActivation.scala
│ │ │ │ ├── WhiskAuth.scala
│ │ │ │ ├── WhiskEntity.scala
│ │ │ │ ├── WhiskPackage.scala
│ │ │ │ ├── WhiskRule.scala
│ │ │ │ ├── WhiskStore.scala
│ │ │ │ └── WhiskTrigger.scala
│ │ │ ├── etcd/
│ │ │ │ ├── EtcdClient.scala
│ │ │ │ ├── EtcdUtils.scala
│ │ │ │ └── EtcdWorker.scala
│ │ │ ├── service/
│ │ │ │ ├── DataManagementService.scala
│ │ │ │ ├── LeaseKeepAliveService.scala
│ │ │ │ └── WatcherService.scala
│ │ │ └── yarn/
│ │ │ ├── YARNComponentActor.scala
│ │ │ ├── YARNContainerFactory.scala
│ │ │ ├── YARNContainerInfoActor.scala
│ │ │ ├── YARNRESTUtil.scala
│ │ │ └── YARNTask.scala
│ │ ├── http/
│ │ │ ├── BasicHttpService.scala
│ │ │ ├── BasicRasService.scala
│ │ │ ├── CorsSettings.scala
│ │ │ ├── ErrorResponse.scala
│ │ │ ├── LenientSprayJsonSupport.scala
│ │ │ └── PoolingRestClient.scala
│ │ ├── spi/
│ │ │ └── SpiLoader.scala
│ │ └── utils/
│ │ ├── Exceptions.scala
│ │ ├── ExecutionContextFactory.scala
│ │ ├── JsHelpers.scala
│ │ ├── Retry.scala
│ │ └── TimeHelpers.scala
│ └── transformEnvironment.sh
├── core/
│ ├── controller/
│ │ ├── .dockerignore
│ │ ├── Dockerfile
│ │ ├── Dockerfile-debian
│ │ ├── Dockerfile.cov
│ │ ├── build.gradle
│ │ ├── init.sh
│ │ └── src/
│ │ └── main/
│ │ ├── resources/
│ │ │ ├── apiv1swagger.json
│ │ │ ├── application.conf
│ │ │ ├── infoswagger.json
│ │ │ └── reference.conf
│ │ └── scala/
│ │ └── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ └── core/
│ │ ├── controller/
│ │ │ ├── Actions.scala
│ │ │ ├── Activations.scala
│ │ │ ├── ApiUtils.scala
│ │ │ ├── AuthenticatedRoute.scala
│ │ │ ├── AuthorizedRouteDispatcher.scala
│ │ │ ├── Backend.scala
│ │ │ ├── BasicAuthenticationDirective.scala
│ │ │ ├── Controller.scala
│ │ │ ├── Entities.scala
│ │ │ ├── Limits.scala
│ │ │ ├── Namespaces.scala
│ │ │ ├── Packages.scala
│ │ │ ├── RestAPIs.scala
│ │ │ ├── Rules.scala
│ │ │ ├── Triggers.scala
│ │ │ ├── WebActions.scala
│ │ │ └── actions/
│ │ │ ├── PostActionActivation.scala
│ │ │ ├── PrimitiveActions.scala
│ │ │ └── SequenceActions.scala
│ │ ├── entitlement/
│ │ │ ├── ActionCollection.scala
│ │ │ ├── ActivationThrottler.scala
│ │ │ ├── Collection.scala
│ │ │ ├── Entitlement.scala
│ │ │ ├── FPCEntitlement.scala
│ │ │ ├── KindRestrictor.scala
│ │ │ ├── LocalEntitlement.scala
│ │ │ ├── PackageCollection.scala
│ │ │ └── RateThrottler.scala
│ │ └── loadBalancer/
│ │ ├── CommonLoadBalancer.scala
│ │ ├── FPCPoolBalancer.scala
│ │ ├── FeedFactory.scala
│ │ ├── InvokerPoolFactory.scala
│ │ ├── InvokerSupervision.scala
│ │ ├── LeanBalancer.scala
│ │ ├── LoadBalancer.scala
│ │ └── ShardingContainerPoolBalancer.scala
│ ├── cosmosdb/
│ │ └── cache-invalidator/
│ │ ├── .dockerignore
│ │ ├── Dockerfile
│ │ ├── Dockerfile-debian
│ │ ├── README.md
│ │ ├── build.gradle
│ │ ├── docker-compose.yml
│ │ ├── init.sh
│ │ └── src/
│ │ └── main/
│ │ ├── resources/
│ │ │ ├── application.conf
│ │ │ └── reference.conf
│ │ └── scala/
│ │ └── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ └── core/
│ │ └── database/
│ │ └── cosmosdb/
│ │ └── cache/
│ │ ├── CacheInvalidator.scala
│ │ ├── CacheInvalidatorConfig.scala
│ │ ├── ChangeFeedConsumer.scala
│ │ ├── KafkaEventProducer.scala
│ │ ├── Main.scala
│ │ └── WhiskChangeEventObserver.scala
│ ├── invoker/
│ │ ├── .dockerignore
│ │ ├── Dockerfile
│ │ ├── Dockerfile-debian
│ │ ├── Dockerfile.cov
│ │ ├── build.gradle
│ │ ├── init.sh
│ │ └── src/
│ │ └── main/
│ │ ├── resources/
│ │ │ └── application.conf
│ │ └── scala/
│ │ └── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ └── core/
│ │ ├── containerpool/
│ │ │ ├── ContainerPool.scala
│ │ │ ├── ContainerProxy.scala
│ │ │ ├── docker/
│ │ │ │ ├── DockerCliLogStore.scala
│ │ │ │ ├── DockerClient.scala
│ │ │ │ ├── DockerClientWithFileAccess.scala
│ │ │ │ ├── DockerContainer.scala
│ │ │ │ ├── DockerContainerFactory.scala
│ │ │ │ ├── DockerForMacContainerFactory.scala
│ │ │ │ ├── ProcessRunner.scala
│ │ │ │ ├── RuncClient.scala
│ │ │ │ └── StandaloneDockerContainerFactory.scala
│ │ │ ├── kubernetes/
│ │ │ │ ├── KubernetesClient.scala
│ │ │ │ ├── KubernetesContainer.scala
│ │ │ │ ├── KubernetesContainerFactory.scala
│ │ │ │ └── WhiskPodBuilder.scala
│ │ │ └── v2/
│ │ │ ├── ActivationClientProxy.scala
│ │ │ ├── FunctionPullingContainerPool.scala
│ │ │ ├── FunctionPullingContainerProxy.scala
│ │ │ └── InvokerHealthManager.scala
│ │ └── invoker/
│ │ ├── ContainerMessageConsumer.scala
│ │ ├── DefaultInvokerServer.scala
│ │ ├── FPCInvokerReactive.scala
│ │ ├── FPCInvokerServer.scala
│ │ ├── InstanceIdAssigner.scala
│ │ ├── Invoker.scala
│ │ ├── InvokerReactive.scala
│ │ ├── LogStoreCollector.scala
│ │ └── NamespaceBlacklist.scala
│ ├── monitoring/
│ │ └── user-events/
│ │ ├── .dockerignore
│ │ ├── Dockerfile
│ │ ├── Dockerfile-debian
│ │ ├── README.md
│ │ ├── build.gradle
│ │ ├── compose/
│ │ │ ├── grafana/
│ │ │ │ ├── dashboards/
│ │ │ │ │ ├── global-metrics.json
│ │ │ │ │ ├── openwhisk_events.json
│ │ │ │ │ └── top-namespaces.json
│ │ │ │ └── provisioning/
│ │ │ │ ├── dashboards/
│ │ │ │ │ └── dashboard.yml
│ │ │ │ └── datasources/
│ │ │ │ └── datasource.yml
│ │ │ └── prometheus/
│ │ │ └── prometheus.yml
│ │ ├── init.sh
│ │ └── src/
│ │ ├── main/
│ │ │ ├── resources/
│ │ │ │ ├── application.conf
│ │ │ │ ├── reference.conf
│ │ │ │ └── whisk-logback.xml
│ │ │ └── scala/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── openwhisk/
│ │ │ └── core/
│ │ │ └── monitoring/
│ │ │ └── metrics/
│ │ │ ├── EventConsumer.scala
│ │ │ ├── KamonRecorder.scala
│ │ │ ├── Main.scala
│ │ │ ├── MetricNames.scala
│ │ │ ├── OpenWhiskEvents.scala
│ │ │ ├── PrometheusEventsApi.scala
│ │ │ └── PrometheusRecorder.scala
│ │ └── test/
│ │ ├── resources/
│ │ │ ├── application.conf
│ │ │ └── logback-test.xml
│ │ └── scala/
│ │ └── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ └── core/
│ │ └── monitoring/
│ │ └── metrics/
│ │ ├── ApiTests.scala
│ │ ├── EventsTestHelper.scala
│ │ ├── KafkaSpecBase.scala
│ │ ├── KamonRecorderTests.scala
│ │ ├── OpenWhiskEventsTests.scala
│ │ └── PrometheusRecorderTests.scala
│ ├── routemgmt/
│ │ ├── common/
│ │ │ ├── apigw-utils.js
│ │ │ └── utils.js
│ │ ├── createApi/
│ │ │ ├── createApi.js
│ │ │ └── package.json
│ │ ├── deleteApi/
│ │ │ ├── deleteApi.js
│ │ │ └── package.json
│ │ └── getApi/
│ │ ├── getApi.js
│ │ └── package.json
│ ├── scheduler/
│ │ ├── Dockerfile
│ │ ├── Dockerfile.cov
│ │ ├── build.gradle
│ │ ├── init.sh
│ │ └── src/
│ │ └── main/
│ │ ├── protobuf/
│ │ │ └── activation.proto
│ │ ├── resources/
│ │ │ └── application.conf
│ │ └── scala/
│ │ └── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ └── core/
│ │ └── scheduler/
│ │ ├── FPCSchedulerServer.scala
│ │ ├── Scheduler.scala
│ │ ├── container/
│ │ │ ├── ContainerManager.scala
│ │ │ └── CreationJobManager.scala
│ │ ├── grpc/
│ │ │ └── ActivationServiceImpl.scala
│ │ ├── message/
│ │ │ └── ContainerMessage.scala
│ │ └── queue/
│ │ ├── ContainerCounter.scala
│ │ ├── ElasticSearchDurationChecker.scala
│ │ ├── MemoryQueue.scala
│ │ ├── NoopDurationChecker.scala
│ │ ├── QueueManager.scala
│ │ └── SchedulingDecisionMaker.scala
│ └── standalone/
│ ├── Dockerfile
│ ├── README.md
│ ├── build.gradle
│ ├── src/
│ │ ├── main/
│ │ │ ├── resources/
│ │ │ │ ├── logback-standalone.xml
│ │ │ │ ├── playground/
│ │ │ │ │ ├── actions/
│ │ │ │ │ │ ├── playground-delete.js
│ │ │ │ │ │ ├── playground-fetch.js
│ │ │ │ │ │ ├── playground-run.js
│ │ │ │ │ │ └── playground-userpackage.js
│ │ │ │ │ └── ui/
│ │ │ │ │ ├── index.html
│ │ │ │ │ ├── playground.css
│ │ │ │ │ └── playgroundFunctions.js
│ │ │ │ ├── standalone-kcf.conf
│ │ │ │ └── standalone.conf
│ │ │ └── scala/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── openwhisk/
│ │ │ ├── core/
│ │ │ │ └── ExecManifestSupport.scala
│ │ │ └── standalone/
│ │ │ ├── ApiGwLauncher.scala
│ │ │ ├── CouchDBLauncher.scala
│ │ │ ├── DockerVersion.scala
│ │ │ ├── InstallRouteMgmt.scala
│ │ │ ├── KafkaLauncher.scala
│ │ │ ├── LogbackConfigurator.scala
│ │ │ ├── PlaygroundLauncher.scala
│ │ │ ├── PreFlightChecks.scala
│ │ │ ├── ServerStartupCheck.scala
│ │ │ ├── ServiceInfoLogger.scala
│ │ │ ├── StandaloneDockerSupport.scala
│ │ │ ├── StandaloneOpenWhisk.scala
│ │ │ ├── Unzip.scala
│ │ │ ├── UserEventLauncher.scala
│ │ │ └── Wsk.scala
│ │ └── test/
│ │ └── scala/
│ │ └── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ └── standalone/
│ │ └── DockerVersionTests.scala
│ ├── start.sh
│ └── stop.sh
├── docs/
│ ├── README.md
│ ├── about.md
│ ├── actions-actionloop.md
│ ├── actions-docker.md
│ ├── actions-dotnet.md
│ ├── actions-go.md
│ ├── actions-java.md
│ ├── actions-new.md
│ ├── actions-nodejs.md
│ ├── actions-php.md
│ ├── actions-python.md
│ ├── actions-ruby.md
│ ├── actions-rust.md
│ ├── actions-swift.md
│ ├── actions-update.md
│ ├── actions.md
│ ├── annotations.md
│ ├── apigateway.md
│ ├── catalog.md
│ ├── cli.md
│ ├── conductors.md
│ ├── dedicated-invokers.md
│ ├── deploy.md
│ ├── dev/
│ │ ├── configuration.md
│ │ ├── future.md
│ │ ├── modules.md
│ │ └── troubleshooting/
│ │ └── build-failures.md
│ ├── feeds.md
│ ├── images/
│ │ ├── OpenWhisk_flow_of_processing.draw.io.xml
│ │ ├── README.md
│ │ └── whisk_icon_full_color_with_tm.psd
│ ├── intra-concurrency.md
│ ├── logging.md
│ ├── metrics.md
│ ├── packages.md
│ ├── parameters.md
│ ├── reference.md
│ ├── rest_api.md
│ ├── samples.md
│ ├── security.md
│ ├── single_entrypoint_proxy_contract.md
│ ├── spi.md
│ ├── tag-based-scheduling.md
│ ├── triggers_rules.md
│ ├── use_cases.md
│ ├── warmed-containers.md
│ ├── webactions.md
│ └── yarn.md
├── gradle/
│ ├── README.md
│ ├── docker.gradle
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── licenses/
│ └── LICENSE-spray.txt
├── proposals/
│ ├── POEM-1-proposal-for-openwhisk-enhancements.md
│ ├── POEM-2-function-pulling-container-scheduler.md
│ ├── POEM-3-action-limit-for-namespace.md
│ ├── POEM-4-action-concurrency-limit-within-namespace.md
│ ├── POEM-N-template.md
│ ├── POEM-support-array-result.md
│ └── README.md
├── settings.gradle
├── tests/
│ ├── .pydevproject
│ ├── README.md
│ ├── build.gradle
│ ├── dat/
│ │ ├── actions/
│ │ │ ├── README.md
│ │ │ ├── applicationError.js
│ │ │ ├── argCheck.js
│ │ │ ├── argsPrint.js
│ │ │ ├── asyncError.js
│ │ │ ├── blackbox/
│ │ │ │ └── exec
│ │ │ ├── build.sh
│ │ │ ├── cat.js
│ │ │ ├── concurrent.js
│ │ │ ├── concurrentFail1.js
│ │ │ ├── concurrentFail2.js
│ │ │ ├── conductor.js
│ │ │ ├── corsHeaderMod.js
│ │ │ ├── countdown.js
│ │ │ ├── createRule.swift
│ │ │ ├── createTrigger.swift
│ │ │ ├── dosLogs.js
│ │ │ ├── echo-web-http-head.js
│ │ │ ├── echo-web-http.js
│ │ │ ├── echo.js
│ │ │ ├── echo.json
│ │ │ ├── empty.js
│ │ │ ├── emptyJSONResult.js
│ │ │ ├── head.js
│ │ │ ├── hello.js
│ │ │ ├── hello.py
│ │ │ ├── hello.swift
│ │ │ ├── helloArray.js
│ │ │ ├── helloAsync.js
│ │ │ ├── helloContext.js
│ │ │ ├── helloDeadline.js
│ │ │ ├── helloOpenwhiskPackage.js
│ │ │ ├── helloPromise.js
│ │ │ ├── httpGet.swift
│ │ │ ├── initexit.js
│ │ │ ├── initforever.js
│ │ │ ├── invalidInput1.json
│ │ │ ├── invalidInput2.json
│ │ │ ├── invalidInput3.json
│ │ │ ├── invalidInput4.json
│ │ │ ├── invoke.swift
│ │ │ ├── invokeNonBlocking.swift
│ │ │ ├── jsonStringWebAction.js
│ │ │ ├── log.js
│ │ │ ├── loggingTimeout.js
│ │ │ ├── malformed.js
│ │ │ ├── malformed.py
│ │ │ ├── memoryWithGC.js
│ │ │ ├── multipleHeaders.js
│ │ │ ├── niam.js
│ │ │ ├── niam.py
│ │ │ ├── niam.swift
│ │ │ ├── openFiles.js
│ │ │ ├── params.js
│ │ │ ├── ping.js
│ │ │ ├── pngWeb.js
│ │ │ ├── printParams.js
│ │ │ ├── python-zip/
│ │ │ │ ├── __main__.py
│ │ │ │ └── greet.py
│ │ │ ├── pythonVersion.py
│ │ │ ├── runexception.js
│ │ │ ├── runexit.js
│ │ │ ├── sizedResult.js
│ │ │ ├── sleep.js
│ │ │ ├── sleep.py
│ │ │ ├── sort-array.js
│ │ │ ├── sort.js
│ │ │ ├── split-array.js
│ │ │ ├── split.js
│ │ │ ├── src/
│ │ │ │ └── java/
│ │ │ │ └── sleep/
│ │ │ │ ├── build.gradle
│ │ │ │ ├── settings.gradle
│ │ │ │ └── src/
│ │ │ │ └── main/
│ │ │ │ └── java/
│ │ │ │ └── Sleep.java
│ │ │ ├── stdenv.py
│ │ │ ├── step.js
│ │ │ ├── textBody.js
│ │ │ ├── trigger.swift
│ │ │ ├── unicode.tests/
│ │ │ │ ├── go-1.13.txt
│ │ │ │ ├── go-1.15.txt
│ │ │ │ ├── nodejs-10.txt
│ │ │ │ ├── nodejs-12.txt
│ │ │ │ ├── nodejs-14.txt
│ │ │ │ ├── php-7.3.txt
│ │ │ │ ├── php-7.4.txt
│ │ │ │ ├── python-3.txt
│ │ │ │ ├── python.txt
│ │ │ │ ├── ruby-2.5.txt
│ │ │ │ ├── rust-1.34.txt
│ │ │ │ ├── src/
│ │ │ │ │ ├── dotnet2.2/
│ │ │ │ │ │ ├── Apache.OpenWhisk.UnicodeTests.Dotnet/
│ │ │ │ │ │ │ ├── Apache.OpenWhisk.UnicodeTests.Dotnet.csproj
│ │ │ │ │ │ │ └── Unicode.cs
│ │ │ │ │ │ └── openwhisk-unicodetests-dotnet.sln
│ │ │ │ │ └── java/
│ │ │ │ │ └── unicode/
│ │ │ │ │ ├── build.gradle
│ │ │ │ │ ├── settings.gradle
│ │ │ │ │ └── src/
│ │ │ │ │ └── main/
│ │ │ │ │ └── java/
│ │ │ │ │ └── Unicode.java
│ │ │ │ ├── swift-4.2.txt
│ │ │ │ ├── swift-5.1.txt
│ │ │ │ └── swift-5.3.txt
│ │ │ ├── validInput1.json
│ │ │ ├── validInput2.json
│ │ │ ├── wc.js
│ │ │ ├── wcbin.js
│ │ │ ├── word_count.json
│ │ │ └── zippedaction/
│ │ │ ├── index.js
│ │ │ └── package.json
│ │ └── apigw/
│ │ ├── apigw_path_param_support_test_invalidActionType.json
│ │ ├── apigw_path_param_support_test_invalidParamName1.json
│ │ ├── apigw_path_param_support_test_invalidParamName2.json
│ │ ├── apigw_path_param_support_test_invalidTargetUrl.json
│ │ ├── apigw_path_param_support_test_withPathParameters1.json
│ │ ├── apigw_path_param_support_test_withPathParameters2.json
│ │ ├── endpoints.without.action.swagger.json
│ │ ├── local.api.bad.yaml
│ │ ├── local.api.yaml
│ │ ├── testswaggerdoc1
│ │ ├── testswaggerdoc2
│ │ └── testswaggerdocinvalid
│ ├── performance/
│ │ ├── README.md
│ │ ├── gatling_tests/
│ │ │ ├── build.gradle
│ │ │ ├── build.sh
│ │ │ └── src/
│ │ │ └── gatling/
│ │ │ ├── resources/
│ │ │ │ ├── conf/
│ │ │ │ │ └── logback.xml
│ │ │ │ └── data/
│ │ │ │ ├── nodeJSAction.js
│ │ │ │ ├── nodeJSAsyncAction.js
│ │ │ │ ├── pythonAction.py
│ │ │ │ ├── src/
│ │ │ │ │ └── java/
│ │ │ │ │ ├── build.gradle
│ │ │ │ │ ├── settings.gradle
│ │ │ │ │ └── src/
│ │ │ │ │ └── main/
│ │ │ │ │ └── java/
│ │ │ │ │ └── JavaAction.java
│ │ │ │ ├── swiftAction.swift
│ │ │ │ └── users.csv
│ │ │ └── scala/
│ │ │ └── org/
│ │ │ └── apache/
│ │ │ └── openwhisk/
│ │ │ ├── ApiV1Simulation.scala
│ │ │ ├── BlockingInvokeOneActionSimulation.scala
│ │ │ ├── ColdBlockingInvokeSimulation.scala
│ │ │ ├── LatencySimulation.scala
│ │ │ └── extension/
│ │ │ └── whisk/
│ │ │ ├── OpenWhiskActionBuilder.scala
│ │ │ ├── OpenWhiskDsl.scala
│ │ │ ├── OpenWhiskProtocolBuilder.scala
│ │ │ └── Predef.scala
│ │ ├── preparation/
│ │ │ ├── actions/
│ │ │ │ ├── async.js
│ │ │ │ └── noop.js
│ │ │ ├── create.sh
│ │ │ ├── deploy-lean.sh
│ │ │ └── deploy.sh
│ │ └── wrk_tests/
│ │ ├── latency.sh
│ │ ├── post.lua
│ │ └── throughput.sh
│ └── src/
│ ├── main/
│ │ └── scala/
│ │ └── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ └── GradleWorkaround.scala
│ └── test/
│ ├── resources/
│ │ ├── application.conf.j2
│ │ ├── logback-test.xml
│ │ ├── swagger-config.json
│ │ └── templates/
│ │ └── build.gradle.mustache
│ └── scala/
│ ├── actionContainers/
│ │ ├── ActionContainer.scala
│ │ ├── BasicActionRunnerTests.scala
│ │ └── ResourceHelpers.scala
│ ├── apigw/
│ │ └── healthtests/
│ │ ├── ApiGwEndToEndTests.scala
│ │ └── ApiGwRestEndToEndTests.scala
│ ├── common/
│ │ ├── ConcurrencyHelpers.scala
│ │ ├── FreePortFinder.scala
│ │ ├── JsHelpers.scala
│ │ ├── LoggedFunction.scala
│ │ ├── Pair.java
│ │ ├── RunCliCmd.scala
│ │ ├── SimpleExec.scala
│ │ ├── StreamLogging.scala
│ │ ├── TestHelpers.scala
│ │ ├── TestUtils.java
│ │ ├── TimingHelpers.scala
│ │ ├── WhiskProperties.java
│ │ ├── WskActorSystem.scala
│ │ ├── WskCliOperations.scala
│ │ ├── WskOperations.scala
│ │ ├── WskTestHelpers.scala
│ │ ├── WskTracingTests.scala
│ │ └── rest/
│ │ ├── SwaggerValidator.scala
│ │ └── WskRestOperations.scala
│ ├── ha/
│ │ ├── CacheInvalidationTests.scala
│ │ └── ShootComponentsTests.scala
│ ├── invokerShoot/
│ │ └── ShootInvokerTests.scala
│ ├── limits/
│ │ └── ThrottleTests.scala
│ ├── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ ├── common/
│ │ │ ├── ConfigMXBeanTests.scala
│ │ │ ├── ConfigMapValueTests.scala
│ │ │ ├── ConfigTests.scala
│ │ │ ├── ForcibleSemaphoreTests.scala
│ │ │ ├── NestedSemaphoreTests.scala
│ │ │ ├── PrometheusTests.scala
│ │ │ ├── ResizableSemaphoreTests.scala
│ │ │ ├── RunCliCmdTests.scala
│ │ │ ├── SchedulerTests.scala
│ │ │ ├── TransactionIdTests.scala
│ │ │ ├── UserEventTests.scala
│ │ │ └── etcd/
│ │ │ ├── EtcdConfigTests.scala
│ │ │ ├── EtcdKvTests.scala
│ │ │ ├── EtcdLeaderShipUnitTests.scala
│ │ │ └── EtcdWorkerTests.scala
│ │ ├── connector/
│ │ │ └── kafka/
│ │ │ └── KafkaMetricsTests.scala
│ │ ├── core/
│ │ │ ├── WhiskConfigTests.scala
│ │ │ ├── admin/
│ │ │ │ └── WskAdminTests.scala
│ │ │ ├── apigw/
│ │ │ │ └── actions/
│ │ │ │ └── test/
│ │ │ │ ├── ApiGwRestRoutemgmtActionTests.scala
│ │ │ │ └── ApiGwRoutemgmtActionTests.scala
│ │ │ ├── cli/
│ │ │ │ └── test/
│ │ │ │ ├── ApiGwRestBasicTests.scala
│ │ │ │ ├── ApiGwRestTests.scala
│ │ │ │ ├── BaseApiGwTests.scala
│ │ │ │ ├── TestJsonArgs.scala
│ │ │ │ ├── WskActionSequenceTests.scala
│ │ │ │ ├── WskEntitlementTests.scala
│ │ │ │ ├── WskRestActionSequenceTests.scala
│ │ │ │ ├── WskRestBasicUsageTests.scala
│ │ │ │ ├── WskRestEntitlementTests.scala
│ │ │ │ └── WskWebActionsTests.scala
│ │ │ ├── connector/
│ │ │ │ ├── test/
│ │ │ │ │ ├── EventMessageTests.scala
│ │ │ │ │ ├── MessageFeedTests.scala
│ │ │ │ │ ├── MessageTests.scala
│ │ │ │ │ └── TestConnector.scala
│ │ │ │ └── tests/
│ │ │ │ └── AcknowledgementMessageTests.scala
│ │ │ ├── containerpool/
│ │ │ │ ├── docker/
│ │ │ │ │ └── test/
│ │ │ │ │ ├── AkkaContainerClientTests.scala
│ │ │ │ │ ├── ApacheBlockingContainerClientTests.scala
│ │ │ │ │ ├── DockerClientTests.scala
│ │ │ │ │ ├── DockerClientWithFileAccessTests.scala
│ │ │ │ │ ├── DockerContainerFactoryTests.scala
│ │ │ │ │ ├── DockerContainerTests.scala
│ │ │ │ │ ├── ProcessRunnerTests.scala
│ │ │ │ │ └── RuncClientTests.scala
│ │ │ │ ├── kubernetes/
│ │ │ │ │ └── test/
│ │ │ │ │ ├── Fabric8ClientTests.scala
│ │ │ │ │ ├── KubeClientSupport.scala
│ │ │ │ │ ├── KubernetesClientTests.scala
│ │ │ │ │ ├── KubernetesContainerTests.scala
│ │ │ │ │ └── WhiskPodBuilderTests.scala
│ │ │ │ ├── logging/
│ │ │ │ │ ├── ElasticSearchLogStoreTests.scala
│ │ │ │ │ ├── ElasticSearchRestClientTests.scala
│ │ │ │ │ ├── LogDriverLogStoreTests.scala
│ │ │ │ │ ├── SplunkLogStoreTests.scala
│ │ │ │ │ └── test/
│ │ │ │ │ ├── DockerToActivationFileLogStoreTests.scala
│ │ │ │ │ └── DockerToActivationLogStoreTests.scala
│ │ │ │ ├── test/
│ │ │ │ │ ├── ContainerArgsConfigTest.scala
│ │ │ │ │ ├── ContainerPoolConfigTests.scala
│ │ │ │ │ ├── ContainerPoolTests.scala
│ │ │ │ │ └── ContainerProxyTests.scala
│ │ │ │ ├── v2/
│ │ │ │ │ └── test/
│ │ │ │ │ ├── ActivationClientProxyTests.scala
│ │ │ │ │ ├── FunctionPullingContainerPoolTests.scala
│ │ │ │ │ ├── FunctionPullingContainerProxyTests.scala
│ │ │ │ │ └── InvokerHealthManagerTests.scala
│ │ │ │ └── yarn/
│ │ │ │ └── test/
│ │ │ │ ├── MockYARNRM.scala
│ │ │ │ └── YARNContainerFactoryTests.scala
│ │ │ ├── controller/
│ │ │ │ ├── actions/
│ │ │ │ │ └── test/
│ │ │ │ │ └── SequenceAccountingTests.scala
│ │ │ │ └── test/
│ │ │ │ ├── ActionsApiTests.scala
│ │ │ │ ├── ActionsApiWithDbPollingTests.scala
│ │ │ │ ├── ActionsApiWithoutDbPollingTests.scala
│ │ │ │ ├── ActivationsApiTests.scala
│ │ │ │ ├── BasicAuthenticateTests.scala
│ │ │ │ ├── ConductorsApiTests.scala
│ │ │ │ ├── ControllerApiTests.scala
│ │ │ │ ├── ControllerRoutesTests.scala
│ │ │ │ ├── ControllerTestCommon.scala
│ │ │ │ ├── EntitlementProviderTests.scala
│ │ │ │ ├── FPCEntitlementTests.scala
│ │ │ │ ├── KindRestrictorTests.scala
│ │ │ │ ├── LimitsApiTests.scala
│ │ │ │ ├── NamespacesApiTests.scala
│ │ │ │ ├── PackageActionsApiTests.scala
│ │ │ │ ├── PackagesApiTests.scala
│ │ │ │ ├── RateThrottleTests.scala
│ │ │ │ ├── RespondWithHeadersTests.scala
│ │ │ │ ├── RulesApiTests.scala
│ │ │ │ ├── SequenceApiTests.scala
│ │ │ │ ├── SwaggerRoutesTests.scala
│ │ │ │ ├── TriggersApiTests.scala
│ │ │ │ ├── WebActionsApiTests.scala
│ │ │ │ ├── WhiskAuthHelpers.scala
│ │ │ │ └── migration/
│ │ │ │ └── SequenceActionApiMigrationTests.scala
│ │ │ ├── database/
│ │ │ │ ├── ArtifactActivationStoreBehaviorBase.scala
│ │ │ │ ├── ArtifactActivationStoreTests.scala
│ │ │ │ ├── ArtifactWithFileStorageActivationStoreTests.scala
│ │ │ │ ├── CouchDBArtifactStoreTests.scala
│ │ │ │ ├── CouchDBAttachmentStoreTests.scala
│ │ │ │ ├── CouchDBStoreBehaviorBase.scala
│ │ │ │ ├── LimitsCommandTests.scala
│ │ │ │ ├── UserCommandTests.scala
│ │ │ │ ├── WhiskAdminCliTestBase.scala
│ │ │ │ ├── azblob/
│ │ │ │ │ ├── AzureBlob.scala
│ │ │ │ │ ├── AzureBlobAttachmentStoreBehaviorBase.scala
│ │ │ │ │ ├── AzureBlobAttachmentStoreCDNTests.scala
│ │ │ │ │ ├── AzureBlobAttachmentStoreITTests.scala
│ │ │ │ │ └── AzureBlobConfigTest.scala
│ │ │ │ ├── cosmosdb/
│ │ │ │ │ ├── CollectionResourceUsageTests.scala
│ │ │ │ │ ├── CosmosDBArtifactStoreTests.scala
│ │ │ │ │ ├── CosmosDBAttachmentStoreTests.scala
│ │ │ │ │ ├── CosmosDBConfigTests.scala
│ │ │ │ │ ├── CosmosDBLeakTests.scala
│ │ │ │ │ ├── CosmosDBSoftDeleteTests.scala
│ │ │ │ │ ├── CosmosDBStoreBehaviorBase.scala
│ │ │ │ │ ├── CosmosDBSupportTests.scala
│ │ │ │ │ ├── CosmosDBTestSupport.scala
│ │ │ │ │ ├── CosmosDBUtilTest.scala
│ │ │ │ │ ├── IndexingPolicyTests.scala
│ │ │ │ │ ├── RecordingLeakDetector.java
│ │ │ │ │ ├── RecordingLeakDetectorFactory.java
│ │ │ │ │ ├── ReferenceCountedTests.scala
│ │ │ │ │ └── cache/
│ │ │ │ │ ├── CacheInvalidatorTests.scala
│ │ │ │ │ └── WhiskChangeEventObserverTests.scala
│ │ │ │ ├── elasticsearch/
│ │ │ │ │ ├── ElasticSearchActivationStoreBehaviorBase.scala
│ │ │ │ │ └── ElasticSearchActivationStoreTests.scala
│ │ │ │ ├── memory/
│ │ │ │ │ ├── MemoryArtifactStoreBehaviorBase.scala
│ │ │ │ │ ├── MemoryArtifactStoreTests.scala
│ │ │ │ │ └── MemoryAttachmentStoreTests.scala
│ │ │ │ ├── mongodb/
│ │ │ │ │ ├── MongoDBArtifactStoreTests.scala
│ │ │ │ │ ├── MongoDBAsyncStreamGraphTests.scala
│ │ │ │ │ ├── MongoDBAttachmentStoreTests.scala
│ │ │ │ │ ├── MongoDBStoreBehaviorBase.scala
│ │ │ │ │ └── MongoDBViewMapperTests.scala
│ │ │ │ ├── s3/
│ │ │ │ │ ├── CloudFrontSignerTests.scala
│ │ │ │ │ ├── S3AttachmentStoreAwsTests.scala
│ │ │ │ │ ├── S3AttachmentStoreBehaviorBase.scala
│ │ │ │ │ ├── S3AttachmentStoreCloudFrontTests.scala
│ │ │ │ │ ├── S3AttachmentStoreMinioTests.scala
│ │ │ │ │ ├── S3Aws.scala
│ │ │ │ │ ├── S3Minio.scala
│ │ │ │ │ └── S3WithPrefixTests.scala
│ │ │ │ └── test/
│ │ │ │ ├── AttachmentCompatibilityTests.scala
│ │ │ │ ├── AttachmentStoreBehaviors.scala
│ │ │ │ ├── AttachmentSupportTests.scala
│ │ │ │ ├── BatcherTests.scala
│ │ │ │ ├── CacheConcurrencyTests.scala
│ │ │ │ ├── CleanUpActivationsTest.scala
│ │ │ │ ├── CouchDbRestClientTests.scala
│ │ │ │ ├── DatabaseScriptTestUtils.scala
│ │ │ │ ├── DbUtils.scala
│ │ │ │ ├── DocumentHandlerTests.scala
│ │ │ │ ├── ExtendedCouchDbRestClient.scala
│ │ │ │ ├── MultipleReadersSingleWriterCacheTests.scala
│ │ │ │ ├── RemoveLogsTests.scala
│ │ │ │ ├── ReplicatorTests.scala
│ │ │ │ └── behavior/
│ │ │ │ ├── ActivationStoreBehavior.scala
│ │ │ │ ├── ActivationStoreBehaviorBase.scala
│ │ │ │ ├── ActivationStoreCRUDBehaviors.scala
│ │ │ │ ├── ActivationStoreQueryBehaviors.scala
│ │ │ │ ├── ArtifactStoreActivationsQueryBehaviors.scala
│ │ │ │ ├── ArtifactStoreAttachmentBehaviors.scala
│ │ │ │ ├── ArtifactStoreBehavior.scala
│ │ │ │ ├── ArtifactStoreBehaviorBase.scala
│ │ │ │ ├── ArtifactStoreCRUDBehaviors.scala
│ │ │ │ ├── ArtifactStoreQueryBehaviors.scala
│ │ │ │ ├── ArtifactStoreSubjectQueryBehaviors.scala
│ │ │ │ ├── ArtifactStoreTestUtil.scala
│ │ │ │ └── ArtifactStoreWhisksQueryBehaviors.scala
│ │ │ ├── entity/
│ │ │ │ └── test/
│ │ │ │ ├── ActivationCompatTests.scala
│ │ │ │ ├── ActivationResponseTests.scala
│ │ │ │ ├── ControllerInstanceIdTests.scala
│ │ │ │ ├── DatastoreTests.scala
│ │ │ │ ├── ExecHelpers.scala
│ │ │ │ ├── ExecManifestTests.scala
│ │ │ │ ├── ExecTests.scala
│ │ │ │ ├── InvokerInstanceIdTests.scala
│ │ │ │ ├── MigrationEntities.scala
│ │ │ │ ├── ParameterEncryptionTests.scala
│ │ │ │ ├── SchemaTests.scala
│ │ │ │ ├── SizeTests.scala
│ │ │ │ ├── ViewTests.scala
│ │ │ │ └── WhiskEntityTests.scala
│ │ │ ├── invoker/
│ │ │ │ └── test/
│ │ │ │ ├── ContainerMessageConsumerTests.scala
│ │ │ │ ├── DefaultInvokerServerTests.scala
│ │ │ │ ├── FPCInvokerServerTests.scala
│ │ │ │ ├── InstanceIdAssignerTests.scala
│ │ │ │ ├── InvokerBootUpTests.scala
│ │ │ │ └── NamespaceBlacklistTests.scala
│ │ │ ├── limits/
│ │ │ │ ├── ActionLimitsTests.scala
│ │ │ │ ├── ConcurrencyTests.scala
│ │ │ │ └── MaxActionDurationTests.scala
│ │ │ ├── loadBalancer/
│ │ │ │ └── test/
│ │ │ │ ├── FPCPoolBalancerTests.scala
│ │ │ │ ├── InvokerSupervisionTests.scala
│ │ │ │ └── ShardingContainerPoolBalancerTests.scala
│ │ │ ├── scheduler/
│ │ │ │ ├── FPCSchedulerFlowTests.scala
│ │ │ │ ├── FPCSchedulerServerTests.scala
│ │ │ │ ├── container/
│ │ │ │ │ └── test/
│ │ │ │ │ ├── ContainerManagerTests.scala
│ │ │ │ │ └── CreationJobManagerTests.scala
│ │ │ │ ├── grpc/
│ │ │ │ │ └── test/
│ │ │ │ │ ├── ActivationServiceImplTests.scala
│ │ │ │ │ └── CommonVariable.scala
│ │ │ │ └── queue/
│ │ │ │ └── test/
│ │ │ │ ├── ContainerCounterTests.scala
│ │ │ │ ├── ElasticSearchDurationCheckResultFormatTest.scala
│ │ │ │ ├── ElasticSearchDurationCheckerTests.scala
│ │ │ │ ├── MemoryQueueFlowTests.scala
│ │ │ │ ├── MemoryQueueTests.scala
│ │ │ │ ├── MemoryQueueTestsFixture.scala
│ │ │ │ ├── QueueManagerTests.scala
│ │ │ │ └── SchedulingDecisionMakerTests.scala
│ │ │ └── service/
│ │ │ ├── DataManagementServiceTests.scala
│ │ │ ├── LeaseKeepAliveServiceTests.scala
│ │ │ └── WatcherServiceTests.scala
│ │ ├── http/
│ │ │ └── PoolingRestClientTests.scala
│ │ ├── spi/
│ │ │ └── SpiTests.scala
│ │ ├── standalone/
│ │ │ ├── StandaloneApiGwTests.scala
│ │ │ ├── StandaloneCouchTests.scala
│ │ │ ├── StandaloneKCFTests.scala
│ │ │ ├── StandaloneKafkaTests.scala
│ │ │ ├── StandaloneSanityTestSupport.scala
│ │ │ ├── StandaloneServerFixture.scala
│ │ │ ├── StandaloneServerTests.scala
│ │ │ └── StandaloneUserEventTests.scala
│ │ ├── test/
│ │ │ └── http/
│ │ │ └── RESTProxy.scala
│ │ └── utils/
│ │ └── test/
│ │ └── ExecutionContextFactoryTests.scala
│ ├── services/
│ │ ├── HeadersTests.scala
│ │ └── KafkaConnectorTests.scala
│ └── system/
│ ├── basic/
│ │ ├── WskActionTests.scala
│ │ ├── WskActivationLogsTests.scala
│ │ ├── WskActivationTests.scala
│ │ ├── WskConductorTests.scala
│ │ ├── WskConsoleTests.scala
│ │ ├── WskMultiRuntimeTests.scala
│ │ ├── WskPackageTests.scala
│ │ ├── WskRestBasicTests.scala
│ │ ├── WskRestRuleTests.scala
│ │ ├── WskRuleTests.scala
│ │ ├── WskSequenceTests.scala
│ │ └── WskUnicodeTests.scala
│ └── rest/
│ ├── ActionSchemaTests.scala
│ ├── GoCLINginxTests.scala
│ ├── JsonSchema.scala
│ ├── JsonSchemaTests.scala
│ ├── RestUtil.scala
│ └── SwaggerTests.scala
└── tools/
├── actionProxy/
│ ├── Dockerfile
│ ├── README.md
│ ├── build.gradle
│ └── invoke.py
├── admin/
│ ├── README-NEXT.md
│ ├── README.md
│ ├── build.gradle
│ ├── src/
│ │ └── main/
│ │ ├── resources/
│ │ │ └── application.conf
│ │ └── scala/
│ │ └── org/
│ │ └── apache/
│ │ └── openwhisk/
│ │ └── core/
│ │ ├── cli/
│ │ │ ├── CommandMessages.scala
│ │ │ └── Main.scala
│ │ └── database/
│ │ ├── LimitsCommand.scala
│ │ └── UserCommand.scala
│ ├── wskadmin
│ ├── wskprop.py
│ └── wskutil.py
├── build/
│ ├── README.md
│ ├── checkLogs.py
│ ├── citool
│ └── redo
├── db/
│ ├── README.md
│ ├── cleanUpActivations.py
│ ├── cosmosDbUtil.py
│ ├── deleteLogsFromActivations.py
│ ├── moveCodeToAttachment.py
│ └── replicateDbs.py
├── dev/
│ ├── README.md
│ ├── build.gradle
│ └── src/
│ └── main/
│ ├── groovy/
│ │ ├── CategoryManager.groovy
│ │ ├── couchdbViews.groovy
│ │ ├── intellijRunConfig.groovy
│ │ ├── listRepos.groovy
│ │ └── renderModuleDetails.groovy
│ └── resources/
│ └── modules.md
├── eclipse/
│ ├── java.xml
│ └── scala.properties
├── git/
│ ├── README.md
│ ├── pre-commit-scalafmt-gradlew.sh
│ └── pre-commit-scalafmt-native.sh
├── github/
│ ├── checkAndUploadLogs.sh
│ ├── debugAction.sh
│ ├── flake8.sh
│ ├── runDummyTests.sh
│ ├── runLeanSystemTests.sh
│ ├── runMultiRuntimeTests.sh
│ ├── runSchedulerTests.sh
│ ├── runStandaloneTests.sh
│ ├── runSystemTests.sh
│ ├── runUnitTests.sh
│ ├── s3-upload.sh
│ ├── scan.sh
│ ├── setup.sh
│ ├── waitIfDebug.sh
│ └── writeOnSlack.sh
├── jenkins/
│ └── apache/
│ └── dockerhub.groovy
├── macos/
│ ├── README.md
│ └── docker-machine/
│ ├── README.md
│ ├── tweak-dockerhost.sh
│ └── tweak-dockermachine.sh
├── ow-utils/
│ ├── Dockerfile
│ ├── Dockerfile.arm
│ ├── README.md
│ └── build.gradle
├── owperf/
│ ├── README.md
│ ├── owperf.js
│ ├── owperf.sh
│ ├── owperf_data.odg
│ ├── package.json
│ ├── setup.sh
│ └── testAction.js
├── travis/
│ ├── README.md
│ ├── box-upload.py
│ ├── checkAndUploadLogs.sh
│ ├── distDocker.sh
│ ├── docker.conf
│ ├── docker.sh
│ ├── flake8.sh
│ ├── runLeanSystemTests.sh
│ ├── runMultiRuntimeTests.sh
│ ├── runSchedulerTests.sh
│ ├── runStandaloneTests.sh
│ ├── runSystemTests.sh
│ ├── runTests.sh
│ ├── runUnitTests.sh
│ ├── scan.sh
│ ├── setup-docker.py
│ ├── setup.sh
│ ├── setupLeanSystem.sh
│ ├── setupPrereq.sh
│ └── setupSystem.sh
└── ubuntu-setup/
├── README.md
├── all.sh
├── ansible.sh
├── bashprofile.sh
├── docker-xenial.sh
├── docker.sh
├── java8.sh
├── misc.sh
└── pip.sh
SYMBOL INDEX (371 symbols across 94 files)
FILE: ansible/callbacks/logformatter.py
class CallbackModule (line 28) | class CallbackModule(CallbackBase):
method __init__ (line 31) | def __init__(self):
method emit (line 35) | def emit(self, host, category, data):
method runner_on_failed (line 56) | def runner_on_failed(self, host, res, ignore_errors=False):
method runner_on_ok (line 59) | def runner_on_ok(self, host, res):
method runner_on_skipped (line 62) | def runner_on_skipped(self, host, item=None):
method runner_on_unreachable (line 65) | def runner_on_unreachable(self, host, res):
method runner_on_async_failed (line 68) | def runner_on_async_failed(self, host, res, jid):
function hilite (line 72) | def hilite(msg, status, wrap = True):
FILE: ansible/library/mongodb.py
class UnknownIndexPlugin (line 140) | class UnknownIndexPlugin(Exception):
function check_params (line 144) | def check_params(params, mode, module):
function _recreate_user (line 154) | def _recreate_user(module, db, user, password, roles):
function user (line 163) | def user(module, client, db_name, **kwargs):
function doc (line 182) | def doc(module, client, db_name, **kwargs):
function _clean_index_direction (line 201) | def _clean_index_direction(direction):
function _clean_index_options (line 210) | def _clean_index_options(options):
function parse_indexes (line 221) | def parse_indexes(idx):
function index (line 227) | def index(module, client, db_name, **kwargs):
function main (line 249) | def main():
FILE: core/routemgmt/common/apigw-utils.js
function generateTargetUrlMap (line 35) | function generateTargetUrlMap(ibmConfig) {
function isValidRelativePath (line 62) | function isValidRelativePath(relativePath) {
function getPathParameters (line 76) | function getPathParameters(relativePath) {
function validateFinalSwagger (line 96) | function validateFinalSwagger(swaggerApi) {
function addApiToGateway (line 181) | function addApiToGateway(gwInfo, spaceGuid, swaggerApi, apiId) {
function deleteApiFromGateway (line 247) | function deleteApiFromGateway(gwInfo, spaceGuid, apiId) {
function getApis (line 290) | function getApis(gwInfo, spaceGuid, bpOrApiName, limit, skip) {
function transformApis (line 365) | function transformApis(apis, format) {
function generateSwaggerApiFromGwApi (line 394) | function generateSwaggerApiFromGwApi(gwApi) {
function generateGwApiFromSwaggerApi (line 455) | function generateGwApiFromSwaggerApi(swaggerApi) {
function generateBaseSwaggerApi (line 484) | function generateBaseSwaggerApi(basepath, apiname) {
function addEndpointToSwaggerApi (line 526) | function addEndpointToSwaggerApi(swaggerApi, endpoint, responsetype) {
function setActionOperationInvocationDetails (line 564) | function setActionOperationInvocationDetails(swagger, endpoint, operatio...
function getCaseOperationIdx (line 581) | function getCaseOperationIdx(caseArr, operationId) {
function makeWebActionBackendUrl (line 602) | function makeWebActionBackendUrl(endpointAction, endpointResponseType, i...
function removeEndpointFromSwaggerApi (line 623) | function removeEndpointFromSwaggerApi(swaggerApi, endpoint) {
function deleteActionOperationInvocationDetails (line 661) | function deleteActionOperationInvocationDetails(swagger, operationId) {
function confidentialPrint (line 673) | function confidentialPrint(str) {
function generateCliResponse (line 687) | function generateCliResponse(gwApis) {
function generateCliApiFromGwApi (line 706) | function generateCliApiFromGwApi(gwApi) {
function parseActionUrl (line 734) | function parseActionUrl(actionUrl) {
function getActionNameFromActionUrl (line 749) | function getActionNameFromActionUrl(actionUrl) {
function getPackageNameFromActionUrl (line 757) | function getPackageNameFromActionUrl(actionUrl) {
function getActionNamespaceFromActionUrl (line 765) | function getActionNamespaceFromActionUrl(actionUrl) {
function getHostFromActionUrl (line 775) | function getHostFromActionUrl(actionUrl) {
function getProtocolFromActionUrl (line 783) | function getProtocolFromActionUrl(actionUrl) {
function parseActionName (line 812) | function parseActionName(fqname) {
function getNamespaceFromFqActionName (line 823) | function getNamespaceFromFqActionName(fqAction) {
function getPackageNameFromFqActionName (line 832) | function getPackageNameFromFqActionName(fqAction) {
function getActionNameFromFqActionName (line 843) | function getActionNameFromFqActionName(fqAction) {
function updateNamespace (line 860) | function updateNamespace(apidoc, namespace) {
function replaceNamespaceInUrl (line 878) | function replaceNamespaceInUrl(url, namespace) {
function makeErrorResponseObject (line 913) | function makeErrorResponseObject(err, isWebAction) {
function makeResponseObject (line 956) | function makeResponseObject(resp, isWebAction) {
function makeJsonString (line 983) | function makeJsonString(x) {
function makeOperationId (line 1018) | function makeOperationId(operation, relpath) {
function makeCamelCase (line 1027) | function makeCamelCase(str) {
function setSubUserAgent (line 1031) | function setSubUserAgent(subAgent) {
FILE: core/routemgmt/common/utils.js
function createTenant (line 37) | function createTenant(gwInfo, namespace, tenantInstance) {
function getTenants (line 90) | function getTenants(gwInfo, ns, tenantInstance) {
function addApiToGateway (line 165) | function addApiToGateway(gwInfo, tenantId, swaggerApi, gwApiId) {
function deleteApiFromGateway (line 236) | function deleteApiFromGateway(gwInfo, gwApiId) {
function getApis (line 278) | function getApis(gwInfo, tenantId, bpOrApiName) {
function transformApis (line 354) | function transformApis(apis, format) {
function generateSwaggerApiFromGwApi (line 383) | function generateSwaggerApiFromGwApi(gwApi) {
function generateBaseSwaggerApi (line 444) | function generateBaseSwaggerApi(basepath, apiname) {
function generateGwApiFromSwaggerApi (line 465) | function generateGwApiFromSwaggerApi(swaggerApi) {
function addEndpointToSwaggerApi (line 506) | function addEndpointToSwaggerApi(swaggerApi, endpoint) {
function removeEndpointFromSwaggerApi (line 600) | function removeEndpointFromSwaggerApi(swaggerApi, endpoint) {
function confidentialPrint (line 634) | function confidentialPrint(str) {
function generateCliResponse (line 649) | function generateCliResponse(gwApis) {
function generateCliApiFromGwApi (line 669) | function generateCliApiFromGwApi(gwApi) {
function parseActionUrl (line 694) | function parseActionUrl(actionUrl) {
function getActionNameFromActionUrl (line 715) | function getActionNameFromActionUrl(actionUrl) {
function getActionNamespaceFromActionUrl (line 725) | function getActionNamespaceFromActionUrl(actionUrl) {
function updateNamespace (line 733) | function updateNamespace(apidoc, namespace) {
function replaceNamespaceInUrl (line 750) | function replaceNamespaceInUrl(url, namespace) {
FILE: core/routemgmt/createApi/createApi.js
function main (line 58) | function main(message) {
function getBasePath (line 238) | function getBasePath(apidoc) {
function validateArgs (line 246) | function validateArgs(message) {
FILE: core/routemgmt/deleteApi/deleteApi.js
function main (line 46) | function main(message) {
function validateArgs (line 214) | function validateArgs(message) {
FILE: core/routemgmt/getApi/getApi.js
function main (line 48) | function main(message) {
function validateArgs (line 159) | function validateArgs(message) {
FILE: core/standalone/src/main/resources/playground/actions/playground-delete.js
function main (line 21) | function main(outerParam) {
FILE: core/standalone/src/main/resources/playground/actions/playground-fetch.js
function main (line 21) | function main(outerParam) {
FILE: core/standalone/src/main/resources/playground/actions/playground-run.js
function main (line 31) | function main(outerParam) {
FILE: core/standalone/src/main/resources/playground/actions/playground-userpackage.js
function main (line 25) | function main(outerParam) {
FILE: core/standalone/src/main/resources/playground/ui/playgroundFunctions.js
function startAutosave (line 130) | function startAutosave() {
function initializePlaygroundId (line 135) | function initializePlaygroundId() {
function initializeUserPackage (line 149) | function initializeUserPackage() {
function initializeActionSelector (line 171) | function initializeActionSelector(actionList) {
function initializeEditor (line 215) | function initializeEditor() {
function initializeColor (line 224) | function initializeColor() {
function initializeLanguage (line 234) | function initializeLanguage() {
function detectEscapeKey (line 260) | function detectEscapeKey(evt) {
function matchesLanguage (line 275) | function matchesLanguage(action) {
function matchesLanguageByName (line 284) | function matchesLanguageByName(actionName) {
function getAction (line 290) | function getAction(actionName) {
function indexOfAction (line 299) | function indexOfAction(actionName) {
function languageChanged (line 309) | function languageChanged() {
function actionChanged (line 327) | function actionChanged() {
function nameEntry (line 354) | function nameEntry(followup) {
function endNameEntry (line 365) | function endNameEntry() {
function completeNewAction (line 376) | function completeNewAction(newName) {
function completeRename (line 385) | function completeRename(newName) {
function deleteAction (line 406) | function deleteAction() {
function deleteRemote (line 427) | function deleteRemote(actionName) {
function getCode (line 439) | function getCode(actionName) {
function isWeb (line 464) | function isWeb(response) {
function getAnnotation (line 471) | function getAnnotation(object, name) {
function imposeWebbiness (line 484) | function imposeWebbiness(isWeb) {
function setReadOnly (line 520) | function setReadOnly(on) {
function getCookie (line 529) | function getCookie(key) {
function setCookie (line 544) | function setCookie(key, value) {
function themeClicked (line 550) | function themeClicked() {
function imposeColor (line 556) | function imposeColor(color) {
function getSession (line 579) | function getSession(actionName) {
function imposeAction (line 593) | function imposeAction(actionName) {
function codeChanged (line 614) | function codeChanged(delta) {
function makeOpenWhiskRequest (line 619) | function makeOpenWhiskRequest(actionName, args) {
function maybeSave (line 642) | function maybeSave() {
function save (line 650) | function save(web) {
function setAreaContents (line 678) | function setAreaContents(areaID, contents, error) {
function publishClicked (line 684) | function publishClicked() {
function processNewName (line 692) | function processNewName() {
function isInvalidActionName (line 720) | function isInvalidActionName(newName) {
function isConflictingActionName (line 729) | function isConflictingActionName(newName) {
function postNameError (line 739) | function postNameError(msg) {
function elem (line 753) | function elem(name) {
function runClicked (line 758) | function runClicked() {
FILE: tests/dat/actions/applicationError.js
function main (line 18) | function main(args) {
FILE: tests/dat/actions/argCheck.js
function main (line 18) | function main(params) {
FILE: tests/dat/actions/argsPrint.js
function main (line 18) | function main(params) {
FILE: tests/dat/actions/asyncError.js
function main (line 18) | function main(params) {
FILE: tests/dat/actions/cat.js
function main (line 23) | function main(msg) {
FILE: tests/dat/actions/concurrent.js
function main (line 21) | function main(args) {
function checkRequests (line 38) | function checkRequests(args, resolve, reject, elapsed) {
FILE: tests/dat/actions/concurrentFail1.js
function main (line 19) | function main(args) {
FILE: tests/dat/actions/concurrentFail2.js
function main (line 19) | function main(args) {
FILE: tests/dat/actions/conductor.js
function main (line 21) | function main(args) {
FILE: tests/dat/actions/corsHeaderMod.js
function main (line 18) | function main() {
FILE: tests/dat/actions/countdown.js
function main (line 24) | function main(params) {
FILE: tests/dat/actions/dosLogs.js
function main (line 18) | function main(msg) {
FILE: tests/dat/actions/echo-web-http-head.js
function main (line 18) | function main(params) {
FILE: tests/dat/actions/echo-web-http.js
function main (line 18) | function main(params) {
FILE: tests/dat/actions/echo.js
function main (line 21) | function main(params) {
FILE: tests/dat/actions/emptyJSONResult.js
function main (line 18) | function main(params) {
FILE: tests/dat/actions/head.js
function main (line 23) | function main(msg) {
FILE: tests/dat/actions/hello.js
function main (line 21) | function main(params) {
FILE: tests/dat/actions/hello.py
function main (line 22) | def main(args):
FILE: tests/dat/actions/helloArray.js
function main (line 22) | function main(params) {
FILE: tests/dat/actions/helloAsync.js
function wc (line 22) | function wc(params) {
function main (line 30) | function main(params) {
FILE: tests/dat/actions/helloContext.js
function main (line 18) | function main(args) {
FILE: tests/dat/actions/helloDeadline.js
function main (line 18) | function main(args) {
FILE: tests/dat/actions/helloOpenwhiskPackage.js
function main (line 20) | function main(args) {
FILE: tests/dat/actions/helloPromise.js
function main (line 18) | function main(args) {
FILE: tests/dat/actions/jsonStringWebAction.js
function main (line 18) | function main() {
FILE: tests/dat/actions/log.js
function main (line 21) | function main() {
FILE: tests/dat/actions/loggingTimeout.js
function getArg (line 22) | function getArg(value, defaultValue) {
function main (line 28) | function main(args) {
FILE: tests/dat/actions/memoryWithGC.js
function allocateMemoryBlock (line 29) | function allocateMemoryBlock(sizeInB) {
function randomUnsigned (line 35) | function randomUnsigned(maxExclusive) {
function fillMemoryPage (line 41) | function fillMemoryPage(byteArray) {
function eat (line 63) | function eat(memoryInMiB) {
function main (line 87) | function main(msg) {
FILE: tests/dat/actions/multipleHeaders.js
function main (line 18) | function main() {
FILE: tests/dat/actions/niam.js
function niam (line 18) | function niam(args) {
FILE: tests/dat/actions/niam.py
function niam (line 21) | def niam(args):
FILE: tests/dat/actions/openFiles.js
function main (line 20) | function main(params) {
FILE: tests/dat/actions/params.js
function main (line 18) | function main(args) {
FILE: tests/dat/actions/ping.js
function main (line 18) | function main(msg) {
FILE: tests/dat/actions/pngWeb.js
function main (line 18) | function main() {
FILE: tests/dat/actions/printParams.js
function main (line 21) | function main(params) {
FILE: tests/dat/actions/python-zip/__main__.py
function niam (line 21) | def niam(args):
FILE: tests/dat/actions/python-zip/greet.py
function greet (line 19) | def greet(dict):
FILE: tests/dat/actions/pythonVersion.py
function main (line 23) | def main(args):
FILE: tests/dat/actions/runexception.js
function main (line 18) | function main() {
FILE: tests/dat/actions/runexit.js
function main (line 18) | function main() {
FILE: tests/dat/actions/sizedResult.js
function main (line 18) | function main(args) {
FILE: tests/dat/actions/sleep.js
function main (line 27) | function main(parm) {
FILE: tests/dat/actions/sleep.py
function main (line 29) | def main(parm):
FILE: tests/dat/actions/sort-array.js
function main (line 22) | function main(msg) {
FILE: tests/dat/actions/sort.js
function main (line 22) | function main(msg) {
FILE: tests/dat/actions/split-array.js
function main (line 24) | function main(msg) {
FILE: tests/dat/actions/split.js
function main (line 24) | function main(msg) {
FILE: tests/dat/actions/src/java/sleep/src/main/java/Sleep.java
class Sleep (line 35) | public class Sleep {
method main (line 36) | public static JsonObject main(JsonObject parm) throws InterruptedExcep...
FILE: tests/dat/actions/stdenv.py
function main (line 22) | def main(dict):
FILE: tests/dat/actions/step.js
function main (line 21) | function main({ n }) {
FILE: tests/dat/actions/textBody.js
function main (line 18) | function main() {
FILE: tests/dat/actions/unicode.tests/src/dotnet2.2/Apache.OpenWhisk.UnicodeTests.Dotnet/Unicode.cs
class Unicode (line 23) | public class Unicode
method Main (line 25) | public JObject Main(JObject args)
FILE: tests/dat/actions/unicode.tests/src/java/unicode/src/main/java/Unicode.java
class Unicode (line 20) | public class Unicode {
method main (line 21) | public static JsonObject main(JsonObject args) throws InterruptedExcep...
FILE: tests/dat/actions/wc.js
function main (line 21) | function main(params) {
FILE: tests/dat/actions/wcbin.js
function main (line 24) | function main(params) {
FILE: tests/dat/actions/zippedaction/index.js
function entryPoint (line 18) | function entryPoint(args) {
FILE: tests/performance/gatling_tests/src/gatling/resources/data/nodeJSAction.js
function main (line 18) | function main(params) {
FILE: tests/performance/gatling_tests/src/gatling/resources/data/nodeJSAsyncAction.js
function main (line 18) | function main(params) {
FILE: tests/performance/gatling_tests/src/gatling/resources/data/pythonAction.py
function main (line 18) | def main(dict):
FILE: tests/performance/gatling_tests/src/gatling/resources/data/src/java/src/main/java/JavaAction.java
class JavaAction (line 25) | public class JavaAction {
method main (line 26) | public static JsonObject main(JsonObject args) {
FILE: tests/performance/preparation/actions/async.js
function main (line 18) | function main() {
FILE: tests/performance/preparation/actions/noop.js
function main (line 18) | function main() {
FILE: tests/src/test/scala/common/Pair.java
class Pair (line 20) | public class Pair {
method Pair (line 24) | public Pair(String a, String b) {
FILE: tests/src/test/scala/common/TestUtils.java
class TestUtils (line 51) | public class TestUtils {
method getCatalogFilename (line 91) | public static String getCatalogFilename(String name) {
method getTestActionFilename (line 101) | public static String getTestActionFilename(String name) {
method getTestApiGwFilename (line 111) | public static String getTestApiGwFilename(String name) {
method getVCAPServices (line 120) | public static JsonObject getVCAPServices() {
method getVCAPcredentials (line 139) | public static Map<String, String> getVCAPcredentials(String vcapServic...
method getCredentials (line 159) | public static JsonObject getCredentials(String vcapService) {
method makeTestWatcher (line 170) | public static TestWatcher makeTestWatcher() {
method getDateTime (line 185) | public static String getDateTime() {
method getTime (line 194) | public static String getTime() {
method isBuildingOnMainRepo (line 203) | public static boolean isBuildingOnMainRepo(){
class RunResult (line 219) | public static class RunResult {
method RunResult (line 226) | protected RunResult(int exitCode, String stdout, String stderr) {
method logs (line 232) | public Pair logs() {
method validateExitCode (line 236) | public void validateExitCode(int expectedExitCode) {
method toString (line 246) | @Override
method runCmd (line 265) | public static RunResult runCmd(int expectedExitCode, File dir, String....
method runCmd (line 280) | public static RunResult runCmd(int expectedExitCode, File dir, Logger ...
method runCmd (line 296) | public static RunResult runCmd(int expectedExitCode, File dir, Logger ...
method inputStreamToString (line 336) | private static String inputStreamToString(InputStream in) throws IOExc...
FILE: tests/src/test/scala/common/WhiskProperties.java
class WhiskProperties (line 32) | public class WhiskProperties {
method getCLIPath (line 120) | public static String getCLIPath() {
method getFileRelativeToWhiskHome (line 124) | public static File getFileRelativeToWhiskHome(String name) {
method getControllerInstances (line 128) | public static int getControllerInstances() {
method getProperty (line 132) | public static String getProperty(String name) {
method getBooleanProperty (line 136) | public static Boolean getBooleanProperty(String name, Boolean defaultV...
method getKafkaHosts (line 145) | public static String getKafkaHosts() {
method getKafkaMonitorPort (line 149) | public static int getKafkaMonitorPort() {
method getZookeeperHost (line 153) | public static String getZookeeperHost() {
method getMainDockerEndpoint (line 157) | public static String getMainDockerEndpoint() {
method getInvokerHosts (line 161) | public static String[] getInvokerHosts() {
method getAdditionalHosts (line 167) | public static String[] getAdditionalHosts() {
method numberOfInvokers (line 173) | public static int numberOfInvokers() {
method isSSLCheckRelaxed (line 177) | public static boolean isSSLCheckRelaxed() {
method getSslCertificateChallenge (line 181) | public static String getSslCertificateChallenge() {
method getEdgeHost (line 189) | public static String getEdgeHost() {
method getRealEdgeHost (line 197) | public static String getRealEdgeHost() {
method getAuthForTesting (line 201) | public static String getAuthForTesting() {
method getRouterHost (line 205) | public static String getRouterHost() {
method getApiProto (line 209) | public static String getApiProto() {
method getApiHost (line 213) | public static String getApiHost() {
method getApiPort (line 217) | public static String getApiPort() {
method getApiHostForAction (line 221) | public static String getApiHostForAction() {
method getApiHostForClient (line 230) | public static String getApiHostForClient(String subdomain, boolean inc...
method getPartsInVanitySubdomain (line 241) | public static int getPartsInVanitySubdomain() {
method getEdgeHostApiPort (line 245) | public static int getEdgeHostApiPort() {
method getControllerHosts (line 249) | public static String getControllerHosts() {
method getDBHosts (line 253) | public static String getDBHosts() {
method getControllerBasePort (line 257) | public static int getControllerBasePort() {
method getBaseControllerHost (line 261) | public static String getBaseControllerHost() {
method getBaseDBHost (line 265) | public static String getBaseDBHost() {
method getBaseControllerAddress (line 269) | public static String getBaseControllerAddress() {
method getBaseInvokerAddress (line 273) | public static String getBaseInvokerAddress(){
method getMaxActionInvokesPerMinute (line 277) | public static int getMaxActionInvokesPerMinute() {
method getBasicAuth (line 286) | public static Pair getBasicAuth() {
method getAuthFileForTesting (line 297) | public static File getAuthFileForTesting() {
method readAuthKey (line 309) | public static String readAuthKey(File filename) {
method getAuthKeyForTesting (line 324) | public static String getAuthKeyForTesting() {
method getVCAPServicesFile (line 336) | public static File getVCAPServicesFile() {
method onMacOSX (line 350) | public static boolean onMacOSX() {
method onLinux (line 358) | public static boolean onLinux() {
method getMaxActionSizeMB (line 363) | public static int getMaxActionSizeMB(){
method findFileRecursively (line 372) | protected static File findFileRecursively(String dir, String needle) {
method loadProperties (line 389) | protected static Properties loadProperties(File propsFile) {
method isWhiskPropertiesRequired (line 411) | private static boolean isWhiskPropertiesRequired() {
method getProperty (line 415) | public static String getProperty(String key, String defaultValue) {
method getPropFromSystemOrEnv (line 423) | private static String getPropFromSystemOrEnv(String key) {
method toEnvName (line 431) | private static String toEnvName(String p) {
FILE: tests/src/test/scala/org/apache/openwhisk/core/database/cosmosdb/RecordingLeakDetector.java
class RecordingLeakDetector (line 23) | public class RecordingLeakDetector<T> extends ResourceLeakDetector<T> {
method RecordingLeakDetector (line 25) | public RecordingLeakDetector(Counter counter, Class<?> resourceType, i...
method reportTracedLeak (line 30) | @Override
method reportUntracedLeak (line 36) | @Override
FILE: tests/src/test/scala/org/apache/openwhisk/core/database/cosmosdb/RecordingLeakDetectorFactory.java
class RecordingLeakDetectorFactory (line 24) | public class RecordingLeakDetectorFactory extends ResourceLeakDetectorFa...
method newResourceLeakDetector (line 26) | @Override
method register (line 32) | public static void register() {
FILE: tools/actionProxy/invoke.py
function main (line 44) | def main():
function dockerHost (line 56) | def dockerHost():
function containerRoute (line 66) | def containerRoute(args, path):
class objectify (line 69) | class objectify(object):
method __init__ (line 70) | def __init__(self, d):
function parseArgs (line 73) | def parseArgs():
function init (line 95) | def init(args):
function run (line 131) | def run(args):
function processPayload (line 138) | def processPayload(payload):
FILE: tools/admin/wskprop.py
function propfile (line 24) | def propfile(base):
function importPropsIfAvailable (line 36) | def importPropsIfAvailable(filename):
function importProps (line 42) | def importProps(stream):
function checkRequiredProperties (line 59) | def checkRequiredProperties(requiredPropertiesByName, properties):
function getPropertyValue (line 78) | def getPropertyValue(key, properties):
FILE: tools/admin/wskutil.py
function request (line 42) | def request(method, urlString, body = '', headers = {}, auth = None, ver...
function getPrettyJson (line 95) | def getPrettyJson(obj):
class ErrorResponse (line 100) | class ErrorResponse:
method __init__ (line 101) | def __init__(self, status, error):
method read (line 105) | def read(self):
FILE: tools/build/checkLogs.py
function file_has_at_most_x_bytes (line 36) | def file_has_at_most_x_bytes(x, file):
function database_has_at_most_x_entries (line 44) | def database_has_at_most_x_entries(x, file):
function run_file_checks (line 54) | def run_file_checks(file_path, checks):
function colors (line 65) | def colors():
FILE: tools/db/cleanUpActivations.py
function deleteOldActivations (line 36) | def deleteOldActivations(args):
FILE: tools/db/cosmosDbUtil.py
function main (line 43) | def main():
function parse_args (line 63) | def parse_args():
function init_cmd (line 87) | def init_cmd(args, client):
function prune_cmd (line 99) | def prune_cmd(args, client):
function drop_cmd (line 104) | def drop_cmd(args, client):
function init_auth (line 113) | def init_auth(ctx):
function create_link (line 128) | def create_link(db, coll, doc_id):
function find_default_subjects (line 132) | def find_default_subjects():
function init_client (line 153) | def init_client(args):
function get_db (line 157) | def get_db(client, db_name):
function get_or_create_db (line 162) | def get_or_create_db(client, db_name):
function init_coll (line 170) | def init_coll(client, db, coll_name):
function log (line 188) | def log(msg):
FILE: tools/db/deleteLogsFromActivations.py
function removeLogFromActivation (line 33) | def removeLogFromActivation(viewResult):
function deleteLogsFromOldActivations (line 41) | def deleteLogsFromOldActivations(args):
FILE: tools/db/moveCodeToAttachment.py
function updateNonJavaAction (line 26) | def updateNonJavaAction(db, doc, id):
function createNonMigratedDoc (line 42) | def createNonMigratedDoc(db):
function deleteNonMigratedDoc (line 56) | def deleteNonMigratedDoc(db):
function main (line 59) | def main(args):
FILE: tools/db/replicateDbs.py
function retry (line 29) | def retry(fn, retries):
function replicateDatabases (line 40) | def replicateDatabases(args):
function replayDatabases (line 107) | def replayDatabases(args):
FILE: tools/owperf/owperf.js
constant ACTION (line 31) | const ACTION = "action";
constant RULE (line 32) | const RULE = "rule";
constant RESULT (line 33) | const RESULT = "result";
constant ACTIVATION (line 34) | const ACTIVATION = "activation";
constant NONE (line 35) | const NONE = "none";
function parseIntDef (line 37) | function parseIntDef(strval, defval) {
function runMaster (line 135) | function runMaster() {
function testSetup (line 205) | async function testSetup() {
function testTeardown (line 226) | async function testTeardown() {
function mLogSampleHeader (line 247) | function mLogSampleHeader() {
function runWorker (line 254) | function runWorker() {
function checkInit (line 288) | function checkInit() {
function checkExit (line 306) | function checkExit() {
function checkSummary (line 323) | function checkSummary() {
function mainLoop (line 337) | async function mainLoop() {
function abortLoop (line 396) | function abortLoop() {
function invokeActions (line 407) | function invokeActions(count, doBlocking, getResult, burst_bi) {
function invokeRules (line 441) | function invokeRules(bi) {
function postProcess (line 465) | async function postProcess() {
function getActionSamplesOfRules (line 489) | function getActionSamplesOfRules(triggerSample) {
function processSampleWithAction (line 520) | async function processSampleWithAction(actionSample) {
function processSample (line 540) | function processSample(sample, activation) {
function updateLatSample (line 626) | function updateLatSample(statName, value) {
function computeOutputRecord (line 656) | function computeOutputRecord() {
function computeLatStats (line 677) | function computeLatStats(statName) {
function computeTpStats (line 716) | function computeTpStats(statName) {
function computErrorStats (line 731) | function computErrorStats() {
function generateOutput (line 750) | function generateOutput() {
function sleep (line 786) | function sleep(ms) {
function getRandomInt (line 804) | function getRandomInt(max) {
function round (line 814) | function round(num, digits = 0) {
function mLog (line 821) | function mLog(text) {
function clientId (line 830) | function clientId() {
function mWrite (line 836) | function mWrite(text) {
function dfsObject (line 846) | function dfsObject(data, func, allowInherited = false) {
FILE: tools/owperf/testAction.js
function sleep (line 25) | function sleep(ms) {
function main (line 29) | async function main(params) {
FILE: tools/travis/box-upload.py
function upload_file (line 41) | def upload_file(local_file, remote_file):
function tar_gz_dir (line 57) | def tar_gz_dir(dir_path):
function print_tarball_size (line 64) | def print_tarball_size(tarball):
FILE: tools/travis/setup-docker.py
function get_daemon_content (line 46) | def get_daemon_content():
function add_content (line 53) | def add_content(data):
function write_to_daemon_conf (line 62) | def write_to_daemon_conf(data):
Condensed preview — 1088 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,434K chars).
[
{
"path": ".asf.yaml",
"chars": 1679,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": ".gitattributes",
"chars": 1019,
"preview": "# Auto detect text files and perform LF normalization.\n# Resources:\n# - https://www.kernel.org/pub/software/scm/gi"
},
{
"path": ".github/ISSUE_TEMPLATE/proposal.md",
"chars": 299,
"preview": "## Enhancement Description\nPlease summarize your proposal (e.g. the \"what\", the \"why\", and some of the \"how\").\n\n* Propos"
},
{
"path": ".github/ISSUE_TEMPLATE.md",
"chars": 1805,
"preview": "<!--\nWe use the issue tracker for bugs and feature requests. For general questions and discussion please use https://ope"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 1736,
"preview": "\n<!--- Provide a concise summary of your changes in the Title -->\n\n## Description\n<!--- Provide a detailed description o"
},
{
"path": ".github/dependabot.yml",
"chars": 434,
"preview": "# Keep GitHub Actions up to date with GitHub's Dependabot...\n# https://docs.github.com/en/code-security/dependabot/worki"
},
{
"path": ".github/workflows/0-on-demand.yaml",
"chars": 3506,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements. See the NOTICE f"
},
{
"path": ".github/workflows/1-unit.yaml",
"chars": 3079,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements. See the NOTICE f"
},
{
"path": ".github/workflows/2-system.yaml",
"chars": 2890,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements. See the NOTICE f"
},
{
"path": ".github/workflows/3-multi-runtime.yaml",
"chars": 2865,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements. See the NOTICE f"
},
{
"path": ".github/workflows/4-standalone.yaml",
"chars": 2861,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements. See the NOTICE f"
},
{
"path": ".github/workflows/5-scheduler.yaml",
"chars": 2859,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements. See the NOTICE f"
},
{
"path": ".github/workflows/6-performance.yaml",
"chars": 5037,
"preview": "# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements. See the NOTICE f"
},
{
"path": ".github/workflows/README.md",
"chars": 2071,
"preview": "# How to use those workflows\n\nThere are a few [GitHub secrets](https://docs.github.com/en/actions/security-guides/encryp"
},
{
"path": ".gitignore",
"chars": 1926,
"preview": "# Whisk\nnginx.conf\nwhisk.properties\nwhisk.conf\ndefault.props\n/tests/src/test/resources/application.conf\n\n.ant-targets-bu"
},
{
"path": ".pydevproject",
"chars": 302,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<?eclipse-pydev version=\"1.0\"?><pydev_project>\n<pydev_property na"
},
{
"path": ".scalafmt.conf",
"chars": 933,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "CHANGELOG.md",
"chars": 52305,
"preview": "<!--\n#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the N"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 944,
"preview": "<!--\n#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the N"
},
{
"path": "CONTRIBUTING.md",
"chars": 3332,
"preview": "<!--\n#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the N"
},
{
"path": "CREDITS.txt",
"chars": 4094,
"preview": " C R E D I T S\n\nThis is the file where major donations to the OpenWhisk project are liste"
},
{
"path": "Jenkinsfile",
"chars": 7247,
"preview": "#!groovy\n/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. Se"
},
{
"path": "LICENSE.txt",
"chars": 12343,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "NOTICE.txt",
"chars": 170,
"preview": "Apache OpenWhisk\nCopyright 2016-2024 The Apache Software Foundation\n\nThis product includes software developed at\nThe Apa"
},
{
"path": "README.md",
"chars": 7352,
"preview": "<!--\n#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the N"
},
{
"path": "ansible/README.md",
"chars": 22321,
"preview": "<!--\n#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the N"
},
{
"path": "ansible/ansible.cfg",
"chars": 240,
"preview": "[defaults]\n\ncallback_whitelist = profile_tasks\nretry_files_enabled = False\nhost_key_checking = False\ninventory = environ"
},
{
"path": "ansible/apigateway.yml",
"chars": 865,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/callbacks/logformatter.py",
"chars": 3067,
"preview": "\"\"\"Python callback for highlighting Ansible logs.\n\n/*\n * Licensed to the Apache Software Foundation (ASF) under one or m"
},
{
"path": "ansible/controller.yml",
"chars": 2271,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/couchdb.yml",
"chars": 872,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/downloadcli-github.yml",
"chars": 1392,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/downloadcli.yml",
"chars": 903,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/edge.yml",
"chars": 1057,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/elasticsearch.yml",
"chars": 1516,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/environments/docker-machine/group_vars/all",
"chars": 1963,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/environments/docker-machine/hosts.j2.ini",
"chars": 1458,
"preview": "; the first parameter in a host is the inventory_hostname\n\n; used for local actions only\nansible ansible_connection=loca"
},
{
"path": "ansible/environments/local/group_vars/all",
"chars": 2049,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/environments/local/hosts.j2.ini",
"chars": 1434,
"preview": "; the first parameter in a host is the inventory_hostname\n\n; used for local actions only\nansible ansible_connection=loca"
},
{
"path": "ansible/etcd.yml",
"chars": 866,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/files/activations_design_document_for_activations_db.json",
"chars": 244,
"preview": "{\n \"_id\": \"_design/activations\",\n \"views\": {\n \"byDate\": {\n \"map\": \"function (doc) {\\n if (doc.activationId !="
},
{
"path": "ansible/files/auth.guest",
"chars": 101,
"preview": "23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP"
},
{
"path": "ansible/files/auth.whisk.system",
"chars": 101,
"preview": "789c46b1-71f6-4ed5-8c54-816aa4f8c502:abczO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP"
},
{
"path": "ansible/files/auth_design_document_for_subjects_db_v2.0.0.json",
"chars": 470,
"preview": "{\n \"_id\": \"_design/subjects.v2.0.0\",\n \"views\": {\n \"identities\": {\n \"map\": \"function (doc) {\\n if (doc.namespa"
},
{
"path": "ansible/files/filter_design_document.json",
"chars": 193,
"preview": "{\n \"_id\": \"_design/snapshotFilters\",\n \"filters\": {\n \"withoutDeletedAndDesignDocuments\": \"function(doc, req) {\\n "
},
{
"path": "ansible/files/genssl.sh",
"chars": 5555,
"preview": "#!/bin/bash\n#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. Se"
},
{
"path": "ansible/files/logCleanup_design_document_for_activations_db.json",
"chars": 532,
"preview": "{\n \"_id\": \"_design/logCleanup\",\n \"views\": {\n \"byDateWithLogs\": {\n \"map\": \"function (doc) {\\n if (doc.activati"
},
{
"path": "ansible/files/namespace_throttlings_design_document_for_subjects_db.json",
"chars": 555,
"preview": "{\n \"_id\": \"_design/namespaceThrottlings\",\n \"views\": {\n \"blockedNamespaces\": {\n \"map\": \"function (doc) {\\n if "
},
{
"path": "ansible/files/package-versions.ini",
"chars": 31,
"preview": "[openwhisk-cli]\ngit_tag=latest\n"
},
{
"path": "ansible/files/runtimes-nodeonly.json",
"chars": 1960,
"preview": "{\n \"description\": [\n \"This file describes the different languages (aka. managed action runtimes) supported by "
},
{
"path": "ansible/files/runtimes.json",
"chars": 8034,
"preview": "{\n \"description\": [\n \"This file describes the different languages (aka. managed action runtimes) supported by "
},
{
"path": "ansible/files/whisks_design_document_for_activations_db_filters_v2.1.0.json",
"chars": 1479,
"preview": "{\n \"_id\": \"_design/whisks-filters.v2.1.0\",\n \"language\": \"javascript\",\n \"views\": {\n \"activations\": {\n \"map\": \""
},
{
"path": "ansible/files/whisks_design_document_for_activations_db_filters_v2.1.1.json",
"chars": 1778,
"preview": "{\n \"_id\": \"_design/whisks-filters.v2.1.1\",\n \"language\": \"javascript\",\n \"views\": {\n \"activations\": {\n \"map\": \""
},
{
"path": "ansible/files/whisks_design_document_for_activations_db_v2.1.0.json",
"chars": 1039,
"preview": "{\n \"_id\": \"_design/whisks.v2.1.0\",\n \"language\": \"javascript\",\n \"views\": {\n \"activations\": {\n \"map\": \"function"
},
{
"path": "ansible/files/whisks_design_document_for_entities_db_v2.1.0.json",
"chars": 3040,
"preview": "{\n \"_id\": \"_design/whisks.v2.1.0\",\n \"language\": \"javascript\",\n \"views\": {\n \"rules\": {\n \"map\": \"function (doc)"
},
{
"path": "ansible/group_vars/all",
"chars": 27120,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/initMongoDB.yml",
"chars": 1477,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/initdb.yml",
"chars": 980,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/invoker.yml",
"chars": 1853,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/kafka.yml",
"chars": 917,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/library/mongodb.py",
"chars": 9228,
"preview": "#!/usr/bin/python\n\n#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreemen"
},
{
"path": "ansible/logs.yml",
"chars": 3611,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/mongodb.yml",
"chars": 1311,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/openwhisk.yml",
"chars": 1339,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/postdeploy.yml",
"chars": 1052,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/prereq.yml",
"chars": 983,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/properties.yml",
"chars": 937,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/publish.yml",
"chars": 1009,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/recreateDesignDocs.yml",
"chars": 974,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/apigateway/tasks/clean.yml",
"chars": 928,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/apigateway/tasks/deploy.yml",
"chars": 1784,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/apigateway/tasks/main.yml",
"chars": 1086,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/cli/tasks/clean.yml",
"chars": 945,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/cli/tasks/deploy.yml",
"chars": 3242,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/cli/tasks/main.yml",
"chars": 1089,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/cli-install/tasks/clean.yml",
"chars": 973,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/cli-install/tasks/deploy.yml",
"chars": 1320,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/cli-install/tasks/main.yml",
"chars": 1089,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/controller/tasks/clean.yml",
"chars": 1388,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/controller/tasks/deploy.yml",
"chars": 23133,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/controller/tasks/join_pekko_cluster.yml",
"chars": 2176,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/controller/tasks/lean.yml",
"chars": 2036,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/controller/tasks/main.yml",
"chars": 1084,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/controller/templates/config.j2",
"chars": 151,
"preview": "include classpath(\"application.conf\")\n\n# Specify any custom config here. For example\n# whisk {\n# metrics {\n# prome"
},
{
"path": "ansible/roles/couchdb/tasks/clean.yml",
"chars": 915,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/couchdb/tasks/deploy.yml",
"chars": 6712,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/couchdb/tasks/main.yml",
"chars": 1093,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/elasticsearch/tasks/clean.yml",
"chars": 1582,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/elasticsearch/tasks/deploy.yml",
"chars": 3713,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/elasticsearch/tasks/main.yml",
"chars": 1111,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/elasticsearch/templates/elasticsearch.yml.j2",
"chars": 935,
"preview": "cluster.name: \"{{ db.elasticsearch.cluster_name }}\"\nnode.name: \"{{ elasticsearch_name }}\"\nnetwork.host: 0.0.0.0\nnetwork."
},
{
"path": "ansible/roles/elasticsearch/templates/log4j2.properties.j2",
"chars": 300,
"preview": "status = error\n\nappender.console.type = Console\nappender.console.name = console\nappender.console.layout.type = PatternLa"
},
{
"path": "ansible/roles/etcd/tasks/clean.yml",
"chars": 980,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/etcd/tasks/deploy.yml",
"chars": 2458,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/etcd/tasks/main.yml",
"chars": 1065,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/invoker/tasks/clean.yml",
"chars": 5186,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/invoker/tasks/deploy.yml",
"chars": 23561,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/invoker/tasks/main.yml",
"chars": 1072,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/invoker/templates/config.j2",
"chars": 150,
"preview": "include classpath(\"application.conf\")\n\n# Specify any custom config here. For example\n# whisk {\n# metrics {\n# prome"
},
{
"path": "ansible/roles/kafka/tasks/clean.yml",
"chars": 1304,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/kafka/tasks/deploy.yml",
"chars": 5398,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/kafka/tasks/main.yml",
"chars": 1092,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/mongodb/tasks/clean.yml",
"chars": 917,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/mongodb/tasks/deploy.yml",
"chars": 1489,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/mongodb/tasks/main.yml",
"chars": 1094,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/nginx/files/openwhisk-server-key.pem",
"chars": 1679,
"preview": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEA1Xk16caqAdcf3NITVcFsqXHceQf10lPjlKT5Dg+bbJPwS+9p\nqAsYOm0vLP4F72S7/A9IfgM"
},
{
"path": "ansible/roles/nginx/tasks/clean.yml",
"chars": 1198,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/nginx/tasks/deploy.yml",
"chars": 3316,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/nginx/tasks/main.yml",
"chars": 1047,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/nginx/templates/nginx.conf.j2",
"chars": 6600,
"preview": "{# this template is used to generate a nginx.conf for booting a nginx server based on the given environment inventory #}"
},
{
"path": "ansible/roles/prereq/tasks/clean.yml",
"chars": 1062,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/prereq/tasks/deploy.yml",
"chars": 1329,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/prereq/tasks/main.yml",
"chars": 1098,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/redis/tasks/clean.yml",
"chars": 913,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/redis/tasks/deploy.yml",
"chars": 1678,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/redis/tasks/main.yml",
"chars": 1062,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/routemgmt/files/installRouteMgmt.sh",
"chars": 3405,
"preview": "#!/bin/bash\n#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. Se"
},
{
"path": "ansible/roles/routemgmt/files/uninstallRouteMgmt.sh",
"chars": 2845,
"preview": "#!/bin/bash\n#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. Se"
},
{
"path": "ansible/roles/routemgmt/tasks/clean.yml",
"chars": 1118,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/routemgmt/tasks/deploy.yml",
"chars": 1152,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/routemgmt/tasks/main.yml",
"chars": 1106,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/schedulers/tasks/clean.yml",
"chars": 1377,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/schedulers/tasks/deploy.yml",
"chars": 17534,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/schedulers/tasks/join_pekko_cluster.yml",
"chars": 2159,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/schedulers/tasks/main.yml",
"chars": 1080,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/schedulers/templates/jmx.yml.j2",
"chars": 2467,
"preview": "collects:\n{% set index = groups['schedulers'].index(inventory_hostname) %}\n{% set ip = hostvars[groups['schedulers'][gro"
},
{
"path": "ansible/roles/zookeeper/tasks/clean.yml",
"chars": 1332,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/zookeeper/tasks/deploy.yml",
"chars": 2832,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/roles/zookeeper/tasks/main.yml",
"chars": 1092,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/routemgmt.yml",
"chars": 906,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/scheduler.yml",
"chars": 2280,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/setup.yml",
"chars": 4882,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/tasks/db/checkDb.yml",
"chars": 1421,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/tasks/db/createUsers.yml",
"chars": 1841,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/tasks/db/grantPermissions.yml",
"chars": 3203,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/tasks/db/recreateDb.yml",
"chars": 2023,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/tasks/db/recreateDoc.yml",
"chars": 2454,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/tasks/docker_login.yml",
"chars": 1071,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/tasks/gen_erl_cookie.yml",
"chars": 1979,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/tasks/initdb.yml",
"chars": 2433,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/tasks/installOpenwhiskCatalog.yml",
"chars": 2293,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/tasks/recreateViews.yml",
"chars": 1744,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/tasks/wipeDatabase.yml",
"chars": 1866,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/tasks/writeWhiskProperties.yml",
"chars": 1638,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/teardown.yml",
"chars": 1237,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/templates/db_local.ini.j2",
"chars": 1098,
"preview": "[db_creds]\ndb_provider={{ lookup('env', 'OW_DB')|default('CouchDB', true) }}\ndb_username={{ lookup('env', 'OW_DB_USERNAM"
},
{
"path": "ansible/templates/jmxremote.access.j2",
"chars": 25,
"preview": "{{ jmx.user }} readwrite\n"
},
{
"path": "ansible/templates/jmxremote.password.j2",
"chars": 30,
"preview": "{{ jmx.user }} {{ jmx.pass }}\n"
},
{
"path": "ansible/templates/whisk.conf.j2",
"chars": 756,
"preview": "include classpath(\"application.conf\")\n\nwhisk {\n couchdb {\n protocol = \"{{ db.protocol }}\"\n host = \"{{ db.host"
},
{
"path": "ansible/templates/whisk.properties.j2",
"chars": 4213,
"preview": "openwhisk.home={{ openwhisk_home }}\n\npython.27=python\nnginx.conf.dir={{ nginx.confdir }}\ntesting.auth={{ openwhisk_home "
},
{
"path": "ansible/wipe.yml",
"chars": 1045,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "ansible/yamllint.yml",
"chars": 942,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "build.gradle",
"chars": 5686,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/.dockerignore",
"chars": 64,
"preview": "*\n!transformEnvironment.sh\n!copyJMXFiles.sh\n!build/distributions"
},
{
"path": "common/scala/Dockerfile",
"chars": 1503,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "common/scala/Dockerfile-debian",
"chars": 1388,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "common/scala/build.gradle",
"chars": 9756,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/copyJMXFiles.sh",
"chars": 1167,
"preview": "#!/bin/bash\n#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. Se"
},
{
"path": "common/scala/src/main/resources/application.conf",
"chars": 25721,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "common/scala/src/main/resources/logback.xml",
"chars": 593,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<configuration>\n <jmxConfigurator></jmxConfigurator>\n <include optional=\"true\" "
},
{
"path": "common/scala/src/main/resources/logging.conf",
"chars": 943,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "common/scala/src/main/resources/reference.conf",
"chars": 3872,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "common/scala/src/main/resources/s3-reference.conf",
"chars": 5429,
"preview": "#\n# Licensed to the Apache Software Foundation (ASF) under one or more\n# contributor license agreements. See the NOTICE"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/AverageRingBuffer.scala",
"chars": 1857,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/CausedBy.scala",
"chars": 1138,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/Config.scala",
"chars": 6759,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/ConfigMXBean.scala",
"chars": 2173,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/ConfigMapValue.scala",
"chars": 1686,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/Counter.scala",
"chars": 1292,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/ExecutorCloser.scala",
"chars": 1632,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/ForcibleSemaphore.scala",
"chars": 4374,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/Https.scala",
"chars": 4340,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/Logging.scala",
"chars": 28114,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/Message.scala",
"chars": 2465,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/NestedSemaphore.scala",
"chars": 4234,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/Prometheus.scala",
"chars": 1935,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/ResizableSemaphore.scala",
"chars": 4291,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/RingBuffer.scala",
"chars": 1162,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/Scheduler.scala",
"chars": 5403,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/TransactionId.scala",
"chars": 13375,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/UserEvents.scala",
"chars": 1413,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/WhiskInstants.scala",
"chars": 1436,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/time/Clock.scala",
"chars": 974,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/common/tracing/OpenTracingProvider.scala",
"chars": 7151,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/connector/kafka/KafkaConsumerConnector.scala",
"chars": 9267,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/connector/kafka/KafkaMessagingProvider.scala",
"chars": 6335,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/connector/kafka/KafkaMetrics.scala",
"chars": 2778,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/connector/kafka/KafkaProducerConnector.scala",
"chars": 5104,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/connector/kafka/KamonMetricsReporter.scala",
"chars": 5374,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/connector/lean/LeanConsumer.scala",
"chars": 1881,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/connector/lean/LeanMessagingProvider.scala",
"chars": 2694,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/connector/lean/LeanProducer.scala",
"chars": 2133,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/core/FeatureFlags.scala",
"chars": 1249,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/core/WarmUp.scala",
"chars": 2623,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/core/WhiskConfig.scala",
"chars": 12755,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/core/ack/Ack.scala",
"chars": 2483,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/core/ack/HealthActionAck.scala",
"chars": 2097,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/core/ack/MessagingActiveAck.scala",
"chars": 3338,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/core/connector/Message.scala",
"chars": 29030,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
},
{
"path": "common/scala/src/main/scala/org/apache/openwhisk/core/connector/MessageConsumer.scala",
"chars": 9289,
"preview": "/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements. See the NOT"
}
]
// ... and 888 more files (download for full content)
About this extraction
This page contains the full source code of the apache/openwhisk GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1088 files (6.8 MB), approximately 1.8M tokens, and a symbol index with 371 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.