Skip to content

[Bug]: GCS in S3 compatibility as external storage (not primary) cannot delete 400 NotImplemented #53658

Open
@antoinetran

Description

@antoinetran

⚠️ This issue respects the following points: ⚠️

Bug description

When Nextcloud is configured with an external storage as Amazon S3 endpoint, with host set to GCS as S3 compatibility mode, then it is not possible to use Nextcloud GUI to delete a folder, whether it is empty or not. But it is possible to delete files.

Steps to reproduce

  1. Configure Google GCS side as S3 compatibility mode
  2. Create a bucket with Fine-grained ACL
  3. Configure in Nextcloud an external storage for GCS as Amazon S3 endpoint
  4. Create a folder in this mount using Nextcloud, and upload a small file
  5. Delete the folder, it results in the error in GUI "Delete permanently" failed on some elements
  6. Looking at server logs (see nextcloud server logs for full json log below):```
    AWS HTTP error: Client error: POST https://storage.googleapis.com/REDACTED?delete resulted in a `400 Bad Request` response:\nNotImplementedA header or query you provided requeste (truncated...)\n NotImplemented (client): A header or query you provided requested a function that is not implemented.

### Expected behavior

It should be possible to remove a folder.

### Nextcloud Server version

30

### Operating system

Other

### PHP engine version

PHP 8.2

### Web server

Nginx

### Database engine version

MariaDB

### Is this bug present after an update or on a fresh install?

Fresh Nextcloud Server install

### Are you using the Nextcloud Server Encryption module?

Encryption is Disabled

### What user-backends are you using?

- [x] Default user-backend _(database)_
- [x] LDAP/ Active Directory
- [ ] SSO - SAML
- [ ] Other

### Configuration report

```json
{
    "system": {
        "htaccess.RewriteBase": "\/",
        "memcache.local": "\\OC\\Memcache\\APCu",
        "apps_paths": [
            {
                "path": "\/var\/www\/html\/apps",
                "url": "\/apps",
                "writable": false
            },
            {
                "path": "\/var\/www\/html\/custom_apps",
                "url": "\/custom_apps",
                "writable": true
            }
        ],
        "debug": true,
        "check_data_directory_permissions": false,
        "trusted_proxies": "***REMOVED SENSITIVE VALUE***",
        "forwarded_for_headers": [
            "HTTP_X_FORWARDED_FOR"
        ],
        "skeletondirectory": "\/dev\/null",
        "memcache.distributed": "\\OC\\Memcache\\Redis",
        "memcache.locking": "\\OC\\Memcache\\Redis",
        "redis": {
            "host": "***REMOVED SENSITIVE VALUE***",
            "password": "***REMOVED SENSITIVE VALUE***",
            "port": 6379
        },
        "upgrade.disable-web": true,
        "passwordsalt": "***REMOVED SENSITIVE VALUE***",
        "secret": "***REMOVED SENSITIVE VALUE***",
        "trusted_domains": "***REMOVED SENSITIVE VALUE***"
        "datadirectory": "***REMOVED SENSITIVE VALUE***",
        "dbtype": "mysql",
        "version": "30.0.6.2",
        "overwrite.cli.url": "http:\/\/localhost",
        "dbname": "***REMOVED SENSITIVE VALUE***",
        "dbhost": "***REMOVED SENSITIVE VALUE***",
        "dbport": "",
        "dbtableprefix": "oc_",
        "mysql.utf8mb4": true,
        "dbuser": "***REMOVED SENSITIVE VALUE***",
        "dbpassword": "***REMOVED SENSITIVE VALUE***",
        "installed": true,
        "instanceid": "***REMOVED SENSITIVE VALUE***",
        "ldapProviderFactory": "OCA\\User_LDAP\\LDAPProviderFactory",
        "filelocking.enabled": false
    }
}

List of activated Apps

Enabled:
  - activity: 3.0.0
  - bruteforcesettings: 3.0.0
  - cloud_federation_api: 1.13.0
  - comments: 1.20.1
  - dav: 1.31.1
  - federatedfilesharing: 1.20.0
  - files: 2.2.0
  - files_downloadlimit: 3.0.0
  - files_external: 1.22.0
  - files_pdfviewer: 3.0.0
  - files_sharing: 1.22.0
  - logreader: 3.0.0
  - lookup_server_connector: 1.18.0
  - notifications: 3.0.0
  - oauth2: 1.18.1
  - password_policy: 2.0.0
  - provisioning_api: 1.20.0
  - serverinfo: 2.0.0
  - settings: 1.13.0
  - support: 2.0.0
  - survey_client: 2.0.0
  - systemtags: 1.20.0
  - text: 4.1.0
  - theming: 2.6.0
  - twofactor_backupcodes: 1.19.0
  - updatenotification: 1.20.0
  - user_ldap: 1.21.0
  - viewer: 3.0.0
  - workflowengine: 2.12.0
Enabled:
  - activity: 3.0.0
  - bruteforcesettings: 3.0.0
  - cloud_federation_api: 1.13.0
  - comments: 1.20.1
  - dav: 1.31.1
  - federatedfilesharing: 1.20.0
  - files: 2.2.0
  - files_downloadlimit: 3.0.0
  - files_external: 1.22.0
  - files_pdfviewer: 3.0.0
  - files_sharing: 1.22.0
  - logreader: 3.0.0
  - lookup_server_connector: 1.18.0
  - notifications: 3.0.0
  - oauth2: 1.18.1
  - password_policy: 2.0.0
  - provisioning_api: 1.20.0
  - serverinfo: 2.0.0
  - settings: 1.13.0
  - support: 2.0.0
  - survey_client: 2.0.0
  - systemtags: 1.20.0
  - text: 4.1.0
  - theming: 2.6.0
  - twofactor_backupcodes: 1.19.0
  - updatenotification: 1.20.0
  - user_ldap: 1.21.0
  - viewer: 3.0.0
  - workflowengine: 2.12.0Disabled:
  - admin_audit: 1.20.0
  - app_api: 4.0.6 (installed 4.0.6)
  - circles: 30.0.0 (installed 30.0.0)
  - contactsinteraction: 1.11.0 (installed 1.11.0)
  - dashboard: 7.10.0 (installed 7.10.0)
  - encryption: 2.18.0
  - federation: 1.20.0 (installed 1.20.0)
  - files_reminders: 1.3.0 (installed 1.3.0)
  - files_trashbin: 1.20.1 (installed 1.20.1)
  - files_versions: 1.23.0 (installed 1.23.0)
  - firstrunwizard: 3.0.0 (installed 3.0.0)
  - nextcloud_announcements: 2.0.0 (installed 2.0.0)
  - photos: 3.0.2 (installed 3.0.2)
  - privacy: 2.0.0 (installed 2.0.0)
  - recommendations: 3.0.0 (installed 3.0.0)
  - related_resources: 1.5.0 (installed 1.5.0)
  - sharebymail: 1.20.0 (installed 1.20.0)
  - suspicious_login: 8.0.0
  - twofactor_nextcloud_notification: 4.0.0
  - twofactor_totp: 12.0.0-dev
  - user_status: 1.10.0 (installed 1.10.0)
  - weather_status: 1.10.0 (installed 1.10.0)
  - webhook_listeners: 1.1.0-dev (installed 1.1.0-dev)

Nextcloud Signing status

No errors have been found.

Nextcloud Logs

{
   "reqId":"Nm9xSP0wsMjMoh014V7h",
   "level":3,
   "time":"2025-06-17T15:43:45+00:00",
   "remoteAddr":"24.206.123.184",
   "user":"admin",
   "app":"files_external",
   "method":"DELETE",
   "url":"/remote.php/dav/files/admin/REDACTED/testtodel-template-tsqmp",
   "message":"Error executing \"DeleteObjects\" on \"https://storage.googleapis.com/REDACTED?delete\"; AWS HTTP error: Client error: `POST https://storage.googleapis.com/REDACTED?delete` resulted in a `400 Bad Request` response:\n<?xml version='1.0' encoding='UTF-8'?><Error><Code>NotImplemented</Code><Message>A header or query you provided requeste (truncated...)\n NotImplemented (client): A header or query you provided requested a function that is not implemented. - <?xml version='1.0' encoding='UTF-8'?><Error><Code>NotImplemented</Code><Message>A header or query you provided requested a function that is not implemented.</Message><Details>POST ?delete is not implemented for objects.</Details></Error>",
   "userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0",
   "version":"30.0.6.2",
   "exception":{
      "Exception":"Aws\\S3\\Exception\\S3Exception",
      "Message":"Error executing \"DeleteObjects\" on \"https://storage.googleapis.com/REDACTED?delete\"; AWS HTTP error: Client error: `POST https://storage.googleapis.com/REDACTED?delete` resulted in a `400 Bad Request` response:\n<?xml version='1.0' encoding='UTF-8'?><Error><Code>NotImplemented</Code><Message>A header or query you provided requeste (truncated...)\n NotImplemented (client): A header or query you provided requested a function that is not implemented. - <?xml version='1.0' encoding='UTF-8'?><Error><Code>NotImplemented</Code><Message>A header or query you provided requested a function that is not implemented.</Message><Details>POST ?delete is not implemented for objects.</Details></Error>",
      "Code":0,
      "Trace":[
         {
            "file":"/var/www/html/3rdparty/aws/aws-sdk-php/src/WrappedHttpHandler.php",
            "line":97,
            "function":"parseError",
            "class":"Aws\\WrappedHttpHandler",
            "type":"->",
            "args":[
               "*** sensitive parameters replaced ***",
               {
                  "__class__":"GuzzleHttp\\Psr7\\Request"
               },
               {
                  "__class__":"Aws\\Command"
               },
               [
                  
               ]
            ]
         },
         {
            "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php",
            "line":209,
            "function":"Aws\\{closure}",
            "class":"Aws\\WrappedHttpHandler",
            "type":"->",
            "args":[
               "*** sensitive parameters replaced ***"
            ]
         },
         {
            "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php",
            "line":174,
            "function":"callHandler",
            "class":"GuzzleHttp\\Promise\\Promise",
            "type":"::",
            "args":[
               2,
               "*** sensitive parameters replaced ***",
               null
            ]
         },
         {
            "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/RejectedPromise.php",
            "line":49,
            "function":"GuzzleHttp\\Promise\\{closure}",
            "class":"GuzzleHttp\\Promise\\Promise",
            "type":"::",
            "args":[
               "*** sensitive parameters replaced ***"
            ]
         },
         {
            "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/TaskQueue.php",
            "line":52,
            "function":"GuzzleHttp\\Promise\\{closure}",
            "class":"GuzzleHttp\\Promise\\RejectedPromise",
            "type":"::",
            "args":[
               "*** sensitive parameters replaced ***"
            ]
         },
         {
            "file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php",
            "line":163,
            "function":"run",
            "class":"GuzzleHttp\\Promise\\TaskQueue",
            "type":"->",
            "args":[
               
            ]
         },
         {
            "file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php",
            "line":189,
            "function":"tick",
            "class":"GuzzleHttp\\Handler\\CurlMultiHandler",
            "type":"->",
            "args":[
               
            ]
         },
         {
            "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php",
            "line":251,
            "function":"execute",
            "class":"GuzzleHttp\\Handler\\CurlMultiHandler",
            "type":"->",
            "args":[
               true
            ]
         },
         {
            "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php",
            "line":227,
            "function":"invokeWaitFn",
            "class":"GuzzleHttp\\Promise\\Promise",
            "type":"->",
            "args":[
               
            ]
         },
         {
            "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php",
            "line":272,
            "function":"waitIfPending",
            "class":"GuzzleHttp\\Promise\\Promise",
            "type":"->",
            "args":[
               
            ]
         },
         {
            "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php",
            "line":229,
            "function":"invokeWaitList",
            "class":"GuzzleHttp\\Promise\\Promise",
            "type":"->",
            "args":[
               
            ]
         },
         {
            "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php",
            "line":272,
            "function":"waitIfPending",
            "class":"GuzzleHttp\\Promise\\Promise",
            "type":"->",
            "args":[
               
            ]
         },
         {
            "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php",
            "line":229,
            "function":"invokeWaitList",
            "class":"GuzzleHttp\\Promise\\Promise",
            "type":"->",
            "args":[
               
            ]
         },
         {
            "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php",
            "line":69,
            "function":"waitIfPending",
            "class":"GuzzleHttp\\Promise\\Promise",
            "type":"->",
            "args":[
               
            ]
         },
         {
            "file":"/var/www/html/3rdparty/aws/aws-sdk-php/src/AwsClientTrait.php",
            "line":58,
            "function":"wait",
            "class":"GuzzleHttp\\Promise\\Promise",
            "type":"->",
            "args":[
               
            ]
         },
         {
            "file":"/var/www/html/3rdparty/aws/aws-sdk-php/src/AwsClientTrait.php",
            "line":86,
            "function":"execute",
            "class":"Aws\\AwsClient",
            "type":"->",
            "args":[
               {
                  "__class__":"Aws\\Command"
               }
            ]
         },
         {
            "file":"/var/www/html/apps/files_external/lib/Lib/Storage/AmazonS3.php",
            "line":281,
            "function":"__call",
            "class":"Aws\\AwsClient",
            "type":"->",
            "args":[
               "deleteObjects",
               [
                  {
                     "Bucket":"REDACTED",
                     "Delete":{
                        "Objects":[
                           {
                              "Key":"testtodel-template-tsqmp/AA/",
                              "LastModified":{
                                 "__class__":"Aws\\Api\\DateTimeResult",
                                 "__properties__":"Encoding skipped as the maximum nesting level was reached"
                              },
                              "ETag":"\"d41d8cd98f00b204e9800998ecf8427e\"",
                              "Size":"0"
                           },
                           {
                              "Key":"testtodel-template-tsqmp/mock/emri_config.json",
                              "LastModified":{
                                 "__class__":"Aws\\Api\\DateTimeResult",
                                 "__properties__":"Encoding skipped as the maximum nesting level was reached"
                              },
                              "ETag":"\"3c70f6c1a222738d6cde9fb5d77df14b\"",
                              "Size":"305"
                           },
                           {
                              "Key":"testtodel-template-tsqmp/mock/gb_config.json",
                              "LastModified":{
                                 "__class__":"Aws\\Api\\DateTimeResult",
                                 "__properties__":"Encoding skipped as the maximum nesting level was reached"
                              },
                              "ETag":"\"8220939d579c9d94d3a5387f61d4fd99\"",
                              "Size":"634"
                           },
                           {
                              "Key":"testtodel-template-tsqmp/mock/mbhb_config.json",
                              "LastModified":{
                                 "__class__":"Aws\\Api\\DateTimeResult",
                                 "__properties__":"Encoding skipped as the maximum nesting level was reached"
                              },
                              "ETag":"\"370791267c0c5aa1ffda8bf9187cc336\"",
                              "Size":"229"
                           }
                        ]
                     }
                  }
               ]
            ]
         },
         {
            "file":"/var/www/html/apps/files_external/lib/Lib/Storage/AmazonS3.php",
            "line":256,
            "function":"batchDelete",
            "class":"OCA\\Files_External\\Lib\\Storage\\AmazonS3",
            "type":"->",
            "args":[
               "testtodel-template-tsqmp"
            ]
         },
         {
            "file":"/var/www/html/lib/private/Files/Storage/Wrapper/Wrapper.php",
            "line":79,
            "function":"rmdir",
            "class":"OCA\\Files_External\\Lib\\Storage\\AmazonS3",
            "type":"->",
            "args":[
               "testtodel-template-tsqmp"
            ]
         },
         {
            "file":"/var/www/html/lib/private/Files/Storage/Wrapper/Availability.php",
            "line":92,
            "function":"rmdir",
            "class":"OC\\Files\\Storage\\Wrapper\\Wrapper",
            "type":"->",
            "args":[
               "testtodel-template-tsqmp"
            ]
         },
         {
            "file":"/var/www/html/lib/private/Files/View.php",
            "line":1203,
            "function":"rmdir",
            "class":"OC\\Files\\Storage\\Wrapper\\Availability",
            "type":"->",
            "args":[
               "testtodel-template-tsqmp"
            ]
         },
         {
            "file":"/var/www/html/lib/private/Files/View.php",
            "line":291,
            "function":"basicOperation",
            "class":"OC\\Files\\View",
            "type":"->",
            "args":[
               "rmdir",
               "/REDACTED/testtodel-template-tsqmp",
               [
                  "delete"
               ]
            ]
         },
         {
            "file":"/var/www/html/apps/dav/lib/Connector/Sabre/Directory.php",
            "line":271,
            "function":"rmdir",
            "class":"OC\\Files\\View",
            "type":"->",
            "args":[
               "/REDACTED/testtodel-template-tsqmp"
            ]
         },
         {
            "file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Tree.php",
            "line":197,
            "function":"delete",
            "class":"OCA\\DAV\\Connector\\Sabre\\Directory",
            "type":"->",
            "args":[
               
            ]
         },
         {
            "file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/CorePlugin.php",
            "line":281,
            "function":"delete",
            "class":"Sabre\\DAV\\Tree",
            "type":"->",
            "args":[
               "files/admin/REDACTED/testtodel-template-tsqmp"
            ]
         },
         {
            "file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php",
            "line":89,
            "function":"httpDelete",
            "class":"Sabre\\DAV\\CorePlugin",
            "type":"->",
            "args":[
               {
                  "__class__":"Sabre\\HTTP\\Request"
               },
               {
                  "__class__":"Sabre\\HTTP\\Response"
               }
            ]
         },
         {
            "file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php",
            "line":472,
            "function":"emit",
            "class":"Sabre\\DAV\\Server",
            "type":"->",
            "args":[
               "method:DELETE",
               [
                  {
                     "__class__":"Sabre\\HTTP\\Request"
                  },
                  {
                     "__class__":"Sabre\\HTTP\\Response"
                  }
               ]
            ]
         },
         {
            "file":"/var/www/html/apps/dav/lib/Connector/Sabre/Server.php",
            "line":43,
            "function":"invokeMethod",
            "class":"Sabre\\DAV\\Server",
            "type":"->",
            "args":[
               {
                  "__class__":"Sabre\\HTTP\\Request"
               },
               {
                  "__class__":"Sabre\\HTTP\\Response"
               }
            ]
         },
         {
            "file":"/var/www/html/apps/dav/lib/Server.php",
            "line":371,
            "function":"start",
            "class":"OCA\\DAV\\Connector\\Sabre\\Server",
            "type":"->",
            "args":[
               
            ]
         },
         {
            "file":"/var/www/html/apps/dav/appinfo/v2/remote.php",
            "line":19,
            "function":"exec",
            "class":"OCA\\DAV\\Server",
            "type":"->",
            "args":[
               
            ]
         },
         {
            "file":"/var/www/html/remote.php",
            "line":146,
            "args":[
               "/var/www/html/apps/dav/appinfo/v2/remote.php"
            ],
            "function":"require_once"
         }
      ],
      "File":"/var/www/html/3rdparty/aws/aws-sdk-php/src/WrappedHttpHandler.php",
      "Line":196,
      "Previous":{
         "Exception":"GuzzleHttp\\Exception\\ClientException",
         "Message":"Client error: `POST https://storage.googleapis.com/REDACTED?delete` resulted in a `400 Bad Request` response:\n<?xml version='1.0' encoding='UTF-8'?><Error><Code>NotImplemented</Code><Message>A header or query you provided requeste (truncated...)\n",
         "Code":400,
         "Trace":[
            {
               "file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Middleware.php",
               "line":72,
               "function":"create",
               "class":"GuzzleHttp\\Exception\\RequestException",
               "type":"::",
               "args":[
                  "*** sensitive parameters replaced ***"
               ]
            },
            {
               "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php",
               "line":209,
               "function":"GuzzleHttp\\{closure}",
               "class":"GuzzleHttp\\Middleware",
               "type":"::",
               "args":[
                  "*** sensitive parameters replaced ***"
               ]
            },
            {
               "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php",
               "line":158,
               "function":"callHandler",
               "class":"GuzzleHttp\\Promise\\Promise",
               "type":"::",
               "args":[
                  1,
                  "*** sensitive parameters replaced ***",
                  "*** sensitive parameters replaced ***"
               ]
            },
            {
               "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/TaskQueue.php",
               "line":52,
               "function":"GuzzleHttp\\Promise\\{closure}",
               "class":"GuzzleHttp\\Promise\\Promise",
               "type":"::",
               "args":[
                  "*** sensitive parameters replaced ***"
               ]
            },
            {
               "file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php",
               "line":163,
               "function":"run",
               "class":"GuzzleHttp\\Promise\\TaskQueue",
               "type":"->",
               "args":[
                  
               ]
            },
            {
               "file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php",
               "line":189,
               "function":"tick",
               "class":"GuzzleHttp\\Handler\\CurlMultiHandler",
               "type":"->",
               "args":[
                  
               ]
            },
            {
               "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php",
               "line":251,
               "function":"execute",
               "class":"GuzzleHttp\\Handler\\CurlMultiHandler",
               "type":"->",
               "args":[
                  true
               ]
            },
            {
               "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php",
               "line":227,
               "function":"invokeWaitFn",
               "class":"GuzzleHttp\\Promise\\Promise",
               "type":"->",
               "args":[
                  
               ]
            },
            {
               "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php",
               "line":272,
               "function":"waitIfPending",
               "class":"GuzzleHttp\\Promise\\Promise",
               "type":"->",
               "args":[
                  
               ]
            },
            {
               "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php",
               "line":229,
               "function":"invokeWaitList",
               "class":"GuzzleHttp\\Promise\\Promise",
               "type":"->",
               "args":[
                  
               ]
            },
            {
               "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php",
               "line":272,
               "function":"waitIfPending",
               "class":"GuzzleHttp\\Promise\\Promise",
               "type":"->",
               "args":[
                  
               ]
            },
            {
               "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php",
               "line":229,
               "function":"invokeWaitList",
               "class":"GuzzleHttp\\Promise\\Promise",
               "type":"->",
               "args":[
                  
               ]
            },
            {
               "file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php",
               "line":69,
               "function":"waitIfPending",
               "class":"GuzzleHttp\\Promise\\Promise",
               "type":"->",
               "args":[
                  
               ]
            },
            {
               "file":"/var/www/html/3rdparty/aws/aws-sdk-php/src/AwsClientTrait.php",
               "line":58,
               "function":"wait",
               "class":"GuzzleHttp\\Promise\\Promise",
               "type":"->",
               "args":[
                  
               ]
            },
            {
               "file":"/var/www/html/3rdparty/aws/aws-sdk-php/src/AwsClientTrait.php",
               "line":86,
               "function":"execute",
               "class":"Aws\\AwsClient",
               "type":"->",
               "args":[
                  {
                     "__class__":"Aws\\Command"
                  }
               ]
            },
            {
               "file":"/var/www/html/apps/files_external/lib/Lib/Storage/AmazonS3.php",
               "line":281,
               "function":"__call",
               "class":"Aws\\AwsClient",
               "type":"->",
               "args":[
                  "deleteObjects",
                  [
                     {
                        "Bucket":"REDACTED",
                        "Delete":{
                           "Objects":[
                              {
                                 "Key":"testtodel-template-tsqmp/AA/",
                                 "LastModified":{
                                    "__class__":"Aws\\Api\\DateTimeResult",
                                    "__properties__":"Encoding skipped as the maximum nesting level was reached"
                                 },
                                 "ETag":"\"d41d8cd98f00b204e9800998ecf8427e\"",
                                 "Size":"0"
                              },
                              {
                                 "Key":"testtodel-template-tsqmp/mock/emri_config.json",
                                 "LastModified":{
                                    "__class__":"Aws\\Api\\DateTimeResult",
                                    "__properties__":"Encoding skipped as the maximum nesting level was reached"
                                 },
                                 "ETag":"\"3c70f6c1a222738d6cde9fb5d77df14b\"",
                                 "Size":"305"
                              },
                              {
                                 "Key":"testtodel-template-tsqmp/mock/gb_config.json",
                                 "LastModified":{
                                    "__class__":"Aws\\Api\\DateTimeResult",
                                    "__properties__":"Encoding skipped as the maximum nesting level was reached"
                                 },
                                 "ETag":"\"8220939d579c9d94d3a5387f61d4fd99\"",
                                 "Size":"634"
                              },
                              {
                                 "Key":"testtodel-template-tsqmp/mock/mbhb_config.json",
                                 "LastModified":{
                                    "__class__":"Aws\\Api\\DateTimeResult",
                                    "__properties__":"Encoding skipped as the maximum nesting level was reached"
                                 },
                                 "ETag":"\"370791267c0c5aa1ffda8bf9187cc336\"",
                                 "Size":"229"
                              }
                           ]
                        }
                     }
                  ]
               ]
            },
            {
               "file":"/var/www/html/apps/files_external/lib/Lib/Storage/AmazonS3.php",
               "line":256,
               "function":"batchDelete",
               "class":"OCA\\Files_External\\Lib\\Storage\\AmazonS3",
               "type":"->",
               "args":[
                  "testtodel-template-tsqmp"
               ]
            },
            {
               "file":"/var/www/html/lib/private/Files/Storage/Wrapper/Wrapper.php",
               "line":79,
               "function":"rmdir",
               "class":"OCA\\Files_External\\Lib\\Storage\\AmazonS3",
               "type":"->",
               "args":[
                  "testtodel-template-tsqmp"
               ]
            },
            {
               "file":"/var/www/html/lib/private/Files/Storage/Wrapper/Availability.php",
               "line":92,
               "function":"rmdir",
               "class":"OC\\Files\\Storage\\Wrapper\\Wrapper",
               "type":"->",
               "args":[
                  "testtodel-template-tsqmp"
               ]
            },
            {
               "file":"/var/www/html/lib/private/Files/View.php",
               "line":1203,
               "function":"rmdir",
               "class":"OC\\Files\\Storage\\Wrapper\\Availability",
               "type":"->",
               "args":[
                  "testtodel-template-tsqmp"
               ]
            },
            {
               "file":"/var/www/html/lib/private/Files/View.php",
               "line":291,
               "function":"basicOperation",
               "class":"OC\\Files\\View",
               "type":"->",
               "args":[
                  "rmdir",
                  "/REDACTED/testtodel-template-tsqmp",
                  [
                     "delete"
                  ]
               ]
            },
            {
               "file":"/var/www/html/apps/dav/lib/Connector/Sabre/Directory.php",
               "line":271,
               "function":"rmdir",
               "class":"OC\\Files\\View",
               "type":"->",
               "args":[
                  "/REDACTED/testtodel-template-tsqmp"
               ]
            },
            {
               "file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Tree.php",
               "line":197,
               "function":"delete",
               "class":"OCA\\DAV\\Connector\\Sabre\\Directory",
               "type":"->",
               "args":[
                  
               ]
            },
            {
               "file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/CorePlugin.php",
               "line":281,
               "function":"delete",
               "class":"Sabre\\DAV\\Tree",
               "type":"->",
               "args":[
                  "files/admin/REDACTED/testtodel-template-tsqmp"
               ]
            },
            {
               "file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php",
               "line":89,
               "function":"httpDelete",
               "class":"Sabre\\DAV\\CorePlugin",
               "type":"->",
               "args":[
                  {
                     "__class__":"Sabre\\HTTP\\Request"
                  },
                  {
                     "__class__":"Sabre\\HTTP\\Response"
                  }
               ]
            },
            {
               "file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php",
               "line":472,
               "function":"emit",
               "class":"Sabre\\DAV\\Server",
               "type":"->",
               "args":[
                  "method:DELETE",
                  [
                     {
                        "__class__":"Sabre\\HTTP\\Request"
                     },
                     {
                        "__class__":"Sabre\\HTTP\\Response"
                     }
                  ]
               ]
            },
            {
               "file":"/var/www/html/apps/dav/lib/Connector/Sabre/Server.php",
               "line":43,
               "function":"invokeMethod",
               "class":"Sabre\\DAV\\Server",
               "type":"->",
               "args":[
                  {
                     "__class__":"Sabre\\HTTP\\Request"
                  },
                  {
                     "__class__":"Sabre\\HTTP\\Response"
                  }
               ]
            },
            {
               "file":"/var/www/html/apps/dav/lib/Server.php",
               "line":371,
               "function":"start",
               "class":"OCA\\DAV\\Connector\\Sabre\\Server",
               "type":"->",
               "args":[
                  
               ]
            },
            {
               "file":"/var/www/html/apps/dav/appinfo/v2/remote.php",
               "line":19,
               "function":"exec",
               "class":"OCA\\DAV\\Server",
               "type":"->",
               "args":[
                  
               ]
            },
            {
               "file":"/var/www/html/remote.php",
               "line":146,
               "args":[
                  "/var/www/html/apps/dav/appinfo/v2/remote.php"
               ],
               "function":"require_once"
            }
         ],
         "File":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Exception/RequestException.php",
         "Line":113
      },
      "message":"Error executing \"DeleteObjects\" on \"https://storage.googleapis.com/REDACTED?delete\"; AWS HTTP error: Client error: `POST https://storage.googleapis.com/REDACTED?delete` resulted in a `400 Bad Request` response:\n<?xml version='1.0' encoding='UTF-8'?><Error><Code>NotImplemented</Code><Message>A header or query you provided requeste (truncated...)\n NotImplemented (client): A header or query you provided requested a function that is not implemented. - <?xml version='1.0' encoding='UTF-8'?><Error><Code>NotImplemented</Code><Message>A header or query you provided requested a function that is not implemented.</Message><Details>POST ?delete is not implemented for objects.</Details></Error>",
      "exception":[
         
      ],
      "CustomMessage":"Error executing \"DeleteObjects\" on \"https://storage.googleapis.com/REDACTED?delete\"; AWS HTTP error: Client error: `POST https://storage.googleapis.com/REDACTED?delete` resulted in a `400 Bad Request` response:\n<?xml version='1.0' encoding='UTF-8'?><Error><Code>NotImplemented</Code><Message>A header or query you provided requeste (truncated...)\n NotImplemented (client): A header or query you provided requested a function that is not implemented. - <?xml version='1.0' encoding='UTF-8'?><Error><Code>NotImplemented</Code><Message>A header or query you provided requested a function that is not implemented.</Message><Details>POST ?delete is not implemented for objects.</Details></Error>"
   },
   "id":"68518d599110d"
}

Additional info

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions