Motr  M0
server.c
Go to the documentation of this file.
1 /* -*- C -*- */
2 /*
3  * Copyright (c) 2012-2020 Seagate Technology LLC and/or its Affiliates
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * For any questions about this software or licensing,
18  * please email opensource@seagate.com or cortx-questions@seagate.com.
19  *
20  */
21 
22 
23 #include <signal.h>
24 #include <unistd.h> /* sleep */
25 
26 #define M0_TRACE_SUBSYSTEM M0_TRACE_SUBSYS_OTHER
27 #include "lib/trace.h"
28 
29 #include "net/lnet/lnet.h"
30 #include "motr/init.h" /* m0_init */
31 #include "lib/getopts.h" /* M0_GETOPTS */
32 #include "module/instance.h" /* m0 */
33 #include "ut/module.h" /* m0_ut_module (XXX DELETEME) */
34 #include "rpc/rpclib.h" /* m0_rpc_server_start */
35 #include "ut/cs_service.h" /* m0_cs_default_stypes */
36 #include "ut/misc.h" /* M0_UT_PATH */
37 #include "ut/ut.h" /* m0_ut_init */
38 
39 #include "console/console.h"
40 #include "console/console_fop.h"
41 #include "conf/ut/common.h" /* SERVER_ENDPOINT_ADDR */
42 
48 #define ENDPOINT M0_NET_XPRT_PREFIX_DEFAULT":"SERVER_ENDPOINT_ADDR
49 #define NAME(ext) "console_st_srv" ext
50 
51 static int signaled = 0;
52 
53 static void sig_handler(int num)
54 {
55  signaled = 1;
56 }
57 
59 int main(int argc, char **argv)
60 {
61  enum { CONSOLE_STR_LEN = 16 };
62  static struct m0 instance;
63  char tm_len[CONSOLE_STR_LEN];
64  char rpc_size[CONSOLE_STR_LEN];
65  int result;
68  char *server_argv[] = {
69  argv[0], "-T", "AD", "-D", NAME(".db"),
70  "-S", NAME(".stob"), "-A", "linuxstob:"NAME("-addb.stob"),
71  "-w", "10", "-e", ENDPOINT, "-H", SERVER_ENDPOINT_ADDR,
72  "-f", M0_UT_CONF_PROCESS,
73  "-c", M0_UT_PATH("diter.xc"),
74  "-q", tm_len, "-m", rpc_size
75  };
76  struct m0_rpc_server_ctx sctx = {
78  .rsx_argc = ARRAY_SIZE(server_argv),
79  .rsx_log_file_name = NAME(".log")
80  };
81 
82  M0_ENTRY();
83 
86 
87  /* We have to use m0_ut_init() here, because it initialises
88  * m0_cs_default_stypes. XXX FIXME */
89  result = m0_ut_init(&instance);
90  if (result != 0)
91  return M0_RC(-result);
92 
95 
96  m0_console_verbose = false;
97  result = M0_GETOPTS("server", argc, argv,
98  M0_FLAGARG('v', "verbose", &m0_console_verbose),
99  M0_FORMATARG('q', "minimum TM receive queue length",
100  "%i", &tm_recv_queue_len),
101  M0_FORMATARG('m', "max rpc msg size", "%i",
102  &max_rpc_msg_size),);
103  if (result != 0)
104  return M0_RC(-result);
105 
106  sprintf(tm_len, "%d", tm_recv_queue_len);
107  sprintf(rpc_size, "%d", max_rpc_msg_size);
108 
109  result = m0_console_fop_init();
110  if (result != 0)
111  goto ut_fini;
112 
113  result = m0_rpc_server_start(&sctx);
114  if (result != 0)
115  goto fop_fini;
116 
117  printf("Press CTRL+C to quit.\n");
118  signal(SIGINT, sig_handler);
119  while (!signaled)
120  sleep(1);
121  printf("\nExiting Server.\n");
122 
124 fop_fini:
126 ut_fini:
127  m0_ut_fini();
128  return M0_RC(-result);
129 }
130 
132 #undef M0_TRACE_SUBSYSTEM
133 
134 /*
135  * Local variables:
136  * c-indentation-style: "K&R"
137  * c-basic-offset: 8
138  * tab-width: 8
139  * fill-column: 80
140  * scroll-step: 1
141  * End:
142  */
#define M0_GETOPTS(progname, argc, argv,...)
Definition: getopts.h:169
#define M0_FLAGARG(ch, desc, ptr)
Definition: getopts.h:232
static uint32_t max_rpc_msg_size
Definition: m0dixinit.c:72
char ** rsx_argv
Definition: rpclib.h:77
int m0_rpc_server_start(struct m0_rpc_server_ctx *sctx)
Definition: rpclib.c:50
static int ut_fini(void)
Definition: bytecount.c:50
M0_INTERNAL void m0_instance_setup(struct m0 *instance)
Definition: instance.c:110
struct m0_module *(* mt_create)(struct m0 *instance)
Definition: module.h:199
return M0_RC(rc)
#define M0_ENTRY(...)
Definition: trace.h:170
M0_INTERNAL void m0_ut_fini(void)
Definition: ut.c:95
static int tm_recv_queue_len
Definition: fdmi_echo.c:85
#define M0_FORMATARG(ch, desc, fmt, ptr)
Definition: getopts.h:218
M0_INTERNAL int m0_ut_init(struct m0 *instance)
Definition: ut.c:64
static int signaled
Definition: server.c:51
int m0_net_xprt_nr(void)
Definition: net.c:168
Definition: instance.h:80
struct m0_net_xprt ** rsx_xprts
Definition: rpclib.h:69
static struct m0_rpc_server_ctx sctx
Definition: console.c:88
static void fop_fini(void)
Definition: iterator_test.c:41
#define NAME(ext)
Definition: server.c:49
bool m0_console_verbose
Definition: console.c:50
const struct m0_module_type m0_ut_module_type
Definition: module.c:37
int main(int argc, char **argv)
Test server for m0console.
Definition: dump.c:195
int rsx_xprts_nr
Definition: rpclib.h:71
#define M0_UT_CONF_PROCESS
Definition: misc.h:45
struct m0_net_xprt ** m0_net_all_xprt_get(void)
Definition: net.c:161
static char * server_argv[]
Definition: console.c:80
static struct m0 instance
Definition: main.c:78
void m0_rpc_server_stop(struct m0_rpc_server_ctx *sctx)
Definition: rpclib.c:85
#define SERVER_ENDPOINT_ADDR
Definition: common.h:30
#define M0_UT_PATH(name)
Definition: misc.h:41
#define ENDPOINT
Definition: server.c:48
M0_INTERNAL int m0_console_fop_init(void)
Definition: console_fop.c:51
int num
Definition: bulk_if.c:54
M0_INTERNAL void m0_console_fop_fini(void)
Definition: console_fop.c:42
#define ARRAY_SIZE(a)
Definition: misc.h:45
static void sig_handler(int num)
Definition: server.c:53