From 6ed72907f4c6be5f17224284dcd3e439638c55ae Mon Sep 17 00:00:00 2001 From: Gabriel mermelstein Date: Mon, 7 Oct 2024 13:01:26 +0300 Subject: [PATCH] fixing setup and adding debug logs --- wakuv2/nwaku.go | 81 +++++++++++++++++++++++++++----------------- wakuv2/nwaku_test.go | 25 +++++++++++--- 2 files changed, 71 insertions(+), 35 deletions(-) diff --git a/wakuv2/nwaku.go b/wakuv2/nwaku.go index 0fcb0b236..4596cae6e 100644 --- a/wakuv2/nwaku.go +++ b/wakuv2/nwaku.go @@ -4,8 +4,8 @@ package wakuv2 /* - #cgo LDFLAGS: -L../third_party/nwaku/vendor/negentropy/cpp/ -lnegentropy -L../third_party/nwaku/build/ -lwaku -lm -ldl -pthread -lminiupnpc -L../third_party/nwaku/vendor/nim-nat-traversal/vendor/miniupnp/miniupnpc/build/ -lnatpmp -L../third_party/nwaku/vendor/nim-nat-traversal/vendor/libnatpmp-upstream/ -L../third_party/nwaku/vendor/nim-libbacktrace/install/usr/lib/ -lbacktrace -Wl,--allow-multiple-definition - #cgo LDFLAGS: -Wl,-rpath,../third_party/nwaku/build/ + #cgo LDFLAGS: -L../third_party/nwaku/build/ -lnegentropy -lwaku + #cgo LDFLAGS: -L../third_party/nwaku -Wl,-rpath,../third_party/nwaku/build/ #include "../third_party/nwaku/library/libwaku.h" #include @@ -19,17 +19,17 @@ package wakuv2 size_t len; } Resp; - void* allocResp() { + static void* allocResp() { return calloc(1, sizeof(Resp)); } - void freeResp(void* resp) { + static void freeResp(void* resp) { if (resp != NULL) { free(resp); } } - char* getMyCharPtr(void* resp) { + static char* getMyCharPtr(void* resp) { if (resp == NULL) { return NULL; } @@ -37,7 +37,7 @@ package wakuv2 return m->msg; } - size_t getMyCharLen(void* resp) { + static size_t getMyCharLen(void* resp) { if (resp == NULL) { return 0; } @@ -45,7 +45,7 @@ package wakuv2 return m->len; } - int getRet(void* resp) { + static int getRet(void* resp) { if (resp == NULL) { return 0; } @@ -54,8 +54,10 @@ package wakuv2 } // resp must be set != NULL in case interest on retrieving data from the callback - void callback(int ret, char* msg, size_t len, void* resp) { + static void callback(int ret, char* msg, size_t len, void* resp) { + printf("---------- GABRIEL calling callback 1 ----\n"); if (resp != NULL) { + printf("---------- GABRIEL calling callback 2 ----\n"); Resp* m = (Resp*) resp; m->ret = ret; m->msg = msg; @@ -65,6 +67,7 @@ package wakuv2 #define WAKU_CALL(call) \ do { \ + printf("---------- GABRIEL calling WAKU_CALL 1 ----\n"); \ int ret = call; \ if (ret != 0) { \ printf("Failed the call to: %s. Returned code: %d\n", #call, ret); \ @@ -72,37 +75,37 @@ package wakuv2 } \ } while (0) - void* cGoWakuNew(const char* configJson, void* resp) { + static void* cGoWakuNew(const char* configJson, void* resp) { // We pass NULL because we are not interested in retrieving data from this callback void* ret = waku_new(configJson, (WakuCallBack) callback, resp); return ret; } - void cGoWakuStart(void* wakuCtx, void* resp) { + static void cGoWakuStart(void* wakuCtx, void* resp) { WAKU_CALL(waku_start(wakuCtx, (WakuCallBack) callback, resp)); } - void cGoWakuStop(void* wakuCtx, void* resp) { + static void cGoWakuStop(void* wakuCtx, void* resp) { WAKU_CALL(waku_stop(wakuCtx, (WakuCallBack) callback, resp)); } - void cGoWakuDestroy(void* wakuCtx, void* resp) { + static void cGoWakuDestroy(void* wakuCtx, void* resp) { WAKU_CALL(waku_destroy(wakuCtx, (WakuCallBack) callback, resp)); } - void cGoWakuStartDiscV5(void* wakuCtx, void* resp) { + static void cGoWakuStartDiscV5(void* wakuCtx, void* resp) { WAKU_CALL(waku_start_discv5(wakuCtx, (WakuCallBack) callback, resp)); } - void cGoWakuStopDiscV5(void* wakuCtx, void* resp) { + static void cGoWakuStopDiscV5(void* wakuCtx, void* resp) { WAKU_CALL(waku_stop_discv5(wakuCtx, (WakuCallBack) callback, resp)); } - void cGoWakuVersion(void* wakuCtx, void* resp) { + static void cGoWakuVersion(void* wakuCtx, void* resp) { WAKU_CALL(waku_version(wakuCtx, (WakuCallBack) callback, resp)); } - void cGoWakuSetEventCallback(void* wakuCtx) { + static void cGoWakuSetEventCallback(void* wakuCtx) { // The 'globalEventCallback' Go function is shared amongst all possible Waku instances. // Given that the 'globalEventCallback' is shared, we pass again the @@ -118,7 +121,7 @@ package wakuv2 waku_set_event_callback(wakuCtx, (WakuCallBack) globalEventCallback, wakuCtx); } - void cGoWakuContentTopic(void* wakuCtx, + static void cGoWakuContentTopic(void* wakuCtx, char* appName, int appVersion, char* contentTopicName, @@ -134,15 +137,15 @@ package wakuv2 resp) ); } - void cGoWakuPubsubTopic(void* wakuCtx, char* topicName, void* resp) { + static void cGoWakuPubsubTopic(void* wakuCtx, char* topicName, void* resp) { WAKU_CALL( waku_pubsub_topic(wakuCtx, topicName, (WakuCallBack) callback, resp) ); } - void cGoWakuDefaultPubsubTopic(void* wakuCtx, void* resp) { + static void cGoWakuDefaultPubsubTopic(void* wakuCtx, void* resp) { WAKU_CALL (waku_default_pubsub_topic(wakuCtx, (WakuCallBack) callback, resp)); } - void cGoWakuRelayPublish(void* wakuCtx, + static void cGoWakuRelayPublish(void* wakuCtx, const char* pubSubTopic, const char* jsonWakuMessage, int timeoutMs, @@ -156,14 +159,14 @@ package wakuv2 resp)); } - void cGoWakuRelaySubscribe(void* wakuCtx, char* pubSubTopic, void* resp) { + static void cGoWakuRelaySubscribe(void* wakuCtx, char* pubSubTopic, void* resp) { WAKU_CALL ( waku_relay_subscribe(wakuCtx, pubSubTopic, (WakuCallBack) callback, resp) ); } - void cGoWakuRelayUnsubscribe(void* wakuCtx, char* pubSubTopic, void* resp) { + static void cGoWakuRelayUnsubscribe(void* wakuCtx, char* pubSubTopic, void* resp) { WAKU_CALL ( waku_relay_unsubscribe(wakuCtx, pubSubTopic, @@ -171,7 +174,7 @@ package wakuv2 resp) ); } - void cGoWakuConnect(void* wakuCtx, char* peerMultiAddr, int timeoutMs, void* resp) { + static void cGoWakuConnect(void* wakuCtx, char* peerMultiAddr, int timeoutMs, void* resp) { WAKU_CALL( waku_connect(wakuCtx, peerMultiAddr, timeoutMs, @@ -179,23 +182,23 @@ package wakuv2 resp) ); } - void cGoWakuListenAddresses(void* wakuCtx, void* resp) { + static void cGoWakuListenAddresses(void* wakuCtx, void* resp) { WAKU_CALL (waku_listen_addresses(wakuCtx, (WakuCallBack) callback, resp) ); } - void cGoWakuGetMyENR(void* ctx, void* resp) { + static void cGoWakuGetMyENR(void* ctx, void* resp) { WAKU_CALL (waku_get_my_enr(ctx, (WakuCallBack) callback, resp) ); } - void cGoWakuListPeersInMesh(void* ctx, char* pubSubTopic, void* resp) { + static void cGoWakuListPeersInMesh(void* ctx, char* pubSubTopic, void* resp) { WAKU_CALL (waku_relay_get_num_peers_in_mesh(ctx, pubSubTopic, (WakuCallBack) callback, resp) ); } - void cGoWakuGetNumConnectedPeers(void* ctx, char* pubSubTopic, void* resp) { + static void cGoWakuGetNumConnectedPeers(void* ctx, char* pubSubTopic, void* resp) { WAKU_CALL (waku_relay_get_num_connected_peers(ctx, pubSubTopic, (WakuCallBack) callback, resp) ); } - void cGoWakuLightpushPublish(void* wakuCtx, + static void cGoWakuLightpushPublish(void* wakuCtx, const char* pubSubTopic, const char* jsonWakuMessage, void* resp) { @@ -207,7 +210,7 @@ package wakuv2 resp)); } - void cGoWakuStoreQuery(void* wakuCtx, + static void cGoWakuStoreQuery(void* wakuCtx, const char* jsonQuery, const char* peerAddr, int timeoutMs, @@ -221,7 +224,7 @@ package wakuv2 resp)); } - void cGoWakuPeerExchangeQuery(void* wakuCtx, + static void cGoWakuPeerExchangeQuery(void* wakuCtx, uint64_t numPeers, void* resp) { @@ -231,7 +234,7 @@ package wakuv2 resp)); } - void cGoWakuGetPeerIdsByProtocol(void* wakuCtx, + static void cGoWakuGetPeerIdsByProtocol(void* wakuCtx, const char* protocol, void* resp) { @@ -1853,12 +1856,19 @@ func (self *Waku) WakuStart() error { var resp = C.allocResp() defer C.freeResp(resp) + + + fmt.Println("------------ GABRIEL called wakuStart") C.cGoWakuStart(self.wakuCtx, resp) + fmt.Println("------------ GABRIEL wakuStart 2") if C.getRet(resp) == C.RET_OK { + fmt.Println("------------ GABRIEL wakuStart received RET_OK") return nil } + fmt.Println("------------ GABRIEL wakuStart 3") errMsg := "error WakuStart: " + C.GoStringN(C.getMyCharPtr(resp), C.int(C.getMyCharLen(resp))) + fmt.Println("------------ GABRIEL error in wakuStart ", errMsg) return errors.New(errMsg) } @@ -2393,11 +2403,16 @@ func New(nodeKey *ecdsa.PrivateKey, onHistoricMessagesRequestFailed func([]byte, peer.ID, error), onPeerStats func(types.ConnStatus)) (*Waku, error) { + fmt.Println("-------- GABRIEL func New 1 ---------") + // Lock the main goroutine to its current OS thread runtime.LockOSThread() + fmt.Println("-------- GABRIEL func New 2 ---------") + WakuSetup() // This should only be called once in the whole app's life + fmt.Println("-------- GABRIEL func New 3 ---------") node, err := wakuNew(nodeKey, fleet, cfg, logger, appDB, ts, onHistoricMessagesRequestFailed, @@ -2406,17 +2421,21 @@ func New(nodeKey *ecdsa.PrivateKey, return nil, err } + fmt.Println("-------- GABRIEL func New 4 ---------") defaultPubsubTopic, err := node.WakuDefaultPubsubTopic() if err != nil { fmt.Println("Error happened:", err.Error()) } + fmt.Println("-------- GABRIEL func New 5 ---------") err = node.WakuRelaySubscribe(defaultPubsubTopic) if err != nil { fmt.Println("Error happened:", err.Error()) } + fmt.Println("-------- GABRIEL func New 6 ---------") node.WakuSetEventCallback() + fmt.Println("-------- GABRIEL func New 7 ---------") return node, nil diff --git a/wakuv2/nwaku_test.go b/wakuv2/nwaku_test.go index 2c1490cb2..9ef5a6422 100644 --- a/wakuv2/nwaku_test.go +++ b/wakuv2/nwaku_test.go @@ -7,6 +7,7 @@ import ( "context" "crypto/rand" "errors" + "fmt" "math/big" "os" "testing" @@ -162,22 +163,27 @@ func parseNodes(rec []string) []*enode.Node { // // IP_ADDRESS=$(hostname -I | awk '{print $1}'); // docker run \ -// -p 60000:60000/tcp -p 9000:9000/udp -p 8645:8645/tcp harbor.status.im/wakuorg/nwaku:v0.31.0 \ -// --tcp-port=60000 --discv5-discovery=true --cluster-id=16 --pubsub-topic=/waku/2/rs/16/32 --pubsub-topic=/waku/2/rs/16/64 \ -// --nat=extip:${IP_ADDRESS} --discv5-discovery --discv5-udp-port=9000 --rest-address=0.0.0.0 --store +// -p 61000:61000/tcp -p 9000:9000/udp -p 8645:8645/tcp harbor.status.im/wakuorg/nwaku:v0.31.0 \ +// --tcp-port=61000 --discv5-discovery=true --cluster-id=16 --pubsub-topic=/waku/2/rs/16/32 --pubsub-topic=/waku/2/rs/16/64 \ +// --nat=extip:${IP_ADDRESS} --discv5-discovery --discv5-udp-port=9000 --rest-address=0.0.0.0 --rest-port=8646 --store func TestBasicWakuV2(t *testing.T) { - nwakuInfo, err := GetNwakuInfo(nil, nil) + fmt.Println("---------- GABRIEL 1 ----------") + extNodeRestPort := 8646 + nwakuInfo, err := GetNwakuInfo(nil, &extNodeRestPort) require.NoError(t, err) + fmt.Println("---------- GABRIEL 2 ----------") // Creating a fake DNS Discovery ENRTree tree, url := makeTestTree("n", parseNodes([]string{nwakuInfo.EnrUri}), nil) + fmt.Println("---------- GABRIEL 3 ----------") enrTreeAddress := url envEnrTreeAddress := os.Getenv("ENRTREE_ADDRESS") if envEnrTreeAddress != "" { enrTreeAddress = envEnrTreeAddress } + fmt.Println("---------- GABRIEL 4 ----------") config := &Config{} setDefaultConfig(config, false) config.Port = 0 @@ -186,30 +192,39 @@ func TestBasicWakuV2(t *testing.T) { config.DiscoveryLimit = 20 config.WakuNodes = []string{enrTreeAddress} w, err := New(nil, "", config, nil, nil, nil, nil, nil) + fmt.Println("---------- GABRIEL 5 ----------") require.NoError(t, err) require.NoError(t, w.Start()) + fmt.Println("---------- GABRIEL 6 ----------") enr, err := w.ENR() require.NoError(t, err) require.NotNil(t, enr) + fmt.Println("---------- GABRIEL 7 ----------") + // DNSDiscovery ctx, cancel := context.WithTimeout(context.TODO(), 30*time.Second) defer cancel() + fmt.Println("---------- GABRIEL 8 ----------") + discoveredNodes, err := dnsdisc.RetrieveNodes(ctx, enrTreeAddress, dnsdisc.WithResolver(config.Resolver)) require.NoError(t, err) + fmt.Println("---------- GABRIEL 9 ----------") // Peer used for retrieving history r, err := rand.Int(rand.Reader, big.NewInt(int64(len(discoveredNodes)))) require.NoError(t, err) storeNode := discoveredNodes[int(r.Int64())] + fmt.Println("---------- GABRIEL 10 ----------") options := func(b *backoff.ExponentialBackOff) { b.MaxElapsedTime = 30 * time.Second } + fmt.Println("---------- GABRIEL 11 ----------") // Sanity check, not great, but it's probably helpful err = tt.RetryWithBackOff(func() error { if len(w.Peers()) < 1 { @@ -219,6 +234,8 @@ func TestBasicWakuV2(t *testing.T) { }, options) require.NoError(t, err) + fmt.Println("---------- GABRIEL 12 ----------") + // Dropping Peer err = w.DropPeer(storeNode.PeerID) require.NoError(t, err)