juicedata/juicefs · error
The PROPPATCH method is not currently enabled,please add the
Error message
The PROPPATCH method is not currently enabled,please add the --enable-proppatch parameter and run it again
What it means
The WebDAV server rejects PROPPATCH requests with HTTP 501 unless explicitly enabled, because property modification (dead properties / live property updates such as last-modified) is disabled by default in JuiceFS. ServeHTTP in pkg/fs/http.go intercepts PROPPATCH before delegating to the webdav handler when h.EnableProppatch is false.
Source
Thrown at pkg/fs/http.go:334
//
// On the other hand, the Go standard library's encoding/xml package
// accepts an empty xmlns namespace, as per the discussion at
// https://github.com/golang/go/issues/8068
//
// Empty namespaces seem disallowed in the second (2006) edition of the XML
// standard, but allowed in a later edition. The grammar differs between
// http://www.w3.org/TR/2006/REC-xml-names-20060816/#ns-decl and
// http://www.w3.org/TR/REC-xml-names/#dt-prefix
//
// Thus, we assume that the propfind_invalid2 test is obsolete, and
// hard-code the 400 Bad Request response that the test expects.
if r.Header.Get("X-Litmus") == "props: 3 (propfind_invalid2)" {
http.Error(w, "400 Bad Request", http.StatusBadRequest)
return
}
if !h.EnableProppatch && r.Method == "PROPPATCH" {
http.Error(w, "The PROPPATCH method is not currently enabled,please add the --enable-proppatch parameter and run it again", http.StatusNotImplemented)
return
}
h.Handler.ServeHTTP(w, r)
}
func newWebdavHandler(fs *FileSystem, config WebdavConfig) http.Handler {
ctx := meta.NewContext(uint32(os.Getpid()), uint32(utils.GetCurrentUID()), []uint32{uint32(utils.GetCurrentGID())})
hfs := &webdavFS{ctx, fs, uint16(utils.GetUmask()), config}
srv := &webdav.Handler{
FileSystem: hfs,
LockSystem: webdav.NewMemLS(),
Logger: func(r *http.Request, err error) {
if err != nil {
logger.Errorf("WEBDAV [%s]: %s, ERROR: %s", r.Method, r.URL, err)
} else {
logger.Debugf("WEBDAV [%s]: %s", r.Method, r.URL)
}View on GitHub (pinned to c9a67b23e8)
Solutions
- Restart the WebDAV server with the --enable-proppatch flag to allow PROPPATCH
- Configure the client to skip setting WebDAV properties / timestamps (e.g. mount with read-only property semantics or disable mtime preservation)
- Treat the 501 as 'server does not support property modification' and fall back to plain PUT/GET operations
Example fix
// before juicefs webdav sqlite3://test.db /mnt/jfs // after juicefs webdav --enable-proppatch sqlite3://test.db /mnt/jfs
Defensive patterns
Strategy: fallback
Validate before calling
// Feature-detect PROPPATCH with an OPTIONS request before using it
resp, _ := http.NewRequest("OPTIONS", url, nil); // check Allow header for PROPPATCH Type guard
func proppatchSupported(allowMethods []string) bool {
for _, m := range allowMethods { if m == "PROPPATCH" { return true } }
return false
} Try / catch
resp, err := client.Do(proppatchReq)
if err != nil { return err }
if resp.StatusCode == http.StatusNotImplemented { /* skip property update */ return nil } Prevention
- Start the WebDAV server with --enable-proppatch if clients need timestamp/property preservation
- Feature-detect via OPTIONS Allow header before issuing PROPPATCH
- Configure WebDAV clients to tolerate 501 on property updates
When it happens
Trigger: Issuing a PROPPATCH method request (e.g. via a WebDAV client trying to set properties or update mtime) against a WebDAV server started without the --enable-proppatch flag.
Common situations: WebDAV clients like Windows mapped drives, Cyberduck, or sync tools that attempt to preserve timestamps by setting properties on upload; CI tools copying files with metadata preservation.
Related errors
- Forbidden
- 400 Bad Request
- error creating GET request: %v
- error GET request: %v
- error GET request, status code %d
AI-assisted analysis of juicedata/juicefs@c9a67b23e8 (2026-09-06).
Data as JSON: /api/errors/72be36e2a855eb99.
Report an issue: GitHub.