-
Notifications
You must be signed in to change notification settings - Fork 7
/
type.go
70 lines (60 loc) · 2.35 KB
/
type.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// Copyright 2019-present Open Networking Foundation.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package indexedmap
import (
driverapi "github.com/atomix/atomix-api/go/atomix/management/driver"
indexedmapapi "github.com/atomix/atomix-api/go/atomix/primitive/indexedmap"
"github.com/atomix/atomix-go-framework/pkg/atomix/driver/primitive"
indexedmapdriver "github.com/atomix/atomix-go-framework/pkg/atomix/driver/primitive/indexedmap"
indexedmapro "github.com/atomix/atomix-go-framework/pkg/atomix/driver/proxy/ro/indexedmap"
"github.com/atomix/atomix-go-framework/pkg/atomix/driver/proxy/rsm"
"github.com/gogo/protobuf/jsonpb"
"google.golang.org/grpc"
)
func Register(protocol *rsm.Protocol) {
protocol.Primitives().RegisterPrimitiveType(newIndexedMapType(protocol))
}
func newIndexedMapType(protocol *rsm.Protocol) primitive.PrimitiveType {
return &indexedmapType{
protocol: protocol,
registry: indexedmapdriver.NewProxyRegistry(),
}
}
type indexedmapType struct {
protocol *rsm.Protocol
registry *indexedmapdriver.ProxyRegistry
}
func (p *indexedmapType) Name() string {
return Type
}
func (p *indexedmapType) RegisterServer(s *grpc.Server) {
indexedmapapi.RegisterIndexedMapServiceServer(s, indexedmapdriver.NewProxyServer(p.registry, p.protocol.Env))
}
func (p *indexedmapType) AddProxy(id driverapi.ProxyId, options driverapi.ProxyOptions) error {
config := rsm.RSMConfig{}
if options.Config != nil {
if err := jsonpb.UnmarshalString(string(options.Config), &config); err != nil {
return err
}
}
server := NewProxyServer(p.protocol.Client, config.ReadSync)
if !options.Write {
server = indexedmapro.NewProxyServer(server)
}
return p.registry.AddProxy(id.PrimitiveId, server)
}
func (p *indexedmapType) RemoveProxy(id driverapi.ProxyId) error {
return p.registry.RemoveProxy(id.PrimitiveId)
}
var _ primitive.PrimitiveType = &indexedmapType{}