1
+ use bifrost:: rpc;
1
2
use std:: sync:: Arc ;
2
3
use bifrost:: raft:: state_machine:: master:: ExecError ;
3
4
use neb:: client:: { Client as NebClient , NebClientError } ;
4
- use neb:: server:: { ServerOptions , NebServer , ServerError } ;
5
+ use neb:: server:: { ServerOptions as NebServerOptions , NebServer , ServerError } ;
6
+ use bifrost:: tcp:: { STANDALONE_ADDRESS_STRING } ;
5
7
6
8
use graph:: Graph ;
7
9
@@ -24,29 +26,39 @@ pub struct MorpheusServer {
24
26
}
25
27
26
28
impl MorpheusServer {
27
- pub fn new ( opts : & ServerOptions )
28
- -> Result < Arc < MorpheusServer > , MorpheusServerError > {
29
- let neb_server = NebServer :: new ( opts) . map_err ( MorpheusServerError :: ServerError ) ?;
29
+ pub fn new (
30
+ neb_opts : & NebServerOptions
31
+ ) -> Result < Arc < MorpheusServer > , MorpheusServerError > {
32
+ let server_addr = if neb_opts. standalone { & STANDALONE_ADDRESS_STRING } else { & neb_opts. address } ;
33
+ let rpc_server = rpc:: Server :: new ( server_addr) ;
34
+ rpc:: Server :: listen_and_resume ( & rpc_server) ;
35
+ if !neb_opts. is_meta && neb_opts. standalone {
36
+ return Err ( MorpheusServerError :: ServerError ( ServerError :: StandaloneMustAlsoBeMetaServer ) )
37
+ }
38
+
39
+ let neb_server = NebServer :: new (
40
+ neb_opts, server_addr, & rpc_server
41
+ ) . map_err ( MorpheusServerError :: ServerError ) ?;
30
42
let neb_client = Arc :: new ( NebClient :: new (
31
- & neb_server. rpc , & opts . meta_members ,
32
- & opts . group_name ) . map_err ( MorpheusServerError :: ClientError ) ?) ;
33
- if opts . is_meta {
43
+ & neb_server. rpc , & neb_opts . meta_members ,
44
+ & neb_opts . group_name ) . map_err ( MorpheusServerError :: ClientError ) ?) ;
45
+ if neb_opts . is_meta {
34
46
if let & Some ( ref raft_service) = & neb_server. raft_service {
35
- schema:: SchemaContainer :: new_meta_service ( & opts . group_name , raft_service) ;
47
+ schema:: SchemaContainer :: new_meta_service ( & neb_opts . group_name , raft_service) ;
36
48
} else {
37
49
panic ! ( "raft service should be ready for meta server" ) ;
38
50
}
39
51
}
40
52
let schema_container = schema:: SchemaContainer :: new_client (
41
- & opts . group_name , & neb_client. raft_client , & neb_client, & neb_server. meta
53
+ & neb_opts . group_name , & neb_client. raft_client , & neb_client, & neb_server. meta
42
54
) . map_err ( MorpheusServerError :: InitSchemaError ) ?;
43
55
let graph = Arc :: new ( Graph :: new ( & schema_container, & neb_client)
44
56
. map_err ( MorpheusServerError :: InitSchemaError ) ?) ;
45
57
Ok ( Arc :: new ( MorpheusServer {
46
- neb_server : neb_server ,
47
- neb_client : neb_client ,
48
- schema_container : schema_container ,
49
- graph : graph
58
+ neb_server,
59
+ neb_client,
60
+ schema_container,
61
+ graph
50
62
} ) )
51
63
}
52
64
}
0 commit comments