diff --git a/cmd/node/main.go b/cmd/node/main.go index ca77387..3837a3d 100644 --- a/cmd/node/main.go +++ b/cmd/node/main.go @@ -119,8 +119,10 @@ func main() { bootstrapHost := parseHostFromMultiaddr(*bootstrap) if bootstrapHost != "" { rqliteJoinAddr = fmt.Sprintf("http://%s:4001", bootstrapHost) + logger.Printf("Using extracted bootstrap host %s for RQLite join", bootstrapHost) } else { - rqliteJoinAddr = "http://57.129.81.31:4001" // Default fallback + logger.Printf("Warning: Could not extract host from bootstrap peer %s, using localhost fallback", *bootstrap) + rqliteJoinAddr = "http://localhost:4001" // Use localhost fallback instead } logger.Printf("Using command line bootstrap peer: %s", *bootstrap) } else { @@ -132,13 +134,18 @@ func main() { bootstrapHost := parseHostFromMultiaddr(bootstrapPeers[0]) if bootstrapHost != "" { rqliteJoinAddr = fmt.Sprintf("http://%s:4001", bootstrapHost) + logger.Printf("Using extracted bootstrap host %s for RQLite join", bootstrapHost) } else { - rqliteJoinAddr = "http://57.129.81.31:4001" // Default fallback + logger.Printf("Warning: Could not extract host from bootstrap peer %s", bootstrapPeers[0]) + // Try primary production server as fallback + rqliteJoinAddr = "http://localhost:4001" } logger.Printf("Using environment bootstrap peers: %v", bootstrapPeers) } else { logger.Printf("Warning: No bootstrap peers configured") - rqliteJoinAddr = "http://57.129.81.31:4001" // Default fallback + // Default to localhost when no peers configured + rqliteJoinAddr = "http://localhost:4001" + logger.Printf("Using localhost fallback for RQLite join") } } diff --git a/pkg/database/rqlite.go b/pkg/database/rqlite.go index 2140e46..ac7b4a9 100644 --- a/pkg/database/rqlite.go +++ b/pkg/database/rqlite.go @@ -43,12 +43,13 @@ func (r *RQLiteManager) Start(ctx context.Context) error { return fmt.Errorf("failed to create RQLite data directory: %w", err) } - // Get the external IP address for advertising +// Get the external IP address for advertising externalIP, err := r.getExternalIP() if err != nil { r.logger.Warn("Failed to get external IP, using localhost", zap.Error(err)) externalIP = "localhost" } + r.logger.Info("Using external IP for RQLite advertising", zap.String("ip", externalIP)) // Build RQLite command args := []string{ @@ -64,7 +65,17 @@ func (r *RQLiteManager) Start(ctx context.Context) error { // Add join address if specified (for non-bootstrap or secondary bootstrap nodes) if r.config.RQLiteJoinAddress != "" { - args = append(args, "-join", r.config.RQLiteJoinAddress) + r.logger.Info("Joining RQLite cluster", zap.String("join_address", r.config.RQLiteJoinAddress)) + + // Validate join address format before using it + if strings.HasPrefix(r.config.RQLiteJoinAddress, "http://") { + args = append(args, "-join", r.config.RQLiteJoinAddress) + } else { + r.logger.Warn("Invalid join address format, skipping join", zap.String("address", r.config.RQLiteJoinAddress)) + return fmt.Errorf("invalid RQLite join address format: %s (must start with http://)", r.config.RQLiteJoinAddress) + } + } else { + r.logger.Info("No join address specified - starting as new cluster") } // Add data directory as positional argument @@ -75,6 +86,8 @@ func (r *RQLiteManager) Start(ctx context.Context) error { zap.Int("http_port", r.config.RQLitePort), zap.Int("raft_port", r.config.RQLiteRaftPort), zap.String("join_address", r.config.RQLiteJoinAddress), + zap.String("external_ip", externalIP), + zap.Strings("full_args", args), ) // Start RQLite process