Skip to content

Commit 86cba7c

Browse files
committed
fix shared ptr copy problem in Graph_T
1 parent c58e8c7 commit 86cba7c

File tree

4 files changed

+22
-11
lines changed

4 files changed

+22
-11
lines changed

modules/graph/grin/src/partition/partition.cc

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,19 @@ GRIN_PARTITIONED_GRAPH grin_get_partitioned_graph_from_storage(int argc, char**
2525
return nullptr;
2626
}
2727
auto pg = new GRIN_PARTITIONED_GRAPH_T();
28+
pg->socket = std::string(argv[0]);
2829
pg->client.Connect(argv[0]);
2930
vineyard::ObjectID obj_id;
3031
std::stringstream ss(argv[1]);
3132
ss >> obj_id;
3233
pg->pg = std::dynamic_pointer_cast<vineyard::ArrowFragmentGroup>(pg->client.GetObject(obj_id));
33-
pg->lgs.resize(pg->pg->total_frag_num(), nullptr);
34+
pg->lgs.resize(pg->pg->total_frag_num(), 0);
3435
for (auto & [fid, location] : pg->pg->FragmentLocations()) {
3536
if (location == pg->client.instance_id()) {
3637
auto obj_id = pg->pg->Fragments().at(fid);
3738
// std::cout << fid << ": " << obj_id << std::endl;
38-
auto frag = std::dynamic_pointer_cast<_GRIN_GRAPH_T>(pg->client.GetObject(obj_id));
39-
pg->lgs[fid] = frag;
39+
// auto frag = std::dynamic_pointer_cast<_GRIN_GRAPH_T>(pg->client.GetObject(obj_id));
40+
pg->lgs[fid] = obj_id;
4041
}
4142
}
4243
return pg;
@@ -102,7 +103,10 @@ const void* grin_get_partition_info(GRIN_PARTITIONED_GRAPH pg, GRIN_PARTITION p)
102103
GRIN_GRAPH grin_get_local_graph_by_partition(GRIN_PARTITIONED_GRAPH pg, GRIN_PARTITION p) {
103104
auto _pg = static_cast<GRIN_PARTITIONED_GRAPH_T*>(pg);
104105
auto g = new GRIN_GRAPH_T();
105-
g->g = _pg->lgs[p];
106+
107+
g->client.Connect(_pg->socket);
108+
g->_g = std::dynamic_pointer_cast<_GRIN_GRAPH_T>(g->client.GetObject(_pg->lgs[p]));
109+
g->g = g->_g.get();
106110
return g;
107111
}
108112
#endif

modules/graph/grin/src/predefine.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ GRIN_DATATYPE ArrowToDataType(std::shared_ptr<arrow::DataType> type) {
6666
}
6767

6868
#ifdef GRIN_ENABLE_VERTEX_LIST
69-
void __grin_init_vertex_list(std::shared_ptr<_GRIN_GRAPH_T> g, GRIN_VERTEX_LIST_T* vl) {
69+
void __grin_init_vertex_list(_GRIN_GRAPH_T* g, GRIN_VERTEX_LIST_T* vl) {
7070
vl->offsets.clear();
7171
vl->vrs.clear();
7272
_GRIN_GRAPH_T::vertices_t vr;
@@ -88,7 +88,7 @@ void __grin_init_vertex_list(std::shared_ptr<_GRIN_GRAPH_T> g, GRIN_VERTEX_LIST_
8888
#endif
8989

9090
#ifdef GRIN_ENABLE_ADJACENT_LIST
91-
void __grin_init_adjacent_list(std::shared_ptr<_GRIN_GRAPH_T> g, GRIN_ADJACENT_LIST_T* al) {
91+
void __grin_init_adjacent_list(_GRIN_GRAPH_T* g, GRIN_ADJACENT_LIST_T* al) {
9292
al->offsets.clear();
9393
al->data.clear();
9494
_GRIN_GRAPH_T::raw_adj_list_t ral;

modules/graph/grin/src/predefine.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ unsigned _grin_get_prop_from_property(unsigned long long int);
9494
typedef vineyard::ArrowFragment<GRIN_OID_T, GRIN_VID_T> _GRIN_GRAPH_T;
9595
struct GRIN_GRAPH_T {
9696
vineyard::Client client;
97-
std::shared_ptr<_GRIN_GRAPH_T> g;
97+
std::shared_ptr<_GRIN_GRAPH_T> _g;
98+
_GRIN_GRAPH_T* g;
9899
};
99100
typedef _GRIN_GRAPH_T::vertex_t GRIN_VERTEX_T;
100101
struct GRIN_EDGE_T {
@@ -117,7 +118,7 @@ struct GRIN_VERTEX_LIST_T {
117118
std::vector<unsigned> offsets;
118119
std::vector<_GRIN_GRAPH_T::vertices_t> vrs;
119120
};
120-
void __grin_init_vertex_list(std::shared_ptr<_GRIN_GRAPH_T> g, GRIN_VERTEX_LIST_T* vl);
121+
void __grin_init_vertex_list(_GRIN_GRAPH_T* g, GRIN_VERTEX_LIST_T* vl);
121122
#endif
122123

123124
#ifdef GRIN_ENABLE_VERTEX_LIST_ITERATOR
@@ -140,7 +141,7 @@ struct GRIN_ADJACENT_LIST_T {
140141
std::vector<unsigned> offsets;
141142
std::vector<_GRIN_GRAPH_T::raw_adj_list_t> data;
142143
};
143-
void __grin_init_adjacent_list(std::shared_ptr<_GRIN_GRAPH_T> g, GRIN_ADJACENT_LIST_T* al);
144+
void __grin_init_adjacent_list(_GRIN_GRAPH_T* g, GRIN_ADJACENT_LIST_T* al);
144145
#endif
145146

146147
#ifdef GRIN_ENABLE_ADJACENT_LIST_ITERATOR
@@ -157,9 +158,10 @@ struct GRIN_ADJACENT_LIST_ITERATOR_T {
157158

158159
#ifdef GRIN_ENABLE_GRAPH_PARTITION
159160
struct GRIN_PARTITIONED_GRAPH_T {
161+
std::string socket;
160162
vineyard::Client client;
161163
std::shared_ptr<vineyard::ArrowFragmentGroup> pg;
162-
std::vector<std::shared_ptr<_GRIN_GRAPH_T>> lgs;
164+
std::vector<vineyard::ObjectID> lgs;
163165
};
164166
typedef unsigned GRIN_PARTITION_T;
165167
typedef std::vector<unsigned> GRIN_PARTITION_LIST_T;

modules/graph/grin/src/topology/structure.cc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,22 @@ limitations under the License.
1717
extern "C" {
1818
#include "graph/grin/include/topology/structure.h"
1919
}
20+
#include "client/client.h"
2021

2122
GRIN_GRAPH grin_get_graph_from_storage(int argc, char** argv) {
2223
if (argc < 2) {
2324
return nullptr;
2425
}
26+
2527
auto g = new GRIN_GRAPH_T();
2628
g->client.Connect(argv[0]);
29+
2730
vineyard::ObjectID obj_id;
2831
std::stringstream ss(argv[1]);
2932
ss >> obj_id;
30-
g->g = std::dynamic_pointer_cast<_GRIN_GRAPH_T>(g->client.GetObject(obj_id));
33+
34+
g->_g = std::dynamic_pointer_cast<_GRIN_GRAPH_T>(g->client.GetObject(obj_id));
35+
g->g = g->_g.get();
3136
return g;
3237
}
3338

0 commit comments

Comments
 (0)