juicedata/juicefs · error

create table changeLog: %s

Error message

create table changeLog: %s

What it means

Same table-sync failure as the delegationToken case, but for the changeLog table: syncAllTables iterates all metadata tables and wraps any xorm Sync2 failure in a 'create table changeLog: %s' error, aborting initialization.

Source

Thrown at pkg/meta/sql.go:610

		return fmt.Errorf("create table session2, sustaind, delfile: %s", err)
	}
	if err := m.syncTable(new(flock), new(plock), new(dirQuota), new(userGroupQuota)); err != nil {
		return fmt.Errorf("create table flock, plock, dirQuota, userGroupQuota: %s", err)
	}
	if err := m.syncTable(new(dirStats)); err != nil {
		return fmt.Errorf("create table dirStats: %s", err)
	}
	if err := m.syncTable(new(detachedNode)); err != nil {
		return fmt.Errorf("create table detachedNode: %s", err)
	}
	if err := m.syncTable(new(acl)); err != nil {
		return fmt.Errorf("create table acl: %s", err)
	}
	if err := m.syncTable(new(delegationToken)); err != nil {
		return fmt.Errorf("create table delegationToken: %s", err)
	}
	if err := m.syncTable(new(changeLog)); err != nil {
		return fmt.Errorf("create table changeLog: %s", err)
	}
	return nil
}

func (m *dbMeta) doInit(format *Format, force bool) error {
	if err := m.syncAllTables(); err != nil {
		return err
	}
	var s = setting{Name: "format"}
	var ok bool
	err := m.simpleTxn(Background(), func(ses *xorm.Session) (err error) {
		ok, err = ses.Get(&s)
		return err
	})
	if err != nil {
		return err
	}

View on GitHub (pinned to c9a67b23e8)

Solutions

  1. Grant CREATE/ALTER privileges on the database to the JuiceFS metadata user
  2. Check for concurrent juicefs format/mount processes and serialized schema setup
  3. Read the wrapped error to identify the exact DDL problem (e.g. disk full, lock wait timeout)
  4. Verify DB connectivity and free disk space on the metadata server
Defensive patterns

Strategy: validation

Validate before calling

// Ensure the changeLog table can be created: run one mount/format with a DDL-capable account first
GRANT CREATE, ALTER ON jfs.* TO 'jfs'@'%';

Try / catch

if err := meta.Open(sqlURL); err != nil {
    // inspect wrapped 'create table changeLog' cause before retrying
    log.Fatalf("schema sync failed: %v", err)
}

Prevention

When it happens

Trigger: juicefs format or mount on a SQL metadata engine when the changeLog table cannot be created or altered — missing DDL privileges, schema lock, or transient DB error during syncTable(new(changeLog)).

Common situations: Restricted DB account on managed MySQL/RDS without DDL rights; concurrent format runs racing on schema; disk-full database server preventing DDL.

Related errors


AI-assisted analysis of juicedata/juicefs@c9a67b23e8 (2026-09-06). Data as JSON: /api/errors/bca202fcfe5bb9d0. Report an issue: GitHub.