add config options and graph.Handle
This commit is contained in:
parent
a1e5a53dd5
commit
8821c1968d
3 changed files with 81 additions and 41 deletions
|
|
@ -26,25 +26,29 @@ import (
|
|||
)
|
||||
|
||||
type Config struct {
|
||||
DatabaseType string
|
||||
DatabasePath string
|
||||
DatabaseOptions map[string]interface{}
|
||||
ListenHost string
|
||||
ListenPort string
|
||||
ReadOnly bool
|
||||
Timeout time.Duration
|
||||
LoadSize int
|
||||
DatabaseType string
|
||||
DatabasePath string
|
||||
DatabaseOptions map[string]interface{}
|
||||
ReplicationType string
|
||||
ReplicationOptions map[string]interface{}
|
||||
ListenHost string
|
||||
ListenPort string
|
||||
ReadOnly bool
|
||||
Timeout time.Duration
|
||||
LoadSize int
|
||||
}
|
||||
|
||||
type config struct {
|
||||
DatabaseType string `json:"database"`
|
||||
DatabasePath string `json:"db_path"`
|
||||
DatabaseOptions map[string]interface{} `json:"db_options"`
|
||||
ListenHost string `json:"listen_host"`
|
||||
ListenPort string `json:"listen_port"`
|
||||
ReadOnly bool `json:"read_only"`
|
||||
Timeout duration `json:"timeout"`
|
||||
LoadSize int `json:"load_size"`
|
||||
DatabaseType string `json:"database"`
|
||||
DatabasePath string `json:"db_path"`
|
||||
DatabaseOptions map[string]interface{} `json:"db_options"`
|
||||
ReplicationType string `json:"replication"`
|
||||
ReplicationOptions map[string]interface{} `json:"replication_options"`
|
||||
ListenHost string `json:"listen_host"`
|
||||
ListenPort string `json:"listen_port"`
|
||||
ReadOnly bool `json:"read_only"`
|
||||
Timeout duration `json:"timeout"`
|
||||
LoadSize int `json:"load_size"`
|
||||
}
|
||||
|
||||
func (c *Config) UnmarshalJSON(data []byte) error {
|
||||
|
|
@ -54,28 +58,32 @@ func (c *Config) UnmarshalJSON(data []byte) error {
|
|||
return err
|
||||
}
|
||||
*c = Config{
|
||||
DatabaseType: t.DatabaseType,
|
||||
DatabasePath: t.DatabasePath,
|
||||
DatabaseOptions: t.DatabaseOptions,
|
||||
ListenHost: t.ListenHost,
|
||||
ListenPort: t.ListenPort,
|
||||
ReadOnly: t.ReadOnly,
|
||||
Timeout: time.Duration(t.Timeout),
|
||||
LoadSize: t.LoadSize,
|
||||
DatabaseType: t.DatabaseType,
|
||||
DatabasePath: t.DatabasePath,
|
||||
DatabaseOptions: t.DatabaseOptions,
|
||||
ReplicationType: t.ReplicationType,
|
||||
ReplicationOptions: t.ReplicationOptions,
|
||||
ListenHost: t.ListenHost,
|
||||
ListenPort: t.ListenPort,
|
||||
ReadOnly: t.ReadOnly,
|
||||
Timeout: time.Duration(t.Timeout),
|
||||
LoadSize: t.LoadSize,
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Config) MarshalJSON() ([]byte, error) {
|
||||
return json.Marshal(config{
|
||||
DatabaseType: c.DatabaseType,
|
||||
DatabasePath: c.DatabasePath,
|
||||
DatabaseOptions: c.DatabaseOptions,
|
||||
ListenHost: c.ListenHost,
|
||||
ListenPort: c.ListenPort,
|
||||
ReadOnly: c.ReadOnly,
|
||||
Timeout: duration(c.Timeout),
|
||||
LoadSize: c.LoadSize,
|
||||
DatabaseType: c.DatabaseType,
|
||||
DatabasePath: c.DatabasePath,
|
||||
DatabaseOptions: c.DatabaseOptions,
|
||||
ReplicationType: c.ReplicationType,
|
||||
ReplicationOptions: c.ReplicationOptions,
|
||||
ListenHost: c.ListenHost,
|
||||
ListenPort: c.ListenPort,
|
||||
ReadOnly: c.ReadOnly,
|
||||
Timeout: duration(c.Timeout),
|
||||
LoadSize: c.LoadSize,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -115,13 +123,14 @@ func (d *duration) MarshalJSON() ([]byte, error) {
|
|||
}
|
||||
|
||||
var (
|
||||
databasePath = flag.String("dbpath", "/tmp/testdb", "Path to the database.")
|
||||
databaseBackend = flag.String("db", "memstore", "Database Backend.")
|
||||
host = flag.String("host", "0.0.0.0", "Host to listen on (defaults to all).")
|
||||
loadSize = flag.Int("load_size", 10000, "Size of triplesets to load")
|
||||
port = flag.String("port", "64210", "Port to listen on.")
|
||||
readOnly = flag.Bool("read_only", false, "Disable writing via HTTP.")
|
||||
timeout = flag.Duration("timeout", 30*time.Second, "Elapsed time until an individual query times out.")
|
||||
databasePath = flag.String("dbpath", "/tmp/testdb", "Path to the database.")
|
||||
databaseBackend = flag.String("db", "memstore", "Database Backend.")
|
||||
replicationBackend = flag.String("replication", "single", "Replication method.")
|
||||
host = flag.String("host", "0.0.0.0", "Host to listen on (defaults to all).")
|
||||
loadSize = flag.Int("load_size", 10000, "Size of triplesets to load")
|
||||
port = flag.String("port", "64210", "Port to listen on.")
|
||||
readOnly = flag.Bool("read_only", false, "Disable writing via HTTP.")
|
||||
timeout = flag.Duration("timeout", 30*time.Second, "Elapsed time until an individual query times out.")
|
||||
)
|
||||
|
||||
func ParseConfigFromFile(filename string) *Config {
|
||||
|
|
@ -175,6 +184,10 @@ func ParseConfigFromFlagsAndFile(fileFlag string) *Config {
|
|||
config.DatabaseType = *databaseBackend
|
||||
}
|
||||
|
||||
if config.ReplicationType == "" {
|
||||
config.ReplicationType = *replicationBackend
|
||||
}
|
||||
|
||||
if config.ListenHost == "" {
|
||||
config.ListenHost = *host
|
||||
}
|
||||
|
|
|
|||
26
db/db.go
26
db/db.go
|
|
@ -36,8 +36,20 @@ func Init(cfg *config.Config) error {
|
|||
return graph.InitTripleStore(cfg.DatabaseType, cfg.DatabasePath, cfg.DatabaseOptions)
|
||||
}
|
||||
|
||||
func Open(cfg *config.Config) (graph.TripleStore, error) {
|
||||
glog.Infof("Opening database %q at %s", cfg.DatabaseType, cfg.DatabasePath)
|
||||
func Open(cfg *config.Config) (*graph.Handle, error) {
|
||||
qs, err := OpenQuadStore(cfg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
qw, err := OpenQuadWriter(qs, cfg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &graph.Handle{QuadStore: qs, QuadWriter: qw}, nil
|
||||
}
|
||||
|
||||
func OpenQuadStore(cfg *config.Config) (graph.TripleStore, error) {
|
||||
glog.Infof("Opening quad store %q at %s", cfg.DatabaseType, cfg.DatabasePath)
|
||||
ts, err := graph.NewTripleStore(cfg.DatabaseType, cfg.DatabasePath, cfg.DatabaseOptions)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
@ -46,6 +58,16 @@ func Open(cfg *config.Config) (graph.TripleStore, error) {
|
|||
return ts, nil
|
||||
}
|
||||
|
||||
func OpenQuadWriter(qs graph.TripleStore, cfg *config.Config) (graph.QuadWriter, error) {
|
||||
glog.Infof("Opening replication method %q", cfg.ReplicationType)
|
||||
w, err := graph.NewQuadWriter(cfg.ReplicationType, qs, cfg.ReplicationOptions)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return w, nil
|
||||
}
|
||||
|
||||
func Load(ts graph.TripleStore, cfg *config.Config, dec quad.Unmarshaler) error {
|
||||
bulker, canBulk := ts.(graph.BulkLoader)
|
||||
if canBulk {
|
||||
|
|
|
|||
|
|
@ -43,6 +43,11 @@ type Delta struct {
|
|||
Timestamp time.Time
|
||||
}
|
||||
|
||||
type Handle struct {
|
||||
QuadStore TripleStore
|
||||
QuadWriter QuadWriter
|
||||
}
|
||||
|
||||
var ErrQuadExists = errors.New("Quad exists")
|
||||
var ErrQuadNotExist = errors.New("Quad doesn't exist")
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue