You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iggy.apache.org by pi...@apache.org on 2026/08/18 05:22:25 UTC
(iggy) branch fix-max-meta updated (58cb81d08 -> d9e73526f)
This is an automated email from the ASF dual-hosted git repository.
spetz pushed a change to branch fix-max-meta
in repository https://gitbox.apache.org/repos/asf/iggy.git
omit 58cb81d08 improvements
new d9e73526f improvements
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (58cb81d08)
\
N -- N -- N refs/heads/fix-max-meta (d9e73526f)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
foreign/node/src/wire/error.code.test.ts | 29 ++++++++++++++++------
.../src/wire/message/poll-messages.command.test.ts | 2 +-
2 files changed, 23 insertions(+), 8 deletions(-)
(iggy) 01/01: improvements
Posted by pi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
spetz pushed a commit to branch fix-max-meta
in repository https://gitbox.apache.org/repos/asf/iggy.git
commit d9e73526f6c4f83daa623c428ecced74b9199713
Author: spetz <pi...@gmail.com>
AuthorDate: Tue Aug 18 07:12:41 2026 +0200
improvements
---
core/server/Cargo.toml | 1 -
foreign/go/errors/errors.yaml | 212 ++++++-
foreign/go/errors/errors_gen.go | 660 ++++++++++++++++++---
.../iggy/client/async/tcp/MessagesTcpClient.java | 4 +-
.../exception/IggyAuthenticationException.java | 6 +-
.../iggy/exception/IggyConflictException.java | 9 +-
.../org/apache/iggy/exception/IggyErrorCode.java | 84 +--
.../exception/IggyResourceNotFoundException.java | 4 +-
.../iggy/exception/IggyValidationException.java | 11 +-
.../exception/IggyAuthenticationExceptionTest.java | 12 +-
.../iggy/exception/IggyConflictExceptionTest.java | 18 +-
.../apache/iggy/exception/IggyErrorCodeTest.java | 84 +--
.../IggyResourceNotFoundExceptionTest.java | 8 +-
.../exception/IggyValidationExceptionTest.java | 22 +-
foreign/node/src/wire/error.code.test.ts | 29 +-
foreign/node/src/wire/error.code.ts | 101 +++-
.../src/wire/message/poll-messages.command.test.ts | 2 +-
17 files changed, 1019 insertions(+), 248 deletions(-)
diff --git a/core/server/Cargo.toml b/core/server/Cargo.toml
index b67164964..1376a340f 100644
--- a/core/server/Cargo.toml
+++ b/core/server/Cargo.toml
@@ -66,7 +66,6 @@ ignored = [
"rustls-pemfile",
"send_wrapper",
"serde",
- "slab",
"socket2",
"strum",
"sysinfo",
diff --git a/foreign/go/errors/errors.yaml b/foreign/go/errors/errors.yaml
index 210d93340..b52fa9b16 100644
--- a/foreign/go/errors/errors.yaml
+++ b/foreign/go/errors/errors.yaml
@@ -107,6 +107,10 @@
fields:
- name: Key
type: string
+- name: CannotCloseWebSocketConnection
+ code: 21
+ format: "cannot close websocket connection"
+ fields: []
- name: StaleClient
code: 30
format: "stale client"
@@ -135,6 +139,18 @@
type: string
- name: Port
type: string
+- name: HttpError
+ code: 36
+ format: "http error %s"
+ fields:
+ - name: Message
+ type: string
+- name: InvalidApiUrl
+ code: 37
+ format: "invalid api url: %s"
+ fields:
+ - name: Url
+ type: string
- name: Unauthenticated
code: 40
format: "unauthenticated"
@@ -215,6 +231,10 @@
code: 55
format: "users limit reached."
fields: []
+- name: InvalidPersonalAccessTokenExpiry
+ code: 56
+ format: "invalid personal access token expiry"
+ fields: []
- name: TransientNotCommitted
code: 57
format: "request transiently not committed; retry"
@@ -223,6 +243,10 @@
code: 58
format: "request transiently not accepted; retry, on any replica"
fields: []
+- name: RequestAlreadyApplied
+ code: 59
+ format: "request already applied; its reply is no longer available"
+ fields: []
- name: NotConnected
code: 61
format: "not connected"
@@ -285,6 +309,12 @@
code: 78
format: "invalid access token"
fields: []
+- name: CannotFetchJwks
+ code: 79
+ format: "cannot fetch jwks from url: %s"
+ fields:
+ - name: Url
+ type: string
- name: InvalidSizeBytes
code: 80
format: "invalid size bytes"
@@ -357,6 +387,26 @@
code: 306
format: "cannot parse url"
fields: []
+- name: WebSocketError
+ code: 400
+ format: "websocket error"
+ fields: []
+- name: WebSocketConnectionError
+ code: 401
+ format: "websocket connection error"
+ fields: []
+- name: WebSocketCloseError
+ code: 402
+ format: "websocket close error"
+ fields: []
+- name: WebSocketReceiveError
+ code: 403
+ format: "websocket receive error"
+ fields: []
+- name: WebSocketSendError
+ code: 404
+ format: "websocket send error"
+ fields: []
- name: CannotCreateStreamsDirectory
code: 1000
format: "cannot create streams directory, path: %s"
@@ -425,12 +475,12 @@
fields:
- name: Name
type: string
-- name: StreamIdAlreadyExists
+- name: StreamDirectoryNotFound
code: 1011
- format: "stream with id: %d already exists."
+ format: "stream with directory %s was not found."
fields:
- - name: ID
- type: uint32
+ - name: Path
+ type: string
- name: StreamNameAlreadyExists
code: 1012
format: "stream with name: %s already exists."
@@ -457,6 +507,10 @@
type: uint64
- name: SegmentSize
type: uint64
+- name: TooManyStreams
+ code: 1020
+ format: "too many streams"
+ fields: []
- name: CannotCreateTopicsDirectory
code: 2000
format: "cannot create topics directory for stream with id: %d, path: %s"
@@ -553,14 +607,6 @@
type: string
- name: StreamId
type: string
-- name: TopicIdAlreadyExists
- code: 2012
- format: "topic with id: %d for stream with id: %d already exists."
- fields:
- - name: TopicId
- type: uint32
- - name: StreamId
- type: uint32
- name: TopicNameAlreadyExists
code: 2013
format: "topic with name: %s for stream with id: %d already exists."
@@ -591,6 +637,20 @@
code: 2018
format: "invalid replication factor"
fields: []
+- name: InvalidPartitionsCount
+ code: 2019
+ format: "invalid partitions count"
+ fields: []
+- name: TopicDirectoryNotFound
+ code: 2020
+ format: "topic directory: %s not found"
+ fields:
+ - name: Path
+ type: string
+- name: TooManyTopics
+ code: 2021
+ format: "too many topics"
+ fields: []
- name: CannotCreatePartition
code: 3000
format: "cannot create partition with id: %d for stream with id: %d and topic with id: %d"
@@ -703,6 +763,22 @@
fields:
- name: ID
type: uint32
+- name: NotResolvedConsumer
+ code: 3022
+ format: "failed to resolve consumer with id: %d"
+ fields:
+ - name: ID
+ type: uint32
+- name: CannotOpenConsumerOffsetsFile
+ code: 3023
+ format: "cannot open consumer offsets file for path: %s"
+ fields:
+ - name: Path
+ type: string
+- name: PartitionIdSpaceExhausted
+ code: 3013
+ format: "partition id space exhausted for this topic"
+ fields: []
- name: SegmentNotFound
code: 4000
format: "segment not found"
@@ -901,6 +977,46 @@
type: uint32
- name: Expected
type: uint32
+- name: InvalidMessageTimestampDelta
+ code: 4038
+ format: "invalid message timestamp delta: %d microseconds exceeds the per-batch limit"
+ fields:
+ - name: Delta
+ type: uint64
+- name: InvalidBatchChecksum
+ code: 4039
+ format: "invalid batch checksum: %d, expected: %d, for base offset: %d"
+ fields:
+ - name: Stored
+ type: uint64
+ - name: Computed
+ type: uint64
+ - name: BaseOffset
+ type: uint64
+- name: InvalidHeaderKind
+ code: 4040
+ format: "invalid header kind code: %d"
+ fields:
+ - name: Kind
+ type: uint8
+- name: UnsupportedOptionKey
+ code: 4041
+ format: "unsupported option key: %s"
+ fields:
+ - name: Key
+ type: string
+- name: InvalidOptionValue
+ code: 4042
+ format: "invalid option value for key: %s"
+ fields:
+ - name: Key
+ type: string
+- name: OptionsBlockTooLarge
+ code: 4043
+ format: "options block exceeds its limits: %s"
+ fields:
+ - name: Details
+ type: string
- name: CannotSendMessagesDueToClientDisconnection
code: 4050
format: "cannot sed messages due to client disconnection"
@@ -925,18 +1041,6 @@
code: 4055
format: "background send buffer overflow"
fields: []
-- name: ProducerSendFailed
- code: 4056
- format: "producer send failed"
- fields:
- - name: Cause
- type: error
- - name: Failed
- type: string
- - name: StreamName
- type: string
- - name: TopicName
- type: string
- name: ProducerClosed
code: 4057
format: "producer closed"
@@ -947,6 +1051,12 @@
fields:
- name: Offset
type: uint64
+- name: InvalidReservedField
+ code: 4101
+ format: "invalid reserved field value: %d, expected: 0"
+ fields:
+ - name: Value
+ type: uint64
- name: ConsumerGroupIdNotFound
code: 5000
format: "consumer group with id: %d for topic with id: %d was not found."
@@ -955,14 +1065,6 @@
type: uint32
- name: TopicId
type: uint32
-- name: ConsumerGroupIdAlreadyExists
- code: 5001
- format: "consumer group with id: %d for topic with id: %d already exists."
- fields:
- - name: GroupId
- type: uint32
- - name: TopicId
- type: uint32
- name: InvalidConsumerGroupId
code: 5002
format: "invalid consumer group id"
@@ -1125,6 +1227,52 @@
code: 10012
format: "cannot read index timestamp"
fields: []
+- name: TimestampOutOfRange
+ code: 10013
+ format: "timestamp out of range: %d"
+ fields:
+ - name: Timestamp
+ type: uint64
+- name: ShardNotFound
+ code: 11000
+ format: "shard not found for stream id: %d, topic id: %d, partition id: %d"
+ fields:
+ - name: StreamId
+ type: uint32
+ - name: TopicId
+ type: uint32
+ - name: PartitionId
+ type: uint32
+- name: ShardCommunicationError
+ code: 11001
+ format: "shard communication error"
+ fields: []
+- name: CannotBindToSocket
+ code: 12000
+ format: "cannot bind to socket with addr: %s"
+ fields:
+ - name: Addr
+ type: string
+- name: TaskTimeout
+ code: 12001
+ format: "task execution timeout"
+ fields: []
+- name: IoError
+ code: 13000
+ format: "io error: %s"
+ fields:
+ - name: Message
+ type: string
+- name: AlreadyAuthenticated
+ code: 14000
+ format: "vsr session already bound; reset before re-binding"
+ fields: []
+- name: InvalidSession
+ code: 14001
+ format: "vsr session value %d is invalid (must be non-zero)"
+ fields:
+ - name: Session
+ type: uint64
- name: IncompatibleProtocolVersion
code: 14003
format: "incompatible binary protocol version: client %d, server accepts [%d, %d]"
diff --git a/foreign/go/errors/errors_gen.go b/foreign/go/errors/errors_gen.go
index 80677cf05..f69cfee3c 100644
--- a/foreign/go/errors/errors_gen.go
+++ b/foreign/go/errors/errors_gen.go
@@ -222,6 +222,15 @@ func (e ResourceNotFound) Is(target error) bool {
return ok
}
+type CannotCloseWebSocketConnection struct{}
+
+func (e CannotCloseWebSocketConnection) Error() string { return "cannot close websocket connection" }
+func (e CannotCloseWebSocketConnection) Code() Code { return 21 }
+func (e CannotCloseWebSocketConnection) Is(target error) bool {
+ _, ok := target.(CannotCloseWebSocketConnection)
+ return ok
+}
+
type StaleClient struct{}
func (e StaleClient) Error() string { return "stale client" }
@@ -281,6 +290,32 @@ func (e InvalidIpAddress) Is(target error) bool {
return ok
}
+type HttpError struct {
+ Message string
+}
+
+func (e HttpError) Error() string {
+ return fmt.Sprintf("http error %s", e.Message)
+}
+func (e HttpError) Code() Code { return 36 }
+func (e HttpError) Is(target error) bool {
+ _, ok := target.(HttpError)
+ return ok
+}
+
+type InvalidApiUrl struct {
+ Url string
+}
+
+func (e InvalidApiUrl) Error() string {
+ return fmt.Sprintf("invalid api url: %s", e.Url)
+}
+func (e InvalidApiUrl) Code() Code { return 37 }
+func (e InvalidApiUrl) Is(target error) bool {
+ _, ok := target.(InvalidApiUrl)
+ return ok
+}
+
type Unauthenticated struct{}
func (e Unauthenticated) Error() string { return "unauthenticated" }
@@ -448,6 +483,17 @@ func (e UsersLimitReached) Is(target error) bool {
return ok
}
+type InvalidPersonalAccessTokenExpiry struct{}
+
+func (e InvalidPersonalAccessTokenExpiry) Error() string {
+ return "invalid personal access token expiry"
+}
+func (e InvalidPersonalAccessTokenExpiry) Code() Code { return 56 }
+func (e InvalidPersonalAccessTokenExpiry) Is(target error) bool {
+ _, ok := target.(InvalidPersonalAccessTokenExpiry)
+ return ok
+}
+
type TransientNotCommitted struct{}
func (e TransientNotCommitted) Error() string { return "request transiently not committed; retry" }
@@ -468,6 +514,17 @@ func (e TransientNotAccepted) Is(target error) bool {
return ok
}
+type RequestAlreadyApplied struct{}
+
+func (e RequestAlreadyApplied) Error() string {
+ return "request already applied; its reply is no longer available"
+}
+func (e RequestAlreadyApplied) Code() Code { return 59 }
+func (e RequestAlreadyApplied) Is(target error) bool {
+ _, ok := target.(RequestAlreadyApplied)
+ return ok
+}
+
type NotConnected struct{}
func (e NotConnected) Error() string { return "not connected" }
@@ -607,6 +664,19 @@ func (e InvalidAccessToken) Is(target error) bool {
return ok
}
+type CannotFetchJwks struct {
+ Url string
+}
+
+func (e CannotFetchJwks) Error() string {
+ return fmt.Sprintf("cannot fetch jwks from url: %s", e.Url)
+}
+func (e CannotFetchJwks) Code() Code { return 79 }
+func (e CannotFetchJwks) Is(target error) bool {
+ _, ok := target.(CannotFetchJwks)
+ return ok
+}
+
type InvalidSizeBytes struct{}
func (e InvalidSizeBytes) Error() string { return "invalid size bytes" }
@@ -764,6 +834,51 @@ func (e CannotParseUrl) Is(target error) bool {
return ok
}
+type WebSocketError struct{}
+
+func (e WebSocketError) Error() string { return "websocket error" }
+func (e WebSocketError) Code() Code { return 400 }
+func (e WebSocketError) Is(target error) bool {
+ _, ok := target.(WebSocketError)
+ return ok
+}
+
+type WebSocketConnectionError struct{}
+
+func (e WebSocketConnectionError) Error() string { return "websocket connection error" }
+func (e WebSocketConnectionError) Code() Code { return 401 }
+func (e WebSocketConnectionError) Is(target error) bool {
+ _, ok := target.(WebSocketConnectionError)
+ return ok
+}
+
+type WebSocketCloseError struct{}
+
+func (e WebSocketCloseError) Error() string { return "websocket close error" }
+func (e WebSocketCloseError) Code() Code { return 402 }
+func (e WebSocketCloseError) Is(target error) bool {
+ _, ok := target.(WebSocketCloseError)
+ return ok
+}
+
+type WebSocketReceiveError struct{}
+
+func (e WebSocketReceiveError) Error() string { return "websocket receive error" }
+func (e WebSocketReceiveError) Code() Code { return 403 }
+func (e WebSocketReceiveError) Is(target error) bool {
+ _, ok := target.(WebSocketReceiveError)
+ return ok
+}
+
+type WebSocketSendError struct{}
+
+func (e WebSocketSendError) Error() string { return "websocket send error" }
+func (e WebSocketSendError) Code() Code { return 404 }
+func (e WebSocketSendError) Is(target error) bool {
+ _, ok := target.(WebSocketSendError)
+ return ok
+}
+
type CannotCreateStreamsDirectory struct {
Path string
}
@@ -908,16 +1023,16 @@ func (e StreamNameNotFound) Is(target error) bool {
return ok
}
-type StreamIdAlreadyExists struct {
- ID uint32
+type StreamDirectoryNotFound struct {
+ Path string
}
-func (e StreamIdAlreadyExists) Error() string {
- return fmt.Sprintf("stream with id: %d already exists.", e.ID)
+func (e StreamDirectoryNotFound) Error() string {
+ return fmt.Sprintf("stream with directory %s was not found.", e.Path)
}
-func (e StreamIdAlreadyExists) Code() Code { return 1011 }
-func (e StreamIdAlreadyExists) Is(target error) bool {
- _, ok := target.(StreamIdAlreadyExists)
+func (e StreamDirectoryNotFound) Code() Code { return 1011 }
+func (e StreamDirectoryNotFound) Is(target error) bool {
+ _, ok := target.(StreamDirectoryNotFound)
return ok
}
@@ -975,6 +1090,15 @@ func (e InvalidTopicSize) Is(target error) bool {
return ok
}
+type TooManyStreams struct{}
+
+func (e TooManyStreams) Error() string { return "too many streams" }
+func (e TooManyStreams) Code() Code { return 1020 }
+func (e TooManyStreams) Is(target error) bool {
+ _, ok := target.(TooManyStreams)
+ return ok
+}
+
type CannotCreateTopicsDirectory struct {
ID uint32
Path string
@@ -1140,20 +1264,6 @@ func (e TopicNameNotFound) Is(target error) bool {
return ok
}
-type TopicIdAlreadyExists struct {
- TopicId uint32
- StreamId uint32
-}
-
-func (e TopicIdAlreadyExists) Error() string {
- return fmt.Sprintf("topic with id: %d for stream with id: %d already exists.", e.TopicId, e.StreamId)
-}
-func (e TopicIdAlreadyExists) Code() Code { return 2012 }
-func (e TopicIdAlreadyExists) Is(target error) bool {
- _, ok := target.(TopicIdAlreadyExists)
- return ok
-}
-
type TopicNameAlreadyExists struct {
TopicName string
StreamId uint32
@@ -1217,6 +1327,37 @@ func (e InvalidReplicationFactor) Is(target error) bool {
return ok
}
+type InvalidPartitionsCount struct{}
+
+func (e InvalidPartitionsCount) Error() string { return "invalid partitions count" }
+func (e InvalidPartitionsCount) Code() Code { return 2019 }
+func (e InvalidPartitionsCount) Is(target error) bool {
+ _, ok := target.(InvalidPartitionsCount)
+ return ok
+}
+
+type TopicDirectoryNotFound struct {
+ Path string
+}
+
+func (e TopicDirectoryNotFound) Error() string {
+ return fmt.Sprintf("topic directory: %s not found", e.Path)
+}
+func (e TopicDirectoryNotFound) Code() Code { return 2020 }
+func (e TopicDirectoryNotFound) Is(target error) bool {
+ _, ok := target.(TopicDirectoryNotFound)
+ return ok
+}
+
+type TooManyTopics struct{}
+
+func (e TooManyTopics) Error() string { return "too many topics" }
+func (e TooManyTopics) Code() Code { return 2021 }
+func (e TooManyTopics) Is(target error) bool {
+ _, ok := target.(TooManyTopics)
+ return ok
+}
+
type CannotCreatePartition struct {
PartitionId uint32
StreamId uint32
@@ -1417,6 +1558,43 @@ func (e ConsumerOffsetNotFound) Is(target error) bool {
return ok
}
+type NotResolvedConsumer struct {
+ ID uint32
+}
+
+func (e NotResolvedConsumer) Error() string {
+ return fmt.Sprintf("failed to resolve consumer with id: %d", e.ID)
+}
+func (e NotResolvedConsumer) Code() Code { return 3022 }
+func (e NotResolvedConsumer) Is(target error) bool {
+ _, ok := target.(NotResolvedConsumer)
+ return ok
+}
+
+type CannotOpenConsumerOffsetsFile struct {
+ Path string
+}
+
+func (e CannotOpenConsumerOffsetsFile) Error() string {
+ return fmt.Sprintf("cannot open consumer offsets file for path: %s", e.Path)
+}
+func (e CannotOpenConsumerOffsetsFile) Code() Code { return 3023 }
+func (e CannotOpenConsumerOffsetsFile) Is(target error) bool {
+ _, ok := target.(CannotOpenConsumerOffsetsFile)
+ return ok
+}
+
+type PartitionIdSpaceExhausted struct{}
+
+func (e PartitionIdSpaceExhausted) Error() string {
+ return "partition id space exhausted for this topic"
+}
+func (e PartitionIdSpaceExhausted) Code() Code { return 3013 }
+func (e PartitionIdSpaceExhausted) Is(target error) bool {
+ _, ok := target.(PartitionIdSpaceExhausted)
+ return ok
+}
+
type SegmentNotFound struct{}
func (e SegmentNotFound) Error() string { return "segment not found" }
@@ -1823,6 +2001,86 @@ func (e TooSmallMessage) Is(target error) bool {
return ok
}
+type InvalidMessageTimestampDelta struct {
+ Delta uint64
+}
+
+func (e InvalidMessageTimestampDelta) Error() string {
+ return fmt.Sprintf("invalid message timestamp delta: %d microseconds exceeds the per-batch limit", e.Delta)
+}
+func (e InvalidMessageTimestampDelta) Code() Code { return 4038 }
+func (e InvalidMessageTimestampDelta) Is(target error) bool {
+ _, ok := target.(InvalidMessageTimestampDelta)
+ return ok
+}
+
+type InvalidBatchChecksum struct {
+ Stored uint64
+ Computed uint64
+ BaseOffset uint64
+}
+
+func (e InvalidBatchChecksum) Error() string {
+ return fmt.Sprintf("invalid batch checksum: %d, expected: %d, for base offset: %d", e.Stored, e.Computed, e.BaseOffset)
+}
+func (e InvalidBatchChecksum) Code() Code { return 4039 }
+func (e InvalidBatchChecksum) Is(target error) bool {
+ _, ok := target.(InvalidBatchChecksum)
+ return ok
+}
+
+type InvalidHeaderKind struct {
+ Kind uint8
+}
+
+func (e InvalidHeaderKind) Error() string {
+ return fmt.Sprintf("invalid header kind code: %d", e.Kind)
+}
+func (e InvalidHeaderKind) Code() Code { return 4040 }
+func (e InvalidHeaderKind) Is(target error) bool {
+ _, ok := target.(InvalidHeaderKind)
+ return ok
+}
+
+type UnsupportedOptionKey struct {
+ Key string
+}
+
+func (e UnsupportedOptionKey) Error() string {
+ return fmt.Sprintf("unsupported option key: %s", e.Key)
+}
+func (e UnsupportedOptionKey) Code() Code { return 4041 }
+func (e UnsupportedOptionKey) Is(target error) bool {
+ _, ok := target.(UnsupportedOptionKey)
+ return ok
+}
+
+type InvalidOptionValue struct {
+ Key string
+}
+
+func (e InvalidOptionValue) Error() string {
+ return fmt.Sprintf("invalid option value for key: %s", e.Key)
+}
+func (e InvalidOptionValue) Code() Code { return 4042 }
+func (e InvalidOptionValue) Is(target error) bool {
+ _, ok := target.(InvalidOptionValue)
+ return ok
+}
+
+type OptionsBlockTooLarge struct {
+ Details string
+}
+
+func (e OptionsBlockTooLarge) Error() string {
+ return fmt.Sprintf("options block exceeds its limits: %s", e.Details)
+}
+func (e OptionsBlockTooLarge) Code() Code { return 4043 }
+func (e OptionsBlockTooLarge) Is(target error) bool {
+ _, ok := target.(OptionsBlockTooLarge)
+ return ok
+}
+
type CannotSendMessagesDueToClientDisconnection struct{}
func (e CannotSendMessagesDueToClientDisconnection) Error() string {
@@ -1879,15 +2137,6 @@ func (e BackgroundSendBufferOverflow) Is(target error) bool {
return ok
}
-type ProducerSendFailed struct{}
-
-func (e ProducerSendFailed) Error() string { return "producer send failed" }
-func (e ProducerSendFailed) Code() Code { return 4056 }
-func (e ProducerSendFailed) Is(target error) bool {
- _, ok := target.(ProducerSendFailed)
- return ok
-}
-
type ProducerClosed struct{}
func (e ProducerClosed) Error() string { return "producer closed" }
@@ -1910,31 +2159,30 @@ func (e InvalidOffset) Is(target error) bool {
return ok
}
-type ConsumerGroupIdNotFound struct {
- GroupId uint32
- TopicId uint32
+type InvalidReservedField struct {
+ Value uint64
}
-func (e ConsumerGroupIdNotFound) Error() string {
- return fmt.Sprintf("consumer group with id: %d for topic with id: %d was not found.", e.GroupId, e.TopicId)
+func (e InvalidReservedField) Error() string {
+ return fmt.Sprintf("invalid reserved field value: %d, expected: 0", e.Value)
}
-func (e ConsumerGroupIdNotFound) Code() Code { return 5000 }
-func (e ConsumerGroupIdNotFound) Is(target error) bool {
- _, ok := target.(ConsumerGroupIdNotFound)
+func (e InvalidReservedField) Code() Code { return 4101 }
+func (e InvalidReservedField) Is(target error) bool {
+ _, ok := target.(InvalidReservedField)
return ok
}
-type ConsumerGroupIdAlreadyExists struct {
+type ConsumerGroupIdNotFound struct {
GroupId uint32
TopicId uint32
}
-func (e ConsumerGroupIdAlreadyExists) Error() string {
- return fmt.Sprintf("consumer group with id: %d for topic with id: %d already exists.", e.GroupId, e.TopicId)
+func (e ConsumerGroupIdNotFound) Error() string {
+ return fmt.Sprintf("consumer group with id: %d for topic with id: %d was not found.", e.GroupId, e.TopicId)
}
-func (e ConsumerGroupIdAlreadyExists) Code() Code { return 5001 }
-func (e ConsumerGroupIdAlreadyExists) Is(target error) bool {
- _, ok := target.(ConsumerGroupIdAlreadyExists)
+func (e ConsumerGroupIdNotFound) Code() Code { return 5000 }
+func (e ConsumerGroupIdNotFound) Is(target error) bool {
+ _, ok := target.(ConsumerGroupIdNotFound)
return ok
}
@@ -2270,6 +2518,102 @@ func (e CannotReadIndexTimestamp) Is(target error) bool {
return ok
}
+type TimestampOutOfRange struct {
+ Timestamp uint64
+}
+
+func (e TimestampOutOfRange) Error() string {
+ return fmt.Sprintf("timestamp out of range: %d", e.Timestamp)
+}
+func (e TimestampOutOfRange) Code() Code { return 10013 }
+func (e TimestampOutOfRange) Is(target error) bool {
+ _, ok := target.(TimestampOutOfRange)
+ return ok
+}
+
+type ShardNotFound struct {
+ StreamId uint32
+ TopicId uint32
+ PartitionId uint32
+}
+
+func (e ShardNotFound) Error() string {
+ return fmt.Sprintf("shard not found for stream id: %d, topic id: %d, partition id: %d", e.StreamId, e.TopicId, e.PartitionId)
+}
+func (e ShardNotFound) Code() Code { return 11000 }
+func (e ShardNotFound) Is(target error) bool {
+ _, ok := target.(ShardNotFound)
+ return ok
+}
+
+type ShardCommunicationError struct{}
+
+func (e ShardCommunicationError) Error() string { return "shard communication error" }
+func (e ShardCommunicationError) Code() Code { return 11001 }
+func (e ShardCommunicationError) Is(target error) bool {
+ _, ok := target.(ShardCommunicationError)
+ return ok
+}
+
+type CannotBindToSocket struct {
+ Addr string
+}
+
+func (e CannotBindToSocket) Error() string {
+ return fmt.Sprintf("cannot bind to socket with addr: %s", e.Addr)
+}
+func (e CannotBindToSocket) Code() Code { return 12000 }
+func (e CannotBindToSocket) Is(target error) bool {
+ _, ok := target.(CannotBindToSocket)
+ return ok
+}
+
+type TaskTimeout struct{}
+
+func (e TaskTimeout) Error() string { return "task execution timeout" }
+func (e TaskTimeout) Code() Code { return 12001 }
+func (e TaskTimeout) Is(target error) bool {
+ _, ok := target.(TaskTimeout)
+ return ok
+}
+
+type IoError struct {
+ Message string
+}
+
+func (e IoError) Error() string {
+ return fmt.Sprintf("io error: %s", e.Message)
+}
+func (e IoError) Code() Code { return 13000 }
+func (e IoError) Is(target error) bool {
+ _, ok := target.(IoError)
+ return ok
+}
+
+type AlreadyAuthenticated struct{}
+
+func (e AlreadyAuthenticated) Error() string {
+ return "vsr session already bound; reset before re-binding"
+}
+func (e AlreadyAuthenticated) Code() Code { return 14000 }
+func (e AlreadyAuthenticated) Is(target error) bool {
+ _, ok := target.(AlreadyAuthenticated)
+ return ok
+}
+
+type InvalidSession struct {
+ Session uint64
+}
+
+func (e InvalidSession) Error() string {
+ return fmt.Sprintf("vsr session value %d is invalid (must be non-zero)", e.Session)
+}
+func (e InvalidSession) Code() Code { return 14001 }
+func (e InvalidSession) Is(target error) bool {
+ _, ok := target.(InvalidSession)
+ return ok
+}
+
type IncompatibleProtocolVersion struct {
ClientVersion uint32
ServerVersionMin uint32
@@ -2304,12 +2648,15 @@ var (
ErrInvalidStateEntryChecksum = InvalidStateEntryChecksum{}
ErrCannotOpenDatabase = CannotOpenDatabase{}
ErrResourceNotFound = ResourceNotFound{}
+ ErrCannotCloseWebSocketConnection = CannotCloseWebSocketConnection{}
ErrStaleClient = StaleClient{}
ErrTcpError = TcpError{}
ErrQuicError = QuicError{}
ErrInvalidServerAddress = InvalidServerAddress{}
ErrInvalidClientAddress = InvalidClientAddress{}
ErrInvalidIpAddress = InvalidIpAddress{}
+ ErrHttpError = HttpError{}
+ ErrInvalidApiUrl = InvalidApiUrl{}
ErrUnauthenticated = Unauthenticated{}
ErrUnauthorized = Unauthorized{}
ErrInvalidCredentials = InvalidCredentials{}
@@ -2326,8 +2673,10 @@ var (
ErrInvalidPersonalAccessToken = InvalidPersonalAccessToken{}
ErrPersonalAccessTokenExpired = PersonalAccessTokenExpired{}
ErrUsersLimitReached = UsersLimitReached{}
+ ErrInvalidPersonalAccessTokenExpiry = InvalidPersonalAccessTokenExpiry{}
ErrTransientNotCommitted = TransientNotCommitted{}
ErrTransientNotAccepted = TransientNotAccepted{}
+ ErrRequestAlreadyApplied = RequestAlreadyApplied{}
ErrNotConnected = NotConnected{}
ErrClientShutdown = ClientShutdown{}
ErrInvalidTlsDomain = InvalidTlsDomain{}
@@ -2343,6 +2692,7 @@ var (
ErrCannotGenerateJwt = CannotGenerateJwt{}
ErrAccessTokenMissing = AccessTokenMissing{}
ErrInvalidAccessToken = InvalidAccessToken{}
+ ErrCannotFetchJwks = CannotFetchJwks{}
ErrInvalidSizeBytes = InvalidSizeBytes{}
ErrInvalidUtf8 = InvalidUtf8{}
ErrInvalidNumberEncoding = InvalidNumberEncoding{}
@@ -2359,6 +2709,11 @@ var (
ErrEmptyResponse = EmptyResponse{}
ErrCannotCreateEndpoint = CannotCreateEndpoint{}
ErrCannotParseUrl = CannotParseUrl{}
+ ErrWebSocketError = WebSocketError{}
+ ErrWebSocketConnectionError = WebSocketConnectionError{}
+ ErrWebSocketCloseError = WebSocketCloseError{}
+ ErrWebSocketReceiveError = WebSocketReceiveError{}
+ ErrWebSocketSendError = WebSocketSendError{}
ErrCannotCreateStreamsDirectory = CannotCreateStreamsDirectory{}
ErrCannotCreateStreamDirectory = CannotCreateStreamDirectory{}
ErrCannotCreateStreamInfo = CannotCreateStreamInfo{}
@@ -2370,12 +2725,13 @@ var (
ErrCannotDeleteStreamDirectory = CannotDeleteStreamDirectory{}
ErrStreamIdNotFound = StreamIdNotFound{}
ErrStreamNameNotFound = StreamNameNotFound{}
- ErrStreamIdAlreadyExists = StreamIdAlreadyExists{}
+ ErrStreamDirectoryNotFound = StreamDirectoryNotFound{}
ErrStreamNameAlreadyExists = StreamNameAlreadyExists{}
ErrInvalidStreamName = InvalidStreamName{}
ErrInvalidStreamId = InvalidStreamId{}
ErrCannotReadStreams = CannotReadStreams{}
ErrInvalidTopicSize = InvalidTopicSize{}
+ ErrTooManyStreams = TooManyStreams{}
ErrCannotCreateTopicsDirectory = CannotCreateTopicsDirectory{}
ErrCannotCreateTopicDirectory = CannotCreateTopicDirectory{}
ErrCannotCreateTopicInfo = CannotCreateTopicInfo{}
@@ -2388,13 +2744,15 @@ var (
ErrCannotPollTopic = CannotPollTopic{}
ErrTopicIdNotFound = TopicIdNotFound{}
ErrTopicNameNotFound = TopicNameNotFound{}
- ErrTopicIdAlreadyExists = TopicIdAlreadyExists{}
ErrTopicNameAlreadyExists = TopicNameAlreadyExists{}
ErrInvalidTopicName = InvalidTopicName{}
ErrTooManyPartitions = TooManyPartitions{}
ErrInvalidTopicId = InvalidTopicId{}
ErrCannotReadTopics = CannotReadTopics{}
ErrInvalidReplicationFactor = InvalidReplicationFactor{}
+ ErrInvalidPartitionsCount = InvalidPartitionsCount{}
+ ErrTopicDirectoryNotFound = TopicDirectoryNotFound{}
+ ErrTooManyTopics = TooManyTopics{}
ErrCannotCreatePartition = CannotCreatePartition{}
ErrCannotCreatePartitionsDirectory = CannotCreatePartitionsDirectory{}
ErrCannotCreatePartitionDirectory = CannotCreatePartitionDirectory{}
@@ -2410,6 +2768,9 @@ var (
ErrCannotCreateConsumerOffsetsDirectory = CannotCreateConsumerOffsetsDirectory{}
ErrCannotReadConsumerOffsets = CannotReadConsumerOffsets{}
ErrConsumerOffsetNotFound = ConsumerOffsetNotFound{}
+ ErrNotResolvedConsumer = NotResolvedConsumer{}
+ ErrCannotOpenConsumerOffsetsFile = CannotOpenConsumerOffsetsFile{}
+ ErrPartitionIdSpaceExhausted = PartitionIdSpaceExhausted{}
ErrSegmentNotFound = SegmentNotFound{}
ErrSegmentClosed = SegmentClosed{}
ErrInvalidSegmentSize = InvalidSegmentSize{}
@@ -2448,17 +2809,22 @@ var (
ErrInvalidIndexesCount = InvalidIndexesCount{}
ErrInvalidMessagesSize = InvalidMessagesSize{}
ErrTooSmallMessage = TooSmallMessage{}
+ ErrInvalidMessageTimestampDelta = InvalidMessageTimestampDelta{}
+ ErrInvalidBatchChecksum = InvalidBatchChecksum{}
+ ErrInvalidHeaderKind = InvalidHeaderKind{}
+ ErrUnsupportedOptionKey = UnsupportedOptionKey{}
+ ErrInvalidOptionValue = InvalidOptionValue{}
+ ErrOptionsBlockTooLarge = OptionsBlockTooLarge{}
ErrCannotSendMessagesDueToClientDisconnection = CannotSendMessagesDueToClientDisconnection{}
ErrBackgroundSendError = BackgroundSendError{}
ErrBackgroundSendTimeout = BackgroundSendTimeout{}
ErrBackgroundSendBufferFull = BackgroundSendBufferFull{}
ErrBackgroundWorkerDisconnected = BackgroundWorkerDisconnected{}
ErrBackgroundSendBufferOverflow = BackgroundSendBufferOverflow{}
- ErrProducerSendFailed = ProducerSendFailed{}
ErrProducerClosed = ProducerClosed{}
ErrInvalidOffset = InvalidOffset{}
+ ErrInvalidReservedField = InvalidReservedField{}
ErrConsumerGroupIdNotFound = ConsumerGroupIdNotFound{}
- ErrConsumerGroupIdAlreadyExists = ConsumerGroupIdAlreadyExists{}
ErrInvalidConsumerGroupId = InvalidConsumerGroupId{}
ErrConsumerGroupNameNotFound = ConsumerGroupNameNotFound{}
ErrConsumerGroupNameAlreadyExists = ConsumerGroupNameAlreadyExists{}
@@ -2492,6 +2858,14 @@ var (
ErrCannotReadIndexOffset = CannotReadIndexOffset{}
ErrCannotReadIndexPosition = CannotReadIndexPosition{}
ErrCannotReadIndexTimestamp = CannotReadIndexTimestamp{}
+ ErrTimestampOutOfRange = TimestampOutOfRange{}
+ ErrShardNotFound = ShardNotFound{}
+ ErrShardCommunicationError = ShardCommunicationError{}
+ ErrCannotBindToSocket = CannotBindToSocket{}
+ ErrTaskTimeout = TaskTimeout{}
+ ErrIoError = IoError{}
+ ErrAlreadyAuthenticated = AlreadyAuthenticated{}
+ ErrInvalidSession = InvalidSession{}
ErrIncompatibleProtocolVersion = IncompatibleProtocolVersion{}
)
@@ -2516,12 +2890,15 @@ const (
InvalidStateEntryChecksumCode Code = 16
CannotOpenDatabaseCode Code = 19
ResourceNotFoundCode Code = 20
+ CannotCloseWebSocketConnectionCode Code = 21
StaleClientCode Code = 30
TcpErrorCode Code = 31
QuicErrorCode Code = 32
InvalidServerAddressCode Code = 33
InvalidClientAddressCode Code = 34
InvalidIpAddressCode Code = 35
+ HttpErrorCode Code = 36
+ InvalidApiUrlCode Code = 37
UnauthenticatedCode Code = 40
UnauthorizedCode Code = 41
InvalidCredentialsCode Code = 42
@@ -2538,8 +2915,10 @@ const (
InvalidPersonalAccessTokenCode Code = 53
PersonalAccessTokenExpiredCode Code = 54
UsersLimitReachedCode Code = 55
+ InvalidPersonalAccessTokenExpiryCode Code = 56
TransientNotCommittedCode Code = 57
TransientNotAcceptedCode Code = 58
+ RequestAlreadyAppliedCode Code = 59
NotConnectedCode Code = 61
ClientShutdownCode Code = 63
InvalidTlsDomainCode Code = 64
@@ -2555,6 +2934,7 @@ const (
CannotGenerateJwtCode Code = 76
AccessTokenMissingCode Code = 77
InvalidAccessTokenCode Code = 78
+ CannotFetchJwksCode Code = 79
InvalidSizeBytesCode Code = 80
InvalidUtf8Code Code = 81
InvalidNumberEncodingCode Code = 82
@@ -2571,6 +2951,11 @@ const (
EmptyResponseCode Code = 304
CannotCreateEndpointCode Code = 305
CannotParseUrlCode Code = 306
+ WebSocketErrorCode Code = 400
+ WebSocketConnectionErrorCode Code = 401
+ WebSocketCloseErrorCode Code = 402
+ WebSocketReceiveErrorCode Code = 403
+ WebSocketSendErrorCode Code = 404
CannotCreateStreamsDirectoryCode Code = 1000
CannotCreateStreamDirectoryCode Code = 1001
CannotCreateStreamInfoCode Code = 1002
@@ -2582,12 +2967,13 @@ const (
CannotDeleteStreamDirectoryCode Code = 1008
StreamIdNotFoundCode Code = 1009
StreamNameNotFoundCode Code = 1010
- StreamIdAlreadyExistsCode Code = 1011
+ StreamDirectoryNotFoundCode Code = 1011
StreamNameAlreadyExistsCode Code = 1012
InvalidStreamNameCode Code = 1013
InvalidStreamIdCode Code = 1014
CannotReadStreamsCode Code = 1015
InvalidTopicSizeCode Code = 1019
+ TooManyStreamsCode Code = 1020
CannotCreateTopicsDirectoryCode Code = 2000
CannotCreateTopicDirectoryCode Code = 2001
CannotCreateTopicInfoCode Code = 2002
@@ -2600,13 +2986,15 @@ const (
CannotPollTopicCode Code = 2009
TopicIdNotFoundCode Code = 2010
TopicNameNotFoundCode Code = 2011
- TopicIdAlreadyExistsCode Code = 2012
TopicNameAlreadyExistsCode Code = 2013
InvalidTopicNameCode Code = 2014
TooManyPartitionsCode Code = 2015
InvalidTopicIdCode Code = 2016
CannotReadTopicsCode Code = 2017
InvalidReplicationFactorCode Code = 2018
+ InvalidPartitionsCountCode Code = 2019
+ TopicDirectoryNotFoundCode Code = 2020
+ TooManyTopicsCode Code = 2021
CannotCreatePartitionCode Code = 3000
CannotCreatePartitionsDirectoryCode Code = 3001
CannotCreatePartitionDirectoryCode Code = 3002
@@ -2622,6 +3010,9 @@ const (
CannotCreateConsumerOffsetsDirectoryCode Code = 3012
CannotReadConsumerOffsetsCode Code = 3020
ConsumerOffsetNotFoundCode Code = 3021
+ NotResolvedConsumerCode Code = 3022
+ CannotOpenConsumerOffsetsFileCode Code = 3023
+ PartitionIdSpaceExhaustedCode Code = 3013
SegmentNotFoundCode Code = 4000
SegmentClosedCode Code = 4001
InvalidSegmentSizeCode Code = 4002
@@ -2660,17 +3051,22 @@ const (
InvalidIndexesCountCode Code = 4035
InvalidMessagesSizeCode Code = 4036
TooSmallMessageCode Code = 4037
+ InvalidMessageTimestampDeltaCode Code = 4038
+ InvalidBatchChecksumCode Code = 4039
+ InvalidHeaderKindCode Code = 4040
+ UnsupportedOptionKeyCode Code = 4041
+ InvalidOptionValueCode Code = 4042
+ OptionsBlockTooLargeCode Code = 4043
CannotSendMessagesDueToClientDisconnectionCode Code = 4050
BackgroundSendErrorCode Code = 4051
BackgroundSendTimeoutCode Code = 4052
BackgroundSendBufferFullCode Code = 4053
BackgroundWorkerDisconnectedCode Code = 4054
BackgroundSendBufferOverflowCode Code = 4055
- ProducerSendFailedCode Code = 4056
ProducerClosedCode Code = 4057
InvalidOffsetCode Code = 4100
+ InvalidReservedFieldCode Code = 4101
ConsumerGroupIdNotFoundCode Code = 5000
- ConsumerGroupIdAlreadyExistsCode Code = 5001
InvalidConsumerGroupIdCode Code = 5002
ConsumerGroupNameNotFoundCode Code = 5003
ConsumerGroupNameAlreadyExistsCode Code = 5004
@@ -2704,6 +3100,14 @@ const (
CannotReadIndexOffsetCode Code = 10010
CannotReadIndexPositionCode Code = 10011
CannotReadIndexTimestampCode Code = 10012
+ TimestampOutOfRangeCode Code = 10013
+ ShardNotFoundCode Code = 11000
+ ShardCommunicationErrorCode Code = 11001
+ CannotBindToSocketCode Code = 12000
+ TaskTimeoutCode Code = 12001
+ IoErrorCode Code = 13000
+ AlreadyAuthenticatedCode Code = 14000
+ InvalidSessionCode Code = 14001
IncompatibleProtocolVersionCode Code = 14003
)
@@ -2745,6 +3149,8 @@ func (c Code) String() string {
return "CannotOpenDatabase"
case ResourceNotFoundCode:
return "ResourceNotFound"
+ case CannotCloseWebSocketConnectionCode:
+ return "CannotCloseWebSocketConnection"
case StaleClientCode:
return "StaleClient"
case TcpErrorCode:
@@ -2757,6 +3163,10 @@ func (c Code) String() string {
return "InvalidClientAddress"
case InvalidIpAddressCode:
return "InvalidIpAddress"
+ case HttpErrorCode:
+ return "HttpError"
+ case InvalidApiUrlCode:
+ return "InvalidApiUrl"
case UnauthenticatedCode:
return "Unauthenticated"
case UnauthorizedCode:
@@ -2789,10 +3199,14 @@ func (c Code) String() string {
return "PersonalAccessTokenExpired"
case UsersLimitReachedCode:
return "UsersLimitReached"
+ case InvalidPersonalAccessTokenExpiryCode:
+ return "InvalidPersonalAccessTokenExpiry"
case TransientNotCommittedCode:
return "TransientNotCommitted"
case TransientNotAcceptedCode:
return "TransientNotAccepted"
+ case RequestAlreadyAppliedCode:
+ return "RequestAlreadyApplied"
case NotConnectedCode:
return "NotConnected"
case ClientShutdownCode:
@@ -2823,6 +3237,8 @@ func (c Code) String() string {
return "AccessTokenMissing"
case InvalidAccessTokenCode:
return "InvalidAccessToken"
+ case CannotFetchJwksCode:
+ return "CannotFetchJwks"
case InvalidSizeBytesCode:
return "InvalidSizeBytes"
case InvalidUtf8Code:
@@ -2855,6 +3271,16 @@ func (c Code) String() string {
return "CannotCreateEndpoint"
case CannotParseUrlCode:
return "CannotParseUrl"
+ case WebSocketErrorCode:
+ return "WebSocketError"
+ case WebSocketConnectionErrorCode:
+ return "WebSocketConnectionError"
+ case WebSocketCloseErrorCode:
+ return "WebSocketCloseError"
+ case WebSocketReceiveErrorCode:
+ return "WebSocketReceiveError"
+ case WebSocketSendErrorCode:
+ return "WebSocketSendError"
case CannotCreateStreamsDirectoryCode:
return "CannotCreateStreamsDirectory"
case CannotCreateStreamDirectoryCode:
@@ -2877,8 +3303,8 @@ func (c Code) String() string {
return "StreamIdNotFound"
case StreamNameNotFoundCode:
return "StreamNameNotFound"
- case StreamIdAlreadyExistsCode:
- return "StreamIdAlreadyExists"
+ case StreamDirectoryNotFoundCode:
+ return "StreamDirectoryNotFound"
case StreamNameAlreadyExistsCode:
return "StreamNameAlreadyExists"
case InvalidStreamNameCode:
@@ -2889,6 +3315,8 @@ func (c Code) String() string {
return "CannotReadStreams"
case InvalidTopicSizeCode:
return "InvalidTopicSize"
+ case TooManyStreamsCode:
+ return "TooManyStreams"
case CannotCreateTopicsDirectoryCode:
return "CannotCreateTopicsDirectory"
case CannotCreateTopicDirectoryCode:
@@ -2913,8 +3341,6 @@ func (c Code) String() string {
return "TopicIdNotFound"
case TopicNameNotFoundCode:
return "TopicNameNotFound"
- case TopicIdAlreadyExistsCode:
- return "TopicIdAlreadyExists"
case TopicNameAlreadyExistsCode:
return "TopicNameAlreadyExists"
case InvalidTopicNameCode:
@@ -2927,6 +3353,12 @@ func (c Code) String() string {
return "CannotReadTopics"
case InvalidReplicationFactorCode:
return "InvalidReplicationFactor"
+ case InvalidPartitionsCountCode:
+ return "InvalidPartitionsCount"
+ case TopicDirectoryNotFoundCode:
+ return "TopicDirectoryNotFound"
+ case TooManyTopicsCode:
+ return "TooManyTopics"
case CannotCreatePartitionCode:
return "CannotCreatePartition"
case CannotCreatePartitionsDirectoryCode:
@@ -2957,6 +3389,12 @@ func (c Code) String() string {
return "CannotReadConsumerOffsets"
case ConsumerOffsetNotFoundCode:
return "ConsumerOffsetNotFound"
+ case NotResolvedConsumerCode:
+ return "NotResolvedConsumer"
+ case CannotOpenConsumerOffsetsFileCode:
+ return "CannotOpenConsumerOffsetsFile"
+ case PartitionIdSpaceExhaustedCode:
+ return "PartitionIdSpaceExhausted"
case SegmentNotFoundCode:
return "SegmentNotFound"
case SegmentClosedCode:
@@ -3033,6 +3471,18 @@ func (c Code) String() string {
return "InvalidMessagesSize"
case TooSmallMessageCode:
return "TooSmallMessage"
+ case InvalidMessageTimestampDeltaCode:
+ return "InvalidMessageTimestampDelta"
+ case InvalidBatchChecksumCode:
+ return "InvalidBatchChecksum"
+ case InvalidHeaderKindCode:
+ return "InvalidHeaderKind"
+ case UnsupportedOptionKeyCode:
+ return "UnsupportedOptionKey"
+ case InvalidOptionValueCode:
+ return "InvalidOptionValue"
+ case OptionsBlockTooLargeCode:
+ return "OptionsBlockTooLarge"
case CannotSendMessagesDueToClientDisconnectionCode:
return "CannotSendMessagesDueToClientDisconnection"
case BackgroundSendErrorCode:
@@ -3045,16 +3495,14 @@ func (c Code) String() string {
return "BackgroundWorkerDisconnected"
case BackgroundSendBufferOverflowCode:
return "BackgroundSendBufferOverflow"
- case ProducerSendFailedCode:
- return "ProducerSendFailed"
case ProducerClosedCode:
return "ProducerClosed"
case InvalidOffsetCode:
return "InvalidOffset"
+ case InvalidReservedFieldCode:
+ return "InvalidReservedField"
case ConsumerGroupIdNotFoundCode:
return "ConsumerGroupIdNotFound"
- case ConsumerGroupIdAlreadyExistsCode:
- return "ConsumerGroupIdAlreadyExists"
case InvalidConsumerGroupIdCode:
return "InvalidConsumerGroupId"
case ConsumerGroupNameNotFoundCode:
@@ -3121,6 +3569,22 @@ func (c Code) String() string {
return "CannotReadIndexPosition"
case CannotReadIndexTimestampCode:
return "CannotReadIndexTimestamp"
+ case TimestampOutOfRangeCode:
+ return "TimestampOutOfRange"
+ case ShardNotFoundCode:
+ return "ShardNotFound"
+ case ShardCommunicationErrorCode:
+ return "ShardCommunicationError"
+ case CannotBindToSocketCode:
+ return "CannotBindToSocket"
+ case TaskTimeoutCode:
+ return "TaskTimeout"
+ case IoErrorCode:
+ return "IoError"
+ case AlreadyAuthenticatedCode:
+ return "AlreadyAuthenticated"
+ case InvalidSessionCode:
+ return "InvalidSession"
case IncompatibleProtocolVersionCode:
return "IncompatibleProtocolVersion"
default:
@@ -3166,6 +3630,8 @@ func FromCode(code Code) IggyError {
return ErrCannotOpenDatabase
case ResourceNotFoundCode:
return ErrResourceNotFound
+ case CannotCloseWebSocketConnectionCode:
+ return ErrCannotCloseWebSocketConnection
case StaleClientCode:
return ErrStaleClient
case TcpErrorCode:
@@ -3178,6 +3644,10 @@ func FromCode(code Code) IggyError {
return ErrInvalidClientAddress
case InvalidIpAddressCode:
return ErrInvalidIpAddress
+ case HttpErrorCode:
+ return ErrHttpError
+ case InvalidApiUrlCode:
+ return ErrInvalidApiUrl
case UnauthenticatedCode:
return ErrUnauthenticated
case UnauthorizedCode:
@@ -3210,10 +3680,14 @@ func FromCode(code Code) IggyError {
return ErrPersonalAccessTokenExpired
case UsersLimitReachedCode:
return ErrUsersLimitReached
+ case InvalidPersonalAccessTokenExpiryCode:
+ return ErrInvalidPersonalAccessTokenExpiry
case TransientNotCommittedCode:
return ErrTransientNotCommitted
case TransientNotAcceptedCode:
return ErrTransientNotAccepted
+ case RequestAlreadyAppliedCode:
+ return ErrRequestAlreadyApplied
case NotConnectedCode:
return ErrNotConnected
case ClientShutdownCode:
@@ -3244,6 +3718,8 @@ func FromCode(code Code) IggyError {
return ErrAccessTokenMissing
case InvalidAccessTokenCode:
return ErrInvalidAccessToken
+ case CannotFetchJwksCode:
+ return ErrCannotFetchJwks
case InvalidSizeBytesCode:
return ErrInvalidSizeBytes
case InvalidUtf8Code:
@@ -3276,6 +3752,16 @@ func FromCode(code Code) IggyError {
return ErrCannotCreateEndpoint
case CannotParseUrlCode:
return ErrCannotParseUrl
+ case WebSocketErrorCode:
+ return ErrWebSocketError
+ case WebSocketConnectionErrorCode:
+ return ErrWebSocketConnectionError
+ case WebSocketCloseErrorCode:
+ return ErrWebSocketCloseError
+ case WebSocketReceiveErrorCode:
+ return ErrWebSocketReceiveError
+ case WebSocketSendErrorCode:
+ return ErrWebSocketSendError
case CannotCreateStreamsDirectoryCode:
return ErrCannotCreateStreamsDirectory
case CannotCreateStreamDirectoryCode:
@@ -3298,8 +3784,8 @@ func FromCode(code Code) IggyError {
return ErrStreamIdNotFound
case StreamNameNotFoundCode:
return ErrStreamNameNotFound
- case StreamIdAlreadyExistsCode:
- return ErrStreamIdAlreadyExists
+ case StreamDirectoryNotFoundCode:
+ return ErrStreamDirectoryNotFound
case StreamNameAlreadyExistsCode:
return ErrStreamNameAlreadyExists
case InvalidStreamNameCode:
@@ -3310,6 +3796,8 @@ func FromCode(code Code) IggyError {
return ErrCannotReadStreams
case InvalidTopicSizeCode:
return ErrInvalidTopicSize
+ case TooManyStreamsCode:
+ return ErrTooManyStreams
case CannotCreateTopicsDirectoryCode:
return ErrCannotCreateTopicsDirectory
case CannotCreateTopicDirectoryCode:
@@ -3334,8 +3822,6 @@ func FromCode(code Code) IggyError {
return ErrTopicIdNotFound
case TopicNameNotFoundCode:
return ErrTopicNameNotFound
- case TopicIdAlreadyExistsCode:
- return ErrTopicIdAlreadyExists
case TopicNameAlreadyExistsCode:
return ErrTopicNameAlreadyExists
case InvalidTopicNameCode:
@@ -3348,6 +3834,12 @@ func FromCode(code Code) IggyError {
return ErrCannotReadTopics
case InvalidReplicationFactorCode:
return ErrInvalidReplicationFactor
+ case InvalidPartitionsCountCode:
+ return ErrInvalidPartitionsCount
+ case TopicDirectoryNotFoundCode:
+ return ErrTopicDirectoryNotFound
+ case TooManyTopicsCode:
+ return ErrTooManyTopics
case CannotCreatePartitionCode:
return ErrCannotCreatePartition
case CannotCreatePartitionsDirectoryCode:
@@ -3378,6 +3870,12 @@ func FromCode(code Code) IggyError {
return ErrCannotReadConsumerOffsets
case ConsumerOffsetNotFoundCode:
return ErrConsumerOffsetNotFound
+ case NotResolvedConsumerCode:
+ return ErrNotResolvedConsumer
+ case CannotOpenConsumerOffsetsFileCode:
+ return ErrCannotOpenConsumerOffsetsFile
+ case PartitionIdSpaceExhaustedCode:
+ return ErrPartitionIdSpaceExhausted
case SegmentNotFoundCode:
return ErrSegmentNotFound
case SegmentClosedCode:
@@ -3454,6 +3952,18 @@ func FromCode(code Code) IggyError {
return ErrInvalidMessagesSize
case TooSmallMessageCode:
return ErrTooSmallMessage
+ case InvalidMessageTimestampDeltaCode:
+ return ErrInvalidMessageTimestampDelta
+ case InvalidBatchChecksumCode:
+ return ErrInvalidBatchChecksum
+ case InvalidHeaderKindCode:
+ return ErrInvalidHeaderKind
+ case UnsupportedOptionKeyCode:
+ return ErrUnsupportedOptionKey
+ case InvalidOptionValueCode:
+ return ErrInvalidOptionValue
+ case OptionsBlockTooLargeCode:
+ return ErrOptionsBlockTooLarge
case CannotSendMessagesDueToClientDisconnectionCode:
return ErrCannotSendMessagesDueToClientDisconnection
case BackgroundSendErrorCode:
@@ -3466,16 +3976,14 @@ func FromCode(code Code) IggyError {
return ErrBackgroundWorkerDisconnected
case BackgroundSendBufferOverflowCode:
return ErrBackgroundSendBufferOverflow
- case ProducerSendFailedCode:
- return ErrProducerSendFailed
case ProducerClosedCode:
return ErrProducerClosed
case InvalidOffsetCode:
return ErrInvalidOffset
+ case InvalidReservedFieldCode:
+ return ErrInvalidReservedField
case ConsumerGroupIdNotFoundCode:
return ErrConsumerGroupIdNotFound
- case ConsumerGroupIdAlreadyExistsCode:
- return ErrConsumerGroupIdAlreadyExists
case InvalidConsumerGroupIdCode:
return ErrInvalidConsumerGroupId
case ConsumerGroupNameNotFoundCode:
@@ -3542,6 +4050,22 @@ func FromCode(code Code) IggyError {
return ErrCannotReadIndexPosition
case CannotReadIndexTimestampCode:
return ErrCannotReadIndexTimestamp
+ case TimestampOutOfRangeCode:
+ return ErrTimestampOutOfRange
+ case ShardNotFoundCode:
+ return ErrShardNotFound
+ case ShardCommunicationErrorCode:
+ return ErrShardCommunicationError
+ case CannotBindToSocketCode:
+ return ErrCannotBindToSocket
+ case TaskTimeoutCode:
+ return ErrTaskTimeout
+ case IoErrorCode:
+ return ErrIoError
+ case AlreadyAuthenticatedCode:
+ return ErrAlreadyAuthenticated
+ case InvalidSessionCode:
+ return ErrInvalidSession
case IncompatibleProtocolVersionCode:
return ErrIncompatibleProtocolVersion
default:
diff --git a/foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/MessagesTcpClient.java b/foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/MessagesTcpClient.java
index 6873c670f..17b8bc5dd 100644
--- a/foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/MessagesTcpClient.java
+++ b/foreign/java/java-sdk/src/main/java/org/apache/iggy/client/async/tcp/MessagesTcpClient.java
@@ -254,8 +254,8 @@ public class MessagesTcpClient implements MessagesClient {
return CompletableFuture.completedFuture(emptyPolledMessages());
}
return CompletableFuture.failedFuture(new IggyResourceNotFoundException(
- IggyErrorCode.CONSUMER_GROUP_NOT_JOINED,
- IggyErrorCode.CONSUMER_GROUP_NOT_JOINED.getCode(),
+ IggyErrorCode.CONSUMER_GROUP_MEMBER_NOT_FOUND,
+ IggyErrorCode.CONSUMER_GROUP_MEMBER_NOT_FOUND.getCode(),
"Cannot poll consumer group " + consumer.id() + " for topic " + topicId + " in stream "
+ streamId + ": this client is not a member, join the group first",
Optional.empty(),
diff --git a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyAuthenticationException.java b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyAuthenticationException.java
index 247513519..c72932eee 100644
--- a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyAuthenticationException.java
+++ b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyAuthenticationException.java
@@ -36,9 +36,9 @@ public class IggyAuthenticationException extends IggyServerException {
IggyErrorCode.INVALID_CREDENTIALS,
IggyErrorCode.INVALID_USERNAME,
IggyErrorCode.INVALID_PASSWORD,
- IggyErrorCode.INVALID_PAT_TOKEN,
- IggyErrorCode.PASSWORD_DOES_NOT_MATCH,
- IggyErrorCode.PASSWORD_HASH_INTERNAL_ERROR);
+ IggyErrorCode.INVALID_PERSONAL_ACCESS_TOKEN,
+ IggyErrorCode.ACCESS_TOKEN_MISSING,
+ IggyErrorCode.INVALID_ACCESS_TOKEN);
/**
* Constructs a new IggyAuthenticationException.
diff --git a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyConflictException.java b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyConflictException.java
index 7ff6b0733..c0f97f9c7 100644
--- a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyConflictException.java
+++ b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyConflictException.java
@@ -33,11 +33,10 @@ public class IggyConflictException extends IggyServerException {
private static final Set<IggyErrorCode> CODES = EnumSet.of(
IggyErrorCode.USER_ALREADY_EXISTS,
- IggyErrorCode.CLIENT_ALREADY_EXISTS,
- IggyErrorCode.STREAM_ALREADY_EXISTS,
- IggyErrorCode.TOPIC_ALREADY_EXISTS,
- IggyErrorCode.CONSUMER_GROUP_ALREADY_EXISTS,
- IggyErrorCode.PAT_NAME_ALREADY_EXISTS);
+ IggyErrorCode.PERSONAL_ACCESS_TOKEN_ALREADY_EXISTS,
+ IggyErrorCode.STREAM_NAME_ALREADY_EXISTS,
+ IggyErrorCode.TOPIC_NAME_ALREADY_EXISTS,
+ IggyErrorCode.CONSUMER_GROUP_NAME_ALREADY_EXISTS);
/**
* Constructs a new IggyConflictException.
diff --git a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyErrorCode.java b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyErrorCode.java
index 3780efc31..80e729572 100644
--- a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyErrorCode.java
+++ b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyErrorCode.java
@@ -36,14 +36,8 @@ public enum IggyErrorCode {
INVALID_FORMAT(4),
FEATURE_UNAVAILABLE(5),
INVALID_IDENTIFIER(6),
- CANNOT_PARSE_INT(7),
- CANNOT_PARSE_SLICE(8),
- CANNOT_PARSE_UTF8(9),
- STALE_CLIENT(30),
-
- // Resource errors
RESOURCE_NOT_FOUND(20),
- CANNOT_LOAD_RESOURCE(100),
+ STALE_CLIENT(30),
// Authentication/Authorization errors
UNAUTHENTICATED(40),
@@ -51,60 +45,74 @@ public enum IggyErrorCode {
INVALID_CREDENTIALS(42),
INVALID_USERNAME(43),
INVALID_PASSWORD(44),
- CLEAR_TEXT_PASSWORD_REQUIRED(45),
+ INVALID_USER_STATUS(45),
USER_ALREADY_EXISTS(46),
USER_INACTIVE(47),
- CANNOT_DELETE_USER_WITH_ACTIVE_PAT(48),
- CANNOT_UPDATE_OWN_PERMISSIONS(49),
- CANNOT_DELETE_YOURSELF(50),
- CLIENT_ALREADY_EXISTS(51),
- CLIENT_NOT_FOUND(52),
- INVALID_PAT_TOKEN(53),
- PAT_NAME_ALREADY_EXISTS(54),
+ CANNOT_DELETE_USER(48),
+ CANNOT_CHANGE_PERMISSIONS(49),
+ INVALID_PERSONAL_ACCESS_TOKEN_NAME(50),
+ PERSONAL_ACCESS_TOKEN_ALREADY_EXISTS(51),
+ PERSONAL_ACCESS_TOKENS_LIMIT_REACHED(52),
+ INVALID_PERSONAL_ACCESS_TOKEN(53),
+ PERSONAL_ACCESS_TOKEN_EXPIRED(54),
TRANSIENT_NOT_COMMITTED(57),
TRANSIENT_NOT_ACCEPTED(58),
- PASSWORD_DOES_NOT_MATCH(77),
- PASSWORD_HASH_INTERNAL_ERROR(78),
+ ACCESS_TOKEN_MISSING(77),
+ INVALID_ACCESS_TOKEN(78),
+
+ // Wire decoding errors
+ INVALID_SIZE_BYTES(80),
+ INVALID_UTF8(81),
+ INVALID_NUMBER_ENCODING(82),
+ INVALID_BOOLEAN_VALUE(83),
+ INVALID_NUMBER_VALUE(84),
+
+ // Client errors
+ CLIENT_NOT_FOUND(100),
// Stream errors
+ CANNOT_CREATE_STREAM_DIRECTORY(1001),
STREAM_ID_NOT_FOUND(1009),
STREAM_NAME_NOT_FOUND(1010),
- STREAM_ALREADY_EXISTS(1012),
+ STREAM_NAME_ALREADY_EXISTS(1012),
INVALID_STREAM_NAME(1013),
- CANNOT_CREATE_STREAM_DIRECTORY(1014),
+ INVALID_STREAM_ID(1014),
+ TOO_MANY_STREAMS(1020),
// Topic errors
+ CANNOT_CREATE_TOPIC_DIRECTORY(2001),
TOPIC_ID_NOT_FOUND(2010),
TOPIC_NAME_NOT_FOUND(2011),
- TOPICS_COUNT_EXCEEDED(2012),
- TOPIC_ALREADY_EXISTS(2013),
+ TOPIC_NAME_ALREADY_EXISTS(2013),
INVALID_TOPIC_NAME(2014),
- INVALID_REPLICATION_FACTOR(2015),
- CANNOT_CREATE_TOPIC_DIRECTORY(2016),
+ TOO_MANY_PARTITIONS(2015),
+ INVALID_TOPIC_ID(2016),
+ INVALID_REPLICATION_FACTOR(2018),
+ TOO_MANY_TOPICS(2021),
// Partition errors
PARTITION_NOT_FOUND(3007),
-
- // Consumer group errors
- CONSUMER_GROUP_ID_NOT_FOUND(5000),
- CONSUMER_GROUP_MEMBER_NOT_FOUND(5002),
- CONSUMER_GROUP_NAME_NOT_FOUND(5003),
- CONSUMER_GROUP_ALREADY_EXISTS(5004),
- INVALID_CONSUMER_GROUP_NAME(5005),
- CONSUMER_GROUP_NOT_JOINED(5006),
+ PARTITION_ID_SPACE_EXHAUSTED(3013),
// Segment errors
SEGMENT_NOT_FOUND(4000),
SEGMENT_CLOSED(4001),
- CANNOT_READ_SEGMENT(4002),
- CANNOT_SAVE_SEGMENT(4003),
+ INVALID_SEGMENT_SIZE(4002),
+ CANNOT_CREATE_SEGMENT_LOG_FILE(4003),
// Message errors
- TOO_MANY_MESSAGES(7000),
- EMPTY_MESSAGES(7001),
- TOO_BIG_MESSAGE(7002),
- INVALID_MESSAGE_CHECKSUM(7003),
- MESSAGE_NOT_FOUND(7004),
+ TOO_BIG_MESSAGE_PAYLOAD(4022),
+ TOO_MANY_MESSAGES(4023),
+ EMPTY_MESSAGE_PAYLOAD(4024),
+ INVALID_MESSAGE_CHECKSUM(4027),
+
+ // Consumer group errors
+ CONSUMER_GROUP_ID_NOT_FOUND(5000),
+ INVALID_CONSUMER_GROUP_ID(5002),
+ CONSUMER_GROUP_NAME_NOT_FOUND(5003),
+ CONSUMER_GROUP_NAME_ALREADY_EXISTS(5004),
+ INVALID_CONSUMER_GROUP_NAME(5005),
+ CONSUMER_GROUP_MEMBER_NOT_FOUND(5006),
// VSR protocol errors
INCOMPATIBLE_PROTOCOL_VERSION(14003),
diff --git a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyResourceNotFoundException.java b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyResourceNotFoundException.java
index 1f5ac25e1..aa2f80c42 100644
--- a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyResourceNotFoundException.java
+++ b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyResourceNotFoundException.java
@@ -33,7 +33,6 @@ public class IggyResourceNotFoundException extends IggyServerException {
private static final Set<IggyErrorCode> CODES = EnumSet.of(
IggyErrorCode.RESOURCE_NOT_FOUND,
- IggyErrorCode.CANNOT_LOAD_RESOURCE,
IggyErrorCode.STREAM_ID_NOT_FOUND,
IggyErrorCode.STREAM_NAME_NOT_FOUND,
IggyErrorCode.TOPIC_ID_NOT_FOUND,
@@ -43,8 +42,7 @@ public class IggyResourceNotFoundException extends IggyServerException {
IggyErrorCode.CLIENT_NOT_FOUND,
IggyErrorCode.CONSUMER_GROUP_ID_NOT_FOUND,
IggyErrorCode.CONSUMER_GROUP_NAME_NOT_FOUND,
- IggyErrorCode.CONSUMER_GROUP_NOT_JOINED,
- IggyErrorCode.MESSAGE_NOT_FOUND);
+ IggyErrorCode.CONSUMER_GROUP_MEMBER_NOT_FOUND);
/**
* Constructs a new IggyResourceNotFoundException.
diff --git a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyValidationException.java b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyValidationException.java
index 02ae07975..7ed3814f1 100644
--- a/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyValidationException.java
+++ b/foreign/java/java-sdk/src/main/java/org/apache/iggy/exception/IggyValidationException.java
@@ -36,19 +36,20 @@ public class IggyValidationException extends IggyServerException {
IggyErrorCode.INVALID_FORMAT,
IggyErrorCode.FEATURE_UNAVAILABLE,
IggyErrorCode.INVALID_IDENTIFIER,
- IggyErrorCode.CANNOT_PARSE_INT,
- IggyErrorCode.CANNOT_PARSE_SLICE,
- IggyErrorCode.CANNOT_PARSE_UTF8,
+ IggyErrorCode.INVALID_NUMBER_ENCODING,
+ IggyErrorCode.INVALID_SIZE_BYTES,
+ IggyErrorCode.INVALID_UTF8,
IggyErrorCode.INVALID_STREAM_NAME,
IggyErrorCode.CANNOT_CREATE_STREAM_DIRECTORY,
IggyErrorCode.INVALID_TOPIC_NAME,
+ IggyErrorCode.INVALID_TOPIC_ID,
IggyErrorCode.INVALID_REPLICATION_FACTOR,
IggyErrorCode.CANNOT_CREATE_TOPIC_DIRECTORY,
IggyErrorCode.CONSUMER_GROUP_MEMBER_NOT_FOUND,
IggyErrorCode.INVALID_CONSUMER_GROUP_NAME,
IggyErrorCode.TOO_MANY_MESSAGES,
- IggyErrorCode.EMPTY_MESSAGES,
- IggyErrorCode.TOO_BIG_MESSAGE,
+ IggyErrorCode.EMPTY_MESSAGE_PAYLOAD,
+ IggyErrorCode.TOO_BIG_MESSAGE_PAYLOAD,
IggyErrorCode.INVALID_MESSAGE_CHECKSUM);
/**
diff --git a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyAuthenticationExceptionTest.java b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyAuthenticationExceptionTest.java
index 4383c92dc..fbc2c7181 100644
--- a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyAuthenticationExceptionTest.java
+++ b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyAuthenticationExceptionTest.java
@@ -50,9 +50,9 @@ class IggyAuthenticationExceptionTest {
"INVALID_CREDENTIALS",
"INVALID_USERNAME",
"INVALID_PASSWORD",
- "INVALID_PAT_TOKEN",
- "PASSWORD_DOES_NOT_MATCH",
- "PASSWORD_HASH_INTERNAL_ERROR"
+ "INVALID_PERSONAL_ACCESS_TOKEN",
+ "ACCESS_TOKEN_MISSING",
+ "INVALID_ACCESS_TOKEN"
})
void matchesReturnsTrueForAuthenticationRelatedCodes(IggyErrorCode code) {
assertThat(IggyAuthenticationException.matches(code)).isTrue();
@@ -66,9 +66,9 @@ class IggyAuthenticationExceptionTest {
"INVALID_CREDENTIALS",
"INVALID_USERNAME",
"INVALID_PASSWORD",
- "INVALID_PAT_TOKEN",
- "PASSWORD_DOES_NOT_MATCH",
- "PASSWORD_HASH_INTERNAL_ERROR"
+ "INVALID_PERSONAL_ACCESS_TOKEN",
+ "ACCESS_TOKEN_MISSING",
+ "INVALID_ACCESS_TOKEN"
},
mode = Mode.EXCLUDE)
void matchesReturnsFalseForNonAuthenticationRelatedCodes(IggyErrorCode code) {
diff --git a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyConflictExceptionTest.java b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyConflictExceptionTest.java
index 36e22f945..93b1842c2 100644
--- a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyConflictExceptionTest.java
+++ b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyConflictExceptionTest.java
@@ -47,11 +47,10 @@ class IggyConflictExceptionTest {
value = IggyErrorCode.class,
names = {
"USER_ALREADY_EXISTS",
- "CLIENT_ALREADY_EXISTS",
- "STREAM_ALREADY_EXISTS",
- "TOPIC_ALREADY_EXISTS",
- "CONSUMER_GROUP_ALREADY_EXISTS",
- "PAT_NAME_ALREADY_EXISTS"
+ "PERSONAL_ACCESS_TOKEN_ALREADY_EXISTS",
+ "STREAM_NAME_ALREADY_EXISTS",
+ "TOPIC_NAME_ALREADY_EXISTS",
+ "CONSUMER_GROUP_NAME_ALREADY_EXISTS"
})
void matchesReturnsTrueForConflictRelatedCodes(IggyErrorCode code) {
assertThat(IggyConflictException.matches(code)).isTrue();
@@ -62,11 +61,10 @@ class IggyConflictExceptionTest {
value = IggyErrorCode.class,
names = {
"USER_ALREADY_EXISTS",
- "CLIENT_ALREADY_EXISTS",
- "STREAM_ALREADY_EXISTS",
- "TOPIC_ALREADY_EXISTS",
- "CONSUMER_GROUP_ALREADY_EXISTS",
- "PAT_NAME_ALREADY_EXISTS"
+ "PERSONAL_ACCESS_TOKEN_ALREADY_EXISTS",
+ "STREAM_NAME_ALREADY_EXISTS",
+ "TOPIC_NAME_ALREADY_EXISTS",
+ "CONSUMER_GROUP_NAME_ALREADY_EXISTS"
},
mode = Mode.EXCLUDE)
void matchesReturnsFalseForNonConflictRelatedCodes(IggyErrorCode code) {
diff --git a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyErrorCodeTest.java b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyErrorCodeTest.java
index 97e60579e..3d87877c6 100644
--- a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyErrorCodeTest.java
+++ b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyErrorCodeTest.java
@@ -158,14 +158,8 @@ class IggyErrorCodeTest {
"4, INVALID_FORMAT",
"5, FEATURE_UNAVAILABLE",
"6, INVALID_IDENTIFIER",
- "7, CANNOT_PARSE_INT",
- "8, CANNOT_PARSE_SLICE",
- "9, CANNOT_PARSE_UTF8",
- "30, STALE_CLIENT",
-
- // Resource errors
"20, RESOURCE_NOT_FOUND",
- "100, CANNOT_LOAD_RESOURCE",
+ "30, STALE_CLIENT",
// Authentication/Authorization errors
"40, UNAUTHENTICATED",
@@ -173,60 +167,74 @@ class IggyErrorCodeTest {
"42, INVALID_CREDENTIALS",
"43, INVALID_USERNAME",
"44, INVALID_PASSWORD",
- "45, CLEAR_TEXT_PASSWORD_REQUIRED",
+ "45, INVALID_USER_STATUS",
"46, USER_ALREADY_EXISTS",
"47, USER_INACTIVE",
- "48, CANNOT_DELETE_USER_WITH_ACTIVE_PAT",
- "49, CANNOT_UPDATE_OWN_PERMISSIONS",
- "50, CANNOT_DELETE_YOURSELF",
- "51, CLIENT_ALREADY_EXISTS",
- "52, CLIENT_NOT_FOUND",
- "53, INVALID_PAT_TOKEN",
- "54, PAT_NAME_ALREADY_EXISTS",
+ "48, CANNOT_DELETE_USER",
+ "49, CANNOT_CHANGE_PERMISSIONS",
+ "50, INVALID_PERSONAL_ACCESS_TOKEN_NAME",
+ "51, PERSONAL_ACCESS_TOKEN_ALREADY_EXISTS",
+ "52, PERSONAL_ACCESS_TOKENS_LIMIT_REACHED",
+ "53, INVALID_PERSONAL_ACCESS_TOKEN",
+ "54, PERSONAL_ACCESS_TOKEN_EXPIRED",
"57, TRANSIENT_NOT_COMMITTED",
"58, TRANSIENT_NOT_ACCEPTED",
- "77, PASSWORD_DOES_NOT_MATCH",
- "78, PASSWORD_HASH_INTERNAL_ERROR",
+ "77, ACCESS_TOKEN_MISSING",
+ "78, INVALID_ACCESS_TOKEN",
+
+ // Wire decoding errors
+ "80, INVALID_SIZE_BYTES",
+ "81, INVALID_UTF8",
+ "82, INVALID_NUMBER_ENCODING",
+ "83, INVALID_BOOLEAN_VALUE",
+ "84, INVALID_NUMBER_VALUE",
+
+ // Client errors
+ "100, CLIENT_NOT_FOUND",
// Stream errors
+ "1001, CANNOT_CREATE_STREAM_DIRECTORY",
"1009, STREAM_ID_NOT_FOUND",
"1010, STREAM_NAME_NOT_FOUND",
- "1012, STREAM_ALREADY_EXISTS",
+ "1012, STREAM_NAME_ALREADY_EXISTS",
"1013, INVALID_STREAM_NAME",
- "1014, CANNOT_CREATE_STREAM_DIRECTORY",
+ "1014, INVALID_STREAM_ID",
+ "1020, TOO_MANY_STREAMS",
// Topic errors
+ "2001, CANNOT_CREATE_TOPIC_DIRECTORY",
"2010, TOPIC_ID_NOT_FOUND",
"2011, TOPIC_NAME_NOT_FOUND",
- "2012, TOPICS_COUNT_EXCEEDED",
- "2013, TOPIC_ALREADY_EXISTS",
+ "2013, TOPIC_NAME_ALREADY_EXISTS",
"2014, INVALID_TOPIC_NAME",
- "2015, INVALID_REPLICATION_FACTOR",
- "2016, CANNOT_CREATE_TOPIC_DIRECTORY",
+ "2015, TOO_MANY_PARTITIONS",
+ "2016, INVALID_TOPIC_ID",
+ "2018, INVALID_REPLICATION_FACTOR",
+ "2021, TOO_MANY_TOPICS",
// Partition errors
"3007, PARTITION_NOT_FOUND",
-
- // Consumer group errors
- "5000, CONSUMER_GROUP_ID_NOT_FOUND",
- "5002, CONSUMER_GROUP_MEMBER_NOT_FOUND",
- "5003, CONSUMER_GROUP_NAME_NOT_FOUND",
- "5004, CONSUMER_GROUP_ALREADY_EXISTS",
- "5005, INVALID_CONSUMER_GROUP_NAME",
- "5006, CONSUMER_GROUP_NOT_JOINED",
+ "3013, PARTITION_ID_SPACE_EXHAUSTED",
// Segment errors
"4000, SEGMENT_NOT_FOUND",
"4001, SEGMENT_CLOSED",
- "4002, CANNOT_READ_SEGMENT",
- "4003, CANNOT_SAVE_SEGMENT",
+ "4002, INVALID_SEGMENT_SIZE",
+ "4003, CANNOT_CREATE_SEGMENT_LOG_FILE",
// Message errors
- "7000, TOO_MANY_MESSAGES",
- "7001, EMPTY_MESSAGES",
- "7002, TOO_BIG_MESSAGE",
- "7003, INVALID_MESSAGE_CHECKSUM",
- "7004, MESSAGE_NOT_FOUND",
+ "4022, TOO_BIG_MESSAGE_PAYLOAD",
+ "4023, TOO_MANY_MESSAGES",
+ "4024, EMPTY_MESSAGE_PAYLOAD",
+ "4027, INVALID_MESSAGE_CHECKSUM",
+
+ // Consumer group errors
+ "5000, CONSUMER_GROUP_ID_NOT_FOUND",
+ "5002, INVALID_CONSUMER_GROUP_ID",
+ "5003, CONSUMER_GROUP_NAME_NOT_FOUND",
+ "5004, CONSUMER_GROUP_NAME_ALREADY_EXISTS",
+ "5005, INVALID_CONSUMER_GROUP_NAME",
+ "5006, CONSUMER_GROUP_MEMBER_NOT_FOUND",
// VSR protocol errors
"14003, INCOMPATIBLE_PROTOCOL_VERSION",
diff --git a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyResourceNotFoundExceptionTest.java b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyResourceNotFoundExceptionTest.java
index e64129177..2cb9c9758 100644
--- a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyResourceNotFoundExceptionTest.java
+++ b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyResourceNotFoundExceptionTest.java
@@ -47,7 +47,6 @@ class IggyResourceNotFoundExceptionTest {
value = IggyErrorCode.class,
names = {
"RESOURCE_NOT_FOUND",
- "CANNOT_LOAD_RESOURCE",
"STREAM_ID_NOT_FOUND",
"STREAM_NAME_NOT_FOUND",
"TOPIC_ID_NOT_FOUND",
@@ -57,8 +56,7 @@ class IggyResourceNotFoundExceptionTest {
"CLIENT_NOT_FOUND",
"CONSUMER_GROUP_ID_NOT_FOUND",
"CONSUMER_GROUP_NAME_NOT_FOUND",
- "CONSUMER_GROUP_NOT_JOINED",
- "MESSAGE_NOT_FOUND"
+ "CONSUMER_GROUP_MEMBER_NOT_FOUND",
})
void matchesReturnsTrueForResourceNotFoundRelatedCodes(IggyErrorCode code) {
assertThat(IggyResourceNotFoundException.matches(code)).isTrue();
@@ -69,7 +67,6 @@ class IggyResourceNotFoundExceptionTest {
value = IggyErrorCode.class,
names = {
"RESOURCE_NOT_FOUND",
- "CANNOT_LOAD_RESOURCE",
"STREAM_ID_NOT_FOUND",
"STREAM_NAME_NOT_FOUND",
"TOPIC_ID_NOT_FOUND",
@@ -79,8 +76,7 @@ class IggyResourceNotFoundExceptionTest {
"CLIENT_NOT_FOUND",
"CONSUMER_GROUP_ID_NOT_FOUND",
"CONSUMER_GROUP_NAME_NOT_FOUND",
- "CONSUMER_GROUP_NOT_JOINED",
- "MESSAGE_NOT_FOUND"
+ "CONSUMER_GROUP_MEMBER_NOT_FOUND",
},
mode = Mode.EXCLUDE)
void matchesReturnsFalseForNonResourceNotFoundRelatedCodes(IggyErrorCode code) {
diff --git a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyValidationExceptionTest.java b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyValidationExceptionTest.java
index c0e3e12b2..51f5f7a49 100644
--- a/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyValidationExceptionTest.java
+++ b/foreign/java/java-sdk/src/test/java/org/apache/iggy/exception/IggyValidationExceptionTest.java
@@ -50,19 +50,20 @@ class IggyValidationExceptionTest {
"INVALID_FORMAT",
"FEATURE_UNAVAILABLE",
"INVALID_IDENTIFIER",
- "CANNOT_PARSE_INT",
- "CANNOT_PARSE_SLICE",
- "CANNOT_PARSE_UTF8",
+ "INVALID_NUMBER_ENCODING",
+ "INVALID_SIZE_BYTES",
+ "INVALID_UTF8",
"INVALID_STREAM_NAME",
"CANNOT_CREATE_STREAM_DIRECTORY",
"INVALID_TOPIC_NAME",
+ "INVALID_TOPIC_ID",
"INVALID_REPLICATION_FACTOR",
"CANNOT_CREATE_TOPIC_DIRECTORY",
"CONSUMER_GROUP_MEMBER_NOT_FOUND",
"INVALID_CONSUMER_GROUP_NAME",
"TOO_MANY_MESSAGES",
- "EMPTY_MESSAGES",
- "TOO_BIG_MESSAGE",
+ "EMPTY_MESSAGE_PAYLOAD",
+ "TOO_BIG_MESSAGE_PAYLOAD",
"INVALID_MESSAGE_CHECKSUM"
})
void matchesReturnsTrueForValidationRelatedCodes(IggyErrorCode code) {
@@ -77,19 +78,20 @@ class IggyValidationExceptionTest {
"INVALID_FORMAT",
"FEATURE_UNAVAILABLE",
"INVALID_IDENTIFIER",
- "CANNOT_PARSE_INT",
- "CANNOT_PARSE_SLICE",
- "CANNOT_PARSE_UTF8",
+ "INVALID_NUMBER_ENCODING",
+ "INVALID_SIZE_BYTES",
+ "INVALID_UTF8",
"INVALID_STREAM_NAME",
"CANNOT_CREATE_STREAM_DIRECTORY",
"INVALID_TOPIC_NAME",
+ "INVALID_TOPIC_ID",
"INVALID_REPLICATION_FACTOR",
"CANNOT_CREATE_TOPIC_DIRECTORY",
"CONSUMER_GROUP_MEMBER_NOT_FOUND",
"INVALID_CONSUMER_GROUP_NAME",
"TOO_MANY_MESSAGES",
- "EMPTY_MESSAGES",
- "TOO_BIG_MESSAGE",
+ "EMPTY_MESSAGE_PAYLOAD",
+ "TOO_BIG_MESSAGE_PAYLOAD",
"INVALID_MESSAGE_CHECKSUM"
},
mode = Mode.EXCLUDE)
diff --git a/foreign/node/src/wire/error.code.test.ts b/foreign/node/src/wire/error.code.test.ts
index 68426929c..680d91be2 100644
--- a/foreign/node/src/wire/error.code.test.ts
+++ b/foreign/node/src/wire/error.code.test.ts
@@ -20,21 +20,36 @@ import { it } from 'node:test';
import { translateErrorCode } from './error.code.js';
it('translates the consumer-group error range', () => {
- assert.equal(translateErrorCode(5000), 'Consumer group ID not found');
+ assert.equal(
+ translateErrorCode(5000),
+ 'Consumer group with ID: {0} for topic with ID: {1} was not found.'
+ );
assert.equal(translateErrorCode(5001), 'error');
assert.equal(translateErrorCode(5002), 'Invalid consumer group ID');
- assert.equal(translateErrorCode(5003), 'Consumer group name not found');
+ assert.equal(
+ translateErrorCode(5003),
+ 'Consumer group with name: {0} for topic with ID: {1} was not found.'
+ );
assert.equal(
translateErrorCode(5004),
- 'Consumer group name already exists'
+ 'Consumer group with name: {0} for topic with ID: {1} already exists.'
);
assert.equal(translateErrorCode(5005), 'Invalid consumer group name');
- assert.equal(translateErrorCode(5006), 'Consumer group member not found');
- assert.equal(translateErrorCode(5007), 'Cannot create consumer group info');
- assert.equal(translateErrorCode(5008), 'Cannot delete consumer group info');
+ assert.equal(
+ translateErrorCode(5006),
+ 'Consumer group member with client ID: {0} for group with ID: {1} for topic with ID: {2} was not found.'
+ );
+ assert.equal(
+ translateErrorCode(5007),
+ 'Failed to create consumer group info file for ID: {0} for topic with ID: {1} for stream with ID: {2}.'
+ );
+ assert.equal(
+ translateErrorCode(5008),
+ 'Failed to delete consumer group info file for ID: {0} for topic with ID: {1} for stream with ID: {2}.'
+ );
assert.equal(
translateErrorCode(5009),
- 'Consumer group partition not owned'
+ 'Consumer group member with client ID: {0} does not own partition: {1} at the current generation (rebalance in progress).'
);
assert.equal(translateErrorCode(5010), 'error');
});
diff --git a/foreign/node/src/wire/error.code.ts b/foreign/node/src/wire/error.code.ts
index 7ccb0a9dc..8c542c1d9 100644
--- a/foreign/node/src/wire/error.code.ts
+++ b/foreign/node/src/wire/error.code.ts
@@ -36,11 +36,15 @@ export const translateErrorCode = (code: number): string => {
case '16': return "Invalid state entry checksum: {0}, expected: {1}, for index: {2}";
case '19': return "Cannot open database, Path: {0}";
case '20': return "Resource with key: {0} was not found.";
+ case '21': return "Cannot close WebSocket connection";
case '30': return "Stale client";
case '31': return "TCP error";
case '32': return "QUIC error";
case '33': return "Invalid server address";
case '34': return "Invalid client address";
+ case '35': return "Invalid IP address: {0}:{1}";
+ case '36': return "Http error {0}";
+ case '37': return "Invalid API URL: {0}";
case '40': return "Unauthenticated";
case '41': return "Unauthorized";
case '42': return "Invalid credentials";
@@ -57,6 +61,10 @@ export const translateErrorCode = (code: number): string => {
case '53': return "Invalid personal access token";
case '54': return "Personal access token: {0} for user with ID: {1} has expired.";
case '55': return "Users limit reached.";
+ case '56': return "Invalid personal access token expiry";
+ case '57': return "Request transiently not committed; retry";
+ case '58': return "Request transiently not accepted; retry, on any replica";
+ case '59': return "Request already applied; its reply is no longer available";
case '61': return "Not connected";
case '63': return "Client shutdown";
case '64': return "Invalid TLS domain";
@@ -72,6 +80,7 @@ export const translateErrorCode = (code: number): string => {
case '76': return "Cannot generate JWT";
case '77': return "Access token is missing";
case '78': return "Invalid access token";
+ case '79': return "Cannot fetch JWKS from URL: {0}";
case '80': return "Invalid size bytes";
case '81': return "Invalid UTF-8";
case '82': return "Invalid number encoding";
@@ -90,6 +99,11 @@ export const translateErrorCode = (code: number): string => {
case '304': return "Empty response";
case '305': return "Cannot create endpoint";
case '306': return "Cannot parse URL";
+ case '400': return "WebSocket error";
+ case '401': return "WebSocket connection error";
+ case '402': return "WebSocket close error";
+ case '403': return "WebSocket receive error";
+ case '404': return "WebSocket send error";
// STREAM
case '1000': return "Cannot create streams directory, Path: {0}";
@@ -103,15 +117,13 @@ export const translateErrorCode = (code: number): string => {
case '1008': return "Failed to delete stream directory with ID: {0}";
case '1009': return "Stream with ID: {0} was not found.";
case '1010': return "Stream with name: {0} was not found.";
- case '1011': return "Stream with ID: {0} already exists.";
+ case '1011': return "Stream with directory {0} was not found.";
case '1012': return "Stream with name: {0} already exists.";
case '1013': return "Invalid stream name";
case '1014': return "Invalid stream ID";
case '1015': return "Cannot read streams";
- case '1016': return "Missing streams";
- case '1017': return "Missing topics for stream with ID: {0}";
- case '1018': return "Missing partitions for topic with ID: {0} for stream with ID: {1}.";
case '1019': return "Max topic size cannot be lower than segment size. Max topic size: {0} < segment size: {1}.";
+ case '1020': return "Too many streams";
case '2000': return "Cannot create topics directory for stream with ID: {0}, Path: {1}";
@@ -126,13 +138,15 @@ export const translateErrorCode = (code: number): string => {
case '2009': return "Cannot poll topic";
case '2010': return "Topic with ID: {0} for stream with ID: {1} was not found.";
case '2011': return "Topic with name: {0} for stream with ID: {1} was not found.";
- case '2012': return "Topic with ID: {0} for stream with ID: {1} already exists.";
case '2013': return "Topic with name: {0} for stream with ID: {1} already exists.";
case '2014': return "Invalid topic name";
case '2015': return "Too many partitions";
case '2016': return "Invalid topic ID";
case '2017': return "Cannot read topics for stream with ID: {0}";
case '2018': return "Invalid replication factor";
+ case '2019': return "Invalid partitions count";
+ case '2020': return "Topic directory: {0} not found";
+ case '2021': return "Too many topics";
// TOPIC
case '3000': return "Cannot create partition with ID: {0} for stream with ID: {1} and topic with ID: {2}";
@@ -150,6 +164,9 @@ export const translateErrorCode = (code: number): string => {
case '3012': return "Failed to create consumer offsets directory for path: {0}";
case '3020': return "Failed to read consumers offsets from path: {0}";
case '3021': return "Consumer offset for consumer with ID: {0} was not found.";
+ case '3022': return "Failed to resolve consumer with ID: {0}";
+ case '3023': return "Cannot open consumer offsets file for path: {0}";
+ case '3013': return "Partition id space exhausted for this topic";
// MESSAGE
case '4000': return "Segment not found";
@@ -180,18 +197,76 @@ export const translateErrorCode = (code: number): string => {
case '4025': return "Invalid message payload length";
case '4026': return "Cannot read message checksum";
case '4027': return "Invalid message checksum: {0}, expected: {1}, for offset: {2}";
- case '4028': return "Cannot append message to segment at offset: {0}";
+ case '4028': return "Invalid key value length";
+ case '4029': return "Command length error: {0}";
+ case '4030': return "Incorrect Segments Count size: {0}";
+ case '4031': return "Non-zero offset: {0} at index: {1}";
+ case '4032': return "Non-zero timestamp: {0} at index: {1}";
+ case '4033': return "Missing index: {0}";
+ case '4034': return "Invalid indexes byte size: {0}B, should be divisible by 16";
+ case '4035': return "Invalid indexes count: {0}, expected: {1}";
+ case '4036': return "Invalid messages byte size: {0}B, expected: {1}B";
+ case '4037': return "Too small message: {0}B, expected: {1}B";
+ case '4038': return "Invalid message timestamp delta: {0} microseconds exceeds the per-batch limit";
+ case '4039': return "Invalid batch checksum: {0}, expected: {1}, for base offset: {2}";
+ case '4040': return "Invalid header kind code: {0}";
+ case '4041': return "Unsupported option key: {0}";
+ case '4042': return "Invalid option value for key: {0}";
+ case '4043': return "Options block exceeds its limits: {0}";
+ case '4050': return "Cannot sed messages due to client disconnection";
+ case '4051': return "Background send error";
+ case '4052': return "Background send timeout";
+ case '4053': return "Background send buffer is full";
+ case '4054': return "Background worker disconnected";
+ case '4055': return "Background send buffer overflow";
+ case '4057': return "Producer closed";
+ case '4100': return "Invalid offset: {0}";
+ case '4101': return "Invalid reserved field value: {0}, expected: 0";
// CONSUMER GROUP
- case '5000': return "Consumer group ID not found";
+ case '5000': return "Consumer group with ID: {0} for topic with ID: {1} was not found.";
case '5002': return "Invalid consumer group ID";
- case '5003': return "Consumer group name not found";
- case '5004': return "Consumer group name already exists";
+ case '5003': return "Consumer group with name: {0} for topic with ID: {1} was not found.";
+ case '5004': return "Consumer group with name: {0} for topic with ID: {1} already exists.";
case '5005': return "Invalid consumer group name";
- case '5006': return "Consumer group member not found";
- case '5007': return "Cannot create consumer group info";
- case '5008': return "Cannot delete consumer group info";
- case '5009': return "Consumer group partition not owned";
+ case '5006': return "Consumer group member with client ID: {0} for group with ID: {1} for topic with ID: {2} was not found.";
+ case '5007': return "Failed to create consumer group info file for ID: {0} for topic with ID: {1} for stream with ID: {2}.";
+ case '5008': return "Failed to delete consumer group info file for ID: {0} for topic with ID: {1} for stream with ID: {2}.";
+ case '5009': return "Consumer group member with client ID: {0} does not own partition: {1} at the current generation (rebalance in progress).";
+ case '6000': return "Base offset is missing";
+ case '6001': return "Last offset delta is missing";
+ case '6002': return "Max timestamp is missing";
+ case '6003': return "Length is missing";
+ case '6004': return "Payload is missing";
+ case '7000': return "Cannot read batch base offset";
+ case '7001': return "Cannot read batch length";
+ case '7002': return "Cannot read batch last offset delta";
+ case '7003': return "Cannot read batch maximum timestamp";
+ case '7004': return "Cannot read batch payload";
+ case '8000': return "Invalid connection string";
+ case '9000': return "Snapshot file completion failed";
+ case '10000': return "Cannot serialize resource";
+ case '10001': return "Cannot deserialize resource";
+ case '10002': return "Cannot read file";
+ case '10003': return "Cannot read file metadata";
+ case '10004': return "Cannot seek file";
+ case '10005': return "Cannot append to file";
+ case '10006': return "Cannot write to file";
+ case '10007': return "Cannot overwrite file";
+ case '10008': return "Cannot delete file";
+ case '10009': return "Cannot sync file";
+ case '10010': return "Cannot read index offset";
+ case '10011': return "Cannot read index position";
+ case '10012': return "Cannot read index timestamp";
+ case '10013': return "Timestamp out of range: {0}";
+ case '11000': return "Shard not found for stream ID: {0}, topic ID: {1}, partition ID: {2}";
+ case '11001': return "Shard communication error";
+ case '12000': return "Cannot bind to socket with addr: {0}";
+ case '12001': return "Task execution timeout";
+ case '13000': return "IO error: {0}";
+ case '14000': return "VSR session already bound; reset before re-binding";
+ case '14001': return "VSR session value {0} is invalid (must be non-zero)";
+ case '14003': return "Incompatible binary protocol version: client {}, server accepts [{}, {}]";
default: return 'error';
}
diff --git a/foreign/node/src/wire/message/poll-messages.command.test.ts b/foreign/node/src/wire/message/poll-messages.command.test.ts
index 02bee6f04..f396e4539 100644
--- a/foreign/node/src/wire/message/poll-messages.command.test.ts
+++ b/foreign/node/src/wire/message/poll-messages.command.test.ts
@@ -120,7 +120,7 @@ describe('VSR consumer-group polling', () => {
(error: unknown) =>
error instanceof ResponseError &&
error.errorCode === 5006 &&
- error.message.includes('message: Consumer group member not found')
+ error.message.includes('message: Consumer group member with client ID:')
);
});