feat(config): Enhance logging for data directory handling in configuration
- Add debug logging to Load function for cases where data_dir is empty, using a default value. - Implement debug logging in getDefaultDataDir to track the detection of the default data directory based on user environment. - Update NewServer function to log the initialized registry storage path for better traceability.
- commit
- fb6535b10a517081edea282587db8ba64569a979
- author
- bamen · · 2025-06-07 09:12 UTC
- parent
- 04ad628
- signature
- unsigned
2 files · +21 -3
M internal/config/config.go +17 -2
| @@ -6,6 +6,7 @@ import ( | |||
| 6 | 6 | "path/filepath" | |
| 7 | 7 | "strings" | |
| 8 | 8 | ||
| 9 | + | "github.com/rs/zerolog/log" | |
| 9 | 10 | "github.com/spf13/viper" | |
| 10 | 11 | ) | |
| 11 | 12 | ||
| @@ -59,6 +60,12 @@ func Load() (*Config, error) { | |||
| 59 | 60 | return nil, fmt.Errorf("unable to decode server config: %v", err) | |
| 60 | 61 | } | |
| 61 | 62 | ||
| 63 | + | // If data_dir is empty after loading config, use the default | |
| 64 | + | if cfg.Server.DataDir == "" { | |
| 65 | + | cfg.Server.DataDir = defaultDataDir | |
| 66 | + | log.Debug().Str("data_dir", cfg.Server.DataDir).Msg("Config had empty data_dir, using default") | |
| 67 | + | } | |
| 68 | + | ||
| 62 | 69 | // Get registry auth config | |
| 63 | 70 | if err := viper.UnmarshalKey("registry_auth", &cfg.RegistryAuth); err != nil { | |
| 64 | 71 | return nil, fmt.Errorf("unable to decode registry auth config: %v", err) | |
| @@ -136,12 +143,20 @@ func (c *Config) GetRoutes() []Route { | |||
| 136 | 143 | ||
| 137 | 144 | // getDefaultDataDir returns a platform-appropriate default data directory | |
| 138 | 145 | func getDefaultDataDir() string { | |
| 146 | + | uid := os.Getuid() | |
| 147 | + | log.Debug().Int("uid", uid).Msg("Detecting default data directory") | |
| 148 | + | ||
| 139 | 149 | // Check if we're running in a rootless environment | |
| 140 | - | if os.Getuid() != 0 { | |
| 150 | + | if uid != 0 { | |
| 141 | 151 | // For rootless environments, use user's home directory or current directory | |
| 142 | 152 | if homeDir, err := os.UserHomeDir(); err == nil { | |
| 143 | - | return filepath.Join(homeDir, ".local/share/gordon") | |
| 153 | + | dataDir := filepath.Join(homeDir, ".local/share/gordon") | |
| 154 | + | log.Debug().Str("data_dir", dataDir).Msg("Using user data directory for rootless environment") | |
| 155 | + | return dataDir | |
| 144 | 156 | } | |
| 157 | + | log.Debug().Msg("Failed to get user home directory, falling back to ./data") | |
| 158 | + | } else { | |
| 159 | + | log.Debug().Msg("Running as root, using ./data") | |
| 145 | 160 | } | |
| 146 | 161 | ||
| 147 | 162 | // For root or when home directory is not available, use relative path | |
| @@ -6,6 +6,7 @@ import ( | |||||
| 6 | "path/filepath" | 6 | "path/filepath" | ||
| 7 | "strings" | 7 | "strings" | ||
| 8 | 8 | ||||
| 9 | + | "github.com/rs/zerolog/log" | |||
| 9 | "github.com/spf13/viper" | 10 | "github.com/spf13/viper" | ||
| 10 | ) | 11 | ) | ||
| 11 | 12 | ||||
| @@ -59,6 +60,12 @@ func Load() (*Config, error) { | |||||
| 59 | return nil, fmt.Errorf("unable to decode server config: %v", err) | 60 | return nil, fmt.Errorf("unable to decode server config: %v", err) | ||
| 60 | } | 61 | } | ||
| 61 | 62 | ||||
| 63 | + | // If data_dir is empty after loading config, use the default | |||
| 64 | + | if cfg.Server.DataDir == "" { | |||
| 65 | + | cfg.Server.DataDir = defaultDataDir | |||
| 66 | + | log.Debug().Str("data_dir", cfg.Server.DataDir).Msg("Config had empty data_dir, using default") | |||
| 67 | + | } | |||
| 68 | + | ||||
| 62 | // Get registry auth config | 69 | // Get registry auth config | ||
| 63 | if err := viper.UnmarshalKey("registry_auth", &cfg.RegistryAuth); err != nil { | 70 | if err := viper.UnmarshalKey("registry_auth", &cfg.RegistryAuth); err != nil { | ||
| 64 | return nil, fmt.Errorf("unable to decode registry auth config: %v", err) | 71 | return nil, fmt.Errorf("unable to decode registry auth config: %v", err) | ||
| @@ -136,12 +143,20 @@ func (c *Config) GetRoutes() []Route { | |||||
| 136 | 143 | ||||
| 137 | // getDefaultDataDir returns a platform-appropriate default data directory | 144 | // getDefaultDataDir returns a platform-appropriate default data directory | ||
| 138 | func getDefaultDataDir() string { | 145 | func getDefaultDataDir() string { | ||
| 146 | + | uid := os.Getuid() | |||
| 147 | + | log.Debug().Int("uid", uid).Msg("Detecting default data directory") | |||
| 148 | + | ||||
| 139 | // Check if we're running in a rootless environment | 149 | // Check if we're running in a rootless environment | ||
| 140 | - | if os.Getuid() != 0 { | 150 | + | if uid != 0 { |
| 141 | // For rootless environments, use user's home directory or current directory | 151 | // For rootless environments, use user's home directory or current directory | ||
| 142 | if homeDir, err := os.UserHomeDir(); err == nil { | 152 | if homeDir, err := os.UserHomeDir(); err == nil { | ||
| 143 | - | return filepath.Join(homeDir, ".local/share/gordon") | 153 | + | dataDir := filepath.Join(homeDir, ".local/share/gordon") |
| 154 | + | log.Debug().Str("data_dir", dataDir).Msg("Using user data directory for rootless environment") | |||
| 155 | + | return dataDir | |||
| 144 | } | 156 | } | ||
| 157 | + | log.Debug().Msg("Failed to get user home directory, falling back to ./data") | |||
| 158 | + | } else { | |||
| 159 | + | log.Debug().Msg("Running as root, using ./data") | |||
| 145 | } | 160 | } | ||
| 146 | 161 | ||||
| 147 | // For root or when home directory is not available, use relative path | 162 | // For root or when home directory is not available, use relative path | ||
M internal/registry/server.go +4 -1
| @@ -24,7 +24,10 @@ type Server struct { | |||
| 24 | 24 | ||
| 25 | 25 | func NewServer(cfg *config.Config, eventBus events.EventBus) (*Server, error) { | |
| 26 | 26 | // Initialize storage | |
| 27 | - | storage, err := NewFilesystemStorage(cfg.Server.DataDir + "/registry") | |
| 27 | + | registryPath := cfg.Server.DataDir + "/registry" | |
| 28 | + | log.Debug().Str("data_dir", cfg.Server.DataDir).Str("registry_path", registryPath).Msg("Initializing registry storage") | |
| 29 | + | ||
| 30 | + | storage, err := NewFilesystemStorage(registryPath) | |
| 28 | 31 | if err != nil { | |
| 29 | 32 | return nil, fmt.Errorf("failed to initialize storage: %w", err) | |
| 30 | 33 | } | |
| @@ -24,7 +24,10 @@ type Server struct { | |||||
| 24 | 24 | ||||
| 25 | func NewServer(cfg *config.Config, eventBus events.EventBus) (*Server, error) { | 25 | func NewServer(cfg *config.Config, eventBus events.EventBus) (*Server, error) { | ||
| 26 | // Initialize storage | 26 | // Initialize storage | ||
| 27 | - | storage, err := NewFilesystemStorage(cfg.Server.DataDir + "/registry") | 27 | + | registryPath := cfg.Server.DataDir + "/registry" |
| 28 | + | log.Debug().Str("data_dir", cfg.Server.DataDir).Str("registry_path", registryPath).Msg("Initializing registry storage") | |||
| 29 | + | ||||
| 30 | + | storage, err := NewFilesystemStorage(registryPath) | |||
| 28 | if err != nil { | 31 | if err != nil { | ||
| 29 | return nil, fmt.Errorf("failed to initialize storage: %w", err) | 32 | return nil, fmt.Errorf("failed to initialize storage: %w", err) | ||
| 30 | } | 33 | } | ||