Skip to content

Commit fc386d2

Browse files
Jason KeeneWarren Fernandes
authored andcommitted
examples: out_multiinstance: add helper functions to manage context
Signed-off-by: Warren Fernandes <[email protected]>
1 parent 26f56f7 commit fc386d2

File tree

4 files changed

+23
-18
lines changed

4 files changed

+23
-18
lines changed

examples/out_multiinstance/Dockerfile

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,16 @@ ENV GOOS=linux\
77

88
COPY / /root/
99

10-
RUN go get github.com/fluent/fluent-bit-go/...
11-
1210
RUN go build \
1311
-buildmode=c-shared \
1412
-o /out_multiinstance.so \
15-
out.go
13+
github.com/fluent/fluent-bit-go/examples/out_multiinstance
1614

1715
FROM fluent/fluent-bit:1.1
1816

1917
COPY --from=gobuilder /out_multiinstance.so /fluent-bit/bin/
20-
COPY --from=gobuilder /root/fluent-bit.conf /fluent-bit/etc/
21-
COPY --from=gobuilder /root/plugins.conf /fluent-bit/etc/
18+
COPY --from=gobuilder /root/examples/out_multiinstance/fluent-bit.conf /fluent-bit/etc/
19+
COPY --from=gobuilder /root/examples/out_multiinstance/plugins.conf /fluent-bit/etc/
2220

2321
EXPOSE 2020
2422

examples/out_multiinstance/README.md

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func FLBPluginInit(ctx unsafe.Pointer) int {
4343
id := output.FLBPluginConfigKey(plugin, "id")
4444
log.Printf("[multiinstance] id = %q", id)
4545
// Set the context to point to any Go variable
46-
output.FLBPluginSetContext(plugin, unsafe.Pointer(&id))
46+
output.FLBPluginSetContext(plugin, id)
4747
return output.FLB_OK
4848
}
4949
```
@@ -63,10 +63,10 @@ data, the proper bytes length and the associated tag.
6363
```go
6464
//export FLBPluginFlushCtx
6565
func FLBPluginFlushCtx(ctx, data unsafe.Pointer, length C.int, tag *C.char) int {
66-
67-
id := *(*string)(ctx)
68-
log.Printf("[multiinstance] Flush called for id: %s", *id)
69-
return output.FLB_OK
66+
// Type assert context back into the original type for the Go variable
67+
id := output.FLBPluginGetContext(ctx).(string)
68+
log.Printf("[multiinstance] Flush called for id: %s", id)
69+
return output.FLB_OK
7070
}
7171
```
7272

@@ -94,8 +94,7 @@ func FLBPluginExit() int {
9494
Build the docker image locally to see how it works.
9595

9696
```bash
97-
$ cd $GOPATH/src/github.com/fluent/fluent-bit-go/examples/out_multiinstance
98-
$ docker build . -t fluent-bit-multiinstance
97+
$ docker build . -t fluent-bit-multiinstance -f examples/out_multiinstance/Dockerfile
9998
$ docker run -it --rm fluent-bit-multiinstance
10099
```
101100

examples/out_multiinstance/out.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// +build example
21
package main
32

43
import (
@@ -20,7 +19,8 @@ func FLBPluginInit(plugin unsafe.Pointer) int {
2019
id := output.FLBPluginConfigKey(plugin, "id")
2120
log.Printf("[multiinstance] id = %q", id)
2221
// Set the context to point to any Go variable
23-
output.FLBPluginSetContext(plugin, unsafe.Pointer(&id))
22+
output.FLBPluginSetContext(plugin, id)
23+
2424
return output.FLB_OK
2525
}
2626

@@ -32,8 +32,8 @@ func FLBPluginFlush(data unsafe.Pointer, length C.int, tag *C.char) int {
3232

3333
//export FLBPluginFlushCtx
3434
func FLBPluginFlushCtx(ctx, data unsafe.Pointer, length C.int, tag *C.char) int {
35-
// Cast context back into the original type for the Go variable
36-
id := *(*string)(ctx)
35+
// Type assert context back into the original type for the Go variable
36+
id := output.FLBPluginGetContext(ctx).(string)
3737
log.Printf("[multiinstance] Flush called for id: %s", id)
3838

3939
dec := output.NewDecoder(data, int(length))

output/output.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,15 @@ func FLBPluginConfigKey(plugin unsafe.Pointer, key string) string {
6767
return C.GoString(C.output_get_property(_key, plugin))
6868
}
6969

70-
func FLBPluginSetContext(plugin, ctx unsafe.Pointer) {
70+
var contexts []interface{}
71+
72+
func FLBPluginSetContext(plugin unsafe.Pointer, ctx interface{}) {
73+
i := len(contexts)
74+
contexts = append(contexts, ctx)
7175
p := (*FLBOutPlugin)(plugin)
72-
p.context.remote_context = ctx
76+
p.context.remote_context = unsafe.Pointer(uintptr(i))
77+
}
78+
79+
func FLBPluginGetContext(i unsafe.Pointer) interface{} {
80+
return contexts[int(uintptr(i))]
7381
}

0 commit comments

Comments
 (0)