kataras/iris · error

directoryPath is empty

Error message

directoryPath is empty

What it means

The Badger session database's New constructor validates that the directoryPath argument is non-empty and returns this error before opening the store. Badger needs a filesystem directory in which to store its LSM/SST files, so an empty path is rejected immediately.

Source

Thrown at sessions/sessiondb/badger/database.go:45

	// it's initialized at `New` or `NewFromDB`.
	// Can be used to get stats.
	Service *badger.DB
	logger  *golog.Logger

	closed uint32 // if 1 is closed.
}

var _ sessions.Database = (*Database)(nil)

// New creates and returns a new badger(key-value file-based) storage
// instance based on the "directoryPath".
// DirectoryPath should is the directory which the badger database will store the sessions,
// i.e ./sessions
//
// It will remove any old session files.
func New(directoryPath string) (*Database, error) {
	if directoryPath == "" {
		return nil, errors.New("directoryPath is empty")
	}

	lindex := directoryPath[len(directoryPath)-1]
	if lindex != os.PathSeparator && lindex != '/' {
		directoryPath += string(os.PathSeparator)
	}
	// create directories if necessary
	if err := os.MkdirAll(directoryPath, os.FileMode(DefaultFileMode)); err != nil {
		return nil, err
	}

	opts := badger.DefaultOptions(directoryPath)
	badgerLogger := context.DefaultLogger("sessionsdb.badger").DisableNewLine()
	opts.Logger = badgerLogger

	service, err := badger.Open(opts)
	if err != nil {
		badgerLogger.Errorf("unable to initialize the badger-based session database: %v\n", err)

View on GitHub (pinned to 7bedaf55a0)

Solutions

  1. Pass a valid directory path, e.g. badger.New("./sessions/").
  2. Load the path from configuration and fail fast at startup if empty.
  3. Create the directory beforehand or rely on the constructor (badger creates it) but always supply it.

Example fix

// before
db, err := badger.New("") // error: directoryPath is empty

// after
db, err := badger.New("./sessions/")
Defensive patterns

Strategy: validation

Validate before calling

if os.Getenv("SESSION_BADGER_DIR") == "" {
    log.Fatal("SESSION_BADGER_DIR env var is required")
}
db, err := badger.New(os.Getenv("SESSION_BADGER_DIR"))

Prevention

When it happens

Trigger: Calling badger.New("") when wiring sessions: e.g. sessions.New(sessions.Config{...}, badger.New("")) or db, err := badger.New("") — commonly when the path comes from an unset environment variable or empty config field.

Common situations: Env var like SESSION_DB_DIR not set in a container/deployment; YAML/JSON config with a missing directoryPath key; copying sample code and forgetting to fill the path.

Related errors


AI-assisted analysis of kataras/iris@7bedaf55a0 (2026-08-30). Data as JSON: /api/errors/8bd1a9a7cce36328. Report an issue: GitHub.