Skip to content

Commit d5edb19

Browse files
committed
Fix for reconnect of TransactionMetaStoreHandler #285
1 parent 18c68d4 commit d5edb19

File tree

10 files changed

+31
-25
lines changed

10 files changed

+31
-25
lines changed

examples/CsharpExamples/CsharpExamples.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.0" />
99
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.7.0" />
1010
<PackageReference Include="OpenTelemetry" Version="1.7.0" />
11-
<PackageReference Include="Pulsar.Client" Version="3.1.0" />
11+
<PackageReference Include="Pulsar.Client" Version="3.6.1" />
1212
<PackageReference Include="Pulsar.Client.Otel" Version="0.1.2" />
1313
</ItemGroup>
1414
</Project>

examples/FsharpExamples/FsharpExamples.fsproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.0" />
2020
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.7.0" />
2121
<PackageReference Include="OpenTelemetry" Version="1.7.0" />
22-
<PackageReference Include="Pulsar.Client" Version="3.1.0" />
22+
<PackageReference Include="Pulsar.Client" Version="3.6.1" />
2323
<PackageReference Include="Pulsar.Client.Otel" Version="0.1.2" />
2424
</ItemGroup>
2525
<ItemGroup>

src/Pulsar.Client/Common/MessageId.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ type MessageId =
6666
data.FirstChunkMessageId <- chunkMsgIds.[0].GetMessageIdData()
6767
| _ ->
6868
()
69-
use stream = MemoryStreamManager.GetStream()
69+
use stream = MemoryStreamManager.GetStream("ToByteArray")
7070
Serializer.Serialize(stream, data)
7171
stream.ToArray()
7272
static member FromByteArray (data: byte[]) =

src/Pulsar.Client/Internal/BatchMessageContainer.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ type internal DefaultBatchMessageContainer<'T>(prefix: string, config: ProducerC
121121
this.IsBatchFull()
122122
override this.CreateOpSendMsg () =
123123
let lowestSequenceId = batchItems[0].SequenceId
124-
let stream = MemoryStreamManager.GetStream()
124+
let stream = MemoryStreamManager.GetStream("DefaultBatcher")
125125
let highestSequenceId = batchItems[batchItems.Count - 1].SequenceId
126126
{
127127
OpSendMsg = makeBatch stream batchItems
@@ -184,7 +184,7 @@ type internal KeyBasedBatchMessageContainer<'T>(prefix: string, config: Producer
184184
override this.CreateOpSendMsgs () =
185185
keyBatchItems
186186
|> Seq.map (fun (KeyValue(_, batchItems)) ->
187-
let stream = MemoryStreamManager.GetStream()
187+
let stream = MemoryStreamManager.GetStream("KeyBasedBatcher")
188188
let lowestSequenceId = batchItems[0].SequenceId
189189
let highestSequenceId = batchItems[batchItems.Count - 1].SequenceId
190190
{

src/Pulsar.Client/Internal/Compression.fs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,23 @@ module internal CompressionCodec =
1919

2020
type ZLibCompression() =
2121
let zlibEncode (payload: MemoryStream) =
22-
let ms = MemoryStreamManager.GetStream()
22+
let ms = MemoryStreamManager.GetStream("zlibEncode")
2323
let zlib = new ZOutputStream(ms, zlibConst.Z_DEFAULT_COMPRESSION)
2424
zlib.FlushMode <- zlibConst.Z_SYNC_FLUSH
2525
zlib.Write(payload.ToArray(), 0, int payload.Length)
2626
payload.Dispose()
2727
ms
2828

2929
let zlibDecode (uncompressedSize: int) (payload: MemoryStream) =
30-
let ms = MemoryStreamManager.GetStream(null, uncompressedSize)
30+
let ms = MemoryStreamManager.GetStream("zlibDecode", uncompressedSize)
3131
let zlib = new ZOutputStream(ms)
3232
zlib.FlushMode <- zlibConst.Z_SYNC_FLUSH
3333
zlib.Write(payload.ToArray(), 0, int payload.Length)
3434
payload.Dispose()
3535
ms
3636

3737
let zlibDecodeBytes (uncompressedSize: int) (bytes : byte[]) payloadLength =
38-
use ms = MemoryStreamManager.GetStream(null, uncompressedSize)
38+
use ms = MemoryStreamManager.GetStream("zlibDecodeBytes", uncompressedSize)
3939
use zlib = new ZOutputStream(ms)
4040
zlib.FlushMode <- zlibConst.Z_SYNC_FLUSH
4141
zlib.Write(bytes, 0, payloadLength)
@@ -54,7 +54,7 @@ module internal CompressionCodec =
5454
let sourceSpan = payload.ToArray().AsSpan()
5555
let targetSpan = target.AsSpan()
5656
let count = LZ4Codec.Encode(sourceSpan, targetSpan)
57-
let ms = MemoryStreamManager.GetStream()
57+
let ms = MemoryStreamManager.GetStream("lz4Encode")
5858
ms.Write(targetSpan.Slice(0, count))
5959
ms
6060
finally
@@ -64,7 +64,7 @@ module internal CompressionCodec =
6464
let target: byte[] = uncompressedSize |> ArrayPool.Shared.Rent
6565
try
6666
LZ4Codec.Decode(payload.ToArray(), 0, int payload.Length, target, 0, uncompressedSize) |> ignore
67-
let ms = MemoryStreamManager.GetStream(null, uncompressedSize)
67+
let ms = MemoryStreamManager.GetStream("lz4Decode", uncompressedSize)
6868
ms.Write(target, 0, uncompressedSize)
6969
ms
7070
finally
@@ -84,7 +84,7 @@ module internal CompressionCodec =
8484
let sourceArray = payload.ToArray()
8585
let targetSpan = target.AsSpan()
8686
let count = Snappy.Compress(sourceArray, targetSpan)
87-
let ms = MemoryStreamManager.GetStream()
87+
let ms = MemoryStreamManager.GetStream("SnappyEncode")
8888
ms.Write(targetSpan.Slice(0, count))
8989
ms
9090
finally
@@ -94,7 +94,7 @@ module internal CompressionCodec =
9494
let target: byte[] = uncompressedSize |> ArrayPool.Shared.Rent
9595
try
9696
Snappy.Decompress(payload.ToArray(), target) |> ignore
97-
let ms = MemoryStreamManager.GetStream(null, uncompressedSize)
97+
let ms = MemoryStreamManager.GetStream("SnappyDecode", uncompressedSize)
9898
ms.Write(target, 0, uncompressedSize)
9999
ms
100100
finally
@@ -113,7 +113,7 @@ module internal CompressionCodec =
113113
try
114114
let sourceSpan = payload.ToArray().AsSpan()
115115
let count = zstdCompressor.Wrap(sourceSpan, target)
116-
let ms = MemoryStreamManager.GetStream()
116+
let ms = MemoryStreamManager.GetStream("ZstdDecode")
117117
ms.Write(target.AsSpan(0, count))
118118
ms
119119
finally
@@ -126,7 +126,7 @@ module internal CompressionCodec =
126126
try
127127
let sourceSpan = payload.ToArray().AsSpan()
128128
zstdDecompressor.Unwrap(sourceSpan, target, false) |> ignore
129-
let ms = MemoryStreamManager.GetStream(null, uncompressedSize)
129+
let ms = MemoryStreamManager.GetStream("ZstdDecode", uncompressedSize)
130130
ms.Write(target, 0, uncompressedSize)
131131
ms
132132
finally

src/Pulsar.Client/Internal/ProducerImpl.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ type internal ProducerImpl<'T> private (producerConfig: ProducerConfiguration, c
222222

223223
let verifyIfLocalBufferIsCorrupted (msg: PendingMessage<'T>) =
224224
backgroundTask {
225-
use stream = MemoryStreamManager.GetStream()
225+
use stream = MemoryStreamManager.GetStream("VerifyBuffer")
226226
use reader = new BinaryReader(stream)
227227
let struct(send, _) = msg.SendTask
228228
let writer = PipeWriter.Create(stream, StreamPipeWriterOptions(leaveOpen = true))
@@ -590,7 +590,7 @@ type internal ProducerImpl<'T> private (producerConfig: ProducerConfiguration, c
590590
let nonRetriableError = ex |> PulsarClientException.isRetriableError |> not
591591
let timeout = Stopwatch.GetElapsedTime(createProducerStartTime) > clientConfig.OperationTimeout
592592
if ((nonRetriableError || timeout) && producerCreatedTsc.TrySetException(ex)) then
593-
Log.Logger.LogInformation("{0} creation failed {1}", prefix,
593+
Log.Logger.LogInformation("{0} connection failed {1}", prefix,
594594
if nonRetriableError then "with unretriableError" else "after timeout")
595595
connectionHandler.Failed()
596596
stopProducer()

src/Pulsar.Client/Internal/TransactionMetaStoreHandler.fs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ type internal TransactionMetaStoreHandler(clientConfig: PulsarClientConfiguratio
5555
let pendingRequests = Dictionary<RequestId, TaskCompletionSource<TxnRequest>>()
5656
let blockedRequests = Queue<TransactionMetaStoreMessage>()
5757
let timeoutQueue = Queue<TransRequestTime>()
58+
let createTmsHandlerStartTime = Stopwatch.GetTimestamp()
5859

5960
let connectionHandler =
6061
ConnectionHandler(prefix,
@@ -143,9 +144,14 @@ type internal TransactionMetaStoreHandler(clientConfig: PulsarClientConfiguratio
143144

144145
| TransactionMetaStoreMessage.ConnectionFailed ex ->
145146

146-
Log.Logger.LogError(ex, "{0} connection failed.", prefix)
147-
connectionHandler.Failed()
148-
transactionCoordinatorCreatedTsc.TrySetException(ex) |> ignore
147+
Log.Logger.LogDebug("{0} ConnectionFailed", prefix)
148+
let nonRetriableError = ex |> PulsarClientException.isRetriableError |> not
149+
let timeout = Stopwatch.GetElapsedTime(createTmsHandlerStartTime) > clientConfig.OperationTimeout
150+
if ((nonRetriableError || timeout) && transactionCoordinatorCreatedTsc.TrySetException(ex)) then
151+
Log.Logger.LogInformation("{0} connection failed {1}", prefix,
152+
if nonRetriableError then "with unretriableError" else "after timeout")
153+
connectionHandler.Failed()
154+
continueLoop <- false
149155

150156
| TransactionMetaStoreMessage.ConnectionClosed clientCnx ->
151157

src/Pulsar.Client/Pulsar.Client.fsproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,17 @@
77
<Title>Pulsar.Client</Title>
88
<RootNamespace>Pulsar.Client</RootNamespace>
99
<AssemblyName>Pulsar.Client</AssemblyName>
10-
<Version>3.6.1</Version>
10+
<Version>3.6.2</Version>
1111
<Company>F# community</Company>
1212
<Description>.NET client library for Apache Pulsar</Description>
1313
<RepositoryUrl>https://github.com/fsprojects/pulsar-client-dotnet</RepositoryUrl>
14-
<PackageReleaseNotes>Fix for resending pending producer messages</PackageReleaseNotes>
14+
<PackageReleaseNotes>Fix for reconnect of TransactionMetaStoreHandler</PackageReleaseNotes>
1515
<PackageLicenseExpression>MIT</PackageLicenseExpression>
1616
<PackageProjectUrl>https://github.com/fsprojects/pulsar-client-dotnet</PackageProjectUrl>
1717
<RepositoryType>git</RepositoryType>
1818
<PackageTags>pulsar</PackageTags>
1919
<Authors>F# community</Authors>
20-
<PackageVersion>3.6.1</PackageVersion>
20+
<PackageVersion>3.6.2</PackageVersion>
2121
<DebugType>portable</DebugType>
2222
<GenerateDocumentationFile>true</GenerateDocumentationFile>
2323
<PackageReadmeFile>README.md</PackageReadmeFile>

src/Pulsar.Client/Schema/AvroSchema.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ type internal AvroSchema<'T> private (schema: Schema, avroReader: DatumReader<'T
4343
override this.Encode value =
4444
if parameterIsClass && (isNull <| box value) then
4545
raise <| SchemaSerializationException "Need Non-Null content value"
46-
use stream = MemoryStreamManager.GetStream()
46+
use stream = MemoryStreamManager.GetStream("AvroEncode")
4747
avroWriter.Write(value, BinaryEncoder(stream))
4848
stream.ToArray()
4949
override this.Decode bytes =

src/Pulsar.Client/Schema/ProtobufNativeSchema.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ type internal ProtoBufNativeSchema<'T > () =
6464
set.Add protoFileName |> ignore
6565
set.Process()
6666

67-
use stream = MemoryStreamManager.GetStream()
67+
use stream = MemoryStreamManager.GetStream("ProtobufGetDescriptor")
6868
Serializer.Serialize(stream, set)
6969

7070
ProtobufNativeSchemaData (stream.ToArray (), userClassNamespace + "." + userClassName, protoFileName)
@@ -82,7 +82,7 @@ type internal ProtoBufNativeSchema<'T > () =
8282
override this.Encode value =
8383
if parameterIsClass && (isNull <| box value) then
8484
raise <| SchemaSerializationException "Need Non-Null content value"
85-
use stream = MemoryStreamManager.GetStream()
85+
use stream = MemoryStreamManager.GetStream("ProtobufEncode")
8686
Serializer.Serialize(stream, value)
8787
stream.ToArray()
8888

0 commit comments

Comments
 (0)