Skip to content

Commit f284a6c

Browse files
Add deleteOld parameter for action#create
1 parent 0bb1650 commit f284a6c

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

core/controller/src/main/scala/org/apache/openwhisk/core/controller/Actions.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ trait WhiskActionsApi extends WhiskCollectionAPI with PostActionActivation with
220220
* - 500 Internal Server Error
221221
*/
222222
override def create(user: Identity, entityName: FullyQualifiedEntityName)(implicit transid: TransactionId) = {
223-
parameter('overwrite ? false) { overwrite =>
223+
parameter('overwrite ? false, 'deleteOld ? false) { (overwrite, deleteOld) =>
224224
entity(as[WhiskActionPut]) { content =>
225225
val request = content.resolve(user.namespace)
226226
val checkAdditionalPrivileges = entitleReferencedEntities(user, Privilege.READ, request.exec).flatMap {
@@ -230,6 +230,10 @@ trait WhiskActionsApi extends WhiskCollectionAPI with PostActionActivation with
230230
onComplete(checkAdditionalPrivileges) {
231231
case Success(_) =>
232232
onComplete(WhiskActionVersionList.get(entityName, entityStore)) {
233+
case Success(result) if (result.versions.size >= actionMaxVersionLimit && !deleteOld) =>
234+
terminate(
235+
Forbidden,
236+
s"[PUT] entity has ${result.versions.size} versions exist which exceed $actionMaxVersionLimit, delete one of them before create new one or pass deleteOld=true to delete oldest version automatically")
233237
case Success(result) =>
234238
val id = result.matchedDocId(content.version).getOrElse(entityName.toDocId)
235239
putEntity(

tests/src/test/scala/org/apache/openwhisk/core/controller/test/ActionsApiTests.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1627,6 +1627,10 @@ class ActionsApiTests extends ControllerTestCommon with WhiskActionsApi {
16271627

16281628
val content = WhiskActionPut(parameters = Some(Parameters("x", "X")))
16291629
Put(s"$collectionPath/${action.name}", content) ~> Route.seal(routes(creds)) ~> check {
1630+
status should be(Forbidden)
1631+
}
1632+
1633+
Put(s"$collectionPath/${action.name}?deleteOld=true", content) ~> Route.seal(routes(creds)) ~> check {
16301634
status should be(OK)
16311635
}
16321636
// the first version should be deleted automatically

0 commit comments

Comments
 (0)