diff options
| -rw-r--r-- | core/namespace.go | 5 | ||||
| -rw-r--r-- | core/state_backend.go | 2 | ||||
| -rw-r--r-- | go.mod | 35 | ||||
| -rw-r--r-- | go.sum | 124 | ||||
| -rw-r--r-- | state/memory_backend.go | 2 | ||||
| -rw-r--r-- | state/pebble_backend.go | 126 |
6 files changed, 293 insertions, 1 deletions
diff --git a/core/namespace.go b/core/namespace.go new file mode 100644 index 0000000..e505109 --- /dev/null +++ b/core/namespace.go | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | package core | ||
| 2 | |||
| 3 | |||
| 4 | |||
| 5 | type VoidNamespace struct {} | ||
diff --git a/core/state_backend.go b/core/state_backend.go index 9f9f397..5870739 100644 --- a/core/state_backend.go +++ b/core/state_backend.go | |||
| @@ -15,7 +15,7 @@ type StateBackend interface { | |||
| 15 | 15 | ||
| 16 | // For User === | 16 | // For User === |
| 17 | // GetValueState will perform in disk | 17 | // GetValueState will perform in disk |
| 18 | GetValueState(ctx context.Context, key string) (ValueState[any], error) | 18 | GetValueState(ctx context.Context, statename string) (ValueState[any], error) |
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | type stateBackendKeyType struct{} | 21 | type stateBackendKeyType struct{} |
| @@ -1,3 +1,38 @@ | |||
| 1 | module flux | 1 | module flux |
| 2 | 2 | ||
| 3 | go 1.26.3 | 3 | go 1.26.3 |
| 4 | |||
| 5 | require github.com/cockroachdb/pebble/v2 v2.1.7 | ||
| 6 | |||
| 7 | require ( | ||
| 8 | github.com/DataDog/zstd v1.5.7 // indirect | ||
| 9 | github.com/RaduBerinde/axisds v0.1.0 // indirect | ||
| 10 | github.com/RaduBerinde/btreemap v0.0.0-20250419174037-3d62b7205d54 // indirect | ||
| 11 | github.com/beorn7/perks v1.0.1 // indirect | ||
| 12 | github.com/cespare/xxhash/v2 v2.2.0 // indirect | ||
| 13 | github.com/cockroachdb/crlib v0.0.0-20241112164430-1264a2edc35b // indirect | ||
| 14 | github.com/cockroachdb/errors v1.11.3 // indirect | ||
| 15 | github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect | ||
| 16 | github.com/cockroachdb/redact v1.1.5 // indirect | ||
| 17 | github.com/cockroachdb/swiss v0.0.0-20260820225851-333444432258 // indirect | ||
| 18 | github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect | ||
| 19 | github.com/getsentry/sentry-go v0.27.0 // indirect | ||
| 20 | github.com/gogo/protobuf v1.3.2 // indirect | ||
| 21 | github.com/golang/protobuf v1.5.3 // indirect | ||
| 22 | github.com/golang/snappy v0.0.5-0.20231225225746-43d5d4cd4e0e // indirect | ||
| 23 | github.com/klauspost/compress v1.17.11 // indirect | ||
| 24 | github.com/kr/pretty v0.3.1 // indirect | ||
| 25 | github.com/kr/text v0.2.0 // indirect | ||
| 26 | github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect | ||
| 27 | github.com/minio/minlz v1.0.1-0.20250507153514-87eb42fe8882 // indirect | ||
| 28 | github.com/pkg/errors v0.9.1 // indirect | ||
| 29 | github.com/prometheus/client_golang v1.16.0 // indirect | ||
| 30 | github.com/prometheus/client_model v0.3.0 // indirect | ||
| 31 | github.com/prometheus/common v0.42.0 // indirect | ||
| 32 | github.com/prometheus/procfs v0.10.1 // indirect | ||
| 33 | github.com/rogpeppe/go-internal v1.9.0 // indirect | ||
| 34 | golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df // indirect | ||
| 35 | golang.org/x/sys v0.18.0 // indirect | ||
| 36 | golang.org/x/text v0.14.0 // indirect | ||
| 37 | google.golang.org/protobuf v1.33.0 // indirect | ||
| 38 | ) | ||
| @@ -0,0 +1,124 @@ | |||
| 1 | github.com/DataDog/zstd v1.5.7 h1:ybO8RBeh29qrxIhCA9E8gKY6xfONU9T6G6aP9DTKfLE= | ||
| 2 | github.com/DataDog/zstd v1.5.7/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= | ||
| 3 | github.com/RaduBerinde/axisds v0.1.0 h1:YItk/RmU5nvlsv/awo2Fjx97Mfpt4JfgtEVAGPrLdz8= | ||
| 4 | github.com/RaduBerinde/axisds v0.1.0/go.mod h1:UHGJonU9z4YYGKJxSaC6/TNcLOBptpmM5m2Cksbnw0Y= | ||
| 5 | github.com/RaduBerinde/btreemap v0.0.0-20250419174037-3d62b7205d54 h1:bsU8Tzxr/PNz75ayvCnxKZWEYdLMPDkUgticP4a4Bvk= | ||
| 6 | github.com/RaduBerinde/btreemap v0.0.0-20250419174037-3d62b7205d54/go.mod h1:0tr7FllbE9gJkHq7CVeeDDFAFKQVy5RnCSSNBOvdqbc= | ||
| 7 | github.com/aclements/go-perfevent v0.0.0-20240301234650-f7843625020f h1:JjxwchlOepwsUWcQwD2mLUAGE9aCp0/ehy6yCHFBOvo= | ||
| 8 | github.com/aclements/go-perfevent v0.0.0-20240301234650-f7843625020f/go.mod h1:tMDTce/yLLN/SK8gMOxQfnyeMeCg8KGzp0D1cbECEeo= | ||
| 9 | github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= | ||
| 10 | github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= | ||
| 11 | github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= | ||
| 12 | github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= | ||
| 13 | github.com/cockroachdb/crlib v0.0.0-20241112164430-1264a2edc35b h1:SHlYZ/bMx7frnmeqCu+xm0TCxXLzX3jQIVuFbnFGtFU= | ||
| 14 | github.com/cockroachdb/crlib v0.0.0-20241112164430-1264a2edc35b/go.mod h1:Gq51ZeKaFCXk6QwuGM0w1dnaOqc/F5zKT2zA9D6Xeac= | ||
| 15 | github.com/cockroachdb/datadriven v1.0.3-0.20250407164829-2945557346d5 h1:UycK/E0TkisVrQbSoxvU827FwgBBcZ95nRRmpj/12QI= | ||
| 16 | github.com/cockroachdb/datadriven v1.0.3-0.20250407164829-2945557346d5/go.mod h1:jsaKMvD3RBCATk1/jbUZM8C9idWBJME9+VRZ5+Liq1g= | ||
| 17 | github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I= | ||
| 18 | github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8= | ||
| 19 | github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= | ||
| 20 | github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= | ||
| 21 | github.com/cockroachdb/metamorphic v0.0.0-20231108215700-4ba948b56895 h1:XANOgPYtvELQ/h4IrmPAohXqe2pWA8Bwhejr3VQoZsA= | ||
| 22 | github.com/cockroachdb/metamorphic v0.0.0-20231108215700-4ba948b56895/go.mod h1:aPd7gM9ov9M8v32Yy5NJrDyOcD8z642dqs+F0CeNXfA= | ||
| 23 | github.com/cockroachdb/pebble/v2 v2.1.7 h1:hFQnbsniSWg9BVcNKMuaUufYPiVXY6uJvaY9grbQ9+U= | ||
| 24 | github.com/cockroachdb/pebble/v2 v2.1.7/go.mod h1:JhU5cqqYkr2BdsBHbZhRZOryAtfhcV3eNI/oBcbrxWc= | ||
| 25 | github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= | ||
| 26 | github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= | ||
| 27 | github.com/cockroachdb/swiss v0.0.0-20260820225851-333444432258 h1:IJ+uNItEm0qx9FE2AgIc1PMsCUtk8nbSIzhQE1t5GWw= | ||
| 28 | github.com/cockroachdb/swiss v0.0.0-20260820225851-333444432258/go.mod h1:yBRu/cnL4ks9bgy4vAASdjIW+/xMlFwuHKqtmh3GZQg= | ||
| 29 | github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= | ||
| 30 | github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= | ||
| 31 | github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= | ||
| 32 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | ||
| 33 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||
| 34 | github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= | ||
| 35 | github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= | ||
| 36 | github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9 h1:r5GgOLGbza2wVHRzK7aAj6lWZjfbAwiu/RDCVOKjRyM= | ||
| 37 | github.com/ghemawat/stream v0.0.0-20171120220530-696b145b53b9/go.mod h1:106OIgooyS7OzLDOpUGgm9fA3bQENb/cFSyyBmMoJDs= | ||
| 38 | github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= | ||
| 39 | github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= | ||
| 40 | github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= | ||
| 41 | github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= | ||
| 42 | github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | ||
| 43 | github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= | ||
| 44 | github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= | ||
| 45 | github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= | ||
| 46 | github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= | ||
| 47 | github.com/golang/snappy v0.0.5-0.20231225225746-43d5d4cd4e0e h1:4bw4WeyTYPp0smaXiJZCNnLrvVBqirQVreixayXezGc= | ||
| 48 | github.com/golang/snappy v0.0.5-0.20231225225746-43d5d4cd4e0e/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | ||
| 49 | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | ||
| 50 | github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= | ||
| 51 | github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= | ||
| 52 | github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= | ||
| 53 | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | ||
| 54 | github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= | ||
| 55 | github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= | ||
| 56 | github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= | ||
| 57 | github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= | ||
| 58 | github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= | ||
| 59 | github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= | ||
| 60 | github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= | ||
| 61 | github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= | ||
| 62 | github.com/minio/minlz v1.0.1-0.20250507153514-87eb42fe8882 h1:0lgqHvJWHLGW5TuObJrfyEi6+ASTKDBWikGvPqy9Yiw= | ||
| 63 | github.com/minio/minlz v1.0.1-0.20250507153514-87eb42fe8882/go.mod h1:qT0aEB35q79LLornSzeDH75LBf3aH1MV+jB5w9Wasec= | ||
| 64 | github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= | ||
| 65 | github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= | ||
| 66 | github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= | ||
| 67 | github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= | ||
| 68 | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||
| 69 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | ||
| 70 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||
| 71 | github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= | ||
| 72 | github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= | ||
| 73 | github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= | ||
| 74 | github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= | ||
| 75 | github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= | ||
| 76 | github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= | ||
| 77 | github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= | ||
| 78 | github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= | ||
| 79 | github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= | ||
| 80 | github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= | ||
| 81 | github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= | ||
| 82 | github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= | ||
| 83 | github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | ||
| 84 | github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | ||
| 85 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | ||
| 86 | golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||
| 87 | golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= | ||
| 88 | golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df h1:UA2aFVmmsIlefxMk29Dp2juaUSth8Pyn3Tq5Y5mJGME= | ||
| 89 | golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= | ||
| 90 | golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||
| 91 | golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | ||
| 92 | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||
| 93 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||
| 94 | golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= | ||
| 95 | golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= | ||
| 96 | golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||
| 97 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||
| 98 | golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||
| 99 | golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||
| 100 | golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= | ||
| 101 | golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= | ||
| 102 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||
| 103 | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||
| 104 | golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||
| 105 | golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= | ||
| 106 | golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||
| 107 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||
| 108 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||
| 109 | golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= | ||
| 110 | golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= | ||
| 111 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||
| 112 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= | ||
| 113 | golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= | ||
| 114 | golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= | ||
| 115 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||
| 116 | golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||
| 117 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||
| 118 | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | ||
| 119 | google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= | ||
| 120 | google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= | ||
| 121 | google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= | ||
| 122 | google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= | ||
| 123 | gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | ||
| 124 | gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||
diff --git a/state/memory_backend.go b/state/memory_backend.go index f4043a1..dda577e 100644 --- a/state/memory_backend.go +++ b/state/memory_backend.go | |||
| @@ -24,6 +24,8 @@ func NewMemoryStateBackend(maxParallelism int) *MemoryStateBackend { | |||
| 24 | return &MemoryStateBackend{ | 24 | return &MemoryStateBackend{ |
| 25 | maxParallelism: maxParallelism, | 25 | maxParallelism: maxParallelism, |
| 26 | states: make(map[string]map[int]map[string]map[any]any), | 26 | states: make(map[string]map[int]map[string]map[any]any), |
| 27 | // default is void namespace | ||
| 28 | currentNamespace: core.VoidNamespace{}, | ||
| 27 | } | 29 | } |
| 28 | } | 30 | } |
| 29 | 31 | ||
diff --git a/state/pebble_backend.go b/state/pebble_backend.go new file mode 100644 index 0000000..e428988 --- /dev/null +++ b/state/pebble_backend.go | |||
| @@ -0,0 +1,126 @@ | |||
| 1 | package state | ||
| 2 | |||
| 3 | import ( | ||
| 4 | "context" | ||
| 5 | "encoding/binary" | ||
| 6 | "fmt" | ||
| 7 | "sync" | ||
| 8 | |||
| 9 | "flux/core" | ||
| 10 | |||
| 11 | "github.com/cockroachdb/pebble/v2" | ||
| 12 | ) | ||
| 13 | |||
| 14 | type PebbleStateBackend struct { | ||
| 15 | maxParallelism int | ||
| 16 | currentKey string | ||
| 17 | currentGroupKey int | ||
| 18 | currentNamespace any | ||
| 19 | db *pebble.DB | ||
| 20 | |||
| 21 | // for support statename storage optimize | ||
| 22 | // PebbleDB dont have column family as RockDB does | ||
| 23 | // manually convert name <-> id | ||
| 24 | mu sync.Mutex | ||
| 25 | stateMap map[string]uint8 | ||
| 26 | // nextStateID prevent the hash collision | ||
| 27 | nextStateID uint8 | ||
| 28 | } | ||
| 29 | |||
| 30 | func NewPebbleStateBackend(dir string, maxParalleism int) (*PebbleStateBackend, error) { | ||
| 31 | db, err := pebble.Open(dir, &pebble.Options{}) | ||
| 32 | if err != nil { | ||
| 33 | return nil, fmt.Errorf("failed to open pebbledb %w", err) | ||
| 34 | } | ||
| 35 | return &PebbleStateBackend{ | ||
| 36 | maxParallelism: maxParalleism, | ||
| 37 | db: db, | ||
| 38 | stateMap: make(map[string]uint8), | ||
| 39 | nextStateID: 1, | ||
| 40 | }, nil | ||
| 41 | } | ||
| 42 | |||
| 43 | func (p *PebbleStateBackend) SetCurrentKey(key string) error { | ||
| 44 | p.currentKey = key | ||
| 45 | p.currentGroupKey = core.AssignToKeyGroup(key, p.maxParallelism) | ||
| 46 | return nil | ||
| 47 | } | ||
| 48 | |||
| 49 | func (p *PebbleStateBackend) GetCurrentKey() string { | ||
| 50 | return p.currentKey | ||
| 51 | } | ||
| 52 | |||
| 53 | func (p *PebbleStateBackend) SetCurrentNamespace(namespace any) error { | ||
| 54 | p.currentNamespace = namespace | ||
| 55 | return nil | ||
| 56 | } | ||
| 57 | |||
| 58 | func (p *PebbleStateBackend) GetCurrentNamespace() any { | ||
| 59 | return p.currentNamespace | ||
| 60 | } | ||
| 61 | |||
| 62 | // GetValueState(ctx context.Context, key string) (ValueState[any], error) | ||
| 63 | func (p *PebbleStateBackend) GetValueState(ctx context.Context, statename string) (core.ValueState[any], error) { | ||
| 64 | stateID := p.getStateID(statename) | ||
| 65 | return nil, nil | ||
| 66 | } | ||
| 67 | |||
| 68 | func (p *PebbleStateBackend) getStateID(statename string) uint8 { | ||
| 69 | p.mu.Lock() | ||
| 70 | defer p.mu.Unlock() | ||
| 71 | |||
| 72 | if _, ok := p.stateMap[statename]; !ok { | ||
| 73 | |||
| 74 | id := p.nextStateID | ||
| 75 | p.stateMap[statename] = id | ||
| 76 | p.nextStateID++ | ||
| 77 | } | ||
| 78 | |||
| 79 | return p.stateMap[statename] | ||
| 80 | } | ||
| 81 | |||
| 82 | func (p *PebbleStateBackend) calculateNamespaceSize() int { | ||
| 83 | nsLen := 0 | ||
| 84 | switch p.currentNamespace.(type) { | ||
| 85 | case core.TimeWindow: | ||
| 86 | nsLen = 16 | ||
| 87 | case string: | ||
| 88 | nsLen = len(p.currentNamespace.(string)) | ||
| 89 | default: | ||
| 90 | // void namespace | ||
| 91 | nsLen = 0 | ||
| 92 | } | ||
| 93 | |||
| 94 | return nsLen | ||
| 95 | } | ||
| 96 | |||
| 97 | func (p *PebbleStateBackend) deserialize(statename string) []byte { | ||
| 98 | // this will store in SSTable, order is important, keygroup MUST be first for scaling | ||
| 99 | // 2B(KeyGroup) + 1B(StateID) + 2B(KeyLen) + len(Key) + 16B(Window) | ||
| 100 | |||
| 101 | kl := len(p.currentKey) | ||
| 102 | b := make([]byte, 0, p.calculateNamespaceSize()+5+kl) | ||
| 103 | |||
| 104 | // add keygroup | ||
| 105 | b = binary.BigEndian.AppendUint16(b, uint16(p.currentGroupKey)) | ||
| 106 | |||
| 107 | // add state id | ||
| 108 | stateID := p.getStateID(statename) | ||
| 109 | b = append(b, stateID) | ||
| 110 | |||
| 111 | // add key | ||
| 112 | b = binary.BigEndian.AppendUint16(b, uint16(kl)) | ||
| 113 | b = append(b, p.currentKey...) | ||
| 114 | |||
| 115 | // add window / namespace | ||
| 116 | |||
| 117 | switch ns := p.currentNamespace.(type) { | ||
| 118 | case core.TimeWindow: | ||
| 119 | b = binary.BigEndian.AppendUint64(b, uint64(ns.Start)) | ||
| 120 | b = binary.BigEndian.AppendUint64(b, uint64(ns.End)) | ||
| 121 | case string: | ||
| 122 | b = append(b, ns...) | ||
| 123 | default: | ||
| 124 | } | ||
| 125 | return b | ||
| 126 | } | ||
