@@ -86,6 +86,8 @@ type CommonVmCtx[PluginConfig any] struct {
8686 onHttpResponseBody onHttpBodyFunc [PluginConfig ]
8787 onHttpStreamingResponseBody onHttpStreamingBodyFunc [PluginConfig ]
8888 onHttpStreamDone onHttpStreamDoneFunc [PluginConfig ]
89+ rebuildAfterRequests uint64 // Number of requests after which to trigger rebuild
90+ requestCount uint64 // Current request count
8991}
9092
9193type TickFuncEntry struct {
@@ -403,6 +405,19 @@ func WithLogger[PluginConfig any](logger log.Log) CtxOption[PluginConfig] {
403405 return & logOption [PluginConfig ]{logger }
404406}
405407
408+ type rebuildOption [PluginConfig any ] struct {
409+ rebuildAfterRequests uint64
410+ }
411+
412+ func (o * rebuildOption [PluginConfig ]) Apply (ctx * CommonVmCtx [PluginConfig ]) {
413+ ctx .rebuildAfterRequests = o .rebuildAfterRequests
414+ ctx .requestCount = 0
415+ }
416+
417+ func WithRebuildAfterRequests [PluginConfig any ](requestCount uint64 ) CtxOption [PluginConfig ] {
418+ return & rebuildOption [PluginConfig ]{rebuildAfterRequests : requestCount }
419+ }
420+
406421type prePluginOption [PluginConfig any ] struct {
407422 f onPluginStartOrReload
408423}
@@ -858,6 +873,16 @@ func (ctx *CommonHttpCtx[PluginConfig]) OnHttpRequestHeaders(numHeaders int, end
858873 ctx .executionPhase = iface .DecodeHeader
859874 requestID , _ := proxywasm .GetHttpRequestHeader ("x-request-id" )
860875 _ = proxywasm .SetProperty ([]string {"x_request_id" }, []byte (requestID ))
876+
877+ // Increment request count and check rebuild condition
878+ if ctx .plugin .vm .rebuildAfterRequests > 0 {
879+ ctx .plugin .vm .requestCount ++
880+ if ctx .plugin .vm .requestCount >= ctx .plugin .vm .rebuildAfterRequests {
881+ proxywasm .SetProperty ([]string {"wasm_rebuild" }, []byte ("true" ))
882+ ctx .plugin .vm .log .Infof ("Plugin reached rebuild threshold after %d requests, rebuild flag set" , ctx .plugin .vm .requestCount )
883+ }
884+ }
885+
861886 config , err := ctx .plugin .GetMatchConfig ()
862887 if err != nil {
863888 ctx .plugin .vm .log .Errorf ("get match config failed, err:%v" , err )
0 commit comments