Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement grin interface for flex #3010

Merged
merged 35 commits into from
Jul 19, 2023
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
deb8e2d
add grin interface for flex
liulx20 Jul 12, 2023
e877065
add pk interfaces
liulx20 Jul 13, 2023
d704f7f
add grin interfaces for flex
liulx20 Jul 13, 2023
3d18997
add grin interfaces for flex
liulx20 Jul 13, 2023
f99ef2a
implement get_edge_num_by_type interfaces
liulx20 Jul 14, 2023
b8aa2ac
add test.c
liulx20 Jul 14, 2023
799825e
mv grin to graph_db
liulx20 Jul 14, 2023
8318312
rm include
liulx20 Jul 14, 2023
1d50c68
rm include
liulx20 Jul 14, 2023
10859f3
update libgrape-lite version
liulx20 Jul 14, 2023
dddeb54
Redesign the data structure for vertex
liulx20 Jul 14, 2023
17c2cb6
remove not supported feature
liulx20 Jul 14, 2023
4f40457
Remove unnecessary dependencies
liulx20 Jul 17, 2023
543c726
use raw pointer instead of shared_ptr
liulx20 Jul 17, 2023
9f9dadf
GRIN_VERTEX_PROPERTY as u32
liulx20 Jul 18, 2023
d647eac
GRIN_VERTEX_PROPERTY as u32
liulx20 Jul 18, 2023
1e2f3fd
add note
liulx20 Jul 18, 2023
6c69f78
Redesigned adj iter
liulx20 Jul 18, 2023
fc263ea
use SCNd64 for int64
liulx20 Jul 18, 2023
fdaf968
Adjusting the grin include directory
liulx20 Jul 18, 2023
16d5768
Adjusting the grin include directory
liulx20 Jul 18, 2023
5168b13
add CI
liulx20 Jul 18, 2023
d27a961
add CI
liulx20 Jul 18, 2023
9f76b69
add CI
liulx20 Jul 18, 2023
576aaae
add CI
liulx20 Jul 18, 2023
6e67c56
add CI
liulx20 Jul 18, 2023
ff245a6
add CI
liulx20 Jul 18, 2023
04aa88a
add CI
liulx20 Jul 18, 2023
6c283a4
add CI
liulx20 Jul 18, 2023
1f9bf47
add CI test
liulx20 Jul 18, 2023
9067405
add CI
liulx20 Jul 18, 2023
02d8a5a
Merge branch 'main' into add_grin
liulx20 Jul 18, 2023
b2dd5ea
add cache for vertex properties
liulx20 Jul 19, 2023
a5d9574
add cache for vertex properties
liulx20 Jul 19, 2023
5952524
Merge branch 'main' into add_grin
liulx20 Jul 19, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
[submodule "learning_engine/graph-learn"]
path = learning_engine/graph-learn
url = https://github.com/alibaba/graph-learn.git
[submodule "flex/engines/graph_db/grin/include"]
path = flex/engines/graph_db/grin/include
url = https://github.com/GraphScope/GRIN.git
6 changes: 6 additions & 0 deletions flex/engines/graph_db/database/transaction_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ inline void serialize_field(grape::InArchive& arc, const Any& prop) {
case PropertyType::kInt64:
arc << prop.value.l;
break;
case PropertyType::kDouble:
arc << prop.value.db;
break;
default:
LOG(FATAL) << "Unexpected property type";
}
Expand All @@ -60,6 +63,9 @@ inline void deserialize_field(grape::OutArchive& arc, Any& prop) {
case PropertyType::kInt64:
arc >> prop.value.l;
break;
case PropertyType::kDouble:
arc >> prop.value.db;
break;
default:
LOG(FATAL) << "Unexpected property type";
}
Expand Down
77 changes: 77 additions & 0 deletions flex/engines/graph_db/grin/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
cmake_minimum_required(VERSION 3.1)

set(GRIN_READER_MAJOR_VERSION 0)
set(GRIN_READER_MINOR_VERSION 1)
set(GRIN_READER_VERSION ${GRIN_READER_MAJOR_VERSION}.${GRIN_READER_MINOR_VERSION})

project(grin_reader LANGUAGES C CXX VERSION ${GRIN_READER_VERSION})

# Set flags
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -g")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -g")

# ------------------------------------------------------------------------------
# find_libraries
# ------------------------------------------------------------------------------

find_package(MPI REQUIRED)
include_directories(SYSTEM ${MPI_CXX_INCLUDE_PATH})

find_package(OpenMP REQUIRED)

find_package(libgrapelite REQUIRED)
include_directories(${LIBGRAPELITE_INCLUDE_DIRS})

include("../../../../flex/cmake/FindGFlags.cmake")
if (GFLAGS_FOUND)
include_directories(SYSTEM ${GFLAGS_INCLUDE_DIRS})
else ()
message(FATAL_ERROR "gflags not found")
endif ()

include("../../../../flex/cmake/FindGlog.cmake")
include_directories(SYSTEM ${GLOG_INCLUDE_DIRS})
if (GLOG_FOUND)
set(CMAKE_REQUIRED_INCLUDES "${GLOG_INCLUDE_DIRS}")
set(CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES} ${GLOG_LIBRARIES}")
endif ()

#find_package(etcd-cpp-api REQUIRED)
#include_directories(${ETCD_CPP_INCLUDE_DIR})
#link_libraries(${ETCD_CPP_LIBRARIES})

#find_package(yaml-cpp REQUIRED)
#include_directories(SYSTEM ${yaml-cpp_INCLUDE_DIRS})

set(yaml-cpp_INCLUDE_DIRS "/usr/local/Cellar/yaml-cpp/0.7.0/include")
include_directories(SYSTEM ${yaml-cpp_INCLUDE_DIRS})
set(YAML_CPP_LIBRARIES "/usr/local/Cellar/yaml-cpp/0.7.0/lib/libyaml-cpp.0.7.0.dylib")

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../..)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../..)
message(STATUS "${CMAKE_CURRENT_SOURCE_DIR}")
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../storages/rt_mutable_graph)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../utils/property)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)

file(GLOB_RECURSE FILES_NEED_FORMAT "src/*.cc")

add_custom_target(grin_clformat
COMMAND clang-format --style=file -i ${FILES_NEED_FORMAT}
COMMENT "Running clang-format."
VERBATIM)

file(GLOB SOURCES "src/*.cc" "src/topology/*.cc" "src/property/*.cc" "src/index/*.cc" "src/common/*.cc" "../../../utils/property/*.cc" "../../../storages/rt_mutable_graph/*.cc")
add_library(flex_grin SHARED ${SOURCES})
target_link_libraries(flex_grin ${LIBGRAPELITE_LIBRARIES} ${GFLAGS_LIBRARIES} ${CMAKE_DL_LIBS} ${MPI_CXX_LIBRARIES} ${YAML_CPP_LIBRARIES})


add_executable(run_grin_test test/test.c)

target_include_directories(run_grin_test PRIVATE ${LIBGRAPELITE_INCLUDE_DIRS}/grape/analytical_apps fragment)
target_link_libraries(run_grin_test flex_grin ${LIBGRAPELITE_LIBRARIES} ${GFLAGS_LIBRARIES} ${CMAKE_DL_LIBS} ${MPI_CXX_LIBRARIES})
target_link_libraries(run_grin_test OpenMP::OpenMP_CXX)
1 change: 1 addition & 0 deletions flex/engines/graph_db/grin/include
Submodule include added at bcafca
282 changes: 282 additions & 0 deletions flex/engines/graph_db/grin/predefine.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,282 @@
/** Copyright 2020 Alibaba Group Holding Limited.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

/**
* @file predefine.h
* @brief This template file consists of four parts:
* 1. The predefined enumerate types of GRIN, which should NOT be modified.
* 2. The supported macros which should be specified by storage implementors
* based on storage features.
* 3. The typedefs of the enabled handles. This should be specified by storage.
* 4. The corresponding null values of the enabled handles. This should be
* specified by storage.
*/

#ifdef __cplusplus
extern "C" {
#endif

#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>

/* 1. Predefined enumerate types of GRIN */
/// Enumerates the directions of edges with respect to a certain vertex
typedef enum {
IN = 0, ///< incoming
OUT = 1, ///< outgoing
BOTH = 2, ///< incoming & outgoing
} GRIN_DIRECTION;

/// Enumerates the datatype supported in the storage
typedef enum {
Undefined = 0, ///< other unknown types
Int32 = 1, ///< int
UInt32 = 2, ///< unsigned int
Int64 = 3, ///< long int
UInt64 = 4, ///< unsigned long int
Float = 5, ///< float
Double = 6, ///< double
String = 7, ///< string
Date32 = 8, ///< date
Time32 = 9, ///< Time32
Timestamp64 = 10, ///< Timestamp
} GRIN_DATATYPE;

/// Enumerates the error codes of grin
typedef enum {
NO_ERROR = 0, ///< success
UNKNOWN_ERROR = 1, ///< unknown error
INVALID_VALUE = 2, ///< invalid value
UNKNOWN_DATATYPE = 3, ///< unknown datatype
} GRIN_ERROR_CODE;

/* 2. Define supported macros based on storage features */
// Topology
#define GRIN_ASSUME_HAS_DIRECTED_GRAPH
#define GRIN_ASSUME_HAS_UNDIRECTED_GRAPH
#define GRIN_ASSUME_HAS_MULTI_EDGE_GRAPH
// #define GRIN_WITH_VERTEX_DATA
#define GRIN_WITH_EDGE_DATA
#define GRIN_ENABLE_VERTEX_LIST
// #define GRIN_ENABLE_VERTEX_LIST_ARRAY
#define GRIN_ENABLE_VERTEX_LIST_ITERATOR
#define GRIN_ENABLE_EDGE_LIST
// #define GRIN_ENABLE_EDGE_LIST_ARRAY
#define GRIN_ENABLE_EDGE_LIST_ITERATOR
#define GRIN_ENABLE_ADJACENT_LIST
// #define GRIN_ENABLE_ADJACENT_LIST_ARRAY
#define GRIN_ENABLE_ADJACENT_LIST_ITERATOR

// Partition
/**
#define GRIN_ENABLE_GRAPH_PARTITION
#define GRIN_TRAIT_NATURAL_ID_FOR_PARTITION
#define GRIN_ENABLE_VERTEX_REF
#define GRIN_TRAIT_FAST_VERTEX_REF
#define GRIN_ENABLE_EDGE_REF
#define GRIN_ASSUME_ALL_REPLICATE_PARTITION
#define GRIN_ASSUME_EDGE_CUT_PARTITION
#define GRIN_ASSUME_EDGE_CUT_FOLLOW_SRC_PARTITION
#define GRIN_ASSUME_EDGE_CUT_FOLLOW_DST_PARTITION
#define GRIN_ASSUME_VERTEX_CUT_PARTITION
#define GRIN_ASSUME_MASTER_ONLY_PARTITION_FOR_VERTEX_DATA
#define GRIN_ASSUME_REPLICATE_MASTER_MIRROR_PARTITION_FOR_VERTEX_DATA
#define GRIN_ASSUME_MASTER_ONLY_PARTITION_FOR_EDGE_DATA
#define GRIN_ASSUME_REPLICATE_MASTER_MIRROR_PARTITION_FOR_EDGE_DATA
#define GRIN_TRAIT_MASTER_VERTEX_MIRROR_PARTITION_LIST
#define GRIN_TRAIT_MIRROR_VERTEX_MIRROR_PARTITION_LIST
#define GRIN_TRAIT_MASTER_EDGE_MIRROR_PARTITION_LIST
#define GRIN_TRAIT_MIRROR_EDGE_MIRROR_PARTITION_LIST
#define GRIN_TRAIT_SELECT_MASTER_FOR_VERTEX_LIST
#define GRIN_TRAIT_SELECT_PARTITION_FOR_VERTEX_LIST
#define GRIN_TRAIT_SELECT_MASTER_FOR_EDGE_LIST
#define GRIN_TRAIT_SELECT_PARTITION_FOR_EDGE_LIST
#define GRIN_TRAIT_SELECT_MASTER_NEIGHBOR_FOR_ADJACENT_LIST
#define GRIN_TRAIT_SELECT_NEIGHBOR_PARTITION_FOR_ADJACENT_LIST
*/

// Property
#define GRIN_ENABLE_ROW
#define GRIN_TRAIT_CONST_VALUE_PTR
#define GRIN_WITH_VERTEX_PROPERTY
#define GRIN_WITH_VERTEX_PROPERTY_NAME
#define GRIN_WITH_VERTEX_TYPE_NAME
#define GRIN_TRAIT_NATURAL_ID_FOR_VERTEX_TYPE
#define GRIN_ENABLE_VERTEX_PRIMARY_KEYS
#define GRIN_TRAIT_NATURAL_ID_FOR_VERTEX_PROPERTY
#define GRIN_WITH_EDGE_PROPERTY
// #define GRIN_WITH_EDGE_PROPERTY_NAME
#define GRIN_WITH_EDGE_TYPE_NAME
#define GRIN_TRAIT_NATURAL_ID_FOR_EDGE_TYPE
// #define GRIN_ENABLE_EDGE_PRIMARY_KEYS
// #define GRIN_TRAIT_NATURAL_ID_FOR_EDGE_PROPERTY
// #define GRIN_TRAIT_SPECIFIC_VEV_RELATION
// #define GRIN_ASSUME_MASTER_ONLY_PARTITION_FOR_VERTEX_PROPERTY
// #define GRIN_ASSUME_REPLICATE_MASTER_MIRROR_PARTITION_FOR_VERTEX_PROPERTY
// #define GRIN_ASSUME_SPLIT_MASTER_MIRROR_PARTITION_FOR_VERTEX_PROPERTY
// #define GRIN_ASSUME_MASTER_ONLY_PARTITION_FOR_EDGE_PROPERTY
// #define GRIN_ASSUME_REPLICATE_MASTER_MIRROR_PARTITION_FOR_EDGE_PROPERTY
// #define GRIN_ASSUME_SPLIT_MASTER_MIRROR_PARTITION_FOR_EDGE_PROPERTY
// Index
#define GRIN_WITH_VERTEX_LABEL
#define GRIN_WITH_EDGE_LABEL
/// #define GRIN_ASSUME_ALL_VERTEX_LIST_SORTED
#define GRIN_ENABLE_VERTEX_INTERNAL_ID_INDEX
#define GRIN_ENABLE_VERTEX_PK_INDEX
// #define GRIN_ENABLE_EDGE_PK_INDEX

/* 3. Define the handles using typedef */
typedef void* GRIN_GRAPH;
typedef void* GRIN_VERTEX;
typedef void* GRIN_EDGE;

#ifdef GRIN_WITH_VERTEX_DATA
typedef void* GRIN_VERTEX_DATA;
#endif

#ifdef GRIN_WITH_VERTEX_PROPERTY
typedef unsigned GRIN_VERTEX_TYPE;
typedef void* GRIN_VERTEX_TYPE_LIST;
typedef void* GRIN_VERTEX_PROPERTY;
typedef void* GRIN_VERTEX_PROPERTY_LIST;
#endif

#ifdef GRIN_ENABLE_VERTEX_LIST
typedef struct GRIN_VERTEX_LIST {
size_t vertex_num;
GRIN_VERTEX_TYPE label;
} GRIN_VERTEX_LIST;
#endif

#ifdef GRIN_ENABLE_VERTEX_LIST_ITERATOR
typedef void* GRIN_VERTEX_LIST_ITERATOR;
#endif

#ifdef GRIN_ENABLE_ADJACENT_LIST
typedef void* GRIN_ADJACENT_LIST;
#endif

#ifdef GRIN_ENABLE_ADJACENT_LIST_ITERATOR
typedef void* GRIN_ADJACENT_LIST_ITERATOR;
#endif

#ifdef GRIN_WITH_EDGE_DATA
typedef void* GRIN_EDGE_DATA;
#endif

#ifdef GRIN_ENABLE_EDGE_LIST
typedef void* GRIN_EDGE_LIST;
#endif

#ifdef GRIN_ENABLE_EDGE_LIST_ITERATOR
typedef void* GRIN_EDGE_LIST_ITERATOR;
#endif

/**
#ifdef GRIN_ENABLE_GRAPH_PARTITION
typedef void* GRIN_PARTITIONED_GRAPH;
typedef void* GRIN_PARTITION;
typedef void* GRIN_PARTITION_LIST;
#endif

#ifdef GRIN_TRAIT_NATURAL_ID_FOR_PARTITION
typedef unsigned GRIN_PARTITION_ID;
#endif
*/

#ifdef GRIN_ENABLE_VERTEX_REF
typedef void* GRIN_VERTEX_REF;
#endif

#ifdef GRIN_ENABLE_EDGE_REF
typedef void* GRIN_EDGE_REF;
#endif

#ifdef GRIN_TRAIT_NATURAL_ID_FOR_VERTEX_TYPE
typedef GRIN_VERTEX_TYPE GRIN_VERTEX_TYPE_ID;
liulx20 marked this conversation as resolved.
Show resolved Hide resolved
#endif

#ifdef GRIN_TRAIT_NATURAL_ID_FOR_VERTEX_PROPERTY
typedef unsigned GRIN_VERTEX_PROPERTY_ID;
#endif

#ifdef GRIN_WITH_EDGE_PROPERTY
typedef unsigned GRIN_EDGE_TYPE;
typedef void* GRIN_EDGE_TYPE_LIST;
typedef void* GRIN_VEV_TYPE;
typedef void* GRIN_VEV_TYPE_LIST;
typedef unsigned GRIN_EDGE_PROPERTY;
typedef void* GRIN_EDGE_PROPERTY_LIST;
#endif

#ifdef GRIN_TRAIT_NATURAL_ID_FOR_EDGE_TYPE
typedef unsigned GRIN_EDGE_TYPE_ID;
#endif

#ifdef GRIN_TRAIT_NATURAL_ID_FOR_EDGE_PROPERTY
typedef unsigned GRIN_EDGE_PROPERTY_ID;
#endif

#ifdef GRIN_ENABLE_ROW
typedef void* GRIN_ROW;
#endif

#if defined(GRIN_WITH_VERTEX_LABEL) || defined(GRIN_WITH_EDGE_LABEL)
typedef void* GRIN_LABEL;
typedef void* GRIN_LABEL_LIST;
#endif

/* 4. Define invalid values for returns of handles */
#define GRIN_NULL_GRAPH NULL
#define GRIN_NULL_VERTEX NULL
#define GRIN_NULL_EDGE NULL
#define GRIN_NULL_VERTEX_DATA NULL
#define GRIN_NULL_VERTEX_LIST NULL
#define GRIN_NULL_VERTEX_LIST_ITERATOR NULL
#define GRIN_NULL_ADJACENT_LIST NULL
#define GRIN_NULL_ADJACENT_LIST_ITERATOR NULL
#define GRIN_NULL_EDGE_DATA NULL
#define GRIN_NULL_EDGE_LIST NULL
#define GRIN_NULL_EDGE_LIST_ITERATOR NULL
#define GRIN_NULL_PARTITIONED_GRAPH NULL
#define GRIN_NULL_PARTITION NULL
#define GRIN_NULL_PARTITION_LIST NULL
#define GRIN_NULL_PARTITION_ID (unsigned) ~0
#define GRIN_NULL_VERTEX_REF NULL
#define GRIN_NULL_EDGE_REF NULL
#define GRIN_NULL_VERTEX_TYPE (unsigned) ~0
#define GRIN_NULL_VERTEX_TYPE_LIST NULL
#define GRIN_NULL_VERTEX_PROPERTY NULL
#define GRIN_NULL_VERTEX_PROPERTY_LIST NULL
#define GRIN_NULL_VERTEX_TYPE_ID (unsigned) ~0
#define GRIN_NULL_VERTEX_PROPERTY_ID (unsigned) ~0
#define GRIN_NULL_EDGE_TYPE (unsigned) ~0
#define GRIN_NULL_EDGE_TYPE_LIST NULL
#define GRIN_NULL_VEV_TYPE NULL
#define GRIN_NULL_VEV_TYPE_LIST NULL
#define GRIN_NULL_EDGE_PROPERTY NULL
#define GRIN_NULL_EDGE_PROPERTY_LIST NULL
#define GRIN_NULL_EDGE_TYPE_ID (unsigned) ~0
#define GRIN_NULL_EDGE_PROPERTY_ID (unsigned) ~0
#define GRIN_NULL_ROW NULL
#define GRIN_NULL_LABEL NULL
#define GRIN_NULL_LABEL_LIST NULL
#define GRIN_NULL_SIZE (unsigned) ~0
#define GRIN_NULL_NAME NULL

#ifdef __cplusplus
}
#endif
Loading