@@ -216,51 +216,11 @@ func (g *RESTGateway) newAccessTokenContextHandler(parent http.Handler) http.Han
216216}
217217
218218// ReceiptStorePersistence allows other components to access the receipt store persistence for idempotency checks, when co-located in the same address space
219- func (g * RESTGateway ) InitReceiptStore () (receipts.ReceiptStorePersistence , error ) {
220- var receiptStoreConf * receipts.ReceiptStoreConf
221- var receiptStorePersistence receipts.ReceiptStorePersistence
222- if g .conf .MongoDB .URL != "" {
223- receiptStoreConf = & g .conf .MongoDB .ReceiptStoreConf
224- mongoStore := receipts .NewMongoReceipts (& g .conf .MongoDB )
225- receiptStorePersistence = mongoStore
226- if err := mongoStore .Connect (); err != nil {
227- return nil , err
228- }
229- } else if g .conf .LevelDB .Path != "" {
230- receiptStoreConf = & g .conf .LevelDB .ReceiptStoreConf
231- leveldbStore , err := receipts .NewLevelDBReceipts (& g .conf .LevelDB )
232- if err != nil {
233- return nil , err
234- }
235- receiptStorePersistence = leveldbStore
236- } else {
237- receiptStoreConf = & g .conf .MemStore
238- memStore := receipts .NewMemoryReceipts (& g .conf .MemStore )
239- receiptStorePersistence = memStore
240- }
241- g .receipts = newReceiptStore (receiptStoreConf , receiptStorePersistence , g .smartContractGW )
242- return g .receipts .persistence , nil
243- }
244-
245- // Start kicks off the HTTP listener and router
246- func (g * RESTGateway ) Start () (err error ) {
247-
248- // Ensure the receipt store is initialized
249- if g .receipts == nil {
250- if _ , err := g .InitReceiptStore (); err != nil {
251- return err
252- }
253- }
254-
255- if * g .printYAML {
256- b , err := utils .MarshalToYAML (& g .conf )
257- print ("# YAML Configuration snippet for REST Gateway\n " + string (b ))
258- return err
259- }
219+ func (g * RESTGateway ) Init () (receipts.ReceiptStorePersistence , error ) {
260220
261221 tlsConfig , err := utils .CreateTLSConfiguration (& g .conf .HTTP .TLS )
262222 if err != nil {
263- return
223+ return nil , err
264224 }
265225
266226 router := httprouter .New ()
@@ -270,7 +230,7 @@ func (g *RESTGateway) Start() (err error) {
270230 if g .conf .RPC .URL != "" || g .conf .OpenAPI .StoragePath != "" {
271231 rpcClient , err = eth .RPCConnect (& g .conf .RPC )
272232 if err != nil {
273- return err
233+ return nil , err
274234 }
275235 processor = tx .NewTxnProcessor (& g .conf .TxnProcessorConf , & g .conf .RPCConf )
276236 processor .Init (rpcClient )
@@ -281,12 +241,35 @@ func (g *RESTGateway) Start() (err error) {
281241 if g .conf .OpenAPI .StoragePath != "" {
282242 g .smartContractGW , err = contractgateway .NewSmartContractGateway (& g .conf .OpenAPI , & g .conf .TxnProcessorConf , rpcClient , processor , g , g .ws )
283243 if err != nil {
284- return err
244+ return nil , err
285245 }
286246 g .smartContractGW .AddRoutes (router )
287247 }
288248
249+ var receiptStoreConf * receipts.ReceiptStoreConf
250+ var receiptStorePersistence receipts.ReceiptStorePersistence
251+ if g .conf .MongoDB .URL != "" {
252+ receiptStoreConf = & g .conf .MongoDB .ReceiptStoreConf
253+ mongoStore := receipts .NewMongoReceipts (& g .conf .MongoDB )
254+ receiptStorePersistence = mongoStore
255+ if err := mongoStore .Connect (); err != nil {
256+ return nil , err
257+ }
258+ } else if g .conf .LevelDB .Path != "" {
259+ receiptStoreConf = & g .conf .LevelDB .ReceiptStoreConf
260+ leveldbStore , err := receipts .NewLevelDBReceipts (& g .conf .LevelDB )
261+ if err != nil {
262+ return nil , err
263+ }
264+ receiptStorePersistence = leveldbStore
265+ } else {
266+ receiptStoreConf = & g .conf .MemStore
267+ memStore := receipts .NewMemoryReceipts (& g .conf .MemStore )
268+ receiptStorePersistence = memStore
269+ }
270+
289271 router .GET ("/status" , g .statusHandler )
272+ g .receipts = newReceiptStore (receiptStoreConf , receiptStorePersistence , g .smartContractGW )
290273 g .receipts .addRoutes (router )
291274 if len (g .conf .Kafka .Brokers ) > 0 {
292275 wk := newWebhooksKafka (& g .conf .Kafka , g .receipts )
@@ -304,6 +287,25 @@ func (g *RESTGateway) Start() (err error) {
304287 MaxHeaderBytes : MaxHeaderSize ,
305288 }
306289
290+ return g .receipts .persistence , nil
291+ }
292+
293+ // Start kicks off the HTTP listener and router
294+ func (g * RESTGateway ) Start () (err error ) {
295+
296+ if * g .printYAML {
297+ b , err := utils .MarshalToYAML (& g .conf )
298+ print ("# YAML Configuration snippet for REST Gateway\n " + string (b ))
299+ return err
300+ }
301+
302+ // Check we're initialized (caller can choose to call init explicitly)
303+ if g .receipts == nil {
304+ if _ , err = g .Init (); err != nil {
305+ return err
306+ }
307+ }
308+
307309 readyToListen := make (chan bool )
308310 gwDone := make (chan error )
309311 svrDone := make (chan error )
0 commit comments