You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							132 lines
						
					
					
						
							4.8 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							132 lines
						
					
					
						
							4.8 KiB
						
					
					
				
								package broker
							 | 
						|
								
							 | 
						|
								// Broker Error Codes
							 | 
						|
								// These codes are used internally by the broker and can be mapped to Kafka protocol error codes
							 | 
						|
								const (
							 | 
						|
									// Success
							 | 
						|
									BrokerErrorNone int32 = 0
							 | 
						|
								
							 | 
						|
									// General broker errors
							 | 
						|
									BrokerErrorUnknownServerError   int32 = 1
							 | 
						|
									BrokerErrorTopicNotFound        int32 = 2
							 | 
						|
									BrokerErrorPartitionNotFound    int32 = 3
							 | 
						|
									BrokerErrorNotLeaderOrFollower  int32 = 6 // Maps to Kafka ErrorCodeNotLeaderOrFollower
							 | 
						|
									BrokerErrorRequestTimedOut      int32 = 7
							 | 
						|
									BrokerErrorBrokerNotAvailable   int32 = 8
							 | 
						|
									BrokerErrorMessageTooLarge      int32 = 10
							 | 
						|
									BrokerErrorNetworkException     int32 = 13
							 | 
						|
									BrokerErrorOffsetLoadInProgress int32 = 14
							 | 
						|
									BrokerErrorInvalidRecord        int32 = 42
							 | 
						|
									BrokerErrorTopicAlreadyExists   int32 = 36
							 | 
						|
									BrokerErrorInvalidPartitions    int32 = 37
							 | 
						|
									BrokerErrorInvalidConfig        int32 = 40
							 | 
						|
								
							 | 
						|
									// Publisher/connection errors
							 | 
						|
									BrokerErrorPublisherNotFound        int32 = 100
							 | 
						|
									BrokerErrorConnectionFailed         int32 = 101
							 | 
						|
									BrokerErrorFollowerConnectionFailed int32 = 102
							 | 
						|
								)
							 | 
						|
								
							 | 
						|
								// BrokerErrorInfo contains metadata about a broker error
							 | 
						|
								type BrokerErrorInfo struct {
							 | 
						|
									Code        int32
							 | 
						|
									Name        string
							 | 
						|
									Description string
							 | 
						|
									KafkaCode   int16 // Corresponding Kafka protocol error code
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// BrokerErrors maps broker error codes to their metadata and Kafka equivalents
							 | 
						|
								var BrokerErrors = map[int32]BrokerErrorInfo{
							 | 
						|
									BrokerErrorNone: {
							 | 
						|
										Code: BrokerErrorNone, Name: "NONE",
							 | 
						|
										Description: "No error", KafkaCode: 0,
							 | 
						|
									},
							 | 
						|
									BrokerErrorUnknownServerError: {
							 | 
						|
										Code: BrokerErrorUnknownServerError, Name: "UNKNOWN_SERVER_ERROR",
							 | 
						|
										Description: "Unknown server error", KafkaCode: 1,
							 | 
						|
									},
							 | 
						|
									BrokerErrorTopicNotFound: {
							 | 
						|
										Code: BrokerErrorTopicNotFound, Name: "TOPIC_NOT_FOUND",
							 | 
						|
										Description: "Topic not found", KafkaCode: 3, // UNKNOWN_TOPIC_OR_PARTITION
							 | 
						|
									},
							 | 
						|
									BrokerErrorPartitionNotFound: {
							 | 
						|
										Code: BrokerErrorPartitionNotFound, Name: "PARTITION_NOT_FOUND",
							 | 
						|
										Description: "Partition not found", KafkaCode: 3, // UNKNOWN_TOPIC_OR_PARTITION
							 | 
						|
									},
							 | 
						|
									BrokerErrorNotLeaderOrFollower: {
							 | 
						|
										Code: BrokerErrorNotLeaderOrFollower, Name: "NOT_LEADER_OR_FOLLOWER",
							 | 
						|
										Description: "Not leader or follower for this partition", KafkaCode: 6,
							 | 
						|
									},
							 | 
						|
									BrokerErrorRequestTimedOut: {
							 | 
						|
										Code: BrokerErrorRequestTimedOut, Name: "REQUEST_TIMED_OUT",
							 | 
						|
										Description: "Request timed out", KafkaCode: 7,
							 | 
						|
									},
							 | 
						|
									BrokerErrorBrokerNotAvailable: {
							 | 
						|
										Code: BrokerErrorBrokerNotAvailable, Name: "BROKER_NOT_AVAILABLE",
							 | 
						|
										Description: "Broker not available", KafkaCode: 8,
							 | 
						|
									},
							 | 
						|
									BrokerErrorMessageTooLarge: {
							 | 
						|
										Code: BrokerErrorMessageTooLarge, Name: "MESSAGE_TOO_LARGE",
							 | 
						|
										Description: "Message size exceeds limit", KafkaCode: 10,
							 | 
						|
									},
							 | 
						|
									BrokerErrorNetworkException: {
							 | 
						|
										Code: BrokerErrorNetworkException, Name: "NETWORK_EXCEPTION",
							 | 
						|
										Description: "Network error", KafkaCode: 13,
							 | 
						|
									},
							 | 
						|
									BrokerErrorOffsetLoadInProgress: {
							 | 
						|
										Code: BrokerErrorOffsetLoadInProgress, Name: "OFFSET_LOAD_IN_PROGRESS",
							 | 
						|
										Description: "Offset loading in progress", KafkaCode: 14,
							 | 
						|
									},
							 | 
						|
									BrokerErrorInvalidRecord: {
							 | 
						|
										Code: BrokerErrorInvalidRecord, Name: "INVALID_RECORD",
							 | 
						|
										Description: "Invalid record", KafkaCode: 42,
							 | 
						|
									},
							 | 
						|
									BrokerErrorTopicAlreadyExists: {
							 | 
						|
										Code: BrokerErrorTopicAlreadyExists, Name: "TOPIC_ALREADY_EXISTS",
							 | 
						|
										Description: "Topic already exists", KafkaCode: 36,
							 | 
						|
									},
							 | 
						|
									BrokerErrorInvalidPartitions: {
							 | 
						|
										Code: BrokerErrorInvalidPartitions, Name: "INVALID_PARTITIONS",
							 | 
						|
										Description: "Invalid partition count", KafkaCode: 37,
							 | 
						|
									},
							 | 
						|
									BrokerErrorInvalidConfig: {
							 | 
						|
										Code: BrokerErrorInvalidConfig, Name: "INVALID_CONFIG",
							 | 
						|
										Description: "Invalid configuration", KafkaCode: 40,
							 | 
						|
									},
							 | 
						|
									BrokerErrorPublisherNotFound: {
							 | 
						|
										Code: BrokerErrorPublisherNotFound, Name: "PUBLISHER_NOT_FOUND",
							 | 
						|
										Description: "Publisher not found", KafkaCode: 1, // UNKNOWN_SERVER_ERROR
							 | 
						|
									},
							 | 
						|
									BrokerErrorConnectionFailed: {
							 | 
						|
										Code: BrokerErrorConnectionFailed, Name: "CONNECTION_FAILED",
							 | 
						|
										Description: "Connection failed", KafkaCode: 13, // NETWORK_EXCEPTION
							 | 
						|
									},
							 | 
						|
									BrokerErrorFollowerConnectionFailed: {
							 | 
						|
										Code: BrokerErrorFollowerConnectionFailed, Name: "FOLLOWER_CONNECTION_FAILED",
							 | 
						|
										Description: "Failed to connect to follower brokers", KafkaCode: 13, // NETWORK_EXCEPTION
							 | 
						|
									},
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// GetBrokerErrorInfo returns error information for the given broker error code
							 | 
						|
								func GetBrokerErrorInfo(code int32) BrokerErrorInfo {
							 | 
						|
									if info, exists := BrokerErrors[code]; exists {
							 | 
						|
										return info
							 | 
						|
									}
							 | 
						|
									return BrokerErrorInfo{
							 | 
						|
										Code: code, Name: "UNKNOWN", Description: "Unknown broker error code", KafkaCode: 1,
							 | 
						|
									}
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// GetKafkaErrorCode returns the corresponding Kafka protocol error code for a broker error
							 | 
						|
								func GetKafkaErrorCode(brokerErrorCode int32) int16 {
							 | 
						|
									return GetBrokerErrorInfo(brokerErrorCode).KafkaCode
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								// CreateBrokerError creates a structured broker error with both error code and message
							 | 
						|
								func CreateBrokerError(code int32, message string) (int32, string) {
							 | 
						|
									info := GetBrokerErrorInfo(code)
							 | 
						|
									if message == "" {
							 | 
						|
										message = info.Description
							 | 
						|
									}
							 | 
						|
									return code, message
							 | 
						|
								}
							 |