From e7c4465811d558ebccea746ca4d87f398ebf3cb2 Mon Sep 17 00:00:00 2001
From: Siyuan Zhang <siyuanzhang.zsy@alibaba-inc.com>
Date: Wed, 25 Sep 2024 19:22:37 +0800
Subject: [PATCH] Fix several compile errors with GraphScope (#173)

---
 .../analytical_apps/pagerank/pagerank_vc_context.h |  6 +++---
 examples/analytical_apps/run_app_vc.h              |  2 +-
 grape/fragment/basic_vc_fragment_loader.h          |  2 +-
 grape/fragment/immutable_vertexcut_fragment.h      | 14 +++++++++++---
 grape/vertex_map/partitioner.h                     |  9 +++++----
 5 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/examples/analytical_apps/pagerank/pagerank_vc_context.h b/examples/analytical_apps/pagerank/pagerank_vc_context.h
index 00f3dd96..efdff3ac 100644
--- a/examples/analytical_apps/pagerank/pagerank_vc_context.h
+++ b/examples/analytical_apps/pagerank/pagerank_vc_context.h
@@ -16,6 +16,7 @@ limitations under the License.
 #ifndef EXAMPLES_ANALYTICAL_APPS_PAGERANK_PAGERANK_VC_CONTEXT_H_
 #define EXAMPLES_ANALYTICAL_APPS_PAGERANK_PAGERANK_VC_CONTEXT_H_
 
+#include "grape/grape.h"
 #include "grape/utils/memory_tracker.h"
 
 #include <iomanip>
@@ -24,9 +25,8 @@ namespace grape {
 
 template <typename FRAG_T>
 class PageRankVCContext : public VertexDataContext<FRAG_T, double> {
-  using oid_t = typename FRAG_T::oid_t;
-
  public:
+  using oid_t = typename FRAG_T::oid_t;
   explicit PageRankVCContext(const FRAG_T& fragment)
       : VertexDataContext<FRAG_T, double>(fragment),
         master_result(this->data()) {
@@ -64,7 +64,7 @@ class PageRankVCContext : public VertexDataContext<FRAG_T, double> {
 #ifdef PROFILING
     VLOG(2) << "[frag-" << frag.fid() << "]: init degree: " << t0 << " s, "
             << "calc master result: " << t1 << " s, "
-            << "propogate: " << t2 << " s";
+            << "propagate: " << t2 << " s";
 #endif
   }
 
diff --git a/examples/analytical_apps/run_app_vc.h b/examples/analytical_apps/run_app_vc.h
index 6a9a2b5b..5aa95d6c 100644
--- a/examples/analytical_apps/run_app_vc.h
+++ b/examples/analytical_apps/run_app_vc.h
@@ -38,7 +38,7 @@ void CreateAndQueryVC(const CommSpec& comm_spec, const std::string& out_prefix,
   graph_spec.load_concurrency = FLAGS_load_concurrency;
 
   using FRAG_T =
-      ImmutableVertexcutFragment<int64_t, grape::EmptyType, grape::EmptyType>;
+      ImmutableVertexcutFragment<uint64_t, grape::EmptyType, grape::EmptyType>;
   std::shared_ptr<FRAG_T> fragment = LoadVertexcutGraph<FRAG_T>(
       FLAGS_efile, FLAGS_vertex_num, comm_spec, graph_spec);
 #ifdef TRACKING_MEMORY
diff --git a/grape/fragment/basic_vc_fragment_loader.h b/grape/fragment/basic_vc_fragment_loader.h
index fc04523e..6ce26a21 100644
--- a/grape/fragment/basic_vc_fragment_loader.h
+++ b/grape/fragment/basic_vc_fragment_loader.h
@@ -119,7 +119,7 @@ class BasicVCFragmentLoader {
       std::vector<std::thread> scan_threads;
       for (int i = 0; i < load_concurrency_; ++i) {
         scan_threads.emplace_back(
-            [this, &bucket_edge_num, &thread_local_bucket_edge_num](int tid) {
+            [this, &thread_local_bucket_edge_num](int tid) {
               auto& vec = thread_local_bucket_edge_num[tid];
               vec.clear();
               vec.resize(bucket_num_ * bucket_num_, 0);
diff --git a/grape/fragment/immutable_vertexcut_fragment.h b/grape/fragment/immutable_vertexcut_fragment.h
index 010f7265..3adb1bf2 100644
--- a/grape/fragment/immutable_vertexcut_fragment.h
+++ b/grape/fragment/immutable_vertexcut_fragment.h
@@ -36,13 +36,16 @@ template <typename OID_T, typename VDATA_T, typename EDATA_T>
 class ImmutableVertexcutFragment {};
 
 template <>
-class ImmutableVertexcutFragment<int64_t, EmptyType, EmptyType>
-    : public FragmentBase<int64_t, EmptyType, EmptyType> {
+class ImmutableVertexcutFragment<uint64_t, EmptyType, EmptyType>
+    : public FragmentBase<uint64_t, EmptyType, EmptyType> {
  public:
-  using oid_t = int64_t;
+  using oid_t = uint64_t;
+  using vid_t = uint64_t;
   using edata_t = EmptyType;
   using vdata_t = EmptyType;
+  using vertex_t = Vertex<vid_t>;
   using vertices_t = VertexRange<oid_t>;
+  using vertex_range_t = VertexRange<vid_t>;
   using both_vertices_t = DualVertexRange<oid_t>;
   using edge_t = Edge<oid_t, edata_t>;
   using base_t = FragmentBase<oid_t, vdata_t, edata_t>;
@@ -74,6 +77,8 @@ class ImmutableVertexcutFragment<int64_t, EmptyType, EmptyType>
   using base_t::fid_;
   using base_t::fnum_;
 
+  inline const EmptyType& GetData(const vertex_t& v) const { return data_; }
+
   void Init(const CommSpec& comm_spec, int64_t vnum,
             std::vector<edge_t>&& edges, int bucket_num = 1,
             std::vector<size_t>&& bucket_edge_offsets = {}) {
@@ -146,6 +151,7 @@ class ImmutableVertexcutFragment<int64_t, EmptyType, EmptyType>
   const vertices_t& DestinationVertices() const { return dst_vertices_; }
   const both_vertices_t& Vertices() const { return vertices_; }
 
+  const vertices_t& InnerVertices() const { return master_vertices_; }
   const vertices_t& MasterVertices() const { return master_vertices_; }
 
 #ifdef USE_EDGE_ARRAY
@@ -245,6 +251,7 @@ class ImmutableVertexcutFragment<int64_t, EmptyType, EmptyType>
   }
 
   int GetBucketNum() const { return bucket_num_; }
+  oid_t GetId(const Vertex<oid_t>& v) const { return v.GetValue(); }
 
  private:
   void buildBucket(int thread_num) {
@@ -334,6 +341,7 @@ class ImmutableVertexcutFragment<int64_t, EmptyType, EmptyType>
 #endif
   int bucket_num_;
   std::vector<size_t> bucket_edge_offsets_;
+  EmptyType data_;
 };
 
 }  // namespace grape
diff --git a/grape/vertex_map/partitioner.h b/grape/vertex_map/partitioner.h
index 0210e755..12f6b39c 100644
--- a/grape/vertex_map/partitioner.h
+++ b/grape/vertex_map/partitioner.h
@@ -269,8 +269,9 @@ template <typename OID_T>
 struct VCPartitioner {};
 
 template <>
-struct VCPartitioner<int64_t> {
-  using vertices_t = VertexRange<int64_t>;
+struct VCPartitioner<uint64_t> {
+  using oid_t = uint64_t;
+  using vertices_t = VertexRange<oid_t>;
 
  public:
   VCPartitioner() {}
@@ -287,11 +288,11 @@ struct VCPartitioner<int64_t> {
     vchunk_ = master_vchunk_ * fnum_sr_;
   }
 
-  fid_t get_edge_partition(const int64_t& src, const int64_t& dst) const {
+  fid_t get_edge_partition(const oid_t& src, const oid_t& dst) const {
     return coord_to_fid(get_vertex_coord(src), get_vertex_coord(dst));
   }
 
-  fid_t get_vertex_coord(const int64_t& v) const { return v / vchunk_; }
+  fid_t get_vertex_coord(const oid_t& v) const { return v / vchunk_; }
 
   fid_t coord_to_fid(const fid_t& src, const fid_t& dst) const {
     return src * fnum_sr_ + dst;