ipfs-cluster/rpcutil/policygen/policygen.go
Kishan Sagathiya 5258a4d428 Remove map pintracker (#944)
This removes mappintracker and sets stateless tracker as the default (and only) pintracker component.

Because the stateless tracker matches the cluster state with only ongoing operations being kept on memory, and additional information provided by ipfs-pin-ls, syncing operations are not necessary. Therefore the Sync/SyncAll operations are removed cluster-wide.
2019-12-12 21:22:54 +01:00

102 lines
3.2 KiB
Go

package main
import (
"fmt"
"go/format"
"os"
"reflect"
"strings"
cluster "github.com/ipfs/ipfs-cluster"
)
func rpcTypeStr(t cluster.RPCEndpointType) string {
switch t {
case cluster.RPCClosed:
return "RPCClosed"
case cluster.RPCTrusted:
return "RPCTrusted"
case cluster.RPCOpen:
return "RPCOpen"
default:
return "ERROR"
}
}
var comments = map[string]string{
"Cluster.PeerAdd": "Used by Join()",
"Cluster.Peers": "Used by ConnectGraph()",
"Cluster.Pins": "Used in stateless tracker, ipfsproxy, restapi",
"PinTracker.Recover": "Called in broadcast from Recover()",
"PinTracker.RecoverAll": "Broadcast in RecoverAll unimplemented",
"Pintracker.Status": "Called in broadcast from Status()",
"Pintracker.StatusAll": "Called in broadcast from StatusAll()",
"IPFSConnector.BlockPut": "Called from Add()",
"IPFSConnector.RepoStat": "Called in broadcast from proxy/repo/stat",
"IPFSConnector.SwarmPeers": "Called in ConnectGraph",
"Consensus.AddPeer": "Called by Raft/redirect to leader",
"Consensus.LogPin": "Called by Raft/redirect to leader",
"Consensus.LogUnpin": "Called by Raft/redirect to leader",
"Consensus.RmPeer": "Called by Raft/redirect to leader",
}
func main() {
rpcComponents := []interface{}{
&cluster.ClusterRPCAPI{},
&cluster.PinTrackerRPCAPI{},
&cluster.IPFSConnectorRPCAPI{},
&cluster.ConsensusRPCAPI{},
&cluster.PeerMonitorRPCAPI{},
}
fmt.Fprintln(os.Stderr, `
// The below generated policy keeps the endpoint types
// from the existing one, marking new endpoints as NEW. Redirect stdout
// into ../../rpc_policy.go and set the NEW endpoints to their correct
// type (make sure you have recompiled this binary with the current version
// of the code). If you are redirecting already, and things went fine, you
// should only see this message.
============================================================================`)
fmt.Fprintln(os.Stderr)
var rpcPolicyDotGo strings.Builder
rpcPolicyDotGo.WriteString("package ipfscluster\n\n")
rpcPolicyDotGo.WriteString("// This file can be generated with rpcutil/policygen.\n\n")
rpcPolicyDotGo.WriteString(`
// DefaultRPCPolicy associates all rpc endpoints offered by cluster peers to an
// endpoint type. See rpcutil/policygen.go as a quick way to generate this
// without missing any endpoint.`)
rpcPolicyDotGo.WriteString("\nvar DefaultRPCPolicy = map[string]RPCEndpointType{\n")
for _, c := range rpcComponents {
t := reflect.TypeOf(c)
rpcPolicyDotGo.WriteString("// " + cluster.RPCServiceID(c) + " methods\n")
for i := 0; i < t.NumMethod(); i++ {
method := t.Method(i)
name := cluster.RPCServiceID(c) + "." + method.Name
rpcT, ok := cluster.DefaultRPCPolicy[name]
rpcTStr := "NEW"
if ok {
rpcTStr = rpcTypeStr(rpcT)
}
comment, ok := comments[name]
if ok {
comment = "// " + comment
}
fmt.Fprintf(&rpcPolicyDotGo, "\"%s\": %s, %s\n", name, rpcTStr, comment)
}
rpcPolicyDotGo.WriteString("\n")
}
rpcPolicyDotGo.WriteString("}\n")
src, err := format.Source([]byte(rpcPolicyDotGo.String()))
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
fmt.Println(string(src))
}