Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: load multi wasm plugins #182

Merged
merged 28 commits into from
Aug 20, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions demo/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/tetratelabs/proxy-wasm-go-sdk v0.1.2-0.20210520063156-d39281baed90 h1:Ze9Uyy8LL0+mcF4UWFKoL2mx3MzptgxeG9nJqSZiK8E=
github.com/tetratelabs/proxy-wasm-go-sdk v0.1.2-0.20210520063156-d39281baed90/go.mod h1:qZ+4i6e2wHlhnhgpH0VG4QFzqd2BEvQbQFU0npt2e2k=
github.com/wasmerio/wasmer-go v1.0.3/go.mod h1:0gzVdSfg6pysA6QVp6iVRPTagC6Wq9pOE8J86WKb2Fk=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
Expand Down Expand Up @@ -98,5 +99,5 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
mosn.io/layotto/spec v0.0.0-20210707123820-584778d048d3 h1:8GbrNw6AOi4+DrQGG5TbxMNPPRQJ0uXjkSCP2qeKc08=
mosn.io/layotto/spec v0.0.0-20210707123820-584778d048d3/go.mod h1:ex31WL9Vx1PadpZmN4CZpw/57xzBeKIwqMI5fYXi7RY=
mosn.io/proxy-wasm-go-host v0.1.0 h1:WtXMiOpuDyx3Vruf/BUAiu4bo30rSPx68E5vxEBTT6g=
mosn.io/proxy-wasm-go-host v0.1.0/go.mod h1:wBRY9Xjf77GZhvAuEc6nQXZ6dQK39kNU2ok/+Z8mSU8=
20 changes: 16 additions & 4 deletions demo/wasm/code/golang/wasm.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@
package main

import (
"unsafe"

"github.com/tetratelabs/proxy-wasm-go-sdk/proxywasm"
"github.com/tetratelabs/proxy-wasm-go-sdk/proxywasm/rawhostcall"
"github.com/tetratelabs/proxy-wasm-go-sdk/proxywasm/types"
)

Expand Down Expand Up @@ -46,8 +49,6 @@ type myHttpContext struct {

// override
func (ctx *myHttpContext) OnHttpRequestHeaders(numHeaders int, endOfStream bool) types.Action {
proxywasm.LogInfo("golang wasm receive a http request")

hs, err := proxywasm.GetHttpRequestHeaders()
var name string
for _, h := range hs {
Expand All @@ -56,12 +57,11 @@ func (ctx *myHttpContext) OnHttpRequestHeaders(numHeaders int, endOfStream bool)
}
}

result, err := proxywasm.CallForeignFunction("SayHello", []byte(`{"service_name":"helloworld","name":"`+name+`"}`))
result, err := proxywasm.CallForeignFunction("SayHello", []byte(`{"service_name":"helloworld","name":"`+name+`_`+ID+`"}`))
if err != nil {
proxywasm.LogErrorf("call foreign func failed: %v", err)
}
proxywasm.SetHttpResponseBody(result)

return types.ActionContinue
}

Expand All @@ -70,3 +70,15 @@ func proxyOnMemoryAllocate(size uint) *byte {
buf := make([]byte, size)
return &buf[0]
}

const ID = "id_1"

// DO NOT MODIFY THE FOLLOWING FUNCTIONS!
//export proxy_get_id
func GetID() types.Status {
_ = ID[len(ID)-1]

id := ID
zu1k marked this conversation as resolved.
Show resolved Hide resolved
bt := *(*[]byte)(unsafe.Pointer(&id))
return rawhostcall.ProxySetBufferBytes(types.BufferTypeCallData, 0, len(ID), &bt[0], len(ID))
}
Binary file added demo/wasm/code/golang/wasm_1_1.wasm
Binary file not shown.
Binary file added demo/wasm/code/golang/wasm_1_2.wasm
Binary file not shown.
Binary file added demo/wasm/code/golang/wasm_2.wasm
Binary file not shown.
Binary file renamed demo/wasm/code/golang/wasm.wasm → demo/wasm/code/golang/wasm_2_reload.wasm
100755 → 100644
Binary file not shown.
28 changes: 23 additions & 5 deletions demo/wasm/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,29 @@
{
"type": "Layotto",
"config": {
"name": "wasm_demo",
"instance_num": 1,
"vm_config": {
"engine": "wasmer",
"path": "demo/wasm/code/golang/wasm.wasm"
"id_1_1": {
"name": "id_1",
zu1k marked this conversation as resolved.
Show resolved Hide resolved
"instance_num": 1,
"vm_config": {
"engine": "wasmer",
"path": "demo/wasm/code/golang/wasm_1_1.wasm"
}
},
"id_1_2": {
"name": "id_1",
"instance_num": 2,
"vm_config": {
"engine": "wasmer",
"path": "demo/wasm/code/golang/wasm_1_2.wasm"
}
},
"id_2": {
"name": "id_2",
"instance_num": 1,
"vm_config": {
"engine": "wasmer",
"path": "demo/wasm/code/golang/wasm_2.wasm"
}
}
}
}
Expand Down
5 changes: 3 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,18 @@ require (
github.com/pkg/errors v0.9.1
github.com/shirou/gopsutil v3.21.3+incompatible
github.com/stretchr/testify v1.7.0
github.com/tetratelabs/proxy-wasm-go-sdk v0.1.2-0.20210520063156-d39281baed90
github.com/tklauser/go-sysconf v0.3.5 // indirect
github.com/urfave/cli v1.22.1
github.com/valyala/fasthttp v1.26.0
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect
google.golang.org/grpc v1.39.0
google.golang.org/grpc/examples v0.0.0-20210526223527-2de42fcbbce3 // indirect
google.golang.org/protobuf v1.27.1
mosn.io/api v0.0.0-20210414070543-8a0686b03540
mosn.io/api v0.0.0-20210714065837-5b4c2d66e70c
mosn.io/layotto/components v0.0.0-20210625065826-9c2ad8dbcf05
mosn.io/layotto/spec v0.0.0-20210707123820-584778d048d3
mosn.io/mosn v0.23.0
mosn.io/mosn v0.24.1-0.20210817133744-f3fc4c31ddee
mosn.io/pkg v0.0.0-20210604065522-6e8f5a087814
mosn.io/proxy-wasm-go-host v0.0.0-20210312032409-2334f9cf62ec
)
Expand Down
21 changes: 17 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q
github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
github.com/DataDog/zstd v1.3.6-0.20190409195224-796139022798 h1:2T/jmrHeTezcCM58lvEQXs0UpQJCo5SoGAcg+mbSTIg=
github.com/DataDog/zstd v1.3.6-0.20190409195224-796139022798/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
github.com/HdrHistogram/hdrhistogram-go v1.0.1/go.mod h1:BWJ+nMSHY3L41Zj7CA3uXnloDp7xxV0YvstAE7nKTaM=
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
Expand Down Expand Up @@ -459,6 +460,7 @@ github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A=
github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
Expand Down Expand Up @@ -794,8 +796,9 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI=
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
github.com/microcosm-cc/bluemonday v1.0.7/go.mod h1:HOT/6NaBlR0f9XlxD3zolN6Z3N8Lp4pvhp+jLS5ihnI=
github.com/miekg/dns v1.0.14 h1:9jZdLNd/P4+SfEJ0TNyxYpsK8N4GtfylBLqtbYN1sbA=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/miekg/dns v1.1.25 h1:dFwPR6SfLtrSwgDcIq2bcU/gVutB4sNApq2HBdqcakg=
github.com/miekg/dns v1.1.25/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
github.com/minio/highwayhash v1.0.0/go.mod h1:xQboMTeM9nY9v/LlAOxFctujiv5+Aq2hR5dxBpaMbdc=
github.com/minio/highwayhash v1.0.1 h1:dZ6IIu8Z14VlC0VpfKofAhCy74wu/Qb5gcn52yWoz/0=
github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY=
Expand Down Expand Up @@ -1093,6 +1096,8 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69
github.com/tebeka/strftime v0.1.3/go.mod h1:7wJm3dZlpr4l/oVK0t1HYIc4rMzQ2XJlOMIUJUJH6XQ=
github.com/testcontainers/testcontainers-go v0.9.0/go.mod h1:b22BFXhRbg4PJmeMVWh6ftqjyZHgiIl3w274e9r3C2E=
github.com/tetratelabs/proxy-wasm-go-sdk v0.0.13/go.mod h1:y1ZQT4bQEBnR8Do4nSOzb3roczzPvcAp8UrF6NEYWNY=
github.com/tetratelabs/proxy-wasm-go-sdk v0.1.2-0.20210520063156-d39281baed90 h1:Ze9Uyy8LL0+mcF4UWFKoL2mx3MzptgxeG9nJqSZiK8E=
github.com/tetratelabs/proxy-wasm-go-sdk v0.1.2-0.20210520063156-d39281baed90/go.mod h1:qZ+4i6e2wHlhnhgpH0VG4QFzqd2BEvQbQFU0npt2e2k=
github.com/tevid/gohamcrest v1.1.1 h1:ou+xSqlIw1xfGTg1uq1nif/htZ2S3EzRqLm2BP+tYU0=
github.com/tevid/gohamcrest v1.1.1/go.mod h1:3UvtWlqm8j5JbwYZh80D/PVBt0mJ1eJiYgZMibh0H/k=
github.com/tidwall/gjson v1.2.1/go.mod h1:c/nTNbUr0E0OrXEhq1pwa8iEgc2DOt4ZZqAt1HtCkPA=
Expand All @@ -1112,6 +1117,8 @@ github.com/toolkits/concurrent v0.0.0-20150624120057-a4371d70e3e3/go.mod h1:QDlp
github.com/trainyao/go-maglev v0.0.0-20200611125015-4c1ae64d96a8 h1:o6jtI8/BV93ZCw681cNVMjyvLfnBboUP/lBOfmkb4Pg=
github.com/trainyao/go-maglev v0.0.0-20200611125015-4c1ae64d96a8/go.mod h1:VBsRn0SDTltC3/SzN6SgXlQtmBk6U5sf0KW+eT+WMbc=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
github.com/uber/jaeger-lib v2.4.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
Expand Down Expand Up @@ -1260,6 +1267,7 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
Expand Down Expand Up @@ -1331,6 +1339,7 @@ golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
Expand Down Expand Up @@ -1411,6 +1420,8 @@ golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
Expand Down Expand Up @@ -1503,6 +1514,7 @@ golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgw
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
Expand Down Expand Up @@ -1766,11 +1778,12 @@ k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKf
k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
mosn.io/api v0.0.0-20210204052134-5b9a826795fd/go.mod h1:TBv4bz2f2RbpgdohbVAFRFVOoN8YyEUiLH3jAh752Qc=
mosn.io/api v0.0.0-20210414070543-8a0686b03540 h1:hdfOaKU2c5jpLCdJC22IQ8kR7qVCUtl6dSq/FsepnuY=
mosn.io/api v0.0.0-20210414070543-8a0686b03540/go.mod h1:TBv4bz2f2RbpgdohbVAFRFVOoN8YyEUiLH3jAh752Qc=
mosn.io/api v0.0.0-20210714065837-5b4c2d66e70c h1:DBzFfP1xalj3nnROidazArdP/QxbI1PHSMCKi7sAaQM=
mosn.io/api v0.0.0-20210714065837-5b4c2d66e70c/go.mod h1:TBv4bz2f2RbpgdohbVAFRFVOoN8YyEUiLH3jAh752Qc=
mosn.io/mosn v0.22.1-0.20210425073346-b6880db4669c/go.mod h1:YJmivhBjRLif073XgEQRIlEpk15/S4V7cysS2H/40io=
mosn.io/mosn v0.23.0 h1:XwI99UnGFZ336hCxyEoM97MJ5aJI5F127zNKfCRGQ64=
mosn.io/mosn v0.23.0/go.mod h1:9miwkXcUXDYHYIgS+PqyapiRQFpoeNaQDxG2UdGLS3Y=
mosn.io/mosn v0.24.1-0.20210817133744-f3fc4c31ddee h1:rSda+aicdWTQpckhjN0oF6TuakCuOmv14TmNhbB7NLU=
mosn.io/mosn v0.24.1-0.20210817133744-f3fc4c31ddee/go.mod h1:t8FDJezfK6iMVYYSs5G74tZGFkFHPsOfiX/TY9EtIYM=
mosn.io/pkg v0.0.0-20210401090620-f0e0d1a3efce/go.mod h1:YEv5sGe7kqo/Yzj7OJI7Udl3iUcagNeo5unGPiUaUfw=
mosn.io/pkg v0.0.0-20210604065522-6e8f5a087814 h1:42A6tqajl/hGKkSVLa3mCnaQh8i568Zxgtx0ZECjCmw=
mosn.io/pkg v0.0.0-20210604065522-6e8f5a087814/go.mod h1:YEv5sGe7kqo/Yzj7OJI7Udl3iUcagNeo5unGPiUaUfw=
Expand Down
31 changes: 31 additions & 0 deletions pkg/wasm/abi.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package wasm

import (
sdkTypes "github.com/tetratelabs/proxy-wasm-go-sdk/proxywasm/types"
"mosn.io/mosn/pkg/types"
"mosn.io/mosn/pkg/wasm/abi"
v1 "mosn.io/mosn/pkg/wasm/abi/proxywasm010"
Expand All @@ -39,6 +40,36 @@ type AbiV2Impl struct {
v1.ABIContext
}

var (
_ types.ABIHandler = &AbiV2Impl{}
_ Exports = &AbiV2Impl{}
)

func (a *AbiV2Impl) Name() string {
return AbiV2
}

func (a *AbiV2Impl) GetABIExports() interface{} {
return a
}

func (a *AbiV2Impl) ProxyGetID() (string, error) {
ff, err := a.Instance.GetExportsFunc("proxy_get_id")
if err != nil {
return "", err
}
res, err := ff.Call()
if err != nil {
a.Instance.HandleError(err)
return "", err
}
a.Imports.Wait()

status := sdkTypes.Status(res.(int32))
if err := sdkTypes.StatusToError(status); err != nil {
a.Instance.HandleError(err)
return "", err
}

return string(a.Imports.GetFuncCallData().Bytes()), nil
}
11 changes: 6 additions & 5 deletions pkg/wasm/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,17 @@ import (
"mosn.io/mosn/pkg/log"
)

type filterConfig struct {
type filterConfigItem struct {
FromWasmPlugin string `json:"from_wasm_plugin,omitempty"`
VmConfig *v2.WasmVmConfig `json:"vm_config,omitempty"`
InstanceNum int `json:"instance_num,omitempty"`
RootContextID int32 `json:"root_context_id,omitempty"`
UserData map[string]string `json:"-"`
PluginName string `json:"-"`
}

func parseFilterConfig(cfg map[string]interface{}) (*filterConfig, error) {
config := filterConfig{
func parseFilterConfigItem(cfg map[string]interface{}) (*filterConfigItem, error) {
config := filterConfigItem{
UserData: make(map[string]string),
RootContextID: 1, // default value is 1
}
Expand Down Expand Up @@ -63,7 +64,7 @@ func parseFilterConfig(cfg map[string]interface{}) (*filterConfig, error) {
return &config, nil
}

func checkVmConfig(config *filterConfig) error {
func checkVmConfig(config *filterConfigItem) error {
if config.FromWasmPlugin != "" {
config.VmConfig = nil
config.InstanceNum = 0
Expand All @@ -81,7 +82,7 @@ func checkVmConfig(config *filterConfig) error {
return nil
}

func parseUserData(rawConfigBytes []byte, config *filterConfig) error {
func parseUserData(rawConfigBytes []byte, config *filterConfigItem) error {
if len(rawConfigBytes) == 0 || config == nil {
log.DefaultLogger.Errorf("[proxywasm][config] fail to parse user data, invalid param, raw: %v, config: %v",
string(rawConfigBytes), config)
Expand Down
9 changes: 5 additions & 4 deletions pkg/wasm/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@
package wasm

import (
"github.com/stretchr/testify/assert"
"testing"

"github.com/stretchr/testify/assert"
)

func TestXProxyWasmConfigFromGlobalPlugin(t *testing.T) {
Expand All @@ -29,7 +30,7 @@ func TestXProxyWasmConfigFromGlobalPlugin(t *testing.T) {
"user_config2": "user_value2",
}

config, err := parseFilterConfig(configMap)
config, err := parseFilterConfigItem(configMap)
assert.Nil(t, err)
assert.Nil(t, config.VmConfig)
assert.Equal(t, config.InstanceNum, 0)
Expand All @@ -42,7 +43,7 @@ func TestXProxyWasmConfigWithoutUserData(t *testing.T) {
"instance_num": 2,
}

config, err := parseFilterConfig(configMap)
config, err := parseFilterConfigItem(configMap)
assert.Nil(t, err)
assert.Nil(t, config.VmConfig)
assert.Equal(t, config.InstanceNum, 0)
Expand All @@ -63,7 +64,7 @@ func TestXProxyWasmConfigWithVM(t *testing.T) {
"user_config4": "user_value4",
}

config, err := parseFilterConfig(configMap)
config, err := parseFilterConfigItem(configMap)
assert.Nil(t, err)
assert.Equal(t, config.FromWasmPlugin, "")
assert.NotNil(t, config.VmConfig)
Expand Down
45 changes: 45 additions & 0 deletions pkg/wasm/dispatch.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package wasm

import (
"errors"
"math/rand"

"mosn.io/mosn/pkg/log"
)

type Group struct {
count int
plugins []*WasmPlugin
}

type Router struct {
routes map[string]*Group
}

// RegisterRoute register a group with id
// unsafe for concurrent
func (route *Router) RegisterRoute(id string, plugin *WasmPlugin) {
if group, found := route.routes[id]; found {
group.count += 1
group.plugins = append(group.plugins, plugin)
} else {
route.routes[id] = &Group{
count: 1,
plugins: []*WasmPlugin{plugin},
}
}
}

func (route *Router) GetRandomPluginByID(id string) (*WasmPlugin, error) {
group, ok := route.routes[id]
if !ok {
log.DefaultLogger.Errorf("[proxywasm][filter] GetRandomPluginByID id not registered, id: %s", id)
return nil, errors.New("id is not registered")
}

idx := rand.Intn(group.count)
plugin := group.plugins[idx]
log.DefaultLogger.Infof("[proxywasm][dispatch] GetRandomPluginByID return index: %d, plugin: %s", idx, plugin.pluginName)
return plugin, nil

}
10 changes: 10 additions & 0 deletions pkg/wasm/exports.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package wasm

import "mosn.io/proxy-wasm-go-host/proxywasm"

type Exports interface {
proxywasm.Exports

// ProxyGetID return the id
ProxyGetID() (string, error)
}
Loading