Skip to content

Commit

Permalink
refactor WasmVmData
Browse files Browse the repository at this point in the history
  • Loading branch information
mathieuancelin committed Sep 6, 2023
1 parent 55a1fd8 commit 3eaa3e9
Show file tree
Hide file tree
Showing 7 changed files with 25 additions and 24 deletions.
1 change: 1 addition & 0 deletions experiments/common-wasm/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
sbt '+package'
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import scala.collection.concurrent.TrieMap
import scala.concurrent.duration._
import scala.concurrent.{ExecutionContext, Future}

trait AbsVmData {
trait WasmVmData {
def properties: Map[String, Array[Byte]]
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,25 +24,25 @@ sealed trait WasmVmAction
object WasmVmAction {
case object WasmVmKillAction extends WasmVmAction
case class WasmVmCallAction(
parameters: WasmFunctionParameters,
context: Option[AbsVmData],
promise: Promise[Either[JsValue, (String, ResultsWrapper)]]
parameters: WasmFunctionParameters,
context: Option[WasmVmData],
promise: Promise[Either[JsValue, (String, ResultsWrapper)]]
) extends WasmVmAction
}

case class OPAWasmVm(opaDataAddr: Int, opaBaseHeapPtr: Int)

case class WasmVm(
index: Int,
maxCalls: Int,
maxMemory: Long,
resetMemory: Boolean,
instance: WasmOtoroshiInstance,
vmDataRef: AtomicReference[AbsVmData],
memories: Array[WasmOtoroshiLinearMemory],
functions: Array[WasmOtoroshiHostFunction[_ <: WasmOtoroshiHostUserData]],
pool: WasmVmPool,
var opaPointers: Option[OPAWasmVm] = None
index: Int,
maxCalls: Int,
maxMemory: Long,
resetMemory: Boolean,
instance: WasmOtoroshiInstance,
vmDataRef: AtomicReference[WasmVmData],
memories: Array[WasmOtoroshiLinearMemory],
functions: Array[WasmOtoroshiHostFunction[_ <: WasmOtoroshiHostUserData]],
pool: WasmVmPool,
var opaPointers: Option[OPAWasmVm] = None
) {

private val callDurationReservoirNs = new UniformReservoir()
Expand Down Expand Up @@ -190,7 +190,7 @@ case class WasmVm(

def call(
parameters: WasmFunctionParameters,
context: Option[AbsVmData]
context: Option[WasmVmData]
): Future[Either[JsValue, (String, ResultsWrapper)]] = {
val promise = Promise[Either[JsValue, (String, ResultsWrapper)]]()
inFlight.incrementAndGet()
Expand All @@ -199,7 +199,7 @@ case class WasmVm(
promise.future
}

def opaCall(functionName: String, in: String, context: Option[AbsVmData] = None)(implicit ec: ExecutionContext): Future[Either[JsValue, (String, ResultsWrapper)]] = {
def opaCall(functionName: String, in: String, context: Option[WasmVmData] = None)(implicit ec: ExecutionContext): Future[Either[JsValue, (String, ResultsWrapper)]] = {
ensureOpaInitialized().call(WasmFunctionParameters.OPACall(functionName, opaPointers, in), context)
}

Expand Down Expand Up @@ -377,7 +377,7 @@ class WasmVmPool(stableId: => String, optConfig: => Option[WasmConfiguration], v
)
}
val template = templateRef.get()
val vmDataRef = new AtomicReference[AbsVmData](null)
val vmDataRef = new AtomicReference[WasmVmData](null)
val addedFunctions = options.addHostFunctions(vmDataRef)
val functions: Array[WasmOtoroshiHostFunction[_ <: WasmOtoroshiHostUserData]] = {
val fs: Array[WasmOtoroshiHostFunction[_ <: WasmOtoroshiHostUserData]] = if (options.importDefaultHostFunctions) {
Expand Down Expand Up @@ -551,7 +551,7 @@ class WasmVmPool(stableId: => String, optConfig: => Option[WasmConfiguration], v
case class WasmVmInitOptions(
importDefaultHostFunctions: Boolean = true,
resetMemory: Boolean = true,
addHostFunctions: (AtomicReference[AbsVmData]) => Seq[WasmOtoroshiHostFunction[_ <: WasmOtoroshiHostUserData]] = _ =>
addHostFunctions: (AtomicReference[WasmVmData]) => Seq[WasmOtoroshiHostFunction[_ <: WasmOtoroshiHostUserData]] = _ =>
Seq.empty
)

Expand Down
4 changes: 2 additions & 2 deletions otoroshi/app/wasm/proxywasm/api.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package otoroshi.wasm.proxywasm

import akka.util.ByteString
import com.sun.jna.Pointer
import io.otoroshi.common.wasm.AbsVmData
import io.otoroshi.common.wasm.WasmVmData
import org.extism.sdk.wasmotoroshi._
import otoroshi.env.Env
import otoroshi.next.plugins.api.NgPluginHttpResponse
Expand Down Expand Up @@ -88,7 +88,7 @@ case class VmData(
respRef: AtomicReference[play.api.mvc.Result],
bodyInRef: AtomicReference[ByteString],
bodyOutRef: AtomicReference[ByteString]
) extends WasmOtoroshiHostUserData with AbsVmData {
) extends WasmOtoroshiHostUserData with WasmVmData {
def withRequest(request: RequestHeader, attrs: TypedMap)(implicit env: Env): VmData = {
VmData
.from(request, attrs)
Expand Down
4 changes: 2 additions & 2 deletions otoroshi/app/wasm/proxywasm/coraza.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package otoroshi.wasm.proxywasm
import akka.stream.Materializer
import akka.util.ByteString
import com.sksamuel.exts.concurrent.Futures.RichFuture
import io.otoroshi.common.wasm.{AbsVmData, EnvUserData, ResultsWrapper, WasmFunctionParameters, WasmSource, WasmSourceKind, WasmVm, WasmVmInitOptions, WasmVmKillOptions, WasmVmPool}
import io.otoroshi.common.wasm.{WasmVmData, EnvUserData, ResultsWrapper, WasmFunctionParameters, WasmSource, WasmSourceKind, WasmVm, WasmVmInitOptions, WasmVmKillOptions, WasmVmPool}
import org.extism.sdk.wasmotoroshi._
import org.joda.time.DateTime
import otoroshi.api.{GenericResourceAccessApiWithState, Resource, ResourceVersion}
Expand Down Expand Up @@ -87,7 +87,7 @@ class CorazaPlugin(wasm: WasmConfig, val config: CorazaWafConfig, key: String, e

def isStarted(): Boolean = started.get()

def createFunctions(ref: AtomicReference[AbsVmData]): Seq[WasmOtoroshiHostFunction[EnvUserData]] = {
def createFunctions(ref: AtomicReference[WasmVmData]): Seq[WasmOtoroshiHostFunction[EnvUserData]] = {
ProxyWasmFunctions.build(state, ref)
}

Expand Down
4 changes: 2 additions & 2 deletions otoroshi/app/wasm/proxywasm/functions.scala
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package otoroshi.wasm.proxywasm

import akka.stream.Materializer
import io.otoroshi.common.wasm.{AbsVmData, EnvUserData}
import io.otoroshi.common.wasm.{WasmVmData, EnvUserData}
import org.extism.sdk.wasmotoroshi._
import otoroshi.env.Env
import otoroshi.wasm._
Expand All @@ -24,7 +24,7 @@ object ProxyWasmFunctions {

def build(
state: ProxyWasmState,
vmDataRef: AtomicReference[AbsVmData]
vmDataRef: AtomicReference[WasmVmData]
)(implicit ec: ExecutionContext, env: Env, mat: Materializer): Seq[WasmOtoroshiHostFunction[EnvUserData]] = {
def getCurrentVmData(): VmData = {
Option(vmDataRef.get()) match {
Expand Down
Binary file modified otoroshi/lib/common-wasm_2.12-1.0.0-SNAPSHOT.jar
Binary file not shown.

0 comments on commit 3eaa3e9

Please sign in to comment.