Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
hpdos
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
SYNERG
hpdos
Commits
5eda140a
Commit
5eda140a
authored
Sep 29, 2021
by
Pramod S
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Initial version of rdma enabled metadata server
parent
33075e8b
Changes
27
Hide whitespace changes
Inline
Side-by-side
Showing
27 changed files
with
1278 additions
and
0 deletions
+1278
-0
code/hpdos_rdma_offloaded/.classpath
code/hpdos_rdma_offloaded/.classpath
+32
-0
code/hpdos_rdma_offloaded/.gitattributes
code/hpdos_rdma_offloaded/.gitattributes
+6
-0
code/hpdos_rdma_offloaded/.gitignore
code/hpdos_rdma_offloaded/.gitignore
+5
-0
code/hpdos_rdma_offloaded/.project
code/hpdos_rdma_offloaded/.project
+34
-0
code/hpdos_rdma_offloaded/.settings/org.eclipse.buildship.core.prefs
...rdma_offloaded/.settings/org.eclipse.buildship.core.prefs
+13
-0
code/hpdos_rdma_offloaded/app.config
code/hpdos_rdma_offloaded/app.config
+16
-0
code/hpdos_rdma_offloaded/app_follower.config
code/hpdos_rdma_offloaded/app_follower.config
+16
-0
code/hpdos_rdma_offloaded/build.gradle
code/hpdos_rdma_offloaded/build.gradle
+61
-0
code/hpdos_rdma_offloaded/gradle/wrapper/gradle-wrapper.jar
code/hpdos_rdma_offloaded/gradle/wrapper/gradle-wrapper.jar
+0
-0
code/hpdos_rdma_offloaded/gradle/wrapper/gradle-wrapper.properties
...s_rdma_offloaded/gradle/wrapper/gradle-wrapper.properties
+5
-0
code/hpdos_rdma_offloaded/gradlew
code/hpdos_rdma_offloaded/gradlew
+183
-0
code/hpdos_rdma_offloaded/gradlew.bat
code/hpdos_rdma_offloaded/gradlew.bat
+100
-0
code/hpdos_rdma_offloaded/settings.gradle
code/hpdos_rdma_offloaded/settings.gradle
+10
-0
code/hpdos_rdma_offloaded/src/main/java/hpdos_rdma_offloaded/MetadataServer.java
...ed/src/main/java/hpdos_rdma_offloaded/MetadataServer.java
+109
-0
code/hpdos_rdma_offloaded/src/main/java/hpdos_rdma_offloaded/handler/NetworkHandler.java
...ain/java/hpdos_rdma_offloaded/handler/NetworkHandler.java
+167
-0
code/hpdos_rdma_offloaded/src/main/java/hpdos_rdma_offloaded/handler/RegistrationHandler.java
...ava/hpdos_rdma_offloaded/handler/RegistrationHandler.java
+112
-0
code/hpdos_rdma_offloaded/src/main/java/hpdos_rdma_offloaded/handler/ReplicationHandler.java
...java/hpdos_rdma_offloaded/handler/ReplicationHandler.java
+50
-0
code/hpdos_rdma_offloaded/src/main/java/hpdos_rdma_offloaded/handler/StorageHandler.java
...ain/java/hpdos_rdma_offloaded/handler/StorageHandler.java
+14
-0
code/hpdos_rdma_offloaded/src/main/java/hpdos_rdma_offloaded/lib/Follower.java
...aded/src/main/java/hpdos_rdma_offloaded/lib/Follower.java
+34
-0
code/hpdos_rdma_offloaded/src/main/java/hpdos_rdma_offloaded/lib/Packet.java
...loaded/src/main/java/hpdos_rdma_offloaded/lib/Packet.java
+25
-0
code/hpdos_rdma_offloaded/src/main/java/hpdos_rdma_offloaded/rdma_invalidation_protocol/InvalidationRequest.java
...oaded/rdma_invalidation_protocol/InvalidationRequest.java
+39
-0
code/hpdos_rdma_offloaded/src/main/java/hpdos_rdma_offloaded/rdma_invalidation_protocol/InvalidationResponse.java
...aded/rdma_invalidation_protocol/InvalidationResponse.java
+28
-0
code/hpdos_rdma_offloaded/src/main/java/hpdos_rdma_offloaded/rdma_invalidation_protocol/InvalidationRpcProtocol.java
...d/rdma_invalidation_protocol/InvalidationRpcProtocol.java
+16
-0
code/hpdos_rdma_offloaded/src/main/java/hpdos_rdma_offloaded/rdma_protocol/Request.java
...main/java/hpdos_rdma_offloaded/rdma_protocol/Request.java
+62
-0
code/hpdos_rdma_offloaded/src/main/java/hpdos_rdma_offloaded/rdma_protocol/Response.java
...ain/java/hpdos_rdma_offloaded/rdma_protocol/Response.java
+61
-0
code/hpdos_rdma_offloaded/src/main/java/hpdos_rdma_offloaded/rdma_protocol/RpcProtocol.java
.../java/hpdos_rdma_offloaded/rdma_protocol/RpcProtocol.java
+16
-0
code/hpdos_rdma_offloaded/src/main/java/hpdos_rdma_offloaded/service/MetadataServerService.java
...a/hpdos_rdma_offloaded/service/MetadataServerService.java
+64
-0
No files found.
code/hpdos_rdma_offloaded/.classpath
0 → 100644
View file @
5eda140a
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry
kind=
"src"
output=
"bin/main"
path=
"src/main/java"
>
<attributes>
<attribute
name=
"gradle_scope"
value=
"main"
/>
<attribute
name=
"gradle_used_by_scope"
value=
"main,test"
/>
</attributes>
</classpathentry>
<classpathentry
kind=
"src"
output=
"bin/main"
path=
"src/main/resources"
>
<attributes>
<attribute
name=
"gradle_scope"
value=
"main"
/>
<attribute
name=
"gradle_used_by_scope"
value=
"main,test"
/>
</attributes>
</classpathentry>
<classpathentry
kind=
"src"
output=
"bin/test"
path=
"src/test/java"
>
<attributes>
<attribute
name=
"gradle_scope"
value=
"test"
/>
<attribute
name=
"gradle_used_by_scope"
value=
"test"
/>
<attribute
name=
"test"
value=
"true"
/>
</attributes>
</classpathentry>
<classpathentry
kind=
"src"
output=
"bin/test"
path=
"src/test/resources"
>
<attributes>
<attribute
name=
"gradle_scope"
value=
"test"
/>
<attribute
name=
"gradle_used_by_scope"
value=
"test"
/>
<attribute
name=
"test"
value=
"true"
/>
</attributes>
</classpathentry>
<classpathentry
kind=
"con"
path=
"org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11/"
/>
<classpathentry
kind=
"con"
path=
"org.eclipse.buildship.core.gradleclasspathcontainer"
/>
<classpathentry
kind=
"output"
path=
"bin/default"
/>
</classpath>
code/hpdos_rdma_offloaded/.gitattributes
0 → 100644
View file @
5eda140a
#
# https://help.github.com/articles/dealing-with-line-endings/
#
# These are explicitly windows files and should use crlf
*.bat text eol=crlf
code/hpdos_rdma_offloaded/.gitignore
0 → 100644
View file @
5eda140a
# Ignore Gradle project-specific cache directory
.gradle
# Ignore Gradle build output directory
build
code/hpdos_rdma_offloaded/.project
0 → 100644
View file @
5eda140a
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>
hpdos_rdma_offloaded
</name>
<comment>
Project hpdos_rdma_offloaded created by Buildship.
</comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>
org.eclipse.jdt.core.javabuilder
</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>
org.eclipse.buildship.core.gradleprojectbuilder
</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>
org.eclipse.jdt.core.javanature
</nature>
<nature>
org.eclipse.buildship.core.gradleprojectnature
</nature>
</natures>
<filteredResources>
<filter>
<id>
1632312009345
</id>
<name></name>
<type>
30
</type>
<matcher>
<id>
org.eclipse.core.resources.regexFilterMatcher
</id>
<arguments>
node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__
</arguments>
</matcher>
</filter>
</filteredResources>
</projectDescription>
code/hpdos_rdma_offloaded/.settings/org.eclipse.buildship.core.prefs
0 → 100644
View file @
5eda140a
arguments=
auto.sync=false
build.scans.enabled=false
connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
connection.project.dir=
eclipse.preferences.version=1
gradle.user.home=
java.home=/usr/lib/jvm/java-11-openjdk-amd64
jvm.arguments=
offline.mode=false
override.workspace.settings=true
show.console.view=true
show.executions.view=true
code/hpdos_rdma_offloaded/app.config
0 → 100644
View file @
5eda140a
app
.
HOST
=
192
.
168
.
200
.
20
app
.
MASTER
=
true
app
.
cpu_affinity
=
4
app
.
rdma_receive_queue
=
16
app
.
rdma_send_queue
=
16
app
.
rdma_polling
=
false
app
.
rdma_max_inline
=
0
app
.
rdma_server_port
=
1920
app
.
NETWORK_HANDLER_THREADS
=
10
app
.
REPLICATION_HANDLER_THREADS
=
10
#The below properties are for master node only.
app
.
follower_registration_port
=
9876
app
.
sal_registration_port
=
9875
#
Below
properties
are
for
followers
only
.
\ No newline at end of file
code/hpdos_rdma_offloaded/app_follower.config
0 → 100644
View file @
5eda140a
app
.
HOST
=
192
.
168
.
200
.
20
app
.
MASTER
=
false
app
.
cpu_affinity
=
4
app
.
rdma_receive_queue
=
16
app
.
rdma_send_queue
=
16
app
.
rdma_polling
=
false
app
.
rdma_max_inline
=
0
app
.
rdma_server_port
=
1921
app
.
NETWORK_HANDLER_THREADS
=
10
app
.
REPLICATION_HANDLER_THREADS
=
10
#The below properties are for master node only.
app
.
follower_registration_port
=
9876
app
.
sal_registration_port
=
9875
#
Below
properties
are
for
followers
only
.
\ No newline at end of file
code/hpdos_rdma_offloaded/build.gradle
0 → 100644
View file @
5eda140a
/*
* This file was generated by the Gradle 'init' task.
*
* This generated file contains a sample Java Library project to get you started.
* For more details take a look at the Java Libraries chapter in the Gradle
* User Manual available at https://docs.gradle.org/6.0/userguide/java_library_plugin.html
*/
// plugins {
// // Apply the java-library plugin to add support for Java Library
// id 'java-library'
// id 'application'
// }
// repositories {
// // Use jcenter for resolving dependencies.
// // You can declare any Maven/Ivy/file repository here.
// jcenter()
// mavenCentral()
// }
// application {
// // Define the main class for the application.
// mainClass = 'MetadataClient'
// }
// dependencies {
// // This dependency is exported to consumers, that is to say found on their compile classpath.
// api 'org.apache.commons:commons-math3:3.6.1'
// // This dependency is used internally, and not exposed to consumers on their own compile classpath.
// implementation 'com.google.guava:guava:28.0-jre'
// implementation 'com.ibm.darpc:darpc:1.9'
// // Use JUnit test framework
// testImplementation 'junit:junit:4.12'
// }
apply
plugin:
"application"
apply
plugin:
"java-library"
mainClassName
=
"hpdos_rdma_offloaded.MetadataServer"
version
'1.0-SNAPSHOT'
repositories
{
mavenCentral
()
jcenter
()
}
dependencies
{
testCompile
group:
'junit'
,
name:
'junit'
,
version:
'4.12'
api
'org.apache.commons:commons-math3:3.6.1'
// This dependency is used internally, and not exposed to consumers on their own compile classpath.
implementation
'com.google.guava:guava:28.0-jre'
implementation
'com.ibm.darpc:darpc:1.9'
implementation
'com.github.ben-manes.caffeine:caffeine:3.0.4'
// Use JUnit test framework
// testImplementation 'junit:junit:4.12'
}
\ No newline at end of file
code/hpdos_rdma_offloaded/gradle/wrapper/gradle-wrapper.jar
0 → 100644
View file @
5eda140a
File added
code/hpdos_rdma_offloaded/gradle/wrapper/gradle-wrapper.properties
0 → 100644
View file @
5eda140a
distributionBase
=
GRADLE_USER_HOME
distributionPath
=
wrapper/dists
distributionUrl
=
https
\:
//services.gradle.org/distributions/gradle-6.0-bin.zip
zipStoreBase
=
GRADLE_USER_HOME
zipStorePath
=
wrapper/dists
code/hpdos_rdma_offloaded/gradlew
0 → 100755
View file @
5eda140a
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# 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
#
# https://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.
#
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG
=
"
$0
"
# Need this for relative symlinks.
while
[
-h
"
$PRG
"
]
;
do
ls
=
`
ls
-ld
"
$PRG
"
`
link
=
`
expr
"
$ls
"
:
'.*-> \(.*\)$'
`
if
expr
"
$link
"
:
'/.*'
>
/dev/null
;
then
PRG
=
"
$link
"
else
PRG
=
`
dirname
"
$PRG
"
`
"/
$link
"
fi
done
SAVED
=
"
`
pwd
`
"
cd
"
`
dirname
\"
$PRG
\"
`
/"
>
/dev/null
APP_HOME
=
"
`
pwd
-P
`
"
cd
"
$SAVED
"
>
/dev/null
APP_NAME
=
"Gradle"
APP_BASE_NAME
=
`
basename
"
$0
"
`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS
=
'"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD
=
"maximum"
warn
()
{
echo
"
$*
"
}
die
()
{
echo
echo
"
$*
"
echo
exit
1
}
# OS specific support (must be 'true' or 'false').
cygwin
=
false
msys
=
false
darwin
=
false
nonstop
=
false
case
"
`
uname
`
"
in
CYGWIN
*
)
cygwin
=
true
;;
Darwin
*
)
darwin
=
true
;;
MINGW
*
)
msys
=
true
;;
NONSTOP
*
)
nonstop
=
true
;;
esac
CLASSPATH
=
$APP_HOME
/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if
[
-n
"
$JAVA_HOME
"
]
;
then
if
[
-x
"
$JAVA_HOME
/jre/sh/java"
]
;
then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD
=
"
$JAVA_HOME
/jre/sh/java"
else
JAVACMD
=
"
$JAVA_HOME
/bin/java"
fi
if
[
!
-x
"
$JAVACMD
"
]
;
then
die
"ERROR: JAVA_HOME is set to an invalid directory:
$JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD
=
"java"
which java
>
/dev/null 2>&1
||
die
"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if
[
"
$cygwin
"
=
"false"
-a
"
$darwin
"
=
"false"
-a
"
$nonstop
"
=
"false"
]
;
then
MAX_FD_LIMIT
=
`
ulimit
-H
-n
`
if
[
$?
-eq
0
]
;
then
if
[
"
$MAX_FD
"
=
"maximum"
-o
"
$MAX_FD
"
=
"max"
]
;
then
MAX_FD
=
"
$MAX_FD_LIMIT
"
fi
ulimit
-n
$MAX_FD
if
[
$?
-ne
0
]
;
then
warn
"Could not set maximum file descriptor limit:
$MAX_FD
"
fi
else
warn
"Could not query maximum file descriptor limit:
$MAX_FD_LIMIT
"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if
$darwin
;
then
GRADLE_OPTS
=
"
$GRADLE_OPTS
\"
-Xdock:name=
$APP_NAME
\"
\"
-Xdock:icon=
$APP_HOME
/media/gradle.icns
\"
"
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if
[
"
$cygwin
"
=
"true"
-o
"
$msys
"
=
"true"
]
;
then
APP_HOME
=
`
cygpath
--path
--mixed
"
$APP_HOME
"
`
CLASSPATH
=
`
cygpath
--path
--mixed
"
$CLASSPATH
"
`
JAVACMD
=
`
cygpath
--unix
"
$JAVACMD
"
`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW
=
`
find
-L
/
-maxdepth
1
-mindepth
1
-type
d 2>/dev/null
`
SEP
=
""
for
dir
in
$ROOTDIRSRAW
;
do
ROOTDIRS
=
"
$ROOTDIRS$SEP$dir
"
SEP
=
"|"
done
OURCYGPATTERN
=
"(^(
$ROOTDIRS
))"
# Add a user-defined pattern to the cygpath arguments
if
[
"
$GRADLE_CYGPATTERN
"
!=
""
]
;
then
OURCYGPATTERN
=
"
$OURCYGPATTERN
|(
$GRADLE_CYGPATTERN
)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i
=
0
for
arg
in
"
$@
"
;
do
CHECK
=
`
echo
"
$arg
"
|egrep
-c
"
$OURCYGPATTERN
"
-
`
CHECK2
=
`
echo
"
$arg
"
|egrep
-c
"^-"
`
### Determine if an option
if
[
$CHECK
-ne
0
]
&&
[
$CHECK2
-eq
0
]
;
then
### Added a condition
eval
`
echo
args
$i
`
=
`
cygpath
--path
--ignore
--mixed
"
$arg
"
`
else
eval
`
echo
args
$i
`
=
"
\"
$arg
\"
"
fi
i
=
`
expr
$i
+ 1
`
done
case
$i
in
0
)
set
--
;;
1
)
set
--
"
$args0
"
;;
2
)
set
--
"
$args0
"
"
$args1
"
;;
3
)
set
--
"
$args0
"
"
$args1
"
"
$args2
"
;;
4
)
set
--
"
$args0
"
"
$args1
"
"
$args2
"
"
$args3
"
;;
5
)
set
--
"
$args0
"
"
$args1
"
"
$args2
"
"
$args3
"
"
$args4
"
;;
6
)
set
--
"
$args0
"
"
$args1
"
"
$args2
"
"
$args3
"
"
$args4
"
"
$args5
"
;;
7
)
set
--
"
$args0
"
"
$args1
"
"
$args2
"
"
$args3
"
"
$args4
"
"
$args5
"
"
$args6
"
;;
8
)
set
--
"
$args0
"
"
$args1
"
"
$args2
"
"
$args3
"
"
$args4
"
"
$args5
"
"
$args6
"
"
$args7
"
;;
9
)
set
--
"
$args0
"
"
$args1
"
"
$args2
"
"
$args3
"
"
$args4
"
"
$args5
"
"
$args6
"
"
$args7
"
"
$args8
"
;;
esac
fi
# Escape application args
save
()
{
for
i
do
printf
%s
\\
n
"
$i
"
|
sed
"s/'/'
\\\\
''/g;1s/^/'/;
\$
s/
\$
/'
\\\\
/"
;
done
echo
" "
}
APP_ARGS
=
`
save
"
$@
"
`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set
--
$DEFAULT_JVM_OPTS
$JAVA_OPTS
$GRADLE_OPTS
"
\"
-Dorg.gradle.appname=
$APP_BASE_NAME
\"
"
-classpath
"
\"
$CLASSPATH
\"
"
org.gradle.wrapper.GradleWrapperMain
"
$APP_ARGS
"
exec
"
$JAVACMD
"
"
$@
"
code/hpdos_rdma_offloaded/gradlew.bat
0 → 100644
View file @
5eda140a
@rem
@rem
Copyright
2015
the
original
author
or
authors
.
@rem
@rem
Licensed
under
the
Apache
License
,
Version
2
.0
(
the
"License"
);
@rem
you
may
not
use
this
file
except
in
compliance
with
the
License
.
@rem
You
may
obtain
a
copy
of
the
License
at
@rem
@rem
https
://www.apache.org/licenses/LICENSE
-
2
.0
@rem
@rem
Unless
required
by
applicable
law
or
agreed
to
in
writing
,
software
@rem
distributed
under
the
License
is
distributed
on
an
"AS IS"
BASIS
,
@rem
WITHOUT
WARRANTIES
OR
CONDITIONS
OF
ANY
KIND
,
either
express
or
implied
.
@rem
See
the
License
for
the
specific
language
governing
permissions
and
@rem
limitations
under
the
License
.
@rem
@if
"
%DEBUG%
"
==
""
@echo
off
@rem ##########################################################################
@rem
@rem
Gradle
startup
script
for
Windows
@rem
@rem ##########################################################################
@rem
Set
local
scope
for
the
variables
with
windows
NT
shell
if
"
%OS%
"
==
"Windows_NT"
setlocal
set
DIRNAME
=
%~dp0
if
"
%DIRNAME%
"
==
""
set
DIRNAME
=
.
set
APP_BASE_NAME
=
%~n0
set
APP_HOME
=
%DIRNAME%
@rem
Add
default
JVM
options
here
.
You
can
also
use
JAVA_OPTS
and
GRADLE_OPTS
to
pass
JVM
options
to
this
script
.
set
DEFAULT_JVM_OPTS
=
"-Xmx64m"
"-Xms64m"
@rem
Find
java
.exe
if
defined
JAVA_HOME
goto
findJavaFromJavaHome
set
JAVA_EXE
=
java
.exe
%JAVA_EXE%
-version
>
NUL
2
>&
1
if
"
%ERRORLEVEL%
"
==
"0"
goto
init
echo
.
echo
ERROR
:
JAVA_HOME
is
not
set
and
no
'java'
command
could
be
found
in
your
PATH
.
echo
.
echo
Please
set
the
JAVA_HOME
variable
in
your
environment
to
match
the
echo
location
of
your
Java
installation
.
goto
fail
:findJavaFromJavaHome
set
JAVA_HOME
=
%JAVA
_HOME:
"=
%
set JAVA_EXE=
%JAVA_HOME%
/bin/java.exe
if exist "
%JAVA_EXE%
" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory:
%JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "
%OS%
" == "
Windows_NT
" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "
x
%
~
1
" == "
x
" goto execute
set CMD_LINE_ARGS=
%
*
:execute
@rem Setup the command line
set CLASSPATH=
%APP_HOME%
\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"
%JAVA_EXE%
"
%DEFAULT_JVM_OPTS%
%JAVA_OPTS%
%GRADLE_OPTS%
"
-Dorg
.gradle.appname
=
%APP_BASE_NAME%
" -classpath "
%CLASSPATH%
" org.gradle.wrapper.GradleWrapperMain
%CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "
%ERRORLEVEL%
"=="
0
" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code
!
if not "" == "
%GRADLE_EXIT_CONSOLE%
" exit 1
exit /b 1
:mainEnd
if "
%OS%
"=="
Windows_NT
" endlocal
:omega
code/hpdos_rdma_offloaded/settings.gradle
0 → 100644
View file @
5eda140a
/*
* This file was generated by the Gradle 'init' task.
*
* The settings file is used to specify which projects to include in your build.
*
* Detailed information about configuring a multi-project build in Gradle can be found
* in the user manual at https://docs.gradle.org/6.0/userguide/multi_project_builds.html
*/
rootProject
.
name
=
'hpdos_rdma_offloaded'
code/hpdos_rdma_offloaded/src/main/java/hpdos_rdma_offloaded/MetadataServer.java
0 → 100644
View file @
5eda140a
package
hpdos_rdma_offloaded
;
import
java.io.FileInputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.net.InetSocketAddress
;
import
java.util.Properties
;
import
com.ibm.darpc.DaRPCServerEndpoint
;
import
com.ibm.darpc.DaRPCServerGroup
;
import
com.ibm.disni.RdmaServerEndpoint
;
import
hpdos_rdma_offloaded.handler.NetworkHandler
;
import
hpdos_rdma_offloaded.handler.RegistrationHandler
;
import
hpdos_rdma_offloaded.handler.ReplicationHandler
;
import
hpdos_rdma_offloaded.handler.StorageHandler
;
import
hpdos_rdma_offloaded.rdma_protocol.Request
;
import
hpdos_rdma_offloaded.rdma_protocol.Response
;
import
hpdos_rdma_offloaded.service.MetadataServerService
;
public
class
MetadataServer
implements
Runnable
{
private
String
host
;
private
int
poolsize
;
private
int
recvQueue
;
private
int
sendQueue
;
private
int
wqSize
=
recvQueue
;
private
boolean
polling
;
private
int
maxinline
=
0
;
private
int
rdma_port
;
boolean
isMaster
;
StorageHandler
storageHandler
;
NetworkHandler
networkHandler
;
MetadataServerService
metadataServerService
;
RegistrationHandler
registrationHandler
=
null
;
public
final
static
Properties
properties
=
new
Properties
();;
public
MetadataServer
(
Properties
properties
)
throws
IOException
{
this
.
isMaster
=
Boolean
.
valueOf
((
String
)
properties
.
get
(
"app.MASTER"
));
this
.
storageHandler
=
new
StorageHandler
(
properties
);
this
.
networkHandler
=
new
NetworkHandler
(
this
.
storageHandler
,
properties
);
this
.
metadataServerService
=
new
MetadataServerService
(
this
.
networkHandler
);
// if (this.isMaster) {
this
.
registrationHandler
=
new
RegistrationHandler
(
properties
);
// }
}
public
void
run
()
{
host
=
(
String
)
properties
.
get
(
"app.HOST"
);
poolsize
=
Integer
.
valueOf
(
(
String
)
properties
.
get
(
"app.cpu_affinity"
));
recvQueue
=
Integer
.
valueOf
(
(
String
)
properties
.
get
(
"app.rdma_receive_queue"
));
sendQueue
=
Integer
.
valueOf
(
(
String
)
properties
.
get
(
"app.rdma_send_queue"
));
wqSize
=
recvQueue
;
maxinline
=
Integer
.
valueOf
((
String
)
properties
.
get
(
"app.rdma_max_inline"
));
rdma_port
=
Integer
.
valueOf
((
String
)
properties
.
get
(
"app.rdma_server_port"
));
polling
=
Boolean
.
valueOf
((
String
)
properties
.
get
(
"app.rdma_polling"
));
long
[]
clusterAffinities
=
new
long
[
poolsize
];
for
(
int
i
=
0
;
i
<
poolsize
;
i
++){
long
cpu
=
1L
<<
i
;
clusterAffinities
[
i
]
=
cpu
;
}
// MetadataServerService rpcService = new MetadataServerService();
DaRPCServerGroup
<
Request
,
Response
>
group
=
null
;
try
{
group
=
DaRPCServerGroup
.
createServerGroup
(
this
.
metadataServerService
,
clusterAffinities
,
-
1
,
maxinline
,
polling
,
recvQueue
,
sendQueue
,
wqSize
,
32
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
};
RdmaServerEndpoint
<
DaRPCServerEndpoint
<
Request
,
Response
>>
serverEp
=
null
;
try
{
serverEp
=
group
.
createServerEndpoint
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
InetSocketAddress
address
=
new
InetSocketAddress
(
host
,
rdma_port
);
try
{
serverEp
.
bind
(
address
,
100
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
while
(
true
){
try
{
// System.out.println("Listening to RDMA requests a, IP: " + host + " , PORT: " + rdma_port);
serverEp
.
accept
();
// System.out.println("Accepted connection.");
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
public
static
void
main
(
String
[]
args
)
throws
IOException
,
InterruptedException
{
InputStream
inputStream
=
new
FileInputStream
(
args
[
0
]);
properties
.
load
(
inputStream
);
boolean
isMaster
=
Boolean
.
valueOf
((
String
)
properties
.
get
(
"app.MASTER"
));
if
(
isMaster
)
{
System
.
out
.
println
(
"STARTING MASTER SERVICES."
);
}
else
{
System
.
out
.
println
(
"STARTING FOLLOWER SERVICES."
);
}
Runnable
t1
=
new
MetadataServer
(
properties
);
Thread
t
=
new
Thread
(
t1
);
t
.
start
();
}
}
code/hpdos_rdma_offloaded/src/main/java/hpdos_rdma_offloaded/handler/NetworkHandler.java
0 → 100644
View file @
5eda140a
package
hpdos_rdma_offloaded.handler
;
import
java.net.InetSocketAddress
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Properties
;
import
java.util.Set
;
import
java.util.concurrent.Callable
;
import
java.util.concurrent.ExecutionException
;
import
java.util.concurrent.ExecutorService
;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.Future
;
import
com.ibm.darpc.DaRPCClientEndpoint
;
import
com.ibm.darpc.DaRPCClientGroup
;
import
com.ibm.darpc.DaRPCStream
;
import
hpdos_rdma_offloaded.lib.Follower
;
import
hpdos_rdma_offloaded.lib.Packet
;
import
hpdos_rdma_offloaded.rdma_protocol.Request
;
import
hpdos_rdma_offloaded.rdma_protocol.Response
;
import
hpdos_rdma_offloaded.rdma_protocol.RpcProtocol
;
public
class
NetworkHandler
{
StorageHandler
storageHandler
;
private
ExecutorService
executorService
;
public
HashMap
<
String
,
DaRPCStream
<
Request
,
Response
>>
streams
;
// public static List<Follower> followers = new ArrayList<>();
boolean
isMaster
;
public
NetworkHandler
(){}
public
NetworkHandler
(
StorageHandler
storageHandler
,
Properties
properties
){
this
.
storageHandler
=
storageHandler
;
this
.
executorService
=
Executors
.
newFixedThreadPool
(
10
);
this
.
isMaster
=
Boolean
.
valueOf
((
String
)
properties
.
get
(
"app.MASTER"
));
}
public
void
connectToSals
()
throws
Exception
{
// RpcProtocol rpcProtocol = new RpcProtocol();
// DaRPCClientGroup<Request, Response> group = DaRPCClientGroup.createClientGroup(rpcProtocol, 100, 0, 16, 16);
// InetSocketAddress address = new InetSocketAddress("192.168.200.50", 1919);
// DaRPCClientEndpoint<Request, Response> clientEp = group.createEndpoint();
// clientEp.connect(address, 1000);
// DaRPCStream<Request, Response> stream = clientEp.createStream();
// if(!stream.isEmpty()){
// this.streams.put("192.168.200.50", stream);
// }
}
public
void
connectToFollower
(
String
uid
,
String
ip
)
throws
Exception
{
Thread
.
sleep
(
3000
);
System
.
out
.
println
(
"Making rdma connection to follower."
);
Follower
follower
=
new
Follower
();
follower
.
setFollowerId
(
uid
);
follower
.
setIpAddress
(
ip
);
RpcProtocol
rpcProtocol
=
new
RpcProtocol
();
DaRPCClientGroup
<
Request
,
Response
>
group
=
DaRPCClientGroup
.
createClientGroup
(
rpcProtocol
,
100
,
0
,
16
,
16
);
InetSocketAddress
address
=
new
InetSocketAddress
(
ip
,
1921
);
DaRPCClientEndpoint
<
Request
,
Response
>
clientEp
=
group
.
createEndpoint
();
clientEp
.
connect
(
address
,
1000
);
DaRPCStream
<
Request
,
Response
>
stream
=
clientEp
.
createStream
();
follower
.
setStream
(
stream
);
ReplicationHandler
.
followers
.
add
(
follower
);
}
// Change the Futre to CompletableFuture to achieve correct asynchronousness
public
void
create
(
Packet
packet
)
throws
InterruptedException
,
ExecutionException
{
System
.
out
.
println
(
"Received create request for key/value: "
+
packet
.
getKey
()
+
"/"
+
packet
.
getValue
());
Response
response
=
new
Response
();
Future
<
String
>
futureRocksDB
=
this
.
executorService
.
submit
(()->{
// Write code to write to rocksdb memtable here.
// Change return type as required.
return
""
;
});
if
(
this
.
isMaster
)
{
System
.
out
.
println
(
"Starting replication"
);
Future
<
Response
>
futureReplication
=
this
.
executorService
.
submit
(()->{
Response
replicationResponse
=
new
Response
();
// Write code to replicate the data to other nics
ReplicationHandler
.
replicateMetadata
(
packet
);
return
replicationResponse
;
});
response
=
futureReplication
.
get
();